package uk.ac.ox.oucs.vle;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
/**
* @author Matthew Buckett
*/
public class NoDateComparatorTest {
public static final String CG1 = "CG1";
public static final String CG2 = "CG2";
private NoDateComparator comp = new NoDateComparator();
@Test
public void testDiffYear() {
CourseGroup cg1 = newGroup("HT13", CG1);
CourseGroup cg2 = newGroup("HT12", CG2);
assertSymmetric(cg1, cg2);
}
@Test
public void testSame() {
CourseGroup cg1 = newGroup("HT11", CG1);
CourseGroup cg2 = newGroup("HT11", CG1);
assertMatch(cg1, cg2);
}
@Test
public void testDiffTerm() {
CourseGroup cg1 = newGroup("MT11", CG1);
CourseGroup cg2 = newGroup("HT11", CG2);
assertSymmetric(cg1, cg2);
}
@Test
public void testNull() {
CourseGroup cg1 = newGroup(null, CG1);
CourseGroup cg2 = newGroup("HT11", CG2);
assertSymmetric(cg1, cg2);
}
@Test
public void testBadTerm() {
CourseGroup cg1 = newGroup("NoTerm 11", CG1);
CourseGroup cg2 = newGroup("HT11", CG2);
assertSymmetric(cg1, cg2);
}
@Test
public void testBadYear() {
CourseGroup cg1 = newGroup("HT11/12", CG1);
CourseGroup cg2 = newGroup("HT11", CG2);
assertSymmetric(cg1, cg2);
}
@Test
public void testCollectionSort() {
CourseGroup aNull = newGroup(null, "0");
CourseGroup tt13 = newGroup("TT13", "1");
CourseGroup tt12 = newGroup("TT12", "2");
CourseGroup tt11 = newGroup("TT11", "3");
CourseGroup ht11 = newGroup("HT11", "4");
CourseGroup mt11 = newGroup("MT11", "5");
List<CourseGroup> list = Arrays.asList(aNull, tt13, tt12, tt11, ht11, mt11);
Collections.shuffle(list);
Collections.sort(list, comp);
assertArrayEquals(new CourseGroup[]{ht11, tt11, mt11, tt12, tt13, aNull}, list.toArray());
}
private void assertSymmetric(CourseGroup cg1, CourseGroup cg2) {
assertTrue(cg1+ " should be before "+ cg2, comp.compare(cg1, cg2) > 0);
assertTrue(cg2+ " should be after "+ cg1, comp.compare(cg2, cg1) < 0);
}
private void assertMatch(CourseGroup cg1, CourseGroup cg2) {
assertEquals(0, comp.compare(cg1, cg2));
assertEquals(0, comp.compare(cg2, cg1));
}
/**
* Create a course group with a single component.
*/
private CourseGroup newGroup(String termcode, String title) {
CourseGroup cg = mock(CourseGroup.class);
when(cg.getTitle()).thenReturn(title);
CourseComponent co = mock(CourseComponent.class);
when(cg.getComponents()).thenReturn(Collections.singletonList(co));
when(co.getTermCode()).thenReturn(termcode);
return cg;
}
}