blob: 85564d36d7bfe792a96c484ba075729abb3b2ee6 [file] [log] [blame]
# 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))