package uk.ac.ox.oucs.vle.xcri.oxcap;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import org.junit.Test;
import java.io.StringReader;
import static org.junit.Assert.*;
public class SubjectTest {
@Test
public void testSimpleRDF() throws Exception {
Subject subject = createSubject(Subject.RDF.getURI(), "CD", "Career Development");
assertEquals("CD", subject.getIdentifier());
assertEquals("Career Development", subject.getValue());
assertTrue(subject.isRDFCategory());
assertFalse(subject.isJACSCategory());
assertFalse(subject.isRMCategory());
assertTrue(subject.isValid());
assertEquals(Subject.RDFSubjectIdentifier.CD, subject.getSubjectIdentifier());
}
@Test
public void testDifferentValueRDF() throws Exception {
// This one has a different value in it's XML tag which doesn't match the spec.
Subject subject = createSubject(Subject.RDF.getURI(), "CD", "Different Career Development");
assertEquals("CD", subject.getIdentifier());
assertEquals("Different Career Development", subject.getValue());
assertTrue(subject.isRDFCategory());
assertFalse(subject.isJACSCategory());
assertFalse(subject.isRMCategory());
assertTrue(subject.isValid());
Subject.SubjectIdentifier subjectIdentifier = subject.getSubjectIdentifier();
assertEquals(Subject.RDFSubjectIdentifier.CD, subjectIdentifier);
assertEquals("CD", subjectIdentifier.name());
assertEquals("Career Development", subjectIdentifier.getValue());
}
@Test
public void testSimpleRM() throws Exception {
Subject subject = createSubject(Subject.RM.getURI(), "QL", "Qualitative");
assertEquals("QL", subject.getIdentifier());
assertEquals("Qualitative", subject.getValue());
assertFalse(subject.isRDFCategory());
assertTrue(subject.isRMCategory());
assertFalse(subject.isJACSCategory());
assertTrue(subject.isValid());
assertEquals(Subject.RMSubjectIdentifier.QL, subject.getSubjectIdentifier());
}
@Test
public void testSimpleJACS() throws Exception {
Subject subject = createSubject(Subject.JACS.getURI(), "A200", "Pre-clinical Dentistry");
assertEquals("A200", subject.getIdentifier());
assertEquals("Pre-clinical Dentistry", subject.getValue());
assertFalse(subject.isRDFCategory());
assertFalse(subject.isRMCategory());
assertTrue(subject.isJACSCategory());
assertTrue(subject.isValid());
assertNull(subject.getSubjectIdentifier());
}
@Test
public void testUnknown() throws Exception {
Subject subject = createSubject("http://unknown.domain/namespace", "ID", "Value");
assertEquals("ID", subject.getIdentifier());
assertEquals("Value", subject.getValue());
assertFalse(subject.isRDFCategory());
assertFalse(subject.isRMCategory());
assertFalse(subject.isJACSCategory());
assertFalse(subject.isValid());
assertNull(subject.getSubjectIdentifier());
}
@Test
public void testDifferentXml() throws Exception {
// Here we have a different prefix for the xsi namespace.
Subject subject = createSubject("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<dc:subject " +
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " +
"xmlns:xsi2=\"http://www.w3.org/2001/XMLSchema-instance\" "+
"xmlns:ns=\"https://data.ox.ac.uk/id/ox-rdf/\" " +
"xsi2:type=\"ns:notation\" identifier=\"ID\">Value</dc:subject>");
assertEquals("ID", subject.getIdentifier());
assertEquals("Value", subject.getValue());
assertTrue(subject.isRDFCategory());
assertFalse(subject.isRMCategory());
assertFalse(subject.isJACSCategory());
assertTrue(subject.isValid());
assertNull(subject.getSubjectIdentifier());
}
@Test
public void testNoNamespaceXml() throws Exception {
// We don't have a namespace here.
try {
Subject subject = createSubject("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<dc:subject " +
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " +
"xmlns:ns=\"https://data.ox.ac.uk/id/ox-rdf/\" " +
"identifier=\"ID\">Value</dc:subject>");
assertEquals("ID", subject.getIdentifier());
assertEquals("Value", subject.getValue());
assertNull(subject.getSubjectIdentifier());
} catch (Exception e) {
fail("We shouldn't blow up when there isn't a namespace");
}
}
private Subject createSubject(String namespace, String identifier, String value) throws Exception {
Subject subject = createSubject("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<dc:subject " +
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"xmlns:ns=\"" + namespace + "\" " +
"xsi:type=\"ns:notation\" identifier=\"" + identifier + "\">" + value + "</dc:subject>");
return subject;
}
private Subject createSubject(String xml) throws Exception {
SAXBuilder builder = new SAXBuilder();
builder.setValidation(false);
Document document = builder.build(new StringReader(xml));
Subject subject = new Subject();
subject.fromXml(document.getRootElement());
return subject;
}
}