Author: lgiessmann Date: Mon May 9 03:59:00 2011 New Revision: 458
Log: JTM: added unit-tests fot the JTM-import of topic-stubs
Modified: trunk/src/unit_tests/jtm_test.lisp
Modified: trunk/src/unit_tests/jtm_test.lisp ============================================================================== --- trunk/src/unit_tests/jtm_test.lisp (original) +++ trunk/src/unit_tests/jtm_test.lisp Mon May 9 03:59:00 2011 @@ -40,7 +40,8 @@ :test-import-variants :test-import-occurrences :test-import-names - :test-make-instance-of-association)) + :test-make-instance-of-association + :test-import-topics))
(in-package :jtm-test) @@ -1553,8 +1554,8 @@
(test test-import-names - "Tests the functions import-name-from-jtm-string and - import-constructs-from-jtm-strings." + "Tests the functions import-name-from-jtm-list and + import-constructs-from-jtm-lists." (with-fixture with-empty-db ("data_base") (let* ((prefixes (list (list :pref "xsd" :value *xsd-ns*) (list :pref "pref_1" :value *xsd-ns*) @@ -1709,12 +1710,143 @@ tt (elephant:get-instance-by-value 'PersistentIdc 'd:uri *type-psi*) :revision 200) (signals exceptions:missing-reference-error - (jtm::make-instance-of-association top-1 top-3 (list tm) :revision 200)) - ))) + (jtm::make-instance-of-association top-1 top-3 (list tm) :revision 200))))) + + +(test test-import-topics + "Tests the functions import-topic-stub-from-jtm-list, + and import-topic-stubs-from-jtm-lists." + (with-fixture with-empty-db ("data_base") + (let* ((prefixes (list (list :pref "xsd" :value *xsd-ns*) + (list :pref "pref_1" :value *xsd-ns*) + (list :pref "pref_2" :value "http://some.where/"))) + (j-top-1 "{"version":"1.1","prefixes":{"pref_1":"http:\/\/www.w3.org\/2001\/XMLSchema#","xsd":"http:\/\/www.w3.org\/2001\/XMLSchema#","pref_2":"http:\/\/some.where\/"},"subject_identifiers":["[pref_2:psi-1]","[pref_2:psi-2]"],"subject_locators":["[pref_2:sl-2]"],"item_identifiers":["[pref_2:ii-4]"],"instance_of":null,"item_type":"topic","names":[{"item_identifiers":null,"value":"name-1","type":null,"scope":null,"variants":null,"reifier":null},{"item_identifiers":null,"value":"name-2","type":null,"scope":["sl:[pref_2:sl-1]"],"variants":[{"item_identifiers":null,"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#string","value":"var-1","scope":["ii:[pref_2:ii-1]"],"reifier":null}],"reifier":null}],"occurrences":[{"item_identifiers":["[pref_2:ii-2]"],"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#string","type":"sl:[pref_2:sl-1]","value":"occ-1","scope":["si:[pref_2:psi-1]"],"reifier":"ii:[pref_2:ii-1]"},{"item_identifiers":null,"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#anyURI","type":"si:[pref_2:psi-1]","value":"http:\/\/any.uri","scope":null,"reifier":null}]}") + (j-top-2 "{"version":"1.0","subject_identifiers":["http:\/\/some.where\/psi-1","http:\/\/some.where\/psi-2"],"subject_locators":["http:\/\/some.where\/sl-2"],"item_identifiers":["http:\/\/some.where\/ii-4"],"item_type":"topic","parent":["ii:http:\/\/some.where\/ii-3"],"names":[{"item_identifiers":null,"value":"name-1","type":null,"scope":null,"variants":null,"reifier":null},{"item_identifiers":null,"value":"name-2","type":null,"scope":["sl:http:\/\/some.where\/sl-1"],"variants":[{"item_identifiers":null,"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#string","value":"var-1","scope":["ii:http:\/\/some.where\/ii-1"],"reifier":null}],"reifier":null}],"occurrences":[{"item_identifiers":["http:\/\/some.where\/ii-2"],"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#string","type":"sl:http:\/\/some.where\/sl-1","value":"occ-1","scope":["si:http:\/\/some.where\/psi-1"],"reifier":"ii:http:\/\/some.where\/ii-1"},{"item_identifiers":null,"datatype":"http:\/\/www.w3.org\/2001\/XMLSchema#anyURI","type":"si:http:\/\/some.where\/psi-1","value":"http:\/\/any.uri","scope":null,"reifier":null}]}") + (j-top-3 "{"subject_identifiers":["http:\/\/some.where\/tmsparql\/author"],"subject_locators":null,"item_identifiers":null,"names":null,"occurrences":null}") + (j-top-4 "{"subject_identifiers":["http:\/\/some.where\/tmsparql\/first-name"],"subject_locators":null,"item_identifiers":null,"names":null,"occurrences":null}") + (j-top-5 "{"subject_identifiers":null,"subject_locators":null,"item_identifiers":["http:\/\/some.where\/ii\/goethe-name-reifier"],"names":null,"occurrences":null}") + (tm-1 (make-construct + 'TopicMapC :start-revision 100 + :item-identifiers + (list (make-construct 'ItemIdentifierC + :uri "http://some.where/tm-1")))) + (tm-2 (make-construct + 'TopicMapC :start-revision 100 + :item-identifiers + (list (make-construct 'ItemIdentifierC + :uri "http://some.where/tm-2"))))) + (is-false (elephant:get-instances-by-class 'd:TopicC)) + (is (= (length (elephant:get-instances-by-class 'ItemIdentifierC)) 2)) + (let ((top-1 (jtm::import-topic-stub-from-jtm-list + (json:decode-json-from-string j-top-1) + (list tm-1 tm-2) :revision 100 :prefixes prefixes))) + (is (= (length (elephant:get-instances-by-class 'TopicC)) 1)) + (is-false (elephant:get-instances-by-class 'NameC)) + (is-false (elephant:get-instances-by-class 'VariantC)) + (is-false (elephant:get-instances-by-class 'RoleC)) + (is-false (elephant:get-instances-by-class 'AssociationC)) + (is-false (elephant:get-instances-by-class 'OccurrenceC)) + (is (= (length (elephant:get-instances-by-class 'PersistentIdC)) 2)) + (is (= (length (elephant:get-instances-by-class 'ItemIdentifierC)) 3)) + (is (= (length (elephant:get-instances-by-class 'SubjectLocatorC)) 1)) + (is-false (set-exclusive-or (list "http://some.where/psi-1" + "http://some.where/psi-2") + (map 'list #'d:uri (psis top-1 :revision 0)) + :test #'string=)) + (is-false (set-exclusive-or + (list "http://some.where/sl-2") + (map 'list #'d:uri (locators top-1 :revision 0)) + :test #'string=)) + (is-false (set-exclusive-or + (list "http://some.where/ii-4") + (map 'list #'d:uri (item-identifiers top-1 :revision 0)) + :test #'string=)) + (is-true (find tm-1 (in-topicmaps top-1 :revision 0))) + (is-true (find tm-2 (in-topicmaps top-1 :revision 0)))) + (let ((top-2 (jtm::import-topic-stub-from-jtm-list + (json:decode-json-from-string j-top-2) + (list tm-1 tm-2) :revision 200))) + (is (= (length (elephant:get-instances-by-class 'TopicC)) 1)) + (is-false (elephant:get-instances-by-class 'NameC)) + (is-false (elephant:get-instances-by-class 'VariantC)) + (is-false (elephant:get-instances-by-class 'RoleC)) + (is-false (elephant:get-instances-by-class 'AssociationC)) + (is-false (elephant:get-instances-by-class 'OccurrenceC)) + (is (= (length (elephant:get-instances-by-class 'PersistentIdC)) 2)) + (is (= (length (elephant:get-instances-by-class 'ItemIdentifierC)) 3)) + (is (= (length (elephant:get-instances-by-class 'SubjectLocatorC)) 1)) + (is-false (set-exclusive-or (list "http://some.where/psi-1" + "http://some.where/psi-2") + (map 'list #'d:uri (psis top-2 :revision 200)) + :test #'string=)) + (is-false (set-exclusive-or + (list "http://some.where/sl-2") + (map 'list #'d:uri (locators top-2 :revision 200)) + :test #'string=)) + (is-false (set-exclusive-or + (list "http://some.where/ii-4") + (map 'list #'d:uri (item-identifiers top-2 :revision 200)) + :test #'string=)) + (is-true (find tm-1 (in-topicmaps top-2 :revision 200))) + (is-true (find tm-2 (in-topicmaps top-2 :revision 200)))) + (let ((tops-3-4-5 + (jtm::import-topic-stubs-from-jtm-lists + (list (json:decode-json-from-string j-top-3) + (json:decode-json-from-string j-top-4) + (json:decode-json-from-string j-top-5)) + (list tm-1 tm-2) :revision 200))) + (is (= (length tops-3-4-5) 3)) + (is (= (length (elephant:get-instances-by-class 'TopicC)) 4)) + (is (= (length (elephant:get-instances-by-class 'PersistentIdC)) 4)) + (is (= (length (elephant:get-instances-by-class 'ItemIdentifierC)) 4)) + (is (= (length (elephant:get-instances-by-class 'SubjectLocatorC)) 1)) + (is-false (elephant:get-instances-by-class 'NameC)) + (is-false (elephant:get-instances-by-class 'VariantC)) + (is-false (elephant:get-instances-by-class 'RoleC)) + (is-false (elephant:get-instances-by-class 'AssociationC)) + (is-false (elephant:get-instances-by-class 'OccurrenceC)) + (is-true (find-if #'(lambda(top) + (and (= (length (psis top :revision 0)) 1) + (not (item-identifiers top :revision 0)) + (not (locators top :revision 0)) + (string= (uri (first (psis top :revision 0))) + "http://some.where/tmsparql/author"))) + tops-3-4-5)) + (is-true + (find-if #'(lambda(top) + (and (= (length (psis top :revision 0)) 1) + (not (item-identifiers top :revision 0)) + (not (locators top :revision 0)) + (string= (uri (first (psis top :revision 0))) + "http://some.where/tmsparql/first-name"))) + tops-3-4-5)) + (is-true + (find-if #'(lambda(top) + (and (= (length (item-identifiers top :revision 0)) 1) + (not (psis top :revision 0)) + (not (locators top :revision 0)) + (string= (uri (first (item-identifiers top :revision 0))) + "http://some.where/ii/goethe-name-reifier"))) + tops-3-4-5)) + (signals exceptions:jtm-error + (jtm::import-topic-stub-from-jtm-list + (json:decode-json-from-string j-top-1) + (list tm-1 tm-2) :revision 200)) + (signals exceptions:missing-reference-error + (jtm::import-topic-stub-from-jtm-list + (json:decode-json-from-string j-top-2) + nil :revision 200)) + (signals exceptions:jtm-error + (jtm::import-topic-stubs-from-jtm-lists + (list (json:decode-json-from-string j-top-1)) + (list tm-1 tm-2) :revision 200)) + (signals exceptions:missing-reference-error + (jtm::import-topic-stubs-from-jtm-lists + (list (json:decode-json-from-string j-top-2)) + nil :revision 200)))))) +
;TODO: -; *import-topic-stubs-from-jtm-lists -; *import-topic-stub-from-jtm-list ; *merge-topics-from-jtm-lists ; *merge-topic-from-jtm-list