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