Index: tools/telemetry/telemetry/results/csv_pivot_table_output_formatter_unittest.py |
diff --git a/tools/telemetry/telemetry/results/csv_pivot_table_output_formatter_unittest.py b/tools/telemetry/telemetry/results/csv_pivot_table_output_formatter_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..124fab4e6d38e4ab2dbf41580bb6d31432cab78a |
--- /dev/null |
+++ b/tools/telemetry/telemetry/results/csv_pivot_table_output_formatter_unittest.py |
@@ -0,0 +1,92 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+import os |
+import StringIO |
+import unittest |
+ |
+from telemetry.page import page_set |
+from telemetry.results import csv_pivot_table_output_formatter |
+from telemetry.results import page_test_results |
+from telemetry.value import scalar |
+ |
+ |
+def _MakePageSet(): |
+ ps = page_set.PageSet(file_path=os.path.dirname(__file__)) |
+ ps.AddPageWithDefaultRunNavigate('http://www.foo.com/') |
+ ps.AddPageWithDefaultRunNavigate('http://www.bar.com/') |
+ return ps |
+ |
+ |
+class CsvPivotTableOutputFormatterTest(unittest.TestCase): |
+ |
+ # The line separator used by CSV formatter. |
+ _LINE_SEPARATOR = '\r\n' |
+ |
+ def setUp(self): |
+ self._output = StringIO.StringIO() |
+ self._page_set = _MakePageSet() |
+ self._results = page_test_results.PageTestResults() |
+ self._formatter = None |
+ self.MakeFormatter() |
+ |
+ def MakeFormatter(self, trace_tag=''): |
+ self._formatter = ( |
+ csv_pivot_table_output_formatter.CsvPivotTableOutputFormatter( |
+ self._output, trace_tag)) |
+ |
+ def SimulateBenchmarkRun(self, dict_of_values): |
+ """Simulate one run of a benchmark, using the supplied values. |
+ |
+ Args: |
+ dict_of_values: dictionary w/ Page instance as key, a list of Values |
+ as value. |
+ """ |
+ for page, values in dict_of_values.iteritems(): |
+ self._results.WillRunPage(page) |
+ for v in values: |
+ v.page = page |
+ self._results.AddValue(v) |
+ self._results.DidRunPage(page) |
+ |
+ def Format(self): |
+ self._formatter.Format(self._results) |
+ return self._output.getvalue() |
+ |
+ def testSimple(self): |
+ # Test a simple benchmark with only one value: |
+ self.SimulateBenchmarkRun({ |
+ self._page_set[0]: [scalar.ScalarValue(None, 'foo', 'seconds', 3)]}) |
+ expected = self._LINE_SEPARATOR.join([ |
+ 'page_set,page,name,value,units,run_index', |
+ 'page_set,http://www.foo.com/,foo,3,seconds,0', |
+ '']) |
+ |
+ self.assertEqual(expected, self.Format()) |
+ |
+ def testMultiplePagesAndValues(self): |
+ self.SimulateBenchmarkRun({ |
+ self._page_set[0]: [scalar.ScalarValue(None, 'foo', 'seconds', 4)], |
+ self._page_set[1]: [scalar.ScalarValue(None, 'foo', 'seconds', 3.4), |
+ scalar.ScalarValue(None, 'bar', 'km', 10), |
+ scalar.ScalarValue(None, 'baz', 'count', 5)]}) |
+ |
+ # Parse CSV output into list of lists. |
+ csv_string = self.Format() |
+ lines = csv_string.split(self._LINE_SEPARATOR) |
+ values = map(lambda s : s.split(','), lines[1:-1]) |
+ |
+ self.assertEquals(len(values), 4) # We expect 4 value in total. |
+ self.assertEquals(len(set((v[1] for v in values))), 2) # 2 pages. |
+ self.assertEquals(len(set((v[2] for v in values))), 3) # 3 value names. |
+ |
+ def testTraceTag(self): |
+ self.MakeFormatter(trace_tag='date,option') |
+ self.SimulateBenchmarkRun({ |
+ self._page_set[0]: [scalar.ScalarValue(None, 'foo', 'seconds', 3), |
+ scalar.ScalarValue(None, 'bar', 'tons', 5)]}) |
+ output = self.Format().split(self._LINE_SEPARATOR) |
+ |
+ self.assertTrue(output[0].endswith(',trace_tag_0,trace_tag_1')) |
+ for line in output[1:-1]: |
+ self.assertTrue(line.endswith(',date,option')) |