diff --git a/Tests/Fixtures/Format/alto.xml b/Tests/Fixtures/Format/alto.xml new file mode 100644 index 0000000000..770fc554fc --- /dev/null +++ b/Tests/Fixtures/Format/alto.xml @@ -0,0 +1,66 @@ + + + + pixel + + + 2020-05-14 + + ABBYY + ABBYY FineReader Engine + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/Format/altoNoString.xml b/Tests/Fixtures/Format/altoNoString.xml new file mode 100644 index 0000000000..f3761291b8 --- /dev/null +++ b/Tests/Fixtures/Format/altoNoString.xml @@ -0,0 +1,59 @@ + + + + pixel + + + 2020-05-14 + + ABBYY + ABBYY FineReader Engine + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/Format/altoNoTextBlock.xml b/Tests/Fixtures/Format/altoNoTextBlock.xml new file mode 100644 index 0000000000..c03ea75d66 --- /dev/null +++ b/Tests/Fixtures/Format/altoNoTextBlock.xml @@ -0,0 +1,38 @@ + + + + pixel + + + 2020-05-14 + + ABBYY + ABBYY FineReader Engine + 12 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/Format/altoNoTextLine.xml b/Tests/Fixtures/Format/altoNoTextLine.xml new file mode 100644 index 0000000000..36fc3022f1 --- /dev/null +++ b/Tests/Fixtures/Format/altoNoTextLine.xml @@ -0,0 +1,48 @@ + + + + pixel + + + 2020-05-14 + + ABBYY + ABBYY FineReader Engine + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/Format/audioVideo.xml b/Tests/Fixtures/Format/audioVideo.xml new file mode 100644 index 0000000000..a949c07149 --- /dev/null +++ b/Tests/Fixtures/Format/audioVideo.xml @@ -0,0 +1,59 @@ + + + + + + + + + Color + + Phoenix Finish + Apple ProRes 4444 + + 24 + Yes + + + 1.375:1 + + 00:01:30.07 + + 24 + + + + + + + + + + + + 01:10:35.08 + + + + + + + + + + + + + + + + + + diff --git a/Tests/Fixtures/Format/modsAuthorNoAutRoleTerm.xml b/Tests/Fixtures/Format/modsAuthorNoAutRoleTerm.xml new file mode 100644 index 0000000000..645502e814 --- /dev/null +++ b/Tests/Fixtures/Format/modsAuthorNoAutRoleTerm.xml @@ -0,0 +1,126 @@ + + + + Odol-Mundwasser, 3 Werbespots + + + + SAVE: Beispiel-Kollektion + + + + 2180770-X + + Stiftung Deutsches Hygiene-Museum + + oth + + + + AnonymousGiven1 AnonymousFamily1 + + + AnonymousGiven2 + AnonymousFamily2 + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 2019 + + + ger + + + positiv, farbig, 24 fps, Bildseitenverhältnis 1,375:1, 2048 px horizontal, Codec: Apple ProRes (HQ) + 4444, Container: Quicktime .mov + + access + video/quicktime + 1 Online-Ressource (1 min, 30 s) + reformatted digital + + [Inhaltsbeschreibung] + + + Odol-Mundwasser, 3 Werbespots + + + 2180770-X + + Stiftung Deutsches Hygiene-Museum + + oth + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 1965 + 1975 + + + ger + + + Nativ-Scan mit Overscan, Videocodec FFV1 Version 3, Container: Matroska + preservation + video/quicktime + 1 Online-Ressource (1 min, 16 s) + digitized other analog + Acetat mit Lichtton, Umkehr-Positiv, farbig ; 16 mm + + Bearbeitete digitale Ausgabe eines Exemplars aus dem Bestand der Stiftung + Deutsches Hygiene-Museum Dresden + + Die Digitalisierung des Films erfolgte im Rahmen des Programms „Sicherung des + audiovisuellen Erbes in Sachsen“ des Filmverband Sachsen (2019) und der Sächsischen Landesbibliothek – + Staats- und Universitätsbibliothek Dresden in Kooperation mit: Stiftung Deutsches Hygiene-Museum Dresden, + gefördert durch: Sächsisches Staatsministerium für Wissenschaft und Kunst + + 1703800354 + + DE-14 + + Odol 2915 (Rolle 2) + + + 1703800435 + http://digital.slub-dresden.de/id1703800435 + urn:nbn:de:bsz:14-db-id17038004351 + + DE-14 + + https://digital.slub-dresden.de/id1703800435 + + + Public Domain Mark 1.0 + + Open Access + + + + + oai:de:slub-dresden:db:id-1703800435 + + + + diff --git a/Tests/Fixtures/Format/modsAuthorWithAutRoleTerm.xml b/Tests/Fixtures/Format/modsAuthorWithAutRoleTerm.xml new file mode 100644 index 0000000000..2f6d26f8c2 --- /dev/null +++ b/Tests/Fixtures/Format/modsAuthorWithAutRoleTerm.xml @@ -0,0 +1,151 @@ + + + + + Jack + May + I + District Commissioner + Préfet de région + + aut + + + + + John Paul + II + Pope + 1920-2005 + + aut + + + + + Mattox + Douglas E. + 1947- + + aut + + + + + Woolf, Virginia + 1882-1941 + + aut + + + + + Alterman, Eric + Eric Alterman + + aut + + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 2019 + + + + ger + + + positiv, farbig, 24 fps, Bildseitenverhältnis 1,375:1, 2048 px horizontal, Codec: Apple ProRes (HQ) + 4444, Container: Quicktime .mov + + access + video/quicktime + 1 Online-Ressource (1 min, 30 s) + reformatted digital + + [Inhaltsbeschreibung] + + + Odol-Mundwasser, 3 Werbespots + + + 2180770-X + + Stiftung Deutsches Hygiene-Museum + + oth + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 1965 + 1975 + + + ger + + + Nativ-Scan mit Overscan, Videocodec FFV1 Version 3, Container: Matroska + preservation + video/quicktime + 1 Online-Ressource (1 min, 16 s) + digitized other analog + Acetat mit Lichtton, Umkehr-Positiv, farbig ; 16 mm + + Bearbeitete digitale Ausgabe eines Exemplars aus dem Bestand der Stiftung + Deutsches Hygiene-Museum Dresden + + Die Digitalisierung des Films erfolgte im Rahmen des Programms „Sicherung des + audiovisuellen Erbes in Sachsen“ des Filmverband Sachsen (2019) und der Sächsischen Landesbibliothek – + Staats- und Universitätsbibliothek Dresden in Kooperation mit: Stiftung Deutsches Hygiene-Museum Dresden, + gefördert durch: Sächsisches Staatsministerium für Wissenschaft und Kunst + + 1703800354 + + DE-14 + + Odol 2915 (Rolle 2) + + + 1703800435 + http://digital.slub-dresden.de/id1703800435 + urn:nbn:de:bsz:14-db-id17038004351 + + DE-14 + + https://digital.slub-dresden.de/id1703800435 + + + Public Domain Mark 1.0 + + Open Access + + + + + oai:de:slub-dresden:db:id-1703800435 + + + + diff --git a/Tests/Fixtures/Format/modsOriginInfo.xml b/Tests/Fixtures/Format/modsOriginInfo.xml new file mode 100644 index 0000000000..987d3fd95b --- /dev/null +++ b/Tests/Fixtures/Format/modsOriginInfo.xml @@ -0,0 +1,134 @@ + + + + + Alterman, Eric + Eric Alterman + + aut + + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 2019 + + + + + Hamburg + + 2018 + + + + + Berlin + + 2021 + + + + + München + + 2020 + + + + ger + + + positiv, farbig, 24 fps, Bildseitenverhältnis 1,375:1, 2048 px horizontal, Codec: Apple ProRes (HQ) + 4444, Container: Quicktime .mov + + access + video/quicktime + 1 Online-Ressource (1 min, 30 s) + reformatted digital + + [Inhaltsbeschreibung] + + + Odol-Mundwasser, 3 Werbespots + + + 2180770-X + + Stiftung Deutsches Hygiene-Museum + + oth + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 1965 + 1975 + + + ger + + + Nativ-Scan mit Overscan, Videocodec FFV1 Version 3, Container: Matroska + preservation + video/quicktime + 1 Online-Ressource (1 min, 16 s) + digitized other analog + Acetat mit Lichtton, Umkehr-Positiv, farbig ; 16 mm + + Bearbeitete digitale Ausgabe eines Exemplars aus dem Bestand der Stiftung + Deutsches Hygiene-Museum Dresden + + Die Digitalisierung des Films erfolgte im Rahmen des Programms „Sicherung des + audiovisuellen Erbes in Sachsen“ des Filmverband Sachsen (2019) und der Sächsischen Landesbibliothek – + Staats- und Universitätsbibliothek Dresden in Kooperation mit: Stiftung Deutsches Hygiene-Museum Dresden, + gefördert durch: Sächsisches Staatsministerium für Wissenschaft und Kunst + + 1703800354 + + DE-14 + + Odol 2915 (Rolle 2) + + + 1703800435 + http://digital.slub-dresden.de/id1703800435 + urn:nbn:de:bsz:14-db-id17038004351 + + DE-14 + + https://digital.slub-dresden.de/id1703800435 + + + Public Domain Mark 1.0 + + Open Access + + + + + oai:de:slub-dresden:db:id-1703800435 + + + + diff --git a/Tests/Fixtures/Format/modsOriginInfoWithEditionElectonicEd.xml b/Tests/Fixtures/Format/modsOriginInfoWithEditionElectonicEd.xml new file mode 100644 index 0000000000..d1f9ffe4f6 --- /dev/null +++ b/Tests/Fixtures/Format/modsOriginInfoWithEditionElectonicEd.xml @@ -0,0 +1,138 @@ + + + + + Alterman, Eric + Eric Alterman + + aut + + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 2019 + [Electronic ed.] + + + + + Hamburg + + 2018 + [Electronic ed.] + + + + + Berlin + + 2021 + [Electronic ed.] + + + + + München + + 2020 + [Electronic ed.] + + + + ger + + + positiv, farbig, 24 fps, Bildseitenverhältnis 1,375:1, 2048 px horizontal, Codec: Apple ProRes (HQ) + 4444, Container: Quicktime .mov + + access + video/quicktime + 1 Online-Ressource (1 min, 30 s) + reformatted digital + + [Inhaltsbeschreibung] + + + Odol-Mundwasser, 3 Werbespots + + + 2180770-X + + Stiftung Deutsches Hygiene-Museum + + oth + + + Film + Werbefilm + + + Dresden + + SLUB + Filmverband Sachsen + Stiftung Deutsches Hygiene-Museum + 1965 + 1975 + + + ger + + + Nativ-Scan mit Overscan, Videocodec FFV1 Version 3, Container: Matroska + preservation + video/quicktime + 1 Online-Ressource (1 min, 16 s) + digitized other analog + Acetat mit Lichtton, Umkehr-Positiv, farbig ; 16 mm + + Bearbeitete digitale Ausgabe eines Exemplars aus dem Bestand der Stiftung + Deutsches Hygiene-Museum Dresden + + Die Digitalisierung des Films erfolgte im Rahmen des Programms „Sicherung des + audiovisuellen Erbes in Sachsen“ des Filmverband Sachsen (2019) und der Sächsischen Landesbibliothek – + Staats- und Universitätsbibliothek Dresden in Kooperation mit: Stiftung Deutsches Hygiene-Museum Dresden, + gefördert durch: Sächsisches Staatsministerium für Wissenschaft und Kunst + + 1703800354 + + DE-14 + + Odol 2915 (Rolle 2) + + + 1703800435 + http://digital.slub-dresden.de/id1703800435 + urn:nbn:de:bsz:14-db-id17038004351 + + DE-14 + + https://digital.slub-dresden.de/id1703800435 + + + Public Domain Mark 1.0 + + Open Access + + + + + oai:de:slub-dresden:db:id-1703800435 + + + + diff --git a/Tests/Unit/Format/AltoTest.php b/Tests/Unit/Format/AltoTest.php new file mode 100644 index 0000000000..2eaf12e727 --- /dev/null +++ b/Tests/Unit/Format/AltoTest.php @@ -0,0 +1,106 @@ +getRawText($xml); + + $this->assertEquals('Bürgertum und Bürgerlichkeit in Dresden DRESDNER HEFTE', $rawText); + } + + /** + * @test + * @group extract data + */ + public function getTextAsMiniOcr(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/alto.xml'); + $alto = new Alto(); + + $rawText = $alto->getTextAsMiniOcr($xml); + + $miniOCR = << + + + Bürgertum + und + + + Bürgerlichkeit + in + Dresden + + + + + DRESDNER + + + HEFTE + + + + XML; + + $this->assertXmlStringEqualsXmlString($miniOCR, $rawText); + } + + /** + * @test + * @group extract data + */ + public function getTextAsMiniOcrNoTextBlock(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/altoNoTextBlock.xml'); + $alto = new Alto(); + + $rawText = $alto->getTextAsMiniOcr($xml); + + $this->assertEquals('', $rawText); + } + + /** + * @test + * @group extract data + */ + public function getTextAsMiniOcrNoTextline(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/altoNoTextLine.xml'); + $alto = new Alto(); + + $rawText = $alto->getTextAsMiniOcr($xml); + + $this->assertXmlStringEqualsXmlString('', $rawText); + } + + /** + * @test + * @group extract data + */ + public function getTextAsMiniOcrNoString(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/altoNoString.xml'); + $alto = new Alto(); + + $rawText = $alto->getTextAsMiniOcr($xml); + + $this->assertXmlStringEqualsXmlString( + '', + $rawText + ); + } +} diff --git a/Tests/Unit/Format/AudioVideoMDTest.php b/Tests/Unit/Format/AudioVideoMDTest.php new file mode 100644 index 0000000000..bc4d5b021b --- /dev/null +++ b/Tests/Unit/Format/AudioVideoMDTest.php @@ -0,0 +1,109 @@ +metadata = [ + 'duration' => [], + 'video_duration' => [], + 'audio_duration' => [] + ]; + } + + /** + * @test + * @group extractMetadata + */ + public function canExtractVideoDuration(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/audioVideo.xml'); + $audioVideoMD = new AudioVideoMD(); + + $videoXml = $xml->xpath('//videomd:VIDEOMD')[0]; + + $audioVideoMD->extractMetadata($videoXml,$this->metadata); + + $this->assertEquals( + ["00:01:30.07"], + $this->metadata['duration'] + ); + + $this->assertEquals( + ["00:01:30.07"], + $this->metadata['video_duration'] + ); + + $this->assertEquals( + [], + $this->metadata['audio_duration'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function canExtractAudioDuration(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/audioVideo.xml'); + $audioVideoMD = new AudioVideoMD(); + + $audioXml = $xml->xpath('//audiomd:AUDIOMD')[0]; + + $audioVideoMD->extractMetadata($audioXml,$this->metadata); + + $this->assertEquals( + ["01:10:35.08"], + $this->metadata['duration'] + ); + + $this->assertEquals( + [], + $this->metadata['video_duration'] + ); + + $this->assertEquals( + ["01:10:35.08"], + $this->metadata['audio_duration'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function noDuration(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/audioVideo.xml'); + $audioVideoMD = new AudioVideoMD(); + + $videoXml = $xml->xpath('//audiomd:AUDIOMD')[1]; + + $audioVideoMD->extractMetadata($videoXml,$this->metadata); + + $this->assertEquals( + [], + $this->metadata['duration'] + ); + + $this->assertEquals( + [], + $this->metadata['audio_duration'] + ); + + $this->assertEquals( + [], + $this->metadata['video_duration'] + ); + } +} diff --git a/Tests/Unit/Format/ModsTest.php b/Tests/Unit/Format/ModsTest.php new file mode 100644 index 0000000000..af9d016cb8 --- /dev/null +++ b/Tests/Unit/Format/ModsTest.php @@ -0,0 +1,204 @@ +metadata = [ + 'title' => [], + 'title_sorting' => [], + 'author' => [], + 'place' => [], + 'place_sorting' => [0 => []], + 'year' => [], + 'prod_id' => [], + 'record_id' => [], + 'opac_id' => [], + 'union_id' => [], + 'urn' => [], + 'purl' => [], + 'type' => [], + 'volume' => [], + 'volume_sorting' => [], + 'license' => [], + 'terms' => [], + 'restrictions' => [], + 'out_of_print' => [], + 'rights_info' => [], + 'collection' => [], + 'owner' => [], + 'mets_label' => [], + 'mets_orderlabel' => [], + 'document_format' => ['METS'], + 'year_sorting' => [0 => []], + ]; + + } + + /** + * @test + * @group extractMetadata + */ + public function extractAuthorsIfNoAutRoleTermAssigned(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsAuthorNoAutRoleTerm.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + + $this->assertEquals( + [ + "AnonymousGiven1 AnonymousFamily1", + "AnonymousFamily2, AnonymousGiven2" + ], + $this->metadata['author'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function extractAuthorsWithAutRoleTermAssigned(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsAuthorWithAutRoleTerm.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + $this->assertEquals( + [ + 'May, Jack, I', + 'John Paul, Pope, 1920-2005', + 'Mattox, Douglas E., 1947-', + '1882-1941, Woolf, Virginia', + 'Eric Alterman' + ], + $this->metadata['author'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function extractPlaces(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsOriginInfo.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + + $this->assertEquals( + [ + "Dresden", + "Hamburg", + "Berlin", + "München", + ], + $this->metadata['place'] + ); + + $this->assertEquals( + [ + "Dresden", + ], + $this->metadata['place_sorting'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function extractYears(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsOriginInfo.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + + $this->assertEquals( + [ + "2019", + "2018", + "2021", + "2020", + ], + $this->metadata['year'] + ); + + $this->assertEquals( + [ + "2019", + ], + $this->metadata['year_sorting'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function extractPlacesWithElectronicEdInside(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsOriginInfoWithEditionElectonicEd.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + + $this->assertEquals( + [ + "Dresden", + "Hamburg", + "Berlin", + "München", + ], + $this->metadata['place'] + ); + + $this->assertEquals( + [ + "Dresden", + ], + $this->metadata['place_sorting'] + ); + } + + /** + * @test + * @group extractMetadata + */ + public function extractYearsWithElectronicEdInside(): void + { + $xml = simplexml_load_file( __DIR__ . '/../../Fixtures/Format/modsOriginInfoWithEditionElectonicEd.xml'); + $mods = new Mods(); + + $mods->extractMetadata($xml,$this->metadata); + + $this->assertEquals( + [ + "2019", + "2018", + "2021", + "2020", + ], + $this->metadata['year'] + ); + + $this->assertEquals( + [ + "2019", + ], + $this->metadata['year_sorting'] + ); + } +} diff --git a/Tests/Unit/Format/TeiHeaderTest.php b/Tests/Unit/Format/TeiHeaderTest.php new file mode 100644 index 0000000000..c6a1a3e2c3 --- /dev/null +++ b/Tests/Unit/Format/TeiHeaderTest.php @@ -0,0 +1,30 @@ +metadata = []; + } + + /** + * @test + * @group extractMetadata + */ + public function extract(): void + { + $teiHeader = new TeiHeader(); + //$teiHeader->extractMetadata(); + //TODO: TeiHeader class not fully implemented. + $this->assertTrue(false); + } +}