| Index: Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py
|
| diff --git a/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py b/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py
|
| index d0ad248e815348f4a6aa7400f86bc06a0c89c470..b194975ddcdeb793e263891bd0d7fc315b37a32b 100644
|
| --- a/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py
|
| +++ b/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py
|
| @@ -26,6 +26,7 @@
|
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| +import hashlib
|
| import sys
|
| import unittest2 as unittest
|
|
|
| @@ -35,26 +36,72 @@ from webkitpy.common.host_mock import MockHost
|
|
|
|
|
| class TestBaselineOptimizer(BaselineOptimizer):
|
| - def __init__(self, mock_results_by_directory):
|
| + def __init__(self, mock_results_by_directory, create_mock_files, baseline_name):
|
| host = MockHost()
|
| BaselineOptimizer.__init__(self, host, host.port_factory.all_port_names())
|
| self._mock_results_by_directory = mock_results_by_directory
|
| + self._filesystem = host.filesystem
|
| + self._port_factory = host.port_factory
|
| + self._created_mock_files = create_mock_files
|
| + self._baseline_name = baseline_name
|
| +
|
| + self._create_mock_files(mock_results_by_directory)
|
|
|
| # We override this method for testing so we don't have to construct an
|
| # elaborate mock file system.
|
| def read_results_by_directory(self, baseline_name):
|
| + if self._created_mock_files:
|
| + return super(TestBaselineOptimizer, self).read_results_by_directory(baseline_name)
|
| return self._mock_results_by_directory
|
|
|
| def _move_baselines(self, baseline_name, results_by_directory, new_results_by_directory):
|
| - self.new_results_by_directory = new_results_by_directory
|
| + self.new_results_by_directory.append(new_results_by_directory)
|
| +
|
| + if self._created_mock_files:
|
| + super(TestBaselineOptimizer, self)._move_baselines(baseline_name, results_by_directory, new_results_by_directory)
|
| + return
|
| + self._mock_results_by_directory = new_results_by_directory
|
| +
|
| + def _create_mock_files(self, results_by_directory):
|
| + root = self._port_factory.get().webkit_base()
|
| + for directory in results_by_directory:
|
| + if 'virtual' in directory:
|
| + virtual_suite = self._port_factory.get().lookup_virtual_suite(self._baseline_name)
|
| + if virtual_suite:
|
| + baseline_name = self._baseline_name[len(virtual_suite.name) + 1:]
|
| + else:
|
| + baseline_name = self._baseline_name
|
| + else:
|
| + baseline_name = self._port_factory.get().lookup_virtual_test_base(self._baseline_name)
|
| + path = self._filesystem.join(root, directory, baseline_name)
|
| + self._filesystem.write_text_file(path, results_by_directory[directory])
|
|
|
|
|
| class BaselineOptimizerTest(unittest.TestCase):
|
| - def _assertOptimization(self, results_by_directory, expected_new_results_by_directory):
|
| - baseline_optimizer = TestBaselineOptimizer(results_by_directory)
|
| - self.assertTrue(baseline_optimizer.optimize('mock-baseline.png'))
|
| + VIRTUAL_DIRECTORY = 'virtual/softwarecompositing'
|
| +
|
| + def _appendVirtualSuffix(self, results_by_directory):
|
| + new_results_by_directory = {}
|
| + for directory in results_by_directory:
|
| + new_results_by_directory[directory + '/' + self.VIRTUAL_DIRECTORY] = results_by_directory[directory]
|
| + return new_results_by_directory
|
| +
|
| + def _assertOneLevelOptimization(self, results_by_directory, expected_new_results_by_directory, baseline_name, create_mock_files=False):
|
| + baseline_optimizer = TestBaselineOptimizer(results_by_directory, create_mock_files, baseline_name)
|
| + self.assertTrue(baseline_optimizer.optimize(baseline_name))
|
| + if type(expected_new_results_by_directory) != list:
|
| + expected_new_results_by_directory = [expected_new_results_by_directory]
|
| self.assertEqual(baseline_optimizer.new_results_by_directory, expected_new_results_by_directory)
|
|
|
| + def _assertOptimization(self, results_by_directory, expected_new_results_by_directory):
|
| + baseline_name = 'mock-baseline.png'
|
| + self._assertOneLevelOptimization(results_by_directory, expected_new_results_by_directory, baseline_name)
|
| +
|
| + results_by_directory = self._appendVirtualSuffix(results_by_directory)
|
| + expected_new_results_by_directory = self._appendVirtualSuffix(expected_new_results_by_directory)
|
| + baseline_name = self.VIRTUAL_DIRECTORY + '/' + baseline_name
|
| + self._assertOneLevelOptimization(results_by_directory, [expected_new_results_by_directory, expected_new_results_by_directory], baseline_name)
|
| +
|
| def test_move_baselines(self):
|
| host = MockHost()
|
| host.filesystem.write_binary_file('/mock-checkout/LayoutTests/platform/win/another/test-expected.txt', 'result A')
|
| @@ -166,3 +213,31 @@ class BaselineOptimizerTest(unittest.TestCase):
|
| 'LayoutTests/platform/mac': '1',
|
| 'LayoutTests/platform/win': '2',
|
| })
|
| +
|
| + def test_virtual_root_redundant_with_actual_root(self):
|
| + baseline_name = self.VIRTUAL_DIRECTORY + '/mock-baseline.png'
|
| + hash_of_two = hashlib.sha1('2').hexdigest()
|
| + expected_result = [{'LayoutTests/virtual/softwarecompositing': hash_of_two}, {'LayoutTests': hash_of_two}]
|
| + self._assertOneLevelOptimization({
|
| + 'LayoutTests/' + self.VIRTUAL_DIRECTORY: '2',
|
| + 'LayoutTests': '2',
|
| + }, expected_result, baseline_name, create_mock_files=True)
|
| +
|
| + def test_virtual_root_redundant_with_ancestors(self):
|
| + baseline_name = self.VIRTUAL_DIRECTORY + '/mock-baseline.png'
|
| + hash_of_two = hashlib.sha1('2').hexdigest()
|
| + expected_result = [{'LayoutTests/virtual/softwarecompositing': hash_of_two}, {'LayoutTests': hash_of_two}]
|
| + self._assertOneLevelOptimization({
|
| + 'LayoutTests/' + self.VIRTUAL_DIRECTORY: '2',
|
| + 'LayoutTests/platform/mac': '2',
|
| + 'LayoutTests/platform/win': '2',
|
| + }, expected_result, baseline_name, create_mock_files=True)
|
| +
|
| + def test_virtual_root_not_redundant_with_ancestors(self):
|
| + baseline_name = self.VIRTUAL_DIRECTORY + '/mock-baseline.png'
|
| + hash_of_two = hashlib.sha1('2').hexdigest()
|
| + expected_result = [{'LayoutTests/virtual/softwarecompositing': hash_of_two}, {'LayoutTests/platform/mac': hash_of_two}]
|
| + self._assertOneLevelOptimization({
|
| + 'LayoutTests/' + self.VIRTUAL_DIRECTORY: '2',
|
| + 'LayoutTests/platform/mac': '2',
|
| + }, expected_result, baseline_name, create_mock_files=True)
|
|
|