15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu# found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport os 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport unittest 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry import value 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.page import page_set 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.value import list_of_string_values 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from telemetry.value import none_values 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass TestBase(unittest.TestCase): 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def setUp(self): 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__)) 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/") 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.baz.com/") 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.page_set.AddPageWithDefaultRunNavigate("http://www.foo.com/") 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @property 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def pages(self): 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return self.page_set.pages 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ListOfStringValuesTest(TestBase): 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def testListSamePageMergingWithSamePageConcatenatePolicy(self): 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0 = self.pages[0] 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v0 = list_of_string_values.ListOfStringValues( 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0, 'x', 'label', 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ['L1','L2'], same_page_merge_policy=value.CONCATENATE) 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v1 = list_of_string_values.ListOfStringValues( 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0, 'x', 'label', 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ['L3','L4'], same_page_merge_policy=value.CONCATENATE) 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(v1.IsMergableWith(v0)) 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vM = (list_of_string_values.ListOfStringValues. 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MergeLikeValuesFromSamePage([v0, v1])) 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(page0, vM.page) 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('x', vM.name) 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('label', vM.units) 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy) 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(True, vM.important) 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(['L1', 'L2', 'L3', 'L4'], vM.values) 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def testListSamePageMergingWithPickFirstPolicy(self): 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0 = self.pages[0] 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v0 = list_of_string_values.ListOfStringValues( 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0, 'x', 'label', 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ['L1','L2'], same_page_merge_policy=value.PICK_FIRST) 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v1 = list_of_string_values.ListOfStringValues( 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0, 'x', 'label', 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ['L3','L4'], same_page_merge_policy=value.PICK_FIRST) 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(v1.IsMergableWith(v0)) 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vM = (list_of_string_values.ListOfStringValues. 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MergeLikeValuesFromSamePage([v0, v1])) 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(page0, vM.page) 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('x', vM.name) 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('label', vM.units) 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(value.PICK_FIRST, vM.same_page_merge_policy) 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(True, vM.important) 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(['L1', 'L2'], vM.values) 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def testListDifferentPageMerging(self): 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0 = self.pages[0] 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page1 = self.pages[0] 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v0 = list_of_string_values.ListOfStringValues( 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page0, 'x', 'label', 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ['L1', 'L2'], same_page_merge_policy=value.CONCATENATE) 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu v1 = list_of_string_values.ListOfStringValues( 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page1, 'x', 'label', 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ['L3', 'L4'], same_page_merge_policy=value.CONCATENATE) 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertTrue(v1.IsMergableWith(v0)) 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vM = (list_of_string_values.ListOfStringValues. 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MergeLikeValuesFromDifferentPages([v0, v1])) 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(None, vM.page) 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('x', vM.name) 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals('label', vM.units) 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy) 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(True, vM.important) 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.assertEquals(['L1', 'L2', 'L3', 'L4'], vM.values) 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testListWithNoneValueMerging(self): 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v0 = list_of_string_values.ListOfStringValues( 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0, 'x', 'unit', 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ['L1', 'L2'], same_page_merge_policy=value.CONCATENATE) 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v1 = list_of_string_values.ListOfStringValues( 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0, 'x', 'unit', 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) None, same_page_merge_policy=value.CONCATENATE, none_value_reason='n') 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertTrue(v1.IsMergableWith(v0)) 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) vM = (list_of_string_values.ListOfStringValues. 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) MergeLikeValuesFromSamePage([v0, v1])) 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(None, vM.values) 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(none_values.MERGE_FAILURE_REASON, vM.none_value_reason) 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testListWithNoneValueMustHaveNoneReason(self): 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertRaises(none_values.NoneValueMissingReason, 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) lambda: list_of_string_values.ListOfStringValues( 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0, 'x', 'unit', None)) 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testListWithNoneReasonMustHaveNoneValue(self): 10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0 = self.pages[0] 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertRaises(none_values.ValueMustHaveNoneValue, 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) lambda: list_of_string_values.ListOfStringValues( 10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) page0, 'x', 'unit', ['L1', 'L2'], 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) none_value_reason='n')) 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testAsDict(self): 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch v = list_of_string_values.ListOfStringValues( 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch None, 'x', 'unit', ['foo', 'bar'], 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch same_page_merge_policy=value.PICK_FIRST, important=False) 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch d = v.AsDictWithoutBaseClassEntries() 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertEquals(d, { 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 'values': ['foo', 'bar'] 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 12103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testNoneValueAsDict(self): 12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v = list_of_string_values.ListOfStringValues( 12303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) None, 'x', 'unit', None, same_page_merge_policy=value.PICK_FIRST, 12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) important=False, none_value_reason='n') 12503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) d = v.AsDictWithoutBaseClassEntries() 12603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(d, { 12803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'values': None, 12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'none_value_reason': 'n' 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }) 13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testFromDict(self): 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) d = { 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'type': 'list_of_string_values', 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'name': 'x', 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'units': 'unit', 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'values': ['foo', 'bar'] 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) v = value.Value.FromDict(d, {}) 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertTrue(isinstance(v, list_of_string_values.ListOfStringValues)) 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEquals(v.values, ['foo', 'bar']) 14303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) def testFromDictNoneValue(self): 14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) d = { 14603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'type': 'list_of_string_values', 14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'name': 'x', 14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'units': 'unit', 14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'values': None, 15003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 'none_value_reason': 'n' 15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v = value.Value.FromDict(d, {}) 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertTrue(isinstance(v, list_of_string_values.ListOfStringValues)) 15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(v.values, None) 15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) self.assertEquals(v.none_value_reason, 'n') 157