Index: tools/telemetry/telemetry/csv_page_benchmark_results_unittest.py |
diff --git a/tools/telemetry/telemetry/csv_page_benchmark_results_unittest.py b/tools/telemetry/telemetry/csv_page_benchmark_results_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..db57b3520e4bbbad1aed07153744634a0cd394e0 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/csv_page_benchmark_results_unittest.py |
@@ -0,0 +1,106 @@ |
+# Copyright (c) 2012 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 StringIO |
+import csv |
+import os |
+import unittest |
+ |
+from telemetry.csv_page_benchmark_results import CsvPageBenchmarkResults |
+from telemetry.page_set import PageSet |
+ |
+def _MakePageSet(): |
+ return PageSet.FromDict({ |
+ "description": "hello", |
+ "archive_path": "foo.wpr", |
+ "pages": [ |
+ {"url": "http://www.foo.com/"}, |
+ {"url": "http://www.bar.com/"} |
+ ] |
+ }, os.path.dirname(__file__)) |
+ |
+class NonPrintingCsvPageBenchmarkResults(CsvPageBenchmarkResults): |
+ def __init__(self, *args): |
+ super(NonPrintingCsvPageBenchmarkResults, self).__init__(*args) |
+ |
+ def _PrintPerfResult(self, *args): |
+ pass |
+ |
+class CsvPageBenchmarkResultsTest(unittest.TestCase): |
+ def setUp(self): |
+ self._output = StringIO.StringIO() |
+ self._page_set = _MakePageSet() |
+ |
+ @property |
+ def lines(self): |
+ lines = StringIO.StringIO(self._output.getvalue()).readlines() |
+ return lines |
+ |
+ @property |
+ def output_header_row(self): |
+ rows = list(csv.reader(self.lines)) |
+ return rows[0] |
+ |
+ @property |
+ def output_data_rows(self): |
+ rows = list(csv.reader(self.lines)) |
+ return rows[1:] |
+ |
+ def test_with_output_after_every_page(self): |
+ results = NonPrintingCsvPageBenchmarkResults(csv.writer(self._output), True) |
+ results.WillMeasurePage(self._page_set[0]) |
+ results.Add('foo', 'seconds', 3) |
+ results.DidMeasurePage() |
+ self.assertEquals( |
+ self.output_header_row, |
+ ['url', 'foo (seconds)']) |
+ self.assertEquals( |
+ self.output_data_rows[0], |
+ [self._page_set[0].url, '3']) |
+ |
+ results.WillMeasurePage(self._page_set[1]) |
+ results.Add('foo', 'seconds', 4) |
+ results.DidMeasurePage() |
+ self.assertEquals( |
+ len(self.output_data_rows), |
+ 2) |
+ self.assertEquals( |
+ self.output_data_rows[1], |
+ [self._page_set[1].url, '4']) |
+ |
+ def test_with_output_after_every_page_and_inconsistency(self): |
+ results = NonPrintingCsvPageBenchmarkResults(csv.writer(self._output), True) |
+ results.WillMeasurePage(self._page_set[0]) |
+ results.Add('foo', 'seconds', 3) |
+ results.DidMeasurePage() |
+ |
+ # We printed foo, now change to bar |
+ results.WillMeasurePage(self._page_set[1]) |
+ results.Add('bar', 'seconds', 4) |
+ |
+ self.assertRaises( |
+ Exception, |
+ lambda: results.DidMeasurePage()) # pylint: disable=W0108 |
+ |
+ def test_with_output_at_print_summary_time(self): |
+ results = NonPrintingCsvPageBenchmarkResults(csv.writer(self._output), |
+ False) |
+ results.WillMeasurePage(self._page_set[0]) |
+ results.Add('foo', 'seconds', 3) |
+ results.DidMeasurePage() |
+ |
+ results.WillMeasurePage(self._page_set[1]) |
+ results.Add('bar', 'seconds', 4) |
+ results.DidMeasurePage() |
+ |
+ results.PrintSummary('tag') |
+ |
+ self.assertEquals( |
+ self.output_header_row, |
+ ['url', 'bar (seconds)', 'foo (seconds)']) |
+ self.assertEquals( |
+ self.output_data_rows, |
+ [[self._page_set[0].url, '-', '3'], |
+ [self._page_set[1].url, '4', '-']]) |
+ |
+ |