1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import os
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import unittest
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_set
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)from telemetry.value import list_of_scalar_values
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.value import merge_values
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)from telemetry.value import scalar
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TestBase(unittest.TestCase):
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  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/")
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  @property
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def pages(self):
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return self.page_set.pages
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MergeValueTest(TestBase):
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def testSamePageMergeBasic(self):
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page0 = self.pages[0]
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page1 = self.pages[1]
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1),
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page1, 'x', 'units', 4),
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page0, 'x', 'units', 2),
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page1, 'x', 'units', 5)]
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values = merge_values.MergeLikeValuesFromSamePage(all_values)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Sort the results so that their order is predictable for the subsequent
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # assertions.
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values.sort(key=lambda x: x.page.url)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(2, len(merged_values))
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((page0, 'x'),
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[0].page, merged_values[0].name))
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([1, 2], merged_values[0].values)
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((page1, 'x'),
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[1].page, merged_values[1].name))
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([4, 5], merged_values[1].values)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def testSamePageMergeOneValue(self):
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page0 = self.pages[0]
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)]
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Sort the results so that their order is predictable for the subsequent
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # assertions.
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values = merge_values.MergeLikeValuesFromSamePage(all_values)
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(1, len(merged_values))
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(all_values[0].name, merged_values[0].name)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(all_values[0].units, merged_values[0].units)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def testDifferentPageMergeBasic(self):
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page0 = self.pages[0]
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page1 = self.pages[1]
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1),
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page1, 'x', 'units', 2),
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page0, 'y', 'units', 10),
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page1, 'y', 'units', 20)]
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Sort the results so that their order is predictable for the subsequent
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # assertions.
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values)
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values.sort(key=lambda x: x.name)
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(2, len(merged_values))
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((None, 'x'),
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[0].page, merged_values[0].name))
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([1, 2], merged_values[0].values)
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((None, 'y'),
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[1].page, merged_values[1].name))
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([10, 20], merged_values[1].values)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def testDifferentPageMergeSingleValueStillMerges(self):
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page0 = self.pages[0]
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    all_values = [scalar.ScalarValue(page0, 'x', 'units', 1)]
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Sort the results so that their order is predictable for the subsequent
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # assertions.
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values = merge_values.MergeLikeValuesFromDifferentPages(all_values)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(1, len(merged_values))
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((None, 'x'),
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[0].page, merged_values[0].name))
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    self.assertTrue(
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        isinstance(merged_values[0], list_of_scalar_values.ListOfScalarValues))
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([1], merged_values[0].values)
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def testDifferentPageMergeBasicIgnoreTraceName(self):
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page0 = self.pages[0]
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page1 = self.pages[1]
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    all_values = [scalar.ScalarValue(page0, 'x.score', 'units', 1),
105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                  scalar.ScalarValue(page1, 'y.score', 'units', 2)]
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Sort the results so that their order is predictable for the subsequent
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # assertions.
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    merged_values = merge_values.MergeLikeValuesFromDifferentPages(
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        all_values,
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        group_by_name_suffix=True)
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals(1, len(merged_values))
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals((None, 'score'),
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      (merged_values[0].page, merged_values[0].name))
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    self.assertEquals([1, 2], merged_values[0].values)
116