Chromium Code Reviews| 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[key]: | |
|
lijeffrey
2017/01/19 20:07:14
is key guaranteed to be in other? if not should th
Sharu Jiang
2017/01/19 21:00:46
Done.
| |
| 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 |