| # Copyright 2015 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 webkitpy.common.host_mock import MockHost |
| from webkitpy.layout_tests.controllers import layout_test_finder |
| |
| |
| class LayoutTestFinderTests(unittest.TestCase): |
| |
| def test_find_fastest_tests(self): |
| host = MockHost() |
| port = host.port_factory.get('test-win-win7', None) |
| |
| all_tests = [ |
| 'path/test.html', |
| 'new/test.html', |
| 'fast/css/1.html', |
| 'fast/css/2.html', |
| 'fast/css/3.html', |
| 'fast/css/skip1.html', |
| 'fast/css/skip2.html', |
| 'fast/css/skip3.html', |
| 'fast/css/skip4.html', |
| 'fast/css/skip5.html', |
| ] |
| |
| port.tests = lambda paths: paths or all_tests |
| |
| finder = layout_test_finder.LayoutTestFinder(port, {}) |
| finder._times_trie = lambda: { |
| 'fast': { |
| 'css': { |
| '1.html': 1, |
| '2.html': 2, |
| '3.html': 3, |
| 'skip1.html': 0, |
| 'skip2.html': 0, |
| 'skip3.html': 0, |
| 'skip4.html': 0, |
| 'skip5.html': 0, |
| } |
| }, |
| 'path': { |
| 'test.html': 4, |
| } |
| } |
| |
| tests = finder.find_tests(fastest_percentile=50, args=[]) |
| self.assertEqual(set(tests[1]), set(['fast/css/1.html', 'fast/css/2.html', 'new/test.html'])) |
| |
| tests = finder.find_tests(fastest_percentile=50, args=['path/test.html']) |
| self.assertEqual(set(tests[1]), set(['fast/css/1.html', 'fast/css/2.html', 'path/test.html', 'new/test.html'])) |
| |
| tests = finder.find_tests(args=[]) |
| self.assertEqual(tests[1], all_tests) |
| |
| tests = finder.find_tests(args=['path/test.html']) |
| self.assertEqual(tests[1], ['path/test.html']) |
| |
| def test_find_fastest_tests_excludes_deleted_tests(self): |
| host = MockHost() |
| port = host.port_factory.get('test-win-win7', None) |
| |
| all_tests = [ |
| 'fast/css/1.html', |
| 'fast/css/2.html', |
| ] |
| |
| port.tests = lambda paths: paths or all_tests |
| |
| finder = layout_test_finder.LayoutTestFinder(port, {}) |
| |
| finder._times_trie = lambda: { |
| 'fast': { |
| 'css': { |
| '1.html': 1, |
| '2.html': 2, |
| 'non-existant.html': 1, |
| } |
| }, |
| } |
| |
| tests = finder.find_tests(fastest_percentile=90, args=[]) |
| self.assertEqual(set(tests[1]), set(['fast/css/1.html'])) |
| |
| def test_split_chunks(self): |
| split = layout_test_finder.LayoutTestFinder._split_into_chunks # pylint: disable=protected-access |
| |
| tests = [1, 2, 3, 4] |
| self.assertEqual(([1, 2, 3, 4], []), split(tests, 0, 1)) |
| |
| self.assertEqual(([1, 2], [3, 4]), split(tests, 0, 2)) |
| self.assertEqual(([3, 4], [1, 2]), split(tests, 1, 2)) |
| |
| self.assertEqual(([1, 2], [3, 4]), split(tests, 0, 3)) |
| self.assertEqual(([3, 4], [1, 2]), split(tests, 1, 3)) |
| self.assertEqual(([], [1, 2, 3, 4]), split(tests, 2, 3)) |
| |
| tests = [1, 2, 3, 4, 5] |
| self.assertEqual(([1, 2, 3, 4, 5], []), split(tests, 0, 1)) |
| |
| self.assertEqual(([1, 2, 3], [4, 5]), split(tests, 0, 2)) |
| self.assertEqual(([4, 5], [1, 2, 3]), split(tests, 1, 2)) |
| |
| self.assertEqual(([1, 2], [3, 4, 5]), split(tests, 0, 3)) |
| self.assertEqual(([3, 4], [1, 2, 5]), split(tests, 1, 3)) |
| self.assertEqual(([5], [1, 2, 3, 4]), split(tests, 2, 3)) |
| |
| tests = [1, 2, 3, 4, 5, 6] |
| self.assertEqual(([1, 2, 3, 4, 5, 6], []), split(tests, 0, 1)) |
| |
| self.assertEqual(([1, 2, 3], [4, 5, 6]), split(tests, 0, 2)) |
| self.assertEqual(([4, 5, 6], [1, 2, 3]), split(tests, 1, 2)) |
| |
| self.assertEqual(([1, 2], [3, 4, 5, 6]), split(tests, 0, 3)) |
| self.assertEqual(([3, 4], [1, 2, 5, 6]), split(tests, 1, 3)) |
| self.assertEqual(([5, 6], [1, 2, 3, 4]), split(tests, 2, 3)) |