示例#1
0
    def test_equality_and_hash(self):
        a = Topic('a')
        ab = Topic('b', parent=a)
        abc1 = Topic('c', parent=ab)
        abc2 = Topic('c', parent=ab)
        abd = Topic('d', parent=ab)
        ac = Topic('c', parent=a)

        def assert_hash(t1, t2):
            self.assertEqual(hash(t1), hash(t2))

        # Check same object equality
        self.assertEqual(a, a)
        assert_hash(a, a)
        self.assertEqual(ab, ab)
        assert_hash(ab, ab)
        self.assertEqual(abc1, abc1)
        assert_hash(abc1, abc1)
        self.assertEqual(abc2, abc2)
        assert_hash(abc2, abc2)
        self.assertEqual(abd, abd)
        assert_hash(abd, abd)

        # Check same name and parent
        self.assertEqual(abc1, abc2)
        assert_hash(abc1, abc2)

        # Check same name and different parent
        self.assertNotEqual(abc1, ac)

        # Check different name and same parent
        self.assertNotEqual(abc1, abd)

        # Check different type
        self.assertNotEqual(abc1, object())
示例#2
0
 def test_subscribe(self):
     board = MessageBoard(self.loop)
     expected_topic = Topic.parse('a:b:c')
     expected_args = (1, 2, 3)
     expected_kwargs = {'kwarg': True}
     def subscriber(topic, *args, **kwargs):
         self.called = True
         self.assertEqual(topic, expected_topic)
         self.assertEqual(args, expected_args)
         self.assertEqual(kwargs, expected_kwargs)
         self.loop.stop()
     board.subscribe(expected_topic, subscriber)
     board.publish(expected_topic, *expected_args, **expected_kwargs)
     self.loop.run_forever()
     self.assertTrue(self.called)
示例#3
0
    def test_subscribe(self):
        board = MessageBoard(self.loop)
        expected_topic = Topic.parse('a:b:c')
        expected_args = (1, 2, 3)
        expected_kwargs = {'kwarg': True}

        def subscriber(topic, *args, **kwargs):
            self.called = True
            self.assertEqual(topic, expected_topic)
            self.assertEqual(args, expected_args)
            self.assertEqual(kwargs, expected_kwargs)
            self.loop.stop()

        board.subscribe(expected_topic, subscriber)
        board.publish(expected_topic, *expected_args, **expected_kwargs)
        self.loop.run_forever()
        self.assertTrue(self.called)
示例#4
0
 def test_iter(self):
     a = Topic('a')
     ab = a + 'b'
     abc = ab + 'c'
     i1 = iter(abc)
     i2 = iter(abc)
     self.assertEqual(next(i1), abc)
     self.assertEqual(next(i2), abc)
     self.assertEqual(next(i1), ab)
     self.assertEqual(next(i2), ab)
     self.assertEqual(next(i1), a)
     self.assertEqual(next(i2), a)
     self.assertIsNone(next(i1))
     self.assertIsNone(next(i2))
     with self.assertRaises(StopIteration):
         next(i1)
     with self.assertRaises(StopIteration):
         next(i2)
示例#5
0
 def test_parse(self):
     actual = Topic.parse('a:b:c')
     expected = Topic('c', parent=Topic('b', parent=Topic('a')))
     self.assertEqual(actual, expected)
示例#6
0
 def test_invalid_parent(self):
     with self.assertRaises(TypeError):
         Topic('name', parent=object())
示例#7
0
 def test_invalid_name(self):
     with self.assertRaises(TypeError):
         Topic(object())
示例#8
0
 def test_addition(self):
     a = Topic('a')
     self.assertEqual(a + 'b', Topic('b', parent=a))
     with self.assertRaises(TypeError):
         a + object()
示例#9
0
 def test_str(self):
     self.assertEqual(str(Topic('a') + 'b' + 'c'), 'a:b:c')
示例#10
0
 def test_repr(self):
     topic = Topic('a') + 'b' + 'c'
     self.assertEqual(eval(repr(topic)), topic)