blob: 2bcc5a0bd344f015ac363c772d97cc018e1a2f16 [file] [log] [blame]
# Copyright 2013 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.
# These tests access private methods in the speedindex module.
# pylint: disable=protected-access
import unittest
from telemetry.util import color_histogram
from telemetry.util import rgba_color
from metrics import speedindex
class FakeImageUtil(object):
# pylint: disable=unused-argument
def GetColorHistogram(self, image, ignore_color=None, tolerance=None):
return image.ColorHistogram()
class FakeVideo(object):
def __init__(self, frames):
self._frames = frames
def GetVideoFrameIter(self):
for frame in self._frames:
yield frame
class FakeBitmap(object):
def __init__(self, r, g, b):
self._histogram = color_histogram.ColorHistogram(r, g, b, rgba_color.WHITE)
# pylint: disable=unused-argument
def ColorHistogram(self, ignore_color=None, tolerance=None):
return self._histogram
class FakeTab(object):
def __init__(self, video_capture_result=None):
self._javascript_result = None
self._video_capture_result = FakeVideo(video_capture_result)
@property
def video_capture_supported(self):
return self._video_capture_result is not None
def SetEvaluateJavaScriptResult(self, result):
self._javascript_result = result
def EvaluateJavaScript(self, _):
return self._javascript_result
def StartVideoCapture(self, min_bitrate_mbps=1):
assert self.video_capture_supported
assert min_bitrate_mbps > 0
def StopVideoCapture(self):
assert self.video_capture_supported
return self._video_capture_result
def Highlight(self, _):
pass
class SpeedIndexImplTest(unittest.TestCase):
def testVideoCompleteness(self):
frames = [
(0.0, FakeBitmap([0, 0, 0, 10], [0, 0, 0, 10], [0, 0, 0, 10])),
(0.1, FakeBitmap([10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0])),
(0.2, FakeBitmap([0, 0, 2, 8], [0, 0, 4, 6], [0, 0, 1, 9])),
(0.3, FakeBitmap([0, 3, 2, 5], [2, 1, 0, 7], [0, 3, 0, 7])),
(0.4, FakeBitmap([0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0])),
(0.5, FakeBitmap([0, 4, 6, 0], [0, 4, 6, 0], [0, 4, 6, 0])),
]
max_distance = 42.
tab = FakeTab(frames)
impl = speedindex.VideoSpeedIndexImpl(FakeImageUtil())
impl.Start(tab)
impl.Stop(tab)
time_completeness = impl.GetTimeCompletenessList(tab)
self.assertEqual(len(time_completeness), 6)
self.assertEqual(time_completeness[0], (0.0, 0))
self.assertTimeCompleteness(
time_completeness[1], 0.1, 1 - (16 + 16 + 16) / max_distance)
self.assertTimeCompleteness(
time_completeness[2], 0.2, 1 - (12 + 10 + 13) / max_distance)
self.assertTimeCompleteness(
time_completeness[3], 0.3, 1 - (6 + 10 + 8) / max_distance)
self.assertTimeCompleteness(
time_completeness[4], 0.4, 1 - (4 + 4 + 4) / max_distance)
self.assertEqual(time_completeness[5], (0.5, 1))
def testBlankPage(self):
frames = [
(0.0, FakeBitmap([0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1])),
(0.1, FakeBitmap([0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1])),
(0.2, FakeBitmap([1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1])),
(0.3, FakeBitmap([0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1])),
]
tab = FakeTab(frames)
impl = speedindex.VideoSpeedIndexImpl(FakeImageUtil())
impl.Start(tab)
impl.Stop(tab)
time_completeness = impl.GetTimeCompletenessList(tab)
self.assertEqual(len(time_completeness), 4)
self.assertEqual(time_completeness[0], (0.0, 1.0))
self.assertEqual(time_completeness[1], (0.1, 1.0))
self.assertEqual(time_completeness[2], (0.2, 0.0))
self.assertEqual(time_completeness[3], (0.3, 1.0))
def assertTimeCompleteness(self, time_completeness, time, completeness):
self.assertEqual(time_completeness[0], time)
self.assertAlmostEqual(time_completeness[1], completeness)
if __name__ == "__main__":
unittest.main()