remove some test code debugging print statements
[htsworkflow.git] / htsworkflow / util / test / test_rdfinfer.py
index 48462e46c053a86675dce325c5a93fc96c0f72b6..c6164fa6ec81334dbf91a6486edf9d81a0ef5e29 100644 (file)
@@ -1,4 +1,4 @@
-import unittest
+from unittest2 import TestCase
 
 import RDF
 
@@ -88,12 +88,25 @@ _:me
      foaf:depicts _:me .
 """
 
-class TestInfer(unittest.TestCase):
+class TestInfer(TestCase):
     def setUp(self):
         self.model = get_model()
         add_default_schemas(self.model)
         load_string_into_model(self.model, 'turtle', MINI_FOAF_ONTOLOGY)
 
+    def test_class(self):
+        fooNS = RDF.NS('http://example.org/')
+        load_string_into_model(self.model, 'turtle', FOAF_DATA)
+        inference = Infer(self.model)
+
+        s = RDF.Statement(fooNS['me.jpg'], rdfNS['type'], rdfsNS['Class'])
+        found = list(self.model.find_statements(s))
+        self.assertEqual(len(found), 0)
+        inference._rule_class()
+        s = RDF.Statement(fooNS['me.jpg'], rdfNS['type'], rdfsNS['Class'])
+        found = list(self.model.find_statements(s))
+        self.assertEqual(len(found), 1)
+
     def test_inverse_of(self):
         fooNS = RDF.NS('http://example.org/')
         load_string_into_model(self.model, 'turtle', FOAF_DATA)
@@ -159,7 +172,11 @@ class TestInfer(unittest.TestCase):
         self.model.append(s)
         errors = list(inference._validate_property_types())
         self.assertEqual(len(errors), 1)
-        self.assertTrue(errors[0].startswith('Domain of http://example.org'))
+        startswith = 'Domain of '
+        self.assertEqual(errors[0][:len(startswith)], startswith)
+        self.assertTrue('http://example.org/me.jpg' in errors[0])
+        endswith = 'http://xmlns.com/foaf/0.1/Person'
+        self.assertEqual(errors[0][-len(endswith):], endswith)
         del self.model[s]
 
         errors = list(inference._validate_property_types())
@@ -173,11 +190,51 @@ class TestInfer(unittest.TestCase):
 
         errors = list(inference._validate_property_types())
         self.assertEqual(len(errors), 1)
-        self.assertTrue(errors[0].startswith('Range of http://example.org'))
+        startswith = 'Range of '
+        self.assertEqual(errors[0][:len(startswith)], startswith)
+        self.assertTrue('http://example.org/me.jpg' in errors[0])
+        endswith = 'http://www.w3.org/2002/07/owl#Thing'
+        self.assertEqual(errors[0][-len(endswith):], endswith)
         del self.model[s]
 
+    def test_property_multiple_domain_types(self):
+        """Can we process a property with multiple domain types?
+        """
+        turtle = """
+        @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+        @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+        @prefix foo: <http://example.org/> .
+        @prefix bar: <http://example.com/> .
+
+        foo:AClass a rdfs:Class .
+        foo:BClass a rdfs:Class .
+        bar:ABarClass a rdfs:Class .
+
+        foo:aprop a rdf:Property ;
+            rdfs:domain foo:AClass ;
+            rdfs:domain bar:ABarClass ;
+            rdfs:range foo:BClass .
+
+        foo:object a foo:BClass .
+        foo:subject a foo:AClass ;
+           foo:aprop foo:object .
+        bar:subject a bar:ABarClass ;
+           foo:aprop foo:object .
+        """
+        load_string_into_model(self.model, 'turtle', turtle)
+        inference = Infer(self.model)
+
+        errmsg = list(inference._validate_property_types())
+        self.failUnlessEqual(len(errmsg), 0)
+
+
 def suite():
-    return unittest.makeSuite(TestInfer, 'test')
+    from unittest2 import TestSuite, defaultTestLoader
+    suite = TestSuite()
+    suite.addTests(defaultTestLoader.loadTestsFromTestCase(TestInfer))
+    return suite
+
 
 if __name__ == "__main__":
-    unittest.main(defaultTest='suite')
+    from unittest2 import main
+    main(defaultTest="suite")