# standard imports import unittest # bsie imports from bsie.utils import bsfs, ns # objects to test from bsie.utils.node import Node ## code ## class TestNode(unittest.TestCase): def test_equality(self): uri1 = bsfs.URI('http://example.com/me/entity#1234') uri2 = bsfs.URI('http://example.com/me/entity#4321') node = Node(ns.bsfs.Entity, uri1) # equality respects uri self.assertEqual(node, Node(ns.bsfs.Entity, uri1)) self.assertEqual(hash(node), hash(Node(ns.bsfs.Entity, uri1))) self.assertNotEqual(node, Node(ns.bsfs.Entity, uri2)) self.assertNotEqual(hash(node), hash(Node(ns.bsfs.Entity, uri2))) # equality respects hints self.assertEqual( Node(ns.bsfs.Entity, foo='foo'), Node(ns.bsfs.Entity, foo='foo')) self.assertEqual( hash(Node(ns.bsfs.Entity, foo='foo')), hash(Node(ns.bsfs.Entity, foo='foo'))) self.assertNotEqual( Node(ns.bsfs.Entity, foo='foo'), Node(ns.bsfs.Entity, foo='bar')) self.assertNotEqual( hash(Node(ns.bsfs.Entity, foo='foo')), hash(Node(ns.bsfs.Entity, foo='bar'))) self.assertNotEqual( Node(ns.bsfs.Entity, foo='bar'), Node(ns.bsfs.Entity, bar='foo')) self.assertNotEqual( hash(Node(ns.bsfs.Entity, foo='bar')), hash(Node(ns.bsfs.Entity, bar='foo'))) # hints are irrelevant if uri is set self.assertEqual( Node(ns.bsfs.Entity, uri=uri1, foo='bar'), Node(ns.bsfs.Entity, uri=uri1, bar='foo')) self.assertEqual( hash(Node(ns.bsfs.Entity, uri=uri1, foo='bar')), hash(Node(ns.bsfs.Entity, uri=uri1, bar='foo'))) self.assertNotEqual( Node(ns.bsfs.Entity, uri=uri1, foo='bar'), Node(ns.bsfs.Entity, uri=uri2, bar='foo')) self.assertNotEqual( hash(Node(ns.bsfs.Entity, uri=uri1, foo='bar')), hash(Node(ns.bsfs.Entity, uri=uri2, bar='foo'))) # equality respects node_type self.assertNotEqual(node, Node(ns.bsfs.Foo, uri1)) self.assertNotEqual(hash(node), hash(Node(ns.bsfs.Foo, uri1))) # not equal to other types self.assertNotEqual(node, 1234) self.assertNotEqual(hash(node), hash(1234)) self.assertNotEqual(node, uri1) self.assertNotEqual(hash(node), hash(uri1)) self.assertNotEqual(node, ns.bsfs.Entity) self.assertNotEqual(hash(node), hash(ns.bsfs.Entity)) class Foo(): pass self.assertNotEqual(node, Foo()) self.assertNotEqual(hash(node), hash(Foo())) def test_str(self): uri = bsfs.URI('http://example.com/me/entity#1234') # basic string conversion node = Node(ns.bsfs.Entity, uri) self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#1234)') self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#1234)') # string conversion respects node_type node = Node(ns.bsfs.Foo, uri) self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Foo, http://example.com/me/entity#1234)') self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Foo, http://example.com/me/entity#1234)') # string conversion respects uri node = Node(ns.bsfs.Entity, bsfs.URI('http://example.com/me/entity#4321')) self.assertEqual(str(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#4321)') self.assertEqual(repr(node), 'Node(http://bsfs.ai/schema/Entity, http://example.com/me/entity#4321)') ## main ## if __name__ == '__main__': unittest.main() ## EOF ##