1# Copyright 2013 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.
4import os
5import unittest
6
7from telemetry import value
8from telemetry.page import page_set
9from telemetry.value import list_of_scalar_values
10
11class TestBase(unittest.TestCase):
12  def setUp(self):
13    self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__))
14    self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/")
15    self.page_set.AddPageWithDefaultRunNavigate("http://www.baz.com/")
16    self.page_set.AddPageWithDefaultRunNavigate("http://www.foo.com/")
17
18  @property
19  def pages(self):
20    return self.page_set.pages
21
22class ValueTest(TestBase):
23  def testListSamePageMergingWithSamePageConcatenatePolicy(self):
24    page0 = self.pages[0]
25    v0 = list_of_scalar_values.ListOfScalarValues(
26        page0, 'x', 'unit',
27        [1,2], same_page_merge_policy=value.CONCATENATE)
28    v1 = list_of_scalar_values.ListOfScalarValues(
29        page0, 'x', 'unit',
30        [3,4], same_page_merge_policy=value.CONCATENATE)
31    self.assertTrue(v1.IsMergableWith(v0))
32
33    vM = (list_of_scalar_values.ListOfScalarValues.
34          MergeLikeValuesFromSamePage([v0, v1]))
35    self.assertEquals(page0, vM.page)
36    self.assertEquals('x', vM.name)
37    self.assertEquals('unit', vM.units)
38    self.assertEquals(value.CONCATENATE, vM.same_page_merge_policy)
39    self.assertEquals(True, vM.important)
40    self.assertEquals([1, 2, 3, 4], vM.values)
41
42  def testListSamePageMergingWithPickFirstPolicy(self):
43    page0 = self.pages[0]
44    v0 = list_of_scalar_values.ListOfScalarValues(
45        page0, 'x', 'unit',
46        [1,2], same_page_merge_policy=value.PICK_FIRST)
47    v1 = list_of_scalar_values.ListOfScalarValues(
48        page0, 'x', 'unit',
49        [3,4], same_page_merge_policy=value.PICK_FIRST)
50    self.assertTrue(v1.IsMergableWith(v0))
51
52    vM = (list_of_scalar_values.ListOfScalarValues.
53          MergeLikeValuesFromSamePage([v0, v1]))
54    self.assertEquals(page0, vM.page)
55    self.assertEquals('x', vM.name)
56    self.assertEquals('unit', vM.units)
57    self.assertEquals(value.PICK_FIRST, vM.same_page_merge_policy)
58    self.assertEquals(True, vM.important)
59    self.assertEquals([1, 2], vM.values)
60
61  def testListDifferentPageMerging(self):
62    page0 = self.pages[0]
63    v0 = list_of_scalar_values.ListOfScalarValues(
64        page0, 'x', 'unit',
65        [1, 2], same_page_merge_policy=value.PICK_FIRST)
66    v1 = list_of_scalar_values.ListOfScalarValues(
67        page0, 'x', 'unit',
68        [3, 4], same_page_merge_policy=value.PICK_FIRST)
69    self.assertTrue(v1.IsMergableWith(v0))
70
71    vM = (list_of_scalar_values.ListOfScalarValues.
72          MergeLikeValuesFromDifferentPages([v0, v1]))
73    self.assertEquals(None, vM.page)
74    self.assertEquals('x', vM.name)
75    self.assertEquals('unit', vM.units)
76    self.assertEquals(value.PICK_FIRST, vM.same_page_merge_policy)
77    self.assertEquals(True, vM.important)
78    self.assertEquals([1, 2, 3, 4], vM.values)
79