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.page import page_set
8from telemetry.value import list_of_scalar_values
9from telemetry.value import merge_values
10from telemetry.value import scalar
11
12class TestBase(unittest.TestCase):
13  def setUp(self):
14    self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__))
15    self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/")
16    self.page_set.AddPageWithDefaultRunNavigate("http://www.baz.com/")
17    self.page_set.AddPageWithDefaultRunNavigate("http://www.foo.com/")
18
19  @property
20  def pages(self):
21    return self.page_set.pages
22
23class MergeValueTest(TestBase):
24  def testSamePageMergeBasic(self):
25    page0 = self.pages[0]
26    page1 = self.pages[1]
27
28    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1),
29                  scalar.ScalarValue(page1, 'x', 'units', 4),
30                  scalar.ScalarValue(page0, 'x', 'units', 2),
31                  scalar.ScalarValue(page1, 'x', 'units', 5)]
32
33    merged_values = merge_values.MergeLikeValuesFromSamePage(all_values)
34    # Sort the results so that their order is predictable for the subsequent
35    # assertions.
36    merged_values.sort(key=lambda x: x.page.url)
37
38    self.assertEquals(2, len(merged_values))
39
40    self.assertEquals((page0, 'x'),
41                      (merged_values[0].page, merged_values[0].name))
42    self.assertEquals([1, 2], merged_values[0].values)
43
44    self.assertEquals((page1, 'x'),
45                      (merged_values[1].page, merged_values[1].name))
46    self.assertEquals([4, 5], merged_values[1].values)
47
48  def testSamePageMergeOneValue(self):
49    page0 = self.pages[0]
50
51    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)]
52
53    # Sort the results so that their order is predictable for the subsequent
54    # assertions.
55    merged_values = merge_values.MergeLikeValuesFromSamePage(all_values)
56    self.assertEquals(1, len(merged_values))
57    self.assertEquals(all_values[0].name, merged_values[0].name)
58    self.assertEquals(all_values[0].units, merged_values[0].units)
59
60  def testDifferentPageMergeBasic(self):
61    page0 = self.pages[0]
62    page1 = self.pages[1]
63
64    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1),
65                  scalar.ScalarValue(page1, 'x', 'units', 2),
66                  scalar.ScalarValue(page0, 'y', 'units', 10),
67                  scalar.ScalarValue(page1, 'y', 'units', 20)]
68
69    # Sort the results so that their order is predictable for the subsequent
70    # assertions.
71    merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values)
72    merged_values.sort(key=lambda x: x.name)
73    self.assertEquals(2, len(merged_values))
74
75    self.assertEquals((None, 'x'),
76                      (merged_values[0].page, merged_values[0].name))
77    self.assertEquals([1, 2], merged_values[0].values)
78
79    self.assertEquals((None, 'y'),
80                      (merged_values[1].page, merged_values[1].name))
81    self.assertEquals([10, 20], merged_values[1].values)
82
83  def testDifferentPageMergeSingleValueStillMerges(self):
84    page0 = self.pages[0]
85
86    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)]
87
88    # Sort the results so that their order is predictable for the subsequent
89    # assertions.
90    merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values)
91    self.assertEquals(1, len(merged_values))
92
93    self.assertEquals((None, 'x'),
94                      (merged_values[0].page, merged_values[0].name))
95    self.assertTrue(
96        isinstance(merged_values[0], list_of_scalar_values.ListOfScalarValues))
97    self.assertEquals([1], merged_values[0].values)
98
99  def testDifferentPageMergeBasicIgnoreTraceName(self):
100    page0 = self.pages[0]
101    page1 = self.pages[1]
102
103    all_values = [scalar.ScalarValue(page0, 'x.score', 'units', 1),
104                  scalar.ScalarValue(page1, 'y.score', 'units', 2)]
105    # Sort the results so that their order is predictable for the subsequent
106    # assertions.
107    merged_values = merge_values.MergeLikeValuesFromDifferentPages(
108        all_values,
109        group_by_name_suffix=True)
110    self.assertEquals(1, len(merged_values))
111
112    self.assertEquals((None, 'score'),
113                      (merged_values[0].page, merged_values[0].name))
114    self.assertEquals([1, 2], merged_values[0].values)
115