示例#1
0
    def test_additional_platform_directory(self):
        filesystem = MockFileSystem()
        port = Port(port_name='foo', filesystem=filesystem)
        port.baseline_search_path = lambda: ['LayoutTests/platform/foo']
        layout_test_dir = port.layout_tests_dir()
        test_file = 'fast/test.html'

        # No additional platform directory
        self.assertEqual(port.expected_baselines(test_file, '.txt'),
                         [(None, 'fast/test-expected.txt')])
        self.assertEqual(port.baseline_path(), 'LayoutTests/platform/foo')

        # Simple additional platform directory
        port._options.additional_platform_directory = ['/tmp/local-baselines']
        filesystem.files = {
            '/tmp/local-baselines/fast/test-expected.txt': 'foo',
        }
        self.assertEqual(port.expected_baselines(test_file, '.txt'),
                         [('/tmp/local-baselines', 'fast/test-expected.txt')])
        self.assertEqual(port.baseline_path(), '/tmp/local-baselines')

        # Multiple additional platform directories
        port._options.additional_platform_directory = [
            '/foo', '/tmp/local-baselines'
        ]
        self.assertEqual(port.expected_baselines(test_file, '.txt'),
                         [('/tmp/local-baselines', 'fast/test-expected.txt')])
        self.assertEqual(port.baseline_path(), '/foo')
示例#2
0
    def test_diff_text(self):
        port = Port()
        # Make sure that we don't run into decoding exceptions when the
        # filenames are unicode, with regular or malformed input (expected or
        # actual input is always raw bytes, not unicode).
        port.diff_text('exp', 'act', 'exp.txt', 'act.txt')
        port.diff_text('exp', 'act', u'exp.txt', 'act.txt')
        port.diff_text('exp', 'act', u'a\xac\u1234\u20ac\U00008000', 'act.txt')

        port.diff_text('exp' + chr(255), 'act', 'exp.txt', 'act.txt')
        port.diff_text('exp' + chr(255), 'act', u'exp.txt', 'act.txt')

        # Though expected and actual files should always be read in with no
        # encoding (and be stored as str objects), test unicode inputs just to
        # be safe.
        port.diff_text(u'exp', 'act', 'exp.txt', 'act.txt')
        port.diff_text(u'a\xac\u1234\u20ac\U00008000', 'act', 'exp.txt',
                       'act.txt')

        # And make sure we actually get diff output.
        diff = port.diff_text('foo', 'bar', 'exp.txt', 'act.txt')
        self.assertTrue('foo' in diff)
        self.assertTrue('bar' in diff)
        self.assertTrue('exp.txt' in diff)
        self.assertTrue('act.txt' in diff)
        self.assertFalse('nosuchthing' in diff)
示例#3
0
 def test_uses_test_expectations_file(self):
     filesystem = MockFileSystem()
     port = Port(port_name='foo', filesystem=filesystem)
     port.path_to_test_expectations_file = lambda: '/mock-results/test_expectations.txt'
     self.assertFalse(port.uses_test_expectations_file())
     port._filesystem = MockFileSystem(
         {'/mock-results/test_expectations.txt': ''})
     self.assertTrue(port.uses_test_expectations_file())
示例#4
0
 def make_port(self, executive=None, with_tests=False, **kwargs):
     host = MockSystemHost()
     if executive:
         host.executive = executive
     if with_tests:
         add_unit_tests_to_mock_filesystem(host.filesystem)
         return TestPort(host, **kwargs)
     return Port(host, **kwargs)
示例#5
0
    def test_test_to_uri(self):
        port = Port()
        layout_test_dir = port.layout_tests_dir()
        test = 'foo/bar.html'
        path = port._filesystem.join(layout_test_dir, test)
        if sys.platform == 'win32':
            path = path.replace("\\", "/")

        self.assertEqual(port.test_to_uri(test), abspath_to_uri(path))
示例#6
0
    def make_driver(self, worker_number=0, xorg_running=False, executive=None):
        port = Port(MockSystemHost(log_executive=True, executive=executive), 'xvfbdrivertestport', options=MockOptions(configuration='Release'))
        port._config.build_directory = lambda configuration: "/mock-build"
        port._server_process_constructor = MockServerProcess
        if xorg_running:
            port._executive._running_pids['Xorg'] = 108

        driver = XvfbDriver(port, worker_number=worker_number, pixel_tests=True)
        driver._startup_delay_secs = 0
        return driver
示例#7
0
    def test_pretty_patch_os_error(self):
        port = Port(executive=executive_mock.MockExecutive2(exception=OSError))
        oc = outputcapture.OutputCapture()
        oc.capture_output()
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)

        # This tests repeated calls to make sure we cache the result.
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)
        oc.restore_output()
    def make_driver(self, worker_number=0, xorg_running=False):
        port = Port(host=MockSystemHost(log_executive=True),
                    config=MockConfig())
        port._server_process_constructor = MockServerProcess
        if xorg_running:
            port._executive._running_pids['Xorg'] = 108

        driver = XvfbDriver(port,
                            worker_number=worker_number,
                            pixel_tests=True)
        return driver
示例#9
0
    def test_pretty_patch_script_error(self):
        # FIXME: This is some ugly white-box test hacking ...
        port = Port(executive=executive_mock.MockExecutive2(
            exception=ScriptError))
        port._pretty_patch_available = True
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)

        # This tests repeated calls to make sure we cache the result.
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)
示例#10
0
 def test_wdiff_command(self):
     port = Port()
     port._path_to_wdiff = lambda: "/path/to/wdiff"
     command = port._wdiff_command("/actual/path", "/expected/path")
     expected_command = [
         "/path/to/wdiff",
         "--start-delete=##WDIFF_DEL##",
         "--end-delete=##WDIFF_END##",
         "--start-insert=##WDIFF_ADD##",
         "--end-insert=##WDIFF_END##",
         "/actual/path",
         "/expected/path",
     ]
     self.assertEqual(command, expected_command)
示例#11
0
    def test_stop(self):
        filesystem = MockFileSystem(files={'/tmp/.X42-lock': '1234\n'})
        port = Port(MockSystemHost(log_executive=True, filesystem=filesystem), 'xvfbdrivertestport', options=MockOptions(configuration='Release'))
        port._executive.kill_process = lambda x: _log.info("MOCK kill_process pid: " + str(x))
        driver = XvfbDriver(port, worker_number=0, pixel_tests=True)

        class FakeXvfbProcess(object):
            pid = 1234

        driver._xvfb_process = FakeXvfbProcess()
        driver._lock_file = '/tmp/.X42-lock'

        expected_logs = "MOCK kill_process pid: 1234\n"
        OutputCapture().assert_outputs(self, driver.stop, [], expected_logs=expected_logs)

        self.assertIsNone(driver._xvfb_process)
        self.assertFalse(port._filesystem.exists(driver._lock_file))
示例#12
0
 def test_virtual_methods(self):
     port = Port(MockSystemHost())
     self.assertVirtual(port.baseline_path)
     self.assertVirtual(port.baseline_search_path)
     self.assertVirtual(port.check_build, None)
     self.assertVirtual(port.check_image_diff)
     self.assertVirtual(port.create_driver, 0)
     self.assertVirtual(port.diff_image, None, None)
     self.assertVirtual(port.default_results_directory)
     self.assertVirtual(port._path_to_apache)
     self.assertVirtual(port._path_to_apache_config_file)
     self.assertVirtual(port._path_to_driver)
     self.assertVirtual(port._path_to_helper)
     self.assertVirtual(port._path_to_image_diff)
     self.assertVirtual(port._path_to_lighttpd)
     self.assertVirtual(port._path_to_lighttpd_modules)
     self.assertVirtual(port._path_to_lighttpd_php)
     self.assertVirtual(port._path_to_wdiff)
示例#13
0
    def test_stop(self):
        filesystem = MockFileSystem(files={'/tmp/.X42-lock': '1234\n'})
        port = Port(host=MockSystemHost(log_executive=True,
                                        filesystem=filesystem),
                    config=MockConfig())
        port._executive.kill_process = lambda x: log("MOCK kill_process pid: "
                                                     + str(x))
        driver = XvfbDriver(port, worker_number=0, pixel_tests=True)

        class FakeXvfbProcess(object):
            pid = 1234

        driver._xvfb_process = FakeXvfbProcess()
        driver._lock_file = '/tmp/.X42-lock'

        expected_stderr = "MOCK kill_process pid: 1234\n"
        OutputCapture().assert_outputs(self,
                                       driver.stop, [],
                                       expected_stderr=expected_stderr)

        self.assertEqual(driver._xvfb_process, None)
        self.assertFalse(port._filesystem.exists(driver._lock_file))
示例#14
0
class PortTest(unittest.TestCase):
    def test_format_wdiff_output_as_html(self):
        output = "OUTPUT %s %s %s" % (Port._WDIFF_DEL, Port._WDIFF_ADD,
                                      Port._WDIFF_END)
        html = Port()._format_wdiff_output_as_html(output)
        expected_html = "<head><style>.del { background: #faa; } .add { background: #afa; }</style></head><pre>OUTPUT <span class=del> <span class=add> </span></pre>"
        self.assertEqual(html, expected_html)

    def test_wdiff_command(self):
        port = Port()
        port._path_to_wdiff = lambda: "/path/to/wdiff"
        command = port._wdiff_command("/actual/path", "/expected/path")
        expected_command = [
            "/path/to/wdiff",
            "--start-delete=##WDIFF_DEL##",
            "--end-delete=##WDIFF_END##",
            "--start-insert=##WDIFF_ADD##",
            "--end-insert=##WDIFF_END##",
            "/actual/path",
            "/expected/path",
        ]
        self.assertEqual(command, expected_command)

    def _file_with_contents(self, contents, encoding="utf-8"):
        new_file = tempfile.NamedTemporaryFile()
        new_file.write(contents.encode(encoding))
        new_file.flush()
        return new_file

    def test_pretty_patch_os_error(self):
        port = Port(executive=executive_mock.MockExecutive2(exception=OSError))
        oc = outputcapture.OutputCapture()
        oc.capture_output()
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)

        # This tests repeated calls to make sure we cache the result.
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)
        oc.restore_output()

    def test_pretty_patch_script_error(self):
        # FIXME: This is some ugly white-box test hacking ...
        port = Port(executive=executive_mock.MockExecutive2(
            exception=ScriptError))
        port._pretty_patch_available = True
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)

        # This tests repeated calls to make sure we cache the result.
        self.assertEqual(port.pretty_patch_text("patch.txt"),
                         port._pretty_patch_error_html)

    def test_run_wdiff(self):
        executive = Executive()
        # This may fail on some systems.  We could ask the port
        # object for the wdiff path, but since we don't know what
        # port object to use, this is sufficient for now.
        try:
            wdiff_path = executive.run_command(["which", "wdiff"]).rstrip()
        except Exception, e:
            wdiff_path = None

        port = Port()
        port._path_to_wdiff = lambda: wdiff_path

        if wdiff_path:
            # "with tempfile.NamedTemporaryFile() as actual" does not seem to work in Python 2.5
            actual = self._file_with_contents(u"foo")
            expected = self._file_with_contents(u"bar")
            wdiff = port._run_wdiff(actual.name, expected.name)
            expected_wdiff = "<head><style>.del { background: #faa; } .add { background: #afa; }</style></head><pre><span class=del>foo</span><span class=add>bar</span></pre>"
            self.assertEqual(wdiff, expected_wdiff)
            # Running the full wdiff_text method should give the same result.
            port._wdiff_available = True  # In case it's somehow already disabled.
            wdiff = port.wdiff_text(actual.name, expected.name)
            self.assertEqual(wdiff, expected_wdiff)
            # wdiff should still be available after running wdiff_text with a valid diff.
            self.assertTrue(port._wdiff_available)
            actual.close()
            expected.close()

            # Bogus paths should raise a script error.
            self.assertRaises(ScriptError, port._run_wdiff, "/does/not/exist",
                              "/does/not/exist2")
            self.assertRaises(ScriptError, port.wdiff_text, "/does/not/exist",
                              "/does/not/exist2")
            # wdiff will still be available after running wdiff_text with invalid paths.
            self.assertTrue(port._wdiff_available)

        # If wdiff does not exist _run_wdiff should throw an OSError.
        port._path_to_wdiff = lambda: "/invalid/path/to/wdiff"
        self.assertRaises(OSError, port._run_wdiff, "foo", "bar")

        # wdiff_text should not throw an error if wdiff does not exist.
        self.assertEqual(port.wdiff_text("foo", "bar"), "")
        # However wdiff should not be available after running wdiff_text if wdiff is missing.
        self.assertFalse(port._wdiff_available)
示例#15
0
    def test_can_load_actual_virtual_test_suite_file(self):
        port = Port(SystemHost(), 'baseport')

        # If this call returns successfully, we found and loaded the LayoutTests/VirtualTestSuites.
        _ = port.virtual_test_suites()
示例#16
0
 def test_name__set(self):
     port = Port(port_name='foo')
     self.assertEqual(port.name(), 'foo')
示例#17
0
 def test_name__unset(self):
     port = Port()
     self.assertEqual(port.name(), None)
示例#18
0
 def test_get_option__default(self):
     port = Port()
     self.assertEqual(port.get_option('foo', 'bar'), 'bar')
示例#19
0
 def make_port(self):
     port = Port(MockSystemHost(), MockOptions(configuration='Release'))
     port._config.build_directory = lambda configuration: '/mock-build'
     return port
示例#20
0
 def test_get_option__set(self):
     options, args = optparse.OptionParser().parse_args([])
     options.foo = 'bar'
     port = Port(options=options)
     self.assertEqual(port.get_option('foo'), 'bar')
示例#21
0
 def make_port(self):
     return Port(MockSystemHost())
示例#22
0
 def test_test_dirs(self):
     port = Port()
     dirs = port.test_dirs()
     self.assertTrue('canvas' in dirs)
     self.assertTrue('css2.1' in dirs)
示例#23
0
 def make_port(self, executive=None, **kwargs):
     host = MockHost()
     if executive:
         host.executive = executive
     return Port(host, **kwargs)
示例#24
0
 def make_port(self):
     port = Port(MockSystemHost(), 'test',
                 MockOptions(configuration='Release'))
     port._config.build_directory = lambda configuration: '/mock-checkout/out/' + configuration
     return port
示例#25
0
 def test_default_configuration_notfound(self):
     # Test that we delegate to the config object properly.
     port = Port(config=config_mock.MockConfig(
         default_configuration='default'))
     self.assertEqual(port.default_configuration(), 'default')
示例#26
0
 def test_format_wdiff_output_as_html(self):
     output = "OUTPUT %s %s %s" % (Port._WDIFF_DEL, Port._WDIFF_ADD,
                                   Port._WDIFF_END)
     html = Port()._format_wdiff_output_as_html(output)
     expected_html = "<head><style>.del { background: #faa; } .add { background: #afa; }</style></head><pre>OUTPUT <span class=del> <span class=add> </span></pre>"
     self.assertEqual(html, expected_html)
示例#27
0
 def test_layout_tests_skipping(self):
     port = Port()
     port.skipped_layout_tests = lambda: ['foo/bar.html', 'media']
     self.assertTrue(port.skips_layout_test('foo/bar.html'))
     self.assertTrue(port.skips_layout_test('media/video-zoom.html'))
     self.assertFalse(port.skips_layout_test('foo/foo.html'))
示例#28
0
 def test_get_option__unset(self):
     port = Port()
     self.assertEqual(port.get_option('foo'), None)
示例#29
0
 def test_setup_test_run(self):
     port = Port()
     # This routine is a no-op. We just test it for coverage.
     port.setup_test_run()
示例#30
0
 def _assert_wrapper(self, wrapper_string, expected_wrapper):
     wrapper = Driver(Port(MockHost()), None,
                      pixel_tests=False)._command_wrapper(wrapper_string)
     self.assertEqual(wrapper, expected_wrapper)