Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / page / page_measurement_results_unittest.py
1 # Copyright (c) 2012 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.
4 import os
5 import unittest
6
7 from telemetry.page import page_measurement_results
8 from telemetry.page import page_set
9 from telemetry.page import perf_tests_helper
10 from telemetry.value import scalar
11
12 def _MakePageSet():
13   ps = page_set.PageSet(file_path=os.path.dirname(__file__))
14   ps.AddPageWithDefaultRunNavigate("http://www.bar.com/")
15   ps.AddPageWithDefaultRunNavigate("http://www.baz.com/")
16   ps.AddPageWithDefaultRunNavigate("http://www.foo.com/")
17   return ps
18
19 class NonPrintingPageMeasurementResults(
20     page_measurement_results.PageMeasurementResults):
21   def __init__(self):
22     super(NonPrintingPageMeasurementResults, self).__init__()
23
24   def _PrintPerfResult(self, *args):
25     pass
26
27 class SummarySavingPageMeasurementResults(
28     page_measurement_results.PageMeasurementResults):
29   def __init__(self):
30     super(SummarySavingPageMeasurementResults, self).__init__()
31     self.results = []
32
33   def _PrintPerfResult(self, *args):
34     res = perf_tests_helper.PrintPerfResult(*args, print_to_stdout=False)
35     self.results.append(res)
36
37 class PageMeasurementResultsTest(unittest.TestCase):
38   def setUp(self):
39     self._page_set = _MakePageSet()
40
41   @property
42   def pages(self):
43     return self._page_set.pages
44
45   def test_basic(self):
46     results = NonPrintingPageMeasurementResults()
47     results.WillMeasurePage(self.pages[0])
48     results.Add('a', 'seconds', 3)
49     results.DidMeasurePage()
50
51     results.WillMeasurePage(self.pages[1])
52     results.Add('a', 'seconds', 3)
53     results.DidMeasurePage()
54
55     results.PrintSummary()
56
57     values = results.FindPageSpecificValuesForPage(self.pages[0], 'a')
58     self.assertEquals(1, len(values))
59     v = values[0]
60     self.assertEquals(v.name, 'a')
61     self.assertEquals(v.page, self.pages[0])
62
63     values = results.FindAllPageSpecificValuesNamed('a')
64     assert len(values) == 2
65
66   def test_url_is_invalid_value(self):
67     results = NonPrintingPageMeasurementResults()
68     results.WillMeasurePage(self.pages[0])
69     self.assertRaises(
70       AssertionError,
71       lambda: results.Add('url', 'string', 'foo'))
72
73   def test_value_names_that_have_been_seen(self):
74     results = NonPrintingPageMeasurementResults()
75     results.WillMeasurePage(self.pages[0])
76     results.Add('a', 'a_units', 3)
77     results.Add('b', 'b_units', 3)
78     results.AddSummaryValue(scalar.ScalarValue(None, 'c', 'c_units', 3))
79     results.DidMeasurePage()
80     self.assertEquals(set(['a', 'b', 'c']),
81                       set(results.all_value_names_that_have_been_seen))
82     self.assertEquals('a_units', results.GetUnitsForValueName('a'))
83     self.assertEquals('b_units', results.GetUnitsForValueName('b'))
84     self.assertEquals('c_units', results.GetUnitsForValueName('c'))
85
86   def test_add_summary_value_with_page_specified(self):
87     results = NonPrintingPageMeasurementResults()
88     results.WillMeasurePage(self.pages[0])
89     self.assertRaises(
90       AssertionError,
91       lambda: results.AddSummaryValue(scalar.ScalarValue(self.pages[0],
92                                                          'a', 'units', 3)))
93
94   def test_unit_change(self):
95     results = NonPrintingPageMeasurementResults()
96     results.WillMeasurePage(self.pages[0])
97     results.Add('a', 'seconds', 3)
98     results.DidMeasurePage()
99
100     results.WillMeasurePage(self.pages[1])
101     self.assertRaises(
102       AssertionError,
103       lambda: results.Add('a', 'foobgrobbers', 3))
104
105     self.assertEquals(['a'], results.all_value_names_that_have_been_seen)
106
107   def test_type_change(self):
108     results = NonPrintingPageMeasurementResults()
109     results.WillMeasurePage(self.pages[0])
110     results.Add('a', 'seconds', 3)
111     results.DidMeasurePage()
112
113     results.WillMeasurePage(self.pages[1])
114     self.assertRaises(
115       AssertionError,
116       lambda: results.Add('a', 'seconds', 3, data_type='histogram'))
117
118   def test_basic_summary_all_pages_fail(self):
119     """If all pages fail, no summary is printed."""
120     results = SummarySavingPageMeasurementResults()
121     results.WillMeasurePage(self.pages[0])
122     results.Add('a', 'seconds', 3)
123     results.DidMeasurePage()
124     results.AddFailureMessage(self.pages[0], 'message')
125
126     results.WillMeasurePage(self.pages[1])
127     results.Add('a', 'seconds', 7)
128     results.DidMeasurePage()
129     results.AddFailureMessage(self.pages[1], 'message')
130
131     results.PrintSummary()
132     self.assertEquals(results.results, [])
133
134   def test_get_successful_page_values_merged_no_failures(self):
135     results = SummarySavingPageMeasurementResults()
136     results.WillMeasurePage(self.pages[0])
137     results.Add('a', 'seconds', 3)
138     self.assertEquals(1, len(results.page_specific_values_for_current_page))
139     results.DidMeasurePage()
140     self.assertRaises(
141         AssertionError,
142         lambda: results.page_specific_values_for_current_page)
143
144   def test_get_all_values_for_successful_pages(self):
145     results = SummarySavingPageMeasurementResults()
146     results.WillMeasurePage(self.pages[0])
147     results.Add('a', 'seconds', 3)
148     results.DidMeasurePage()
149
150     results.WillMeasurePage(self.pages[1])
151     results.Add('a', 'seconds', 3)
152     results.DidMeasurePage()
153
154     results.WillMeasurePage(self.pages[2])
155     results.Add('a', 'seconds', 3)
156     results.DidMeasurePage()
157
158     values = results.all_page_specific_values
159     self.assertEquals(3, len(values))
160     self.assertEquals([self.pages[0], self.pages[1], self.pages[2]],
161                       [v.page for v in values])
162
163   def test_get_all_values_for_successful_pages_one_page_fails(self):
164     results = SummarySavingPageMeasurementResults()
165     results.WillMeasurePage(self.pages[0])
166     results.Add('a', 'seconds', 3)
167     results.DidMeasurePage()
168
169     results.WillMeasurePage(self.pages[1])
170     results.AddFailureMessage(self.pages[1], "Failure")
171     results.DidMeasurePage()
172
173     results.WillMeasurePage(self.pages[2])
174     results.Add('a', 'seconds', 3)
175     results.DidMeasurePage()
176
177     values = results.all_page_specific_values
178     self.assertEquals(2, len(values))
179     self.assertEquals([self.pages[0], self.pages[2]],
180                       [v.page for v in values])