diff -r faff38055a07 -r 8af5ed0521a2 server/src/tests/libraries/Mergers/CocoonTextRdfMergerTest.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/tests/libraries/Mergers/CocoonTextRdfMergerTest.php Wed Feb 03 00:40:35 2016 +0100 @@ -0,0 +1,365 @@ + << . + @prefix edm: . + @prefix dc11: . + @prefix olac: . + @prefix dc: . + @prefix geo: . + @prefix xsd: . + @prefix skos: . + @prefix owl: . + + + a ore:Aggregation ; + edm:aggregatedCHO ; + edm:provider "Corpus de la Parole"@fr ; + edm:dataProvider "Laboratoire de langues et civilisations à tradition orale" ; + edm:isShownAt ; + edm:isShownBy ; + edm:rights ; + edm:hasView , . + + + a edm:ProvidedCHO ; + dc11:description "Voilà pourquoi le bernard-l'hermite, aujourd'hui, se cache dans les coquilles vides qu'il trouve, alors que le crabe de cocotier n'a pas honte de se promener tout nu."@fr ; + dc11:language ; + dc11:publisher "Laboratoire de langues et civilisations à tradition orale" ; + dc11:rights "Copyright (c) Moyse-Faurie, Claire" ; + dc11:type , "primary_text"^^olac:linguistic-type, "narrative"^^olac:discourse-type, ; + dc:license ; + dc11:subject , , ; + dc11:title "The two hermit crabs and the coconut crab"@en ; + dc:accessRights "Freely available for non-commercial use" ; + dc:extent "PT2M35S" ; + edm:isGatheredInto , ; + olac:depositor ; + dc11:contributor , "Idakote, Félicien" ; + olac:researcher ; + olac:speaker "Idakote, Félicien" ; + dc:available "2010-10-23"^^dc:W3CDTF ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF ; + dc:modified "2012-03-25"^^dc:W3CDTF ; + dc:spatial [ + a edm:Place ; + geo:lat "-20.46667"^^xsd:float ; + geo:long "166.65"^^xsd:float ; + skos:note "NC"^^dc:ISO3166, "New Caledonia, Ohnyat (Ouvéa)" ; + owl:sameAs + ] . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/x-wav"^^dc:IMT ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/x-wav"^^dc:IMT ; + edm:isDerivativeOf ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/mpeg"^^dc:IMT ; + edm:isDerivativeOf ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . +EOT + , + 'SOUND_NO_MOD' => << . + @prefix edm: . + @prefix dc11: . + @prefix olac: . + @prefix dc: . + @prefix geo: . + @prefix xsd: . + @prefix skos: . + @prefix owl: . + + + a ore:Aggregation ; + edm:aggregatedCHO ; + edm:provider "Corpus de la Parole"@fr ; + edm:dataProvider "Laboratoire de langues et civilisations à tradition orale" ; + edm:isShownAt ; + edm:isShownBy ; + edm:rights ; + edm:hasView , . + + + a edm:ProvidedCHO ; + dc11:description "Voilà pourquoi le bernard-l'hermite, aujourd'hui, se cache dans les coquilles vides qu'il trouve, alors que le crabe de cocotier n'a pas honte de se promener tout nu."@fr ; + dc11:language ; + dc11:publisher "Laboratoire de langues et civilisations à tradition orale" ; + dc11:rights "Copyright (c) Moyse-Faurie, Claire" ; + dc11:type , "primary_text"^^olac:linguistic-type, "narrative"^^olac:discourse-type, ; + dc:license ; + dc11:subject , , ; + dc11:title "The two hermit crabs and the coconut crab"@en ; + dc:accessRights "Freely available for non-commercial use" ; + dc:extent "PT2M35S" ; + edm:isGatheredInto , ; + olac:depositor ; + dc11:contributor , "Idakote, Félicien" ; + olac:researcher ; + olac:speaker "Idakote, Félicien" ; + dc:available "2010-10-23"^^dc:W3CDTF ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF ; + dc:spatial [ + a edm:Place ; + geo:lat "-20.46667"^^xsd:float ; + geo:long "166.65"^^xsd:float ; + skos:note "NC"^^dc:ISO3166, "New Caledonia, Ohnyat (Ouvéa)" ; + owl:sameAs + ] . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/x-wav"^^dc:IMT ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/x-wav"^^dc:IMT ; + edm:isDerivativeOf ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . + + + a edm:WebResources ; + dc:extent "PT2M35S" ; + dc11:format "audio/mpeg"^^dc:IMT ; + edm:isDerivativeOf ; + dc:created "1997-08-29"^^dc:W3CDTF ; + dc:issued "2010-10-23T00:08:27+02:00"^^dc:W3CDTF . +EOT + , + 'TEXT' => << . + @prefix edm: . + @prefix dc11: . + @prefix olac: . + @prefix dc: . + @prefix skos: . + + + a ore:Aggregation ; + edm:aggregatedCHO ; + edm:provider "Corpus de la Parole"@fr ; + edm:dataProvider ; + edm:isShownAt ; + edm:isShownBy ; + edm:rights ; + edm:hasView , . + + + a edm:ProvidedCHO ; + dc11:description "Voilà pourquoi le bernard-l'hermite, aujourd'hui, se cache dans les coquilles vides qu'il trouve, alors que le crabe de cocotier n'a pas honte de se promener tout nu."@fr ; + dc11:language ; + dc11:publisher ; + dc11:rights "Copyright (c) Moyse-Faurie, Claire" ; + dc11:type "primary_text"^^olac:linguistic-type, , "narrative"^^olac:discourse-type ; + dc:license ; + dc11:subject ; + dc11:title "The two hermit crabs and the coconut crab"@en ; + dc:accessRights "Freely available for non-commercial use" ; + edm:isGatheredInto , ; + dc:alternative "Les deux bernard-l'hermite et le crabe de cocotier"@fr ; + olac:depositor ; + dc11:contributor , "Moyse-Faurie, Claire", "Idakote, Félicien" ; + olac:researcher "Moyse-Faurie, Claire" ; + olac:speaker "Idakote, Félicien" ; + dc:available "2011-02-05"^^dc:W3CDTF ; + dc:issued "2011-02-05T23:22:23+01:00"^^dc:W3CDTF ; + dc:modified "2002-02-20"^^dc:W3CDTF ; + dc:spatial [ + a edm:Place ; + skos:note "NC"^^dc:ISO3166, "New Caledonia, Ohnyat (Ouvéa)" + ] . + + + a edm:WebResources ; + dc11:format "application/xml"^^dc:IMT ; + dc:issued "2011-02-05T23:22:23+01:00"^^dc:W3CDTF . + + + a edm:WebResources ; + dc11:format "application/xhtml+xml"^^dc:IMT ; + dc:issued "2011-02-05T23:22:23+01:00"^^dc:W3CDTF . +EOT + ]; + + + private $inputGraphes = []; + private $resGraph = []; + + function __construct(string $name = null) { + parent::__construct($name); + } + + public function setUp() { + parent::setUp(); + + foreach(CocoonTextRdfMergerTest::TEST_INPUT_DOCS as $key => $inputDoc) { + $this->inputGraphes[$key] = new Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND", $inputDoc); + } + + $merger = new CocoonTextRdfMerger(); + $this->resGraph['SOUND_TEXT'] = $merger->mergeGraph($this->inputGraphes['SOUND'], $this->inputGraphes['TEXT']); + $merger = new CocoonSoundRdfMerger(); + $this->resGraph['TEXT_SOUND'] = $merger->mergeGraph($this->inputGraphes['TEXT'], $this->inputGraphes['SOUND']); + $merger = new CocoonTextRdfMerger(); + $this->resGraph['SOUND_NO_MOD_TEXT'] = $merger->mergeGraph($this->inputGraphes['SOUND_NO_MOD'], $this->inputGraphes['TEXT']); + $merger = new CocoonSoundRdfMerger(); + $this->resGraph['TEXT_SOUND_NO_MOD'] = $merger->mergeGraph($this->inputGraphes['TEXT'], $this->inputGraphes['SOUND_NO_MOD']); + } + + public function tearDown() { + parent::tearDown(); + } + + /** + * Just test that the construct and setup are ok + * + * @return void + */ + public function testInit() + { + $this->assertTrue(true); + //echo $this->resGraph->serialise('turtle'); + } + + /** + * Test merge modified merge TEXT into SOUND + * + * @return void + */ + public function testModifiedSoundText() { + + $resGraph = $this->resGraph["SOUND_TEXT"]; + + $providedCHO = $resGraph->get('edm:ProvidedCHO', '^rdf:type'); + $baseNode = $this->inputGraphes['SOUND']->get('edm:ProvidedCHO', '^rdf:type'); + $this->assertNotNull($providedCHO); + $this->assertNotNull($baseNode); + + $outputValuesStr = []; + foreach($providedCHO->all($resGraph->resource("http://purl.org/dc/terms/modified")) as $outputValue) { + array_push($outputValuesStr, strval($outputValue)); + } + $this->assertNotEmpty($outputValuesStr, "we must found some values to test http://purl.org/dc/terms/modified"); + foreach ($baseNode->all($this->inputGraphes['SOUND']->resource("http://purl.org/dc/terms/modified")) as $value) { + $this->assertContains(strval($value), $outputValuesStr, "http://purl.org/dc/terms/modified not found in output graph"); + } + + } + + /** + * Test one to one mapping + * + * @return void + */ + public function testModifiedTextSound() { + + $resGraph = $this->resGraph["TEXT_SOUND"]; + + $providedCHO = $resGraph->get('edm:ProvidedCHO', '^rdf:type'); + $baseNode = $this->inputGraphes['SOUND']->get('edm:ProvidedCHO', '^rdf:type'); + $this->assertNotNull($providedCHO); + $this->assertNotNull($baseNode); + + $outputValuesStr = []; + foreach($providedCHO->all($resGraph->resource("http://purl.org/dc/terms/modified")) as $outputValue) { + array_push($outputValuesStr, strval($outputValue)); + } + $this->assertNotEmpty($outputValuesStr, "we must found some values to test http://purl.org/dc/terms/modified"); + foreach ($baseNode->all($this->inputGraphes['SOUND']->resource("http://purl.org/dc/terms/modified")) as $value) { + $this->assertContains(strval($value), $outputValuesStr, "http://purl.org/dc/terms/modified not found in output graph"); + } + + } + + /** + * Test one to one mapping + * + * @return void + */ + public function testSoundNoModifiedText() { + + $resGraph = $this->resGraph["SOUND_NO_MOD_TEXT"]; + + $providedCHO = $resGraph->get('edm:ProvidedCHO', '^rdf:type'); + $baseNode = $this->inputGraphes['TEXT']->get('edm:ProvidedCHO', '^rdf:type'); + $this->assertNotNull($providedCHO); + $this->assertNotNull($baseNode); + + $outputValuesStr = []; + foreach($providedCHO->all($resGraph->resource("http://purl.org/dc/terms/modified")) as $outputValue) { + array_push($outputValuesStr, strval($outputValue)); + } + $this->assertNotEmpty($outputValuesStr, "we must found some values to test http://purl.org/dc/terms/modified"); + // must contain the TEXT modified value (since SOUND has none) + foreach ($baseNode->all($this->inputGraphes['TEXT']->resource("http://purl.org/dc/terms/modified")) as $value) { + $this->assertContains(strval($value), $outputValuesStr, "http://purl.org/dc/terms/modified not found in output graph"); + } + + } + + + /** + * Test one to one mapping + * + * @return void + */ + public function testTextSoundNoModified() { + + $resGraph = $this->resGraph["TEXT_SOUND_NO_MOD"]; + + $providedCHO = $resGraph->get('edm:ProvidedCHO', '^rdf:type'); + $baseNode = $this->inputGraphes['TEXT']->get('edm:ProvidedCHO', '^rdf:type'); + $this->assertNotNull($providedCHO); + $this->assertNotNull($baseNode); + + $outputValuesStr = []; + foreach($providedCHO->all($resGraph->resource("http://purl.org/dc/terms/modified")) as $outputValue) { + array_push($outputValuesStr, strval($outputValue)); + } + $this->assertNotEmpty($outputValuesStr, "we must found some values to test http://purl.org/dc/terms/modified"); + // must contain the TEXT modified value (since SOUND has none) + foreach ($baseNode->all($this->inputGraphes['TEXT']->resource("http://purl.org/dc/terms/modified")) as $value) { + $this->assertContains(strval($value), $outputValuesStr, "http://purl.org/dc/terms/modified not found in output graph"); + } + + } + + +}