package uk.ac.ox.oucs.vle;
import org.junit.Before;
import org.junit.Test;
import uk.ac.ox.oucs.vle.xcri.oxcap.Subject.SubjectIdentifier;
import static org.junit.Assert.assertEquals;
import static uk.ac.ox.oucs.vle.xcri.oxcap.Subject.VITAESubjectIdentifier.*;
import static uk.ac.ox.oucs.vle.xcri.oxcap.Subject.RDFSubjectIdentifier.*;
import static uk.ac.ox.oucs.vle.xcri.oxcap.Subject.RMSubjectIdentifier.*;
import java.util.*;
/**
* @author Matthew Buckett
*/
public class CourseMapperTest {
private CategoryMapper mapper;
@Before
public void setUp() {
this.mapper = new CategoryMapper();
}
@Test
public void testSimpleProperties() {
Properties props;
// Empty
props = new Properties();
mapper.setMappings(props);
assertEquals(newMap(), mapper.getMappings());
// One
props = new Properties();
props.setProperty("CO", "A1");
mapper.setMappings(props);
assertEquals(newMap(newEntry(CO, A1)), mapper.getMappings());
// Missing key
props = new Properties();
props.setProperty("MISSING", "A1");
mapper.setMappings(props);
assertEquals(newMap(), mapper.getMappings());
// Missing value
props = new Properties();
props.setProperty("CO", "MISSING");
mapper.setMappings(props);
assertEquals(newMap(), mapper.getMappings());
// no value
props = new Properties();
props.setProperty("CO", "");
mapper.setMappings(props);
assertEquals(newMap(), mapper.getMappings());
// Full example
props = new Properties();
props.setProperty("CO", "A1 A2 A3");
props.setProperty("QL", "B2 B3");
mapper.setMappings(props);
assertEquals(newMap(
newEntry(CO, A1, A2, A3),
newEntry(QL, B2, B3)
), mapper.getMappings());
}
@Test
public void testSimpleMapping() {
Map<SubjectIdentifier,Set<SubjectIdentifier>> map = newMap();
map.put(CO, newSet(A1));
mapper.setMappings(map);
Set<SubjectIdentifier> set;
// Unchanged.
set = newSet(QL);
mapper.mapCategories(set);
assertEquals(newSet(QL), set);
// Empty.
set = newSet();
mapper.mapCategories(set);
assertEquals(newSet(), set);
// Match
set = newSet(CO);
mapper.mapCategories(set);
assertEquals(newSet(CO, A1), set);
}
@Test
public void testMultipleIterations() {
Map<SubjectIdentifier, Set<SubjectIdentifier>> map = newMap();
map.put(CO, newSet(A1));
map.put(A1, newSet(A2, A));
map.put(A2, newSet(A3, A));
map.put(A3, newSet(TA, A));
map.put(TA, newSet(TE));
mapper.setMappings(map);
Set<SubjectIdentifier> set;
// End of chain.
set = newSet(TA);
mapper.mapCategories(set);
assertEquals(newSet(TA, TE), set);
// Start of chain.
set = newSet(CO);
mapper.mapCategories(set);
assertEquals(newSet(CO, A1, A2, A3, TA, TE, A), set);
// Start and end.
set = newSet(CO, TE);
mapper.mapCategories(set);
assertEquals(newSet(CO, A1, A2, A3, TA, TE, A), set);
}
@Test
public void testLoop() {
Map<SubjectIdentifier, Set<SubjectIdentifier>> map = newMap();
map.put(A1, newSet(A2));
map.put(A2, newSet(A3));
map.put(A3, newSet(A1));
mapper.setMappings(map);
Set<SubjectIdentifier> set = newSet(A1);
mapper.mapCategories(set);
assertEquals(newSet(A1, A2, A3), set);
}
private Map<SubjectIdentifier, Set<SubjectIdentifier>> newMap(Map.Entry<SubjectIdentifier, Set<SubjectIdentifier>>... entries) {
Map<SubjectIdentifier, Set<SubjectIdentifier>> map = new HashMap<SubjectIdentifier, Set<SubjectIdentifier>>();
for(Map.Entry<SubjectIdentifier, Set<SubjectIdentifier>> entry: entries) {
map.put(entry.getKey(), entry.getValue());
}
return map;
}
private Map.Entry<SubjectIdentifier, Set<SubjectIdentifier>> newEntry(SubjectIdentifier key, SubjectIdentifier... values) {
return new AbstractMap.SimpleEntry<SubjectIdentifier, Set<SubjectIdentifier>>(key, newSet(values));
}
private Set<SubjectIdentifier> newSet(SubjectIdentifier... identifiers) {
Set<SubjectIdentifier> set = new HashSet<SubjectIdentifier>();
for (SubjectIdentifier identifier: identifiers) {
set.add(identifier);
}
return set;
}
}