Example #1
0
    def test_tuples_become_lists(self):
        p = YAMLProtocol()
        safe_p = SafeYAMLProtocol()

        self.assertEqual(p.read(safe_p.write((), ())), ([], []))
        self.assertRaises(
            ConstructorError, safe_p.read, p.write((), ()))
Example #2
0
    def test_protocol_wont_decode(self):
        p = YAMLProtocol()
        safe_p = SafeYAMLProtocol()

        for key, value in UNSAFE_KEY_VALUES:
            encoded = p.write(key, value)
            self.assertRaises(ConstructorError, safe_p.read, encoded)
Example #3
0
    def test_caching(self):
        p = YAMLProtocol()
        # wrap load() with a mock so we can track calls to it
        p.load = Mock(wraps=p.load)

        self.assertEqual(p.read('[a, 1]\t2'), (['a', 1], 2))
        self.assertEqual(p.read('[a, 1]\t3'), (['a', 1], 3))
        self.assertEqual(p.read('[b, 2]\t3'), (['b', 2], 3))
        self.assertEqual(p.read('[a, 1]\t3'), (['a', 1], 3))

        self.assertEqual(
            p.load.call_args_list,
            [call('[a, 1]'), call('2'),
             # '[a, 1]' isn't decoded again because it's in the cache
             call('3'),
             # '3' is decoded repeatedly because we don't cache values
             call('[b, 2]'), call('3'),
             # '[a, 1]' is re-decoded because the cache only holds one key
             call('[a, 1]'), call('3')])