-import unittest
+from unittest2 import TestCase
import RDF
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)
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())
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")