blob: d89513925d83bb68eeb6e65df9e6e87d6f620e43 [file] [log] [blame]
# 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 unittest
from blinkpy.common.host import Host
from blinkpy.web_tests.controllers import repaint_overlay
LAYER_TREE = """{
"layers": [
{
"name": "layer1",
"bounds": [800.00, 600.00],
}, {
"name": "layer2",
"position": [8.00, 80.00],
"bounds": [800.00, 600.00],
"contentsOpaque": true,
"drawsContent": true,
"paintInvalidations": [
{
"object": "object1",
"rect": [8, 108, 100, 100],
"reason": "full"
}, {
"object": "object2",
"rect": [0, 216, 800, 100],
"reason": "full"
}, {
"object": "object1",
"reason": "location change"
}
]
}
]
}
"""
class TestRepaintOverlay(unittest.TestCase):
def test_result_contains_repaint_rects(self):
self.assertTrue(repaint_overlay.result_contains_repaint_rects(LAYER_TREE))
self.assertFalse(repaint_overlay.result_contains_repaint_rects('ABCD'))
def test_extract_layer_tree(self):
self.assertEquals(LAYER_TREE, repaint_overlay.extract_layer_tree(LAYER_TREE))
def test_generate_repaint_overlay_html(self):
test_name = 'paint/invalidation/repaint-overlay/layers.html'
host = Host()
port = host.port_factory.get()
layer_tree_file = port.expected_filename(test_name, '.txt')
if not layer_tree_file or not host.filesystem.exists(layer_tree_file):
# This can happen if the scripts are not in the standard blink directory.
return
layer_tree = str(host.filesystem.read_text_file(layer_tree_file))
self.assertTrue(repaint_overlay.result_contains_repaint_rects(layer_tree))
overlay_html = (
'<!-- Generated by third_party/blink/tools/run_blinkpy_tests.py\n' +
' test case: TestRepaintOverlay.test_generate_repaint_overlay_html. -->\n' +
repaint_overlay.generate_repaint_overlay_html(test_name, layer_tree, layer_tree))
results_directory = port.results_directory()
host.filesystem.maybe_make_directory(results_directory)
actual_overlay_html_file = host.filesystem.join(results_directory, 'layers-overlay.html')
host.filesystem.write_text_file(actual_overlay_html_file, overlay_html)
overlay_html_file = port.abspath_for_test('paint/invalidation/repaint-overlay/layers-overlay.html')
expected = host.filesystem.read_text_file(overlay_html_file)
self.assertEquals(
expected, overlay_html,
'This failure is probably caused by changed repaint_overlay.py. '
'Please examine the diffs:\n diff %s %s\n'
'If the diffs are valid, update the file:\n cp %s %s\n'
'then update layers-overlay-expected.html in the same directory if needed,'
' and commit the files together with the changed repaint_overlay.py.' %
(overlay_html_file, actual_overlay_html_file, actual_overlay_html_file, overlay_html_file))