Package cn.edu.zju.acm.onlinejudge.persistence.sql

Source Code of cn.edu.zju.acm.onlinejudge.persistence.sql.ContestPersistenceImplTest

/*
* Copyright (C) 2001 - 2005 ZJU Online Judge, All Rights Reserved.
*/
package cn.edu.zju.acm.onlinejudge.persistence.sql;

import junit.framework.TestCase;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import cn.edu.zju.acm.onlinejudge.bean.AbstractContest;
import cn.edu.zju.acm.onlinejudge.bean.Contest;
import cn.edu.zju.acm.onlinejudge.bean.Forum;
import cn.edu.zju.acm.onlinejudge.bean.Limit;
import cn.edu.zju.acm.onlinejudge.bean.Problemset;
import cn.edu.zju.acm.onlinejudge.bean.enumeration.Language;

/**
* <p>Tests for ContestPersistenceImpl.</p>
*
* @version 2.0
* @author ZOJDEV
*/
public class ContestPersistenceImplTest extends TestCase
 
  /**
   * A ForumPersistenceImpl instance.
   */
  private ForumPersistenceImpl forumPersistence = new ForumPersistenceImpl();
 
  /**
   * A ContestPersistenceImpl instance.
   */
  private ContestPersistenceImpl persistence = new ContestPersistenceImpl();
 
  /**
   * A Forum instance.
   */
  private Forum forum1 = null;
 
  /**
   * A Forum instance.
   */
  private Forum forum2 = null;
 
  /**
   * A Limit instance.
   */
  private Limit limit1 = null;
 
  /**
   * A Limit instance.
   */
  private Limit limit2 = null
 
  /**
   * A Contest instance.
   */
  private Contest contest1 = null;
 
  /**
   * A Contest instance.
   */
  private Contest contest2 = null;
 
  /**
   * A Problemset instance.
   */
  private Problemset problemset1 = null;
 
  /**
   * A Problemset instance.
   */
  private Problemset problemset2 = null;
 
  /**
   * A Language instance.
   */
  private Language language1 = new Language(1, "language1", "Language 1", "compiler1", "options1");
 
  /**
   * A Language instance.
   */
  private Language language2 = new Language(2, "language2", "Language 2", "compiler2", "options2");
 
  /**
   * A Language instance.
   */
  private Language language3 = new Language(3, "language3", "Language 3", "compiler3", "options3");
 

  /**
   * Setup.
   * @throws Exception to JUnit
   */
  protected void setUp() throws Exception {
    DatabaseHelper.resetAllTables(false)
   
    persistence.createLanguage(language1, 10);
    persistence.createLanguage(language2, 10);
    persistence.createLanguage(language3, 10);
   
    forum1 = newForum(1);
    forum2 = newForum(2);
    forumPersistence.createForum(forum1, 10);
    forumPersistence.createForum(forum2, 10);
   
    limit1 = newLimit(1);
    limit2 = newLimit(2);
   
    contest1 = newContest(
        1, forum1.getId(), limit1, Arrays.asList(new Object[] {language1, language2, language3}));
    contest2 = newContest(
        2, forum2.getId(), null, null);
    problemset1 = newProblemset(
        3, forum1.getId(), limit2, Arrays.asList(new Object[] {language3}));
    problemset2 = newProblemset(
        4, forum2.getId(), null, new ArrayList());
   
    persistence.createContest(contest1, 10);
    persistence.createContest(contest2, 10);
    persistence.createContest(problemset1, 10);
    persistence.createContest(problemset2, 10);
         
   
  }
 
  /**
   * Tear down.
   * @throws Exception to JUnit
   */
  protected void tearDown() throws Exception {       
   
    DatabaseHelper.clearTable("contest_language");
    DatabaseHelper.clearTable("contest");
    DatabaseHelper.clearTable("submission");
    DatabaseHelper.clearTable("limits");
    DatabaseHelper.clearTable("language");
    DatabaseHelper.clearTable("forum");   
             
  }
 
 
  /**
   * Tests getContest method
   * @throws Exception to JUnit
   */
  public void testGetContest1() throws Exception {   
    Contest contest = (Contest) persistence.getContest(contest1.getId());   
    checkAbstractContest(contest1, contest);
    assertEquals("wrong start time", contest.getStartTime(), contest1.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest1.getEndTime());   
  }
 
  /**
   * Tests getContest method
   * @throws Exception to JUnit
   */
  public void testGetContest2() throws Exception {   
    Contest contest = (Contest) persistence.getContest(contest2.getId());   
    checkAbstractContest(contest2, contest);
    assertEquals("wrong start time", contest.getStartTime(), contest2.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest2.getEndTime());   
 
 
  /**
   * Tests getContest method
   * @throws Exception to JUnit
   */
  public void testGetContest3() throws Exception {   
    Problemset contest = (Problemset) persistence.getContest(problemset1.getId());   
    checkAbstractContest(problemset1, contest);       
  }
 
  /**
   * Tests getContest method
   * @throws Exception to JUnit
   */
  public void testGetContest4() throws Exception {   
    Problemset contest = (Problemset) persistence.getContest(problemset2.getId());   
    checkAbstractContest(problemset2, contest);       
  }
 
  /**
   * Tests getContest method
   * @throws Exception to JUnit
   */
  public void testGetContest5() throws Exception {   
    AbstractContest contest = (AbstractContest) persistence.getContest(1234567890l);
    assertNull("no such contest", contest);       
  }
 
  /**
   * Tests updateContest method
   * @throws Exception to JUnit
   */
  public void testUpdateContest1() throws Exception {   
    contest1.setDescription("new");
    contest1.setTitle("new");
    contest1.setLanguages(null);
    contest1.setLimit(null);
    contest1.setForumId(forum2.getId());
    contest1.setStartTime(new Date(20000));
    contest1.setEndTime(new Date(30000));
   
    persistence.updateContest(contest1, 11);
   
    Contest contest = (Contest) persistence.getContest(contest1.getId());   
    checkAbstractContest(contest1, contest);
    assertEquals("wrong start time", contest.getStartTime(), contest1.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest1.getEndTime());   
   
  }
 
  /**
   * Tests updateContest method
   * @throws Exception to JUnit
   */
  public void testUpdateContest2() throws Exception {   
    contest2.setDescription("new");
    contest2.setTitle("new");
    contest2.setLanguages(Arrays.asList(new Object[] {language1, language2, language3}));
    contest2.setLimit(limit2);
    contest2.setForumId(forum1.getId());
    contest2.setStartTime(new Date(50000));
    contest2.setEndTime(new Date(60000));
   
    persistence.updateContest(contest2, 11);
   
    Contest contest = (Contest) persistence.getContest(contest2.getId());   
    checkAbstractContest(contest2, contest);
    assertEquals("wrong start time", contest.getStartTime(), contest2.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest2.getEndTime());   
   
  }

  /**
   * Tests updateContest method
   * @throws Exception to JUnit
   */
  public void testUpdateContest3() throws Exception {   
    problemset1.setDescription("new");
    problemset1.setTitle("new");
    problemset1.setLanguages(null);
    problemset1.setLimit(null);
    problemset1.setForumId(forum2.getId());
   
    persistence.updateContest(problemset1, 11);
   
    Problemset contest = (Problemset) persistence.getContest(problemset1.getId());   
    checkAbstractContest(problemset1, contest);       
   
  }
 
  /**
   * Tests updateContest method
   * @throws Exception to JUnit
   */
  public void testUpdateContest4() throws Exception {   
    problemset2.setDescription("new");
    problemset2.setTitle("new");
    problemset2.setLanguages(Arrays.asList(new Object[] {language1, language2, language3}));
    problemset2.setLimit(limit2);
    problemset2.setForumId(forum1.getId());
   
    persistence.updateContest(problemset2, 11);
   
    Problemset contest = (Problemset) persistence.getContest(problemset2.getId());   
    checkAbstractContest(problemset2, contest);       
   
  }
 
  /**
   * Tests deleteContest method
   * @throws Exception to JUnit
   */
  public void testDeleteContest1() throws Exception {         
    persistence.deleteContest(contest1.getId(), 11);
    assertNull("contest should be deleted", persistence.getContest(contest1.getId()));   
    persistence.deleteContest(contest2.getId(), 11);
    assertNull("contest should be deleted", persistence.getContest(contest2.getId()));
    persistence.deleteContest(problemset1.getId(), 11);
    assertNull("contest should be deleted", persistence.getContest(problemset1.getId()));
    persistence.deleteContest(problemset2.getId(), 11);
    assertNull("contest should be deleted", persistence.getContest(problemset2.getId()));
  }
 
  /**
   * Tests deleteContest method
   * @throws Exception to JUnit
   */
  public void testDeleteContest2() throws Exception {         
    persistence.deleteContest(contest1.getId(), 11);
    persistence.deleteContest(contest2.getId(), 11);
    assertTrue("contests should be deleted", persistence.getAllContests().isEmpty());
   
 
 
  /**
   * Tests deleteContest method
   * @throws Exception to JUnit
   */
  public void testDeleteContest3() throws Exception {         
    persistence.deleteContest(problemset1.getId(), 11);
    persistence.deleteContest(problemset2.getId(), 11);
    assertTrue("contests should be deleted", persistence.getAllProblemsets().isEmpty());
   
 
 
 
  /**
   * Tests getAllLanguages method
   * @throws Exception to JUnit
   */
  public void testGetAllLanguages() throws Exception {   
   
    List languages = persistence.getAllLanguages();
    for (int i = 0; i < 3; ++i) {
      Language language = (Language) languages.get(i);
      long id = language.getId();     
      assertEquals("wrong name", "language" + id, language.getName());
      assertEquals("wrong desc", "Language " + id, language.getDescription());
      assertEquals("wrong options", "options" + id, language.getOptions());
      assertEquals("wrong compiler", "compiler" + id, language.getCompiler());           
    }
  }
 
  /**
   * Tests createLanguage method
   * @throws Exception to JUnit
   */
  public void testCreateLanguage() throws Exception {   
   
    persistence.createLanguage(new Language(4, "language4", "Language 4", "compiler4", "options4"), 10);
   
    List languages = persistence.getAllLanguages();
    for (int i = 0; i < 4; ++i) {
      Language language = (Language) languages.get(i);
      long id = language.getId();     
      assertEquals("wrong name", "language" + id, language.getName());
      assertEquals("wrong desc", "Language " + id, language.getDescription());
      assertEquals("wrong options", "options" + id, language.getOptions());
      assertEquals("wrong compiler", "compiler" + id, language.getCompiler());           
    }
  }
 
  /**
   * Tests updateLanguage method
   * @throws Exception to JUnit
   */
  public void testUpdateLanguage() throws Exception {   
   
    List languages = persistence.getAllLanguages();
    for (int i = 0; i < 3; ++i) {
      Language language = (Language) languages.get(i);     
      long id = language.getId();   
      persistence.updateLanguage(
          new Language(id, "new language" + id, "new Language " + id, "new compiler" + id, "new options" + id), 10);
    }
   
    languages = persistence.getAllLanguages();
    for (int i = 0; i < 3; ++i) {
      Language language = (Language) languages.get(i);
      long id = language.getId();     
      assertEquals("wrong name", "new language" + id, language.getName());
      assertEquals("wrong desc", "new Language " + id, language.getDescription());
      assertEquals("wrong options", "new options" + id, language.getOptions());
      assertEquals("wrong compiler", "new compiler" + id, language.getCompiler());           
    }   
  }
 
  /**
   * Tests deleteLanguage method
   * @throws Exception to JUnit
   */
  public void testDeleteLanguage1() throws Exception {   
   
    List languages = persistence.getAllLanguages();
    for (int i = 0; i < 3; ++i) {
      Language language = (Language) languages.get(i);     
      long id = language.getId();   
      persistence.deleteLanguage(id, 10);
    }
     
    languages = persistence.getAllLanguages();
    assertEquals("wrong size", 0, languages.size());
   
  }
 
  /**
   * Tests getAllContests method
   * @throws Exception to JUnit
   */
  public void testGetAllContests() throws Exception {
    List contests = persistence.getAllContests();
    assertEquals("wrong size", 2, contests.size());
    Contest contest = (Contest) contests.get(0);
    checkAbstractContest(contest1, contest);   
    assertEquals("wrong start time", contest.getStartTime(), contest1.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest1.getEndTime());
   
    contest = (Contest) contests.get(1);
    checkAbstractContest(contest2, contest);
    assertEquals("wrong start time", contest.getStartTime(), contest2.getStartTime());
    assertEquals("wrong end time", contest.getEndTime(), contest2.getEndTime());
       
  }
 
  /**
   * Tests getAllProblemsets method
   * @throws Exception to JUnit
   */
  public void testGetAllProblemsets() throws Exception {
    List contests = persistence.getAllProblemsets();
    assertEquals("wrong size", 2, contests.size());
    Problemset contest = (Problemset) contests.get(0);
    checkAbstractContest(problemset1, contest);   
   
    contest = (Problemset) contests.get(1);
    checkAbstractContest(problemset2, contest);
           
 
 
  /**
   * Creates a new limit.
   * @param id the id
   * @return a new limit instance
   */
  private Limit newLimit(long id) {
    Limit limit = new Limit();
    limit.setId(id);
    limit.setTimeLimit((int) id * 10);
    limit.setMemoryLimit((int) id * 100);
    limit.setOutputLimit((int) id * 1000);
    limit.setSubmissionLimit((int) id * 10000);   
    return limit;
  }
 
  /**
   * Creates a new problemset.
   * @param id the id
   * @param forumId the forum id
   * @param limit the limit
   * @param languages  a list of languages
   * @return a new problemset instance
   */
  private Problemset newProblemset(long id, long forumId, Limit limit, List languages) {
    Problemset contest = new Problemset();
    contest.setId(id);
    contest.setDescription("desc" + id);
    contest.setLimit(limit);
    contest.setLanguages(languages);
    contest.setTitle("title" + id);
    contest.setForumId(forumId);
    return contest;
  }
 

 
  /**
   * Creates a new contest.
   * @param id the id
   * @param forumId the forum id
   * @param limit the limit
   * @param languages  a list of languages
   * @return a new Contest instance
   */
  private Contest newContest(long id, long forumId, Limit limit, List languages) {
    Contest contest = new Contest();
    contest.setId(id);
    contest.setDescription("desc" + id);
    contest.setLimit(limit);
    contest.setLanguages(languages);
    contest.setTitle("title" + id);
    contest.setForumId(forumId);
    contest.setStartTime(new Date(id * 1000));
    contest.setEndTime(new Date(id * 2000));
    return contest;
 

  /**
   * Creates a new forum.
   * @param id the id
   * @return a new forum instance
   */
  private Forum newForum(long id) {
    Forum forum = new Forum();
    forum.setId(id);
    forum.setName("forum" + id);
    forum.setDescription("forum" + id + " description");
    return forum;
  }
 
 
  /**
   * Checks whether the two UserPreference instances are same.
   * @param contest1 the expected contest
   * @param contest2 the contest to check
   */
  private void checkAbstractContest(AbstractContest contest1, AbstractContest contest2) {
   
    assertEquals("wrong id", contest1.getId(), contest2.getId());
    assertEquals("wrong title", contest1.getTitle(), contest2.getTitle());
    assertEquals("wrong desc", contest1.getDescription(), contest2.getDescription());
    assertEquals("wrong forum id", contest1.getForumId(), contest2.getForumId());
    checkLanguages(contest1.getLanguages(), contest2.getLanguages());
    checkLimit(contest1.getLimit(), contest2.getLimit());               
  }
 
  /**
   * Checks whether the two Language instances are same.
   * @param language1 the expected language
   * @param language2 the language to check
   */
  private void checkLanguages(List languages1, List languages2) {
    if (languages1 == null && languages2 == null) {
      return;
    }
    if (languages1 == null) {
      assertEquals("wrong size", 0, languages2.size());
    } else {
      assertEquals("wrong size", languages1.size(), languages1.size());
      Iterator it1 = languages1.iterator();
      Iterator it2 = languages2.iterator();
      while (it1.hasNext()) {
        checkLanguage((Language) it1.next(), (Language) it2.next());
      }
    }
  }
 
  /**
   * Checks whether the two Language instances are same.
   * @param language1 the expected language
   * @param language2 the language to check
   */
  private void checkLanguage(Language language1, Language language2) {
   
    assertEquals("wrong id", language1.getId(), language2.getId());
    assertEquals("wrong name", language1.getName(), language2.getName());
    assertEquals("wrong desc", language1.getDescription(), language2.getDescription());
    assertEquals("wrong options", language1.getOptions(), language2.getOptions());
    assertEquals("wrong compiler", language1.getCompiler(), language2.getCompiler())
  }
 
  /**
   * Checks whether the two Limit instances are same.
   * @param limit1 the expected limit
   * @param limit2 the limit to check
   */
  private void checkLimit(Limit limit1, Limit limit2) {
    if (limit1 == null && limit2 == null) {
      return;
    }
    if (limit1 == null) {
      assertEquals("wrong id", 1, limit2.getId())
      assertEquals("wrong time limit", 1, limit2.getTimeLimit());
      assertEquals("wrong memoty limit", 32768, limit2.getMemoryLimit());
      assertEquals("wrong output limit", 32768, limit2.getOutputLimit());
      assertEquals("wrong submission limit", 32, limit2.getSubmissionLimit());
    } else {
      assertEquals("wrong id", limit1.getId(), limit2.getId())
      assertEquals("wrong time limit", limit1.getTimeLimit(), limit2.getTimeLimit());
      assertEquals("wrong memoty limit", limit1.getMemoryLimit(), limit2.getMemoryLimit());
      assertEquals("wrong output limit", limit1.getOutputLimit(), limit2.getOutputLimit());
      assertEquals("wrong submission limit", limit1.getSubmissionLimit(), limit2.getSubmissionLimit());
    }
   
  }
 
}


TOP

Related Classes of cn.edu.zju.acm.onlinejudge.persistence.sql.ContestPersistenceImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.