| OLD | NEW |
| (Empty) | |
| 1 # Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import unittest |
| 6 |
| 7 from libs.meta_dict_serializer import ElementSerializer |
| 8 from libs.meta_dict_serializer import GetSerializer |
| 9 from libs.meta_dict_serializer import MetaDictSerializer |
| 10 from libs.meta_object import Element |
| 11 from libs.meta_object import MetaDict |
| 12 |
| 13 |
| 14 class ElementSerializerTest(unittest.TestCase): |
| 15 """Tests that ``ElementSerializer`` works as expected.""" |
| 16 |
| 17 def testToList(self): |
| 18 """Tests ``ToList`` method.""" |
| 19 element = Element() |
| 20 element_serializer = ElementSerializer() |
| 21 self.assertListEqual(element_serializer.ToList(element), [element]) |
| 22 self.assertListEqual(element_serializer.ToList(None), [None]) |
| 23 |
| 24 def testToListRaisesException(self): |
| 25 """Tests that ``ToList`` raises exception when input is not ``Element``.""" |
| 26 element_serializer = ElementSerializer() |
| 27 self.assertRaisesRegexp( |
| 28 Exception, |
| 29 'ElementSerializer can only serialize Element object.', |
| 30 element_serializer.ToList, MetaDict({})) |
| 31 |
| 32 def testFromList(self): |
| 33 """Tests ``FromList`` method.""" |
| 34 element = Element() |
| 35 element_serializer = ElementSerializer() |
| 36 self.assertEqual(element_serializer.FromList([element], lambda x: x), |
| 37 element) |
| 38 |
| 39 |
| 40 class MockedElement(Element): |
| 41 |
| 42 def __init__(self, value): |
| 43 self.value = value |
| 44 |
| 45 def __eq__(self, other): |
| 46 return self.value == other.value |
| 47 |
| 48 def __ne__(self, other): |
| 49 return not self.__eq__(other) |
| 50 |
| 51 |
| 52 class MockedMetaDict(MetaDict): # pragma: no cover |
| 53 |
| 54 def __eq__(self, other): |
| 55 if not len(self._value) == len(other._value): |
| 56 return False |
| 57 |
| 58 for key, meta_object in self.iteritems(): |
| 59 if meta_object != other.get(key): |
| 60 return False |
| 61 |
| 62 return True |
| 63 |
| 64 def __ne__(self, other): |
| 65 return not self.__eq__(other) |
| 66 |
| 67 |
| 68 class MetaDictSerializerTest(unittest.TestCase): |
| 69 """Tests that ``MetaDictSerializer`` works as expected.""" |
| 70 |
| 71 def testToList(self): |
| 72 """Tests ``ToList`` method.""" |
| 73 meta_dict = MockedMetaDict( |
| 74 {'a': MockedMetaDict({'b': MockedElement(1), 'c': MockedElement(3)}), |
| 75 'd': MockedElement(2)}) |
| 76 serializer = GetSerializer(meta_dict) |
| 77 expected_element_list = [MockedElement(1), MockedElement(3), |
| 78 MockedElement(2)] |
| 79 element_list = serializer.ToList(meta_dict) |
| 80 for element, expected_element in zip(element_list, expected_element_list): |
| 81 self.assertEqual(element.value, expected_element.value) |
| 82 |
| 83 def testFromList(self): |
| 84 """Tests ``FromList`` method.""" |
| 85 meta_dict = MockedMetaDict( |
| 86 {'a': MockedMetaDict({'b': MockedElement(1), 'c': MockedElement(3)}), |
| 87 'd': MockedElement(2), 'e': MockedElement(0)}) |
| 88 serializer = GetSerializer(meta_dict) |
| 89 element_list = [MockedElement(1), MockedElement(3), |
| 90 MockedElement(2), MockedElement(0)] |
| 91 self.assertTrue(meta_dict == serializer.FromList( |
| 92 element_list, meta_constructor=MockedMetaDict)) |
| 93 self.assertDictEqual(serializer.FromList(element_list), |
| 94 {'a': {'b': MockedElement(1), 'c': MockedElement(3)}, |
| 95 'd': MockedElement(2), 'e': MockedElement(0)}) |
| 96 |
| 97 def testFromListRaisesException(self): |
| 98 """Tests ``FromList`` raises exception when lengths mismatch.""" |
| 99 meta_dict = MetaDict( |
| 100 {'a': MetaDict({'b': MockedElement(1), 'c': MockedElement(3)}), |
| 101 'd': MockedElement(2), 'e': MockedElement(0)}) |
| 102 serializer = GetSerializer(meta_dict) |
| 103 self.assertRaisesRegexp( |
| 104 Exception, |
| 105 'The element list should have the same length as serializer', |
| 106 serializer.FromList, [], MockedMetaDict) |
| OLD | NEW |