Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / results / json_output_formatter_unittest.py
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.
4 import json
5 import os
6 import StringIO
7 import unittest
8
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
14
15
16 def _MakePageSet():
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/')
20   return ps
21
22 def _HasPage(pages, page):
23   return pages.get(page.id, None) != None
24
25 def _HasValueNamed(values, name):
26   return len([x for x in values if x['name'] == name]) == 1
27
28 class JsonOutputFormatterTest(unittest.TestCase):
29   def setUp(self):
30     self._output = StringIO.StringIO()
31     self._page_set = _MakePageSet()
32     self._formatter = json_output_formatter.JsonOutputFormatter(self._output,
33         benchmark.BenchmarkMetadata('benchmark_name'))
34
35   def testOutputAndParse(self):
36     results = page_test_results.PageTestResults()
37
38     self._output.truncate(0)
39
40     results.WillRunPage(self._page_set[0])
41     v0 = scalar.ScalarValue(results.current_page, 'foo', 'seconds', 3)
42     results.AddValue(v0)
43     results.DidRunPage(self._page_set[0])
44
45     self._formatter.Format(results)
46     json.loads(self._output.getvalue())
47
48   def testAsDictBaseKeys(self):
49     results = page_test_results.PageTestResults()
50     d = json_output_formatter.ResultsAsDict(results,
51         self._formatter.benchmark_metadata)
52
53     self.assertEquals(d['format_version'], '0.2')
54     self.assertEquals(d['benchmark_name'], 'benchmark_name')
55
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)
60     results.AddValue(v0)
61     results.DidRunPage(self._page_set[0])
62
63     d = json_output_formatter.ResultsAsDict(results,
64         self._formatter.benchmark_metadata)
65
66     self.assertTrue(_HasPage(d['pages'], self._page_set[0]))
67     self.assertTrue(_HasValueNamed(d['per_page_values'], 'foo'))
68
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)
73     results.AddValue(v0)
74     results.DidRunPage(self._page_set[0])
75
76     results.WillRunPage(self._page_set[1])
77     v1 = scalar.ScalarValue(results.current_page, 'bar', 'seconds', 4)
78     results.AddValue(v1)
79     results.DidRunPage(self._page_set[1])
80
81     d = json_output_formatter.ResultsAsDict(results,
82         self._formatter.benchmark_metadata)
83
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'))
88
89   def testAsDictWithSummaryValueOnly(self):
90     results = page_test_results.PageTestResults()
91     v = scalar.ScalarValue(None, 'baz', 'seconds', 5)
92     results.AddSummaryValue(v)
93
94     d = json_output_formatter.ResultsAsDict(results,
95         self._formatter.benchmark_metadata)
96
97     self.assertFalse(d['pages'])
98     self.assertTrue(_HasValueNamed(d['summary_values'], 'baz'))