blob: e117caf40ac2da391b9fdae461c94f9555d81ebb [file] [log] [blame]
# 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.page import csv_page_measurement_results
from telemetry.page import page_set
def _MakePageSet():
return page_set.PageSet.FromDict({
"description": "hello",
"pages": [
{"url": "http://www.foo.com/"},
{"url": "http://www.bar.com/"}
]
}, os.path.dirname(__file__))
class NonPrintingCsvPageMeasurementResults(
csv_page_measurement_results.CsvPageMeasurementResults):
def __init__(self, *args):
super(NonPrintingCsvPageMeasurementResults, self).__init__(*args)
def _PrintPerfResult(self, *args):
pass
class CsvPageMeasurementResultsTest(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 = NonPrintingCsvPageMeasurementResults(self._output, True)
results.WillMeasurePage(self._page_set[0])
results.Add('foo', 'seconds', 3)
results.DidMeasurePage()
self.assertEquals(
self.output_header_row,
['page_name', '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_no_results_on_second_run(self):
results = NonPrintingCsvPageMeasurementResults(self._output, True)
results.WillMeasurePage(self._page_set[0])
results.Add('foo', 'seconds', 3)
results.DidMeasurePage()
results.WillMeasurePage(self._page_set[1])
results.DidMeasurePage()
def test_with_output_after_every_page_and_inconsistency(self):
results = NonPrintingCsvPageMeasurementResults(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 = NonPrintingCsvPageMeasurementResults(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()
self.assertEquals(
self.output_header_row,
['page_name', 'bar (seconds)', 'foo (seconds)'])
expected = [[self._page_set[0].display_name, '-', '3.0'],
[self._page_set[1].display_name, '4.0', '-']]
self.assertEquals(expected, self.output_data_rows)
def test_histogram(self):
results = NonPrintingCsvPageMeasurementResults(self._output, False)
results.WillMeasurePage(self._page_set[0])
results.Add('a', '',
'{"buckets": [{"low": 1, "high": 2, "count": 1}]}',
data_type='histogram')
results.DidMeasurePage()
results.WillMeasurePage(self._page_set[1])
results.Add('a', '',
'{"buckets": [{"low": 2, "high": 3, "count": 1}]}',
data_type='histogram')
results.DidMeasurePage()
results.PrintSummary()
self.assertEquals(
self.output_header_row,
['page_name', 'a ()'])
self.assertEquals(
self.output_data_rows,
[[self._page_set[0].display_name, '1.5'],
[self._page_set[1].display_name, '2.5']])