/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License
* at:
*
* http://opensource.org/licenses/ecl2.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*/
package org.opencastproject.metadata.dublincore;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.opencastproject.metadata.dublincore.DublinCore.ENC_SCHEME_URI;
import static org.opencastproject.metadata.dublincore.DublinCore.LANGUAGE_ANY;
import static org.opencastproject.metadata.dublincore.DublinCore.LANGUAGE_UNDEFINED;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_CONTRIBUTOR;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_CREATED;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_CREATOR;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_FORMAT;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_IDENTIFIER;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_LANGUAGE;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_LICENSE;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_PUBLISHER;
import static org.opencastproject.metadata.dublincore.DublinCore.PROPERTY_TITLE;
import static org.opencastproject.metadata.dublincore.DublinCore.TERMS_NS_URI;
import static org.opencastproject.metadata.dublincore.DublinCores.OC_PROPERTY_PROMOTED;
import static org.opencastproject.util.UrlSupport.uri;
import org.opencastproject.mediapackage.Catalog;
import org.opencastproject.mediapackage.EName;
import org.opencastproject.mediapackage.MediaPackage;
import org.opencastproject.mediapackage.MediaPackageBuilderFactory;
import org.opencastproject.mediapackage.MediaPackageElements;
import org.opencastproject.mediapackage.MediaPackageReferenceImpl;
import org.opencastproject.mediapackage.NamespaceBindingException;
import org.opencastproject.metadata.api.MediaPackageMetadata;
import org.opencastproject.util.MimeType;
import org.opencastproject.util.UnknownFileTypeException;
import org.opencastproject.util.XmlNamespaceContext;
import org.opencastproject.workspace.api.Workspace;
import com.entwinemedia.fn.data.Opt;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.easymock.EasyMock;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Date;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
/**
* Test class for the dublin core implementation.
*/
public class DublinCoreTest {
/** The logger */
private static final Logger logger = LoggerFactory.getLogger(DublinCoreTest.class);
/**
* The catalog name
*/
private static final String catalogName = "/dublincore.xml";
private static final String catalogName2 = "/dublincore2.xml";
/** The XML catalog list name */
private static final String xmlCatalogListName = "/dublincore-list.xml";
/** The JSON catalog list name */
private static final String jsonCatalogListName = "/dublincore-list.json";
/**
* The test catalog
*/
private File catalogFile = null;
private File catalogFile2 = null;
/** Temp files for test catalogs */
private File dcTempFile1 = null;
private File dcTempFile2 = null;
private DublinCoreCatalogService service = null;
@Rule
public TemporaryFolder testFolder = new TemporaryFolder();
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
catalogFile = new File(this.getClass().getResource(catalogName).toURI());
catalogFile2 = new File(this.getClass().getResource(catalogName2).toURI());
if (!catalogFile.exists() || !catalogFile.canRead())
throw new Exception("Unable to access test catalog");
if (!catalogFile2.exists() || !catalogFile2.canRead())
throw new Exception("Unable to access test catalog 2");
Workspace workspace = EasyMock.createNiceMock(Workspace.class);
EasyMock.expect(workspace.get((URI) EasyMock.anyObject())).andReturn(catalogFile).anyTimes();
EasyMock.replay(workspace);
service = new DublinCoreCatalogService();
service.setWorkspace(workspace);
}
/**
* @throws java.io.IOException
*/
@After
public void tearDown() throws Exception {
FileUtils.deleteQuietly(dcTempFile1);
FileUtils.deleteQuietly(dcTempFile2);
}
/**
* Test method for {@link org.opencastproject.metadata.dublincore.DublinCoreCatalog#fromFile(java.io.File)} .
*/
@Test
public void testFromFile() throws Exception {
DublinCoreCatalog dc = null;
FileInputStream in = new FileInputStream(catalogFile);
dc = DublinCores.read(in);
IOUtils.closeQuietly(in);
// Check if the fields are available
assertEquals("ETH Zurich, Switzerland", dc.getFirst(PROPERTY_PUBLISHER, LANGUAGE_UNDEFINED));
assertEquals("Land and Vegetation: Key players on the Climate Scene",
dc.getFirst(PROPERTY_TITLE, DublinCore.LANGUAGE_UNDEFINED));
assertNotNull(dc.getFirst(PROPERTY_TITLE));
assertNull(dc.getFirst(PROPERTY_TITLE, "fr"));
// Test custom metadata element
assertEquals("true", dc.getFirst(OC_PROPERTY_PROMOTED));
}
/**
* Test method for {@link DublinCoreCatalogList#parse(String)} with an XML String
*/
@Test
public void testParseDublinCoreListXML() throws Exception {
String dublinCoreListString = IOUtils.toString(getClass().getResourceAsStream(xmlCatalogListName), "UTF-8");
DublinCoreCatalogList catalogList = DublinCoreCatalogList.parse(dublinCoreListString);
Assert.assertEquals(2, catalogList.getTotalCount());
Assert.assertEquals("Land 1", catalogList.getCatalogList().get(0).getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
Assert.assertEquals("Land 2", catalogList.getCatalogList().get(1).getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
}
/**
* Test method for {@link DublinCoreCatalogList#parse(String)} with a JSON String
*/
@Test
public void testParseDublinCoreListJSON() throws Exception {
String dublinCoreListString = IOUtils.toString(getClass().getResourceAsStream(jsonCatalogListName), "UTF-8");
DublinCoreCatalogList catalogList = DublinCoreCatalogList.parse(dublinCoreListString);
Assert.assertEquals(2, catalogList.getTotalCount());
Assert.assertEquals("Land 1", catalogList.getCatalogList().get(0).getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
Assert.assertEquals("Land 2", catalogList.getCatalogList().get(1).getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
}
/**
* Test method for {@link DublinCoreCatalog#toJson()} .
*/
@Test
public void testJson() throws Exception {
DublinCoreCatalog dc = null;
FileInputStream in = new FileInputStream(catalogFile);
dc = DublinCores.read(in);
IOUtils.closeQuietly(in);
String jsonString = dc.toJson();
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
JSONObject dcTerms = (JSONObject) jsonObject.get(TERMS_NS_URI);
assertNotNull(dcTerms);
JSONArray titleArray = (JSONArray) dcTerms.get("title");
assertEquals("Two titles should be present", 2, titleArray.size());
JSONArray subjectArray = (JSONArray) dcTerms.get("subject");
assertEquals("The subject should be present", 1, subjectArray.size());
DublinCoreCatalog fromJson = DublinCores.read(IOUtils.toInputStream(jsonString));
assertEquals(2, fromJson.getLanguages(PROPERTY_TITLE).size());
assertEquals("video/x-dv", fromJson.getFirst(PROPERTY_FORMAT));
assertEquals("eng", fromJson.getFirst(PROPERTY_LANGUAGE));
assertEquals("2007-12-05", fromJson.getFirst(PROPERTY_CREATED));
// Serialize again, and we should get the same json
String jsonRoundtrip = fromJson.toJson();
assertEquals(jsonString, jsonRoundtrip);
}
/**
* Test method for saving the catalog.
*/
@Test
public void testNewInstance() {
try {
// Read the sample catalog
FileInputStream in = new FileInputStream(catalogFile);
DublinCoreCatalog dcSample = DublinCores.read(in);
IOUtils.closeQuietly(in);
// Create a new catalog and fill it with a few fields
DublinCoreCatalog dcNew = DublinCores.mkOpencastEpisode().getCatalog();
dcTempFile1 = testFolder.newFile();
// Add the required fields
dcNew.add(PROPERTY_IDENTIFIER, dcSample.getFirst(PROPERTY_IDENTIFIER));
dcNew.add(PROPERTY_TITLE, dcSample.getFirst(PROPERTY_TITLE, DublinCore.LANGUAGE_UNDEFINED),
DublinCore.LANGUAGE_UNDEFINED);
// Add an additional field
dcNew.add(PROPERTY_PUBLISHER, dcSample.getFirst(PROPERTY_PUBLISHER));
// Add a null-value field
try {
dcNew.add(PROPERTY_CONTRIBUTOR, (String) null);
fail();
} catch (IllegalArgumentException ignore) {
}
// Add a field with an encoding scheme
dcNew.add(PROPERTY_LICENSE, DublinCoreValue.mk("http://www.opencastproject.org/license",
DublinCore.LANGUAGE_UNDEFINED, ENC_SCHEME_URI));
// Don't forget to bind the namespace...
dcNew.addBindings(XmlNamespaceContext.mk("octest", "http://www.opencastproject.org/octest"));
dcNew.add(OC_PROPERTY_PROMOTED, DublinCoreValue.mk("true", DublinCore.LANGUAGE_UNDEFINED,
new EName("http://www.opencastproject.org/octest", "Boolean")));
try {
dcNew.add(OC_PROPERTY_PROMOTED, DublinCoreValue.mk("true", DublinCore.LANGUAGE_UNDEFINED,
EName.mk("http://www.opencastproject.org/enc-scheme", "Boolean")));
fail();
} catch (NamespaceBindingException e) {
// Ok. This exception is expected to occur
}
// Store the catalog
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.METHOD, "xml");
FileWriter sw = new FileWriter(dcTempFile1);
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(dcNew.toXml());
trans.transform(source, result);
// Re-read the saved catalog and test for its content
DublinCoreCatalog dcNewFromDisk = DublinCores.read(dcTempFile1.toURI().toURL().openStream());
assertEquals(dcSample.getFirst(PROPERTY_IDENTIFIER), dcNewFromDisk.getFirst(PROPERTY_IDENTIFIER));
assertEquals(dcSample.getFirst(PROPERTY_TITLE, "en"), dcNewFromDisk.getFirst(PROPERTY_TITLE, "en"));
assertEquals(dcSample.getFirst(PROPERTY_PUBLISHER), dcNewFromDisk.getFirst(PROPERTY_PUBLISHER));
} catch (IOException e) {
fail("Error creating the catalog: " + e.getMessage());
} catch (ParserConfigurationException e) {
fail("Error creating a parser for the catalog: " + e.getMessage());
} catch (TransformerException e) {
fail("Error saving the catalog: " + e.getMessage());
}
}
/**
* Tests overwriting of values.
*/
@Test
public void testOverwriting() {
// Create a new catalog and fill it with a few fields
DublinCoreCatalog dcNew = null;
dcNew = DublinCores.mkOpencastEpisode().getCatalog();
dcNew.set(PROPERTY_TITLE, "Title 1");
assertEquals("Title 1", dcNew.getFirst(PROPERTY_TITLE));
dcNew.set(PROPERTY_TITLE, "Title 2");
assertEquals("Title 2", dcNew.getFirst(PROPERTY_TITLE));
dcNew.set(PROPERTY_TITLE, "Title 3", "de");
assertEquals("Title 2", dcNew.getFirst(PROPERTY_TITLE));
assertEquals("Title 3", dcNew.getFirst(PROPERTY_TITLE, "de"));
dcNew = null;
}
@Test
public void testVarious() throws NoSuchAlgorithmException, IOException, UnknownFileTypeException {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
// Add a title
dc.add(PROPERTY_TITLE, "Der alte Mann und das Meer");
assertEquals("Der alte Mann und das Meer", dc.getFirst(PROPERTY_TITLE));
assertEquals(1, dc.get(PROPERTY_TITLE, LANGUAGE_UNDEFINED).size());
assertEquals(1, dc.get(PROPERTY_TITLE).size());
// Overwrite the title
dc.set(PROPERTY_TITLE, "La Peste");
assertEquals("La Peste", dc.getFirst(PROPERTY_TITLE));
assertEquals(1, dc.get(PROPERTY_TITLE).size());
dc.set(PROPERTY_TITLE, "Die Pest", "de");
assertEquals(2, dc.get(PROPERTY_TITLE).size());
assertEquals(1, dc.get(PROPERTY_TITLE, LANGUAGE_UNDEFINED).size());
// Remove the title without language code
dc.remove(PROPERTY_TITLE, LANGUAGE_UNDEFINED);
// The german title is now the only remaining title so we should get it here
assertEquals("Die Pest", dc.getFirst(PROPERTY_TITLE));
assertNotNull(dc.getFirst(PROPERTY_TITLE, "de"));
assertNull(dc.getFirst(PROPERTY_TITLE, "fr"));
assertEquals(1, dc.get(PROPERTY_TITLE).size());
assertTrue(dc.hasValue(PROPERTY_TITLE));
assertFalse(dc.hasMultipleValues(PROPERTY_TITLE));
// Add a german title (does not make sense...)
dc.add(PROPERTY_TITLE, "nonsense", "de");
assertEquals(2, dc.get(PROPERTY_TITLE, "de").size());
assertEquals(2, dc.get(PROPERTY_TITLE).size());
// Now restore the orginal french title
dc.set(PROPERTY_TITLE, "La Peste");
assertEquals(3, dc.get(PROPERTY_TITLE).size());
// And get rid of the german ones
dc.remove(PROPERTY_TITLE, "de");
assertEquals(0, dc.get(PROPERTY_TITLE, "de").size());
assertNull(dc.getFirst(PROPERTY_TITLE, "de"));
assertEquals(1, dc.get(PROPERTY_TITLE).size());
// No contributor is set so expect null
assertNull(dc.getFirst(PROPERTY_CONTRIBUTOR));
// ... but expect an empty list here
assertNotNull(dc.get(PROPERTY_CONTRIBUTOR));
}
@Test
public void testVarious2() throws NoSuchAlgorithmException, IOException, UnknownFileTypeException {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
dc.add(PROPERTY_TITLE, "The Lord of the Rings");
dc.add(PROPERTY_TITLE, "Der Herr der Ringe", "de");
assertEquals(2, dc.getLanguages(PROPERTY_TITLE).size());
assertEquals("The Lord of the Rings; Der Herr der Ringe", dc.getAsText(PROPERTY_TITLE, LANGUAGE_ANY, "; "));
assertNull(dc.getAsText(PROPERTY_CONTRIBUTOR, LANGUAGE_ANY, "; "));
dc.remove(PROPERTY_TITLE, "de");
assertEquals(1, dc.getLanguages(PROPERTY_TITLE).size());
dc.remove(PROPERTY_TITLE);
assertNull(dc.getAsText(PROPERTY_TITLE, LANGUAGE_ANY, "; "));
}
@Test
public void testVarious3() throws NoSuchAlgorithmException, IOException, UnknownFileTypeException {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
dc.add(PROPERTY_CONTRIBUTOR, "Heinz Strunk");
dc.add(PROPERTY_CONTRIBUTOR, "Rocko Schamoni");
dc.add(PROPERTY_CONTRIBUTOR, "Jacques Palminger");
assertTrue(dc.hasValue(PROPERTY_CONTRIBUTOR));
assertTrue(dc.hasValue(PROPERTY_CONTRIBUTOR, LANGUAGE_UNDEFINED));
// assertTrue(dc.hasMultipleValues(PROPERTY_TITLE));
assertEquals(3, dc.get(PROPERTY_CONTRIBUTOR).size());
dc.add(PROPERTY_CONTRIBUTOR, "Klaus Allofs", "de");
dc.add(PROPERTY_CONTRIBUTOR, "Karl-Heinz Rummenigge", "de");
assertTrue(dc.hasValue(PROPERTY_CONTRIBUTOR, "de"));
assertTrue(dc.hasMultipleValues(PROPERTY_CONTRIBUTOR, "de"));
assertEquals(2, dc.get(PROPERTY_CONTRIBUTOR, "de").size());
assertEquals(5, dc.get(PROPERTY_CONTRIBUTOR).size());
dc.set(PROPERTY_CONTRIBUTOR, "Hans Manzke");
assertEquals(1, dc.get(PROPERTY_CONTRIBUTOR, LANGUAGE_UNDEFINED).size());
assertEquals(3, dc.get(PROPERTY_CONTRIBUTOR).size());
}
@Test
public void testVarious4() throws NoSuchAlgorithmException, IOException, UnknownFileTypeException {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
dc.add(PROPERTY_TITLE, "deutsch", "de");
dc.add(PROPERTY_TITLE, "english", "en");
assertNull(dc.getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
assertNotNull(dc.getFirst(PROPERTY_TITLE, LANGUAGE_ANY));
assertNotNull(dc.getFirst(PROPERTY_TITLE));
dc.add(PROPERTY_TITLE, "undefined");
assertEquals("undefined", dc.getFirst(PROPERTY_TITLE, LANGUAGE_UNDEFINED));
assertEquals("undefined", dc.getFirst(PROPERTY_TITLE));
assertEquals("deutsch", dc.getFirst(PROPERTY_TITLE, "de"));
}
@Test
public void testSet() {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
dc.set(PROPERTY_CREATOR,
Arrays.asList(DublinCoreValue.mk("Klaus"), DublinCoreValue.mk("Peter"), DublinCoreValue.mk("Carl", "en")));
assertEquals(2, dc.get(PROPERTY_CREATOR, LANGUAGE_UNDEFINED).size());
assertEquals(3, dc.get(PROPERTY_CREATOR).size());
assertEquals("Klaus", dc.get(PROPERTY_CREATOR, LANGUAGE_UNDEFINED).get(0));
}
@Test
public void testMediaPackageMetadataExtraction() throws Exception {
// Load the DC catalog
FileInputStream in = null;
DublinCoreCatalog catalog = null;
try {
in = new FileInputStream(catalogFile);
catalog = service.load(in);
} finally {
IOUtils.closeQuietly(in);
}
// Create a mediapackage containing the DC catalog
MediaPackage mp = MediaPackageBuilderFactory.newInstance().newMediaPackageBuilder().createNew();
mp.add(catalogFile.toURI(), Catalog.TYPE, MediaPackageElements.EPISODE);
mp.add(catalogFile2.toURI(), Catalog.TYPE, MediaPackageElements.SERIES);
MediaPackageMetadata metadata = service.getMetadata(mp);
assertEquals("Mediapackage metadata title not extracted from DC properly",
catalog.getFirst(DublinCore.PROPERTY_TITLE), metadata.getTitle());
}
// todo fix http://opencast.jira.com/browse/MH-8759 then remove @Ignore
@Ignore
@Test
public void testPreserveEncodingScheme() {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
DublinCoreValue val = DublinCoreValue.mk("http://www.opencastproject.org/license", "en", ENC_SCHEME_URI);
dc.add(PROPERTY_LICENSE, val);
assertEquals(1, dc.get(PROPERTY_LICENSE).size());
assertEquals(val, dc.get(PROPERTY_LICENSE).get(0));
assertEquals(Opt.some(ENC_SCHEME_URI), dc.get(PROPERTY_LICENSE).get(0).getEncodingScheme());
}
@Test
public void testSerializeDublinCore() throws Exception {
DublinCoreCatalog dc = null;
FileInputStream in = new FileInputStream(catalogFile2);
dc = DublinCores.read(in);
IOUtils.closeQuietly(in);
String inputXml = IOUtils.toString(new FileInputStream(catalogFile2), "UTF-8");
Assert.assertTrue(inputXml.contains("xmlns:dcterms=\"http://purl.org/dc/terms/\""));
Assert.assertTrue(dc.toXmlString().contains("xmlns:dcterms=\"http://purl.org/dc/terms/\""));
DublinCoreValue extent = EncodingSchemeUtils.encodeDuration(3000);
dc.set(DublinCore.PROPERTY_EXTENT, extent);
Assert.assertTrue(dc.toXmlString().contains("xmlns:dcterms=\"http://purl.org/dc/terms/\""));
DublinCoreValue date = EncodingSchemeUtils.encodeDate(new Date(), Precision.Minute);
dc.set(DublinCore.PROPERTY_CREATED, date);
Assert.assertTrue(dc.toXmlString().contains("xmlns:dcterms=\"http://purl.org/dc/terms/\""));
}
// test that exceptions are thrown correctly
@Test
public void testEncodingSchemeUtilsExceptions() {
DCMIPeriod period = new DCMIPeriod(new java.util.Date(), new java.util.Date());
Precision precision = Precision.Year;
try {
EncodingSchemeUtils.encodePeriod(null, precision);
Assert.fail("Exceptions should be thrown on null values.");
} catch (Exception e) {
Assert.assertFalse(e instanceof NullPointerException);
}
try {
EncodingSchemeUtils.encodePeriod(period, null);
Assert.fail("Exceptions should be thrown on null values.");
} catch (Exception e) {
Assert.assertFalse(e instanceof NullPointerException);
}
try {
EncodingSchemeUtils.encodePeriod(null, null);
Assert.fail("Exceptions should be thrown on null values.");
} catch (Exception e) {
Assert.assertFalse(e instanceof NullPointerException);
}
}
@Test
@Ignore
// this test should verify serialization/deserialization works for a fairly minimal case
// waiting on https://opencast.jira.com/browse/MH-9733
public void testSerializationDeserializationOfCatalogs() throws Exception {
DublinCoreCatalog impl = DublinCores.mkOpencastEpisode().getCatalog();
impl.addTag("bob");
impl.set(impl.PROPERTY_PUBLISHER, "test");
DublinCoreCatalogService service = new DublinCoreCatalogService();
DublinCoreCatalog newImpl = service.load(service.serialize(impl));
Assert.assertEquals(impl, newImpl);
}
@Test
// test for null values on various methods on the DublinCoreCatalog, they should
// generally return an exception
public void testForNullsInDublinCoreCatalogImpl() throws Exception {
DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
try {
DublinCoreValue val = null;
dc.add(EasyMock.createNiceMock(org.opencastproject.mediapackage.EName.class), val);
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
dc.add(null, EasyMock.createNiceMock(DublinCoreValue.class));
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
String val2 = null;
dc.add(EasyMock.createNiceMock(org.opencastproject.mediapackage.EName.class), val2);
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
dc.add(null, "");
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
String val2 = null;
dc.add(EasyMock.createNiceMock(org.opencastproject.mediapackage.EName.class), val2, val2);
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
String val2 = null;
dc.add(EasyMock.createNiceMock(org.opencastproject.mediapackage.EName.class), "", val2);
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
try {
dc.add(null, "", "");
} catch (Exception e) {
// throw assertion if it happens to be a nullpointer, never a null pointer!
Assert.assertFalse(e instanceof NullPointerException);
}
}
@Test
public void testClone() {
final DublinCoreCatalog dc = DublinCores.mkOpencastEpisode().getCatalog();
final MimeType mimeType = MimeType.mimeType("text", "xml");
dc.setMimeType(MimeType.mimeType("text", "xml"));
dc.setReference(new MediaPackageReferenceImpl("type", "identifier"));
dc.setURI(uri("http://localhost"));
assertNotNull(dc.getMimeType());
assertEquals(mimeType, dc.getMimeType());
// clone
DublinCoreCatalog dcClone = (DublinCoreCatalog) dc.clone();
assertEquals("The mime type should be cloned", dc.getMimeType(), dcClone.getMimeType());
assertEquals("The flavor should be cloned", dc.getFlavor(), dcClone.getFlavor());
assertEquals("The values should be cloned", dc.getValues(), dcClone.getValues());
assertNull("The URI should not be cloned", dcClone.getURI());
assertNull("A media package reference should not be cloned.", dcClone.getReference());
}
}