1 # Copyright 2014 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.
9 from telemetry import benchmark
10 from telemetry.page import page_set
11 from telemetry.results import json_output_formatter
12 from telemetry.results import page_test_results
13 from telemetry.value import scalar
17 ps = page_set.PageSet(file_path=os.path.dirname(__file__))
18 ps.AddPageWithDefaultRunNavigate('http://www.foo.com/')
19 ps.AddPageWithDefaultRunNavigate('http://www.bar.com/')
22 def _HasPage(pages, page):
23 return pages.get(page.id, None) != None
25 def _HasValueNamed(values, name):
26 return len([x for x in values if x['name'] == name]) == 1
28 class JsonOutputFormatterTest(unittest.TestCase):
30 self._output = StringIO.StringIO()
31 self._page_set = _MakePageSet()
32 self._formatter = json_output_formatter.JsonOutputFormatter(self._output,
33 benchmark.BenchmarkMetadata('benchmark_name'))
35 def testOutputAndParse(self):
36 results = page_test_results.PageTestResults()
38 self._output.truncate(0)
40 results.WillRunPage(self._page_set[0])
41 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3)
43 results.DidRunPage(self._page_set[0])
45 self._formatter.Format(results)
46 json.loads(self._output.getvalue())
48 def testAsDictBaseKeys(self):
49 results = page_test_results.PageTestResults()
50 d = json_output_formatter.ResultsAsDict(results,
51 self._formatter.benchmark_metadata)
53 self.assertEquals(d['format_version'], '0.2')
54 self.assertEquals(d['benchmark_name'], 'benchmark_name')
56 def testAsDictWithOnePage(self):
57 results = page_test_results.PageTestResults()
58 results.WillRunPage(self._page_set[0])
59 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3)
61 results.DidRunPage(self._page_set[0])
63 d = json_output_formatter.ResultsAsDict(results,
64 self._formatter.benchmark_metadata)
66 self.assertTrue(_HasPage(d['pages'], self._page_set[0]))
67 self.assertTrue(_HasValueNamed(d['per_page_values'], 'foo'))
69 def testAsDictWithTwoPages(self):
70 results = page_test_results.PageTestResults()
71 results.WillRunPage(self._page_set[0])
72 v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3)
74 results.DidRunPage(self._page_set[0])
76 results.WillRunPage(self._page_set[1])
77 v1 = scalar.ScalarValue(results.current_page, 'bar', 'seconds', 4)
79 results.DidRunPage(self._page_set[1])
81 d = json_output_formatter.ResultsAsDict(results,
82 self._formatter.benchmark_metadata)
84 self.assertTrue(_HasPage(d['pages'], self._page_set[0]))
85 self.assertTrue(_HasPage(d['pages'], self._page_set[1]))
86 self.assertTrue(_HasValueNamed(d['per_page_values'], 'foo'))
87 self.assertTrue(_HasValueNamed(d['per_page_values'], 'bar'))
89 def testAsDictWithSummaryValueOnly(self):
90 results = page_test_results.PageTestResults()
91 v = scalar.ScalarValue(None, 'baz', 'seconds', 5)
92 results.AddSummaryValue(v)
94 d = json_output_formatter.ResultsAsDict(results,
95 self._formatter.benchmark_metadata)
97 self.assertFalse(d['pages'])
98 self.assertTrue(_HasValueNamed(d['summary_values'], 'baz'))