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