/*
* Copyright (C) 2012 Jan Pokorsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.cas.lib.proarc.common.mods.custom;
import cz.cas.lib.proarc.common.mods.ModsUtils;
import cz.cas.lib.proarc.common.mods.custom.PeriodicalMapper.Periodical;
import cz.cas.lib.proarc.mods.ModsDefinition;
import java.util.Arrays;
import org.hamcrest.core.Is;
import static org.junit.Assert.*;
import org.junit.Test;
/**
*
* @author Jan Pokorsky
*/
public class PeriodicalMapperTest {
private static final String XML =
" <mods xmlns='http://www.loc.gov/mods/v3'>"
// identifiers
+ "<identifier type='type'>IDENTIFIER</identifier>"
// sigla + shelf locators
+ "<location><physicalLocation>SIGLA</physicalLocation>"
+ "<shelfLocator>SHELF1</shelfLocator>"
+ "<shelfLocator>SHELF2</shelfLocator></location>"
// periodicity + publishers + printers
+ "<originInfo transliteration='publisher'>"
+ "<place><placeTerm type='text'>PLACETERM[0]</placeTerm></place>"
+ "<publisher>PUBLISHER[0]</publisher><dateIssued>DATE[0]</dateIssued>"
+ "</originInfo>"
+ "<originInfo transliteration='printer'>"
+ "<place><placeTerm type='text'>PLACETERM[1]</placeTerm></place>"
+ "<publisher>PRINTER[1]</publisher><dateCreated>DATE[1]</dateCreated>"
+ "</originInfo>"
+ "<originInfo>"
+ "<issuance>continuing</issuance><frequency>daily</frequency>"
+ "</originInfo>"
// titles
+ "<titleInfo type='alternative'><title>ATITLE[0]</title></titleInfo>"
+ "<titleInfo><title>MTITLE[0]</title><subTitle>STITLE[0]</subTitle></titleInfo>"
+ "<titleInfo type='alternative' displayLabel='Klíčový název'><title>KTITLE[0]</title></titleInfo>"
+ "<titleInfo type='uniform'><title>UNSUPPORTED</title></titleInfo>"
// authors + contributors
+ "<name type='personal'>"
+ "<namePart type='family'>FamilyAuthor1</namePart>"
+ "<namePart type='given'>GivenAuthor1</namePart>"
+ "<role><roleTerm type='code'>cre</roleTerm><roleTerm type='text'>Author</roleTerm></role>"
+ "</name>"
// languages
+ "<language><languageTerm authority='iso639-2b' type='code'>cze</languageTerm></language>"
// classifications
+ "<classification authority='ddc'>DDC</classification>"
+ "<classification authority='udc'>UDC</classification>"
// keywords
+ "<subject><topic>TOPIC</topic></subject>"
// physicalDescriptions
+ "<physicalDescription><extent>EXTENT</extent><extent>SIZE</extent></physicalDescription>"
// recordOrigin
+ "<recordInfo><recordOrigin>RECORDORIGIN</recordOrigin></recordInfo>"
// note
+ "<note>NOTE</note>"
+ "</mods>";
@Test
public void testRead() {
ModsDefinition mods = ModsUtils.unmarshal(XML, ModsDefinition.class);
PeriodicalMapper instance = new PeriodicalMapper();
Periodical result = instance.map(mods);
Periodical expected = new Periodical();
expected.setIdentifiers(Arrays.asList(new IdentifierMapper.IdentifierItem(0, "type", "IDENTIFIER")));
expected.setSigla("SIGLA");
expected.setShelfLocators(ArrayMapper.toStringItemList(Arrays.asList("SHELF1", "SHELF2")));
expected.setPeriodicities(ArrayMapper.toStringItemList(Arrays.asList("daily")));
expected.setPublishers(Arrays.asList(new OriginInfoMapper.PublisherItem(
0, OriginInfoMapper.PublisherItem.Role.PUBLISHER, "PUBLISHER[0]", "DATE[0]", "PLACETERM[0]")));
expected.setPrinters(Arrays.asList(new OriginInfoMapper.PublisherItem(
1, OriginInfoMapper.PublisherItem.Role.PRINTER, "PRINTER[1]", "DATE[1]", "PLACETERM[1]")));
expected.setTitles(ArrayMapper.toStringItemList(Arrays.asList("MTITLE[0]")));
expected.setSubtitles(ArrayMapper.toStringItemList(Arrays.asList("STITLE[0]")));
expected.setAlternativeTitles(ArrayMapper.toStringItemList(Arrays.asList("ATITLE[0]")));
expected.setKeyTitles(ArrayMapper.toStringItemList(Arrays.asList("KTITLE[0]")));
expected.setAuthors(Arrays.asList(new NameMapper.NameItem(0, "FamilyAuthor1", "GivenAuthor1", NameMapper.NameItem.NameRole.AUTHOR)));
expected.setContributors(Arrays.<NameMapper.NameItem>asList());
expected.setLanguages(Arrays.asList(new LanguageMapper.LanguageItem(0, "cze")));
expected.setClassifications(Arrays.asList(new ClassificationMapper.ClassificationPair("DDC", 0, "UDC", 1)));
expected.setKeywords(ArrayMapper.toStringItemList(Arrays.asList("TOPIC")));
expected.setPhysicalDescriptions(Arrays.asList(new PhysicalDescriptionMapper.ExtentPair("EXTENT", 0, "SIZE", 1)));
expected.setRecordOrigin("RECORDORIGIN");
expected.setNote("NOTE");
assertPeriodicalEquals(expected, result);
assertEquals(expected, result);
}
public static void assertPeriodicalEquals(Periodical expected, Periodical actual) {
if (expected == null && actual == null) {
return ;
}
assertNotNull(expected);
assertNotNull(actual);
assertThat(actual.getIdentifiers(), Is.is(expected.getIdentifiers()));
assertEquals(expected.getSigla(), actual.getSigla());
assertThat(actual.getShelfLocators(), Is.is(expected.getShelfLocators()));
assertThat(actual.getPeriodicities(), Is.is(expected.getPeriodicities()));
assertThat(actual.getTitles(), Is.is(expected.getTitles()));
assertThat(actual.getSubtitles(), Is.is(expected.getSubtitles()));
assertThat(actual.getKeyTitles(), Is.is(expected.getKeyTitles()));
assertThat(actual.getAlternativeTitles(), Is.is(expected.getAlternativeTitles()));
assertThat(actual.getIdentifiers(), Is.is(expected.getIdentifiers()));
assertThat(actual.getAuthors(), Is.is(expected.getAuthors()));
assertThat(actual.getContributors(), Is.is(expected.getContributors()));
assertThat(actual.getPrinters(), Is.is(expected.getPrinters()));
assertThat(actual.getPublishers(), Is.is(expected.getPublishers()));
assertThat(actual.getLanguages(), Is.is(expected.getLanguages()));
assertThat(actual.getClassifications(), Is.is(expected.getClassifications()));
assertThat(actual.getKeywords(), Is.is(expected.getKeywords()));
assertThat(actual.getPhysicalDescriptions(), Is.is(expected.getPhysicalDescriptions()));
assertEquals(expected.getRecordOrigin(), actual.getRecordOrigin());
assertEquals(expected.getNote(), actual.getNote());
}
@Test
// XXX missing asserts
public void testWrite() throws Exception {
ModsDefinition mods = new ModsDefinition();
mods.setVersion("3.4");
PeriodicalMapper instance = new PeriodicalMapper();
Periodical p = new Periodical();
p.setIdentifiers(Arrays.asList(new IdentifierMapper.IdentifierItem("type", "IDENTIFIER")));
p.setSigla("SIGLA");
p.setShelfLocators(ArrayMapper.toStringItemList(Arrays.asList("SHELF1", "SHELF2")));
p.setPeriodicities(ArrayMapper.toStringItemList(Arrays.asList("daily")));
p.setPublishers(Arrays.asList(new OriginInfoMapper.PublisherItem(
null, OriginInfoMapper.PublisherItem.Role.PUBLISHER, "PUBLISHER[0]", "DATE[0]", "PLACETERM[0]")));
p.setPrinters(Arrays.asList(new OriginInfoMapper.PublisherItem(
null, OriginInfoMapper.PublisherItem.Role.PRINTER, "PRINTER[1]", "DATE[1]", "PLACETERM[1]")));
p.setTitles(ArrayMapper.toStringItemList(Arrays.asList("MTITLE[0]")));
p.setSubtitles(ArrayMapper.toStringItemList(Arrays.asList("STITLE[0]")));
p.setAlternativeTitles(ArrayMapper.toStringItemList(Arrays.asList("ATITLE[0]")));
p.setKeyTitles(ArrayMapper.toStringItemList(Arrays.asList("KTITLE[0]")));
p.setAuthors(Arrays.asList(new NameMapper.NameItem("FamilyAuthor1", "GivenAuthor1", NameMapper.NameItem.NameRole.AUTHOR)));
p.setContributors(Arrays.<NameMapper.NameItem>asList());
p.setLanguages(Arrays.asList(new LanguageMapper.LanguageItem(null, "cze")));
p.setClassifications(Arrays.asList(new ClassificationMapper.ClassificationPair("DDC", null, "UDC", null)));
p.setKeywords(ArrayMapper.toStringItemList(Arrays.asList("TOPIC")));
p.setPhysicalDescriptions(Arrays.asList(new PhysicalDescriptionMapper.ExtentPair("EXTENT", null, "SIZE", null)));
p.setRecordOrigin("RECORDORIGIN");
p.setNote("NOTE");
instance.map(mods, p);
String toXml = ModsUtils.toXml(mods, true);
System.out.println(toXml);
// XMLUnit.setIgnoreWhitespace(true);
//// String expected = Mods33Utils.unmarshal(PeriodicalMapperTest.class.getResource("periodical_mods.xml"), ModsDefinition.class);
//// XMLAssert.assertXMLEqual(
//// new InputSource(PeriodicalMapperTest.class.getResource("periodical_mods.xml").toExternalForm()),
//// new InputSource(new StringReader(toXml)));
// Diff diff = new Diff(
// new InputSource(PeriodicalMapperTest.class.getResource("periodical_mods.xml").toExternalForm()),
// new InputSource(new StringReader(toXml)));
// DetailedDiff detailedDiff = new DetailedDiff(diff);
// boolean similar = detailedDiff.similar();
// assertTrue(detailedDiff.toString(), similar);
//// XMLAssert.assertXMLEqual(diff, true);
//// XMLAssert.assertXMLEqual(expected, toXml);
}
}