| #!/usr/bin/env python |
| # Copyright 2018 the V8 project 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 os |
| import sys |
| import tempfile |
| import unittest |
| |
| # Configuring the path for the v8_presubmit module |
| TOOLS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| sys.path.append(TOOLS_ROOT) |
| |
| from v8_presubmit import FileContentsCache, CacheableSourceFileProcessor |
| |
| |
| class FakeCachedProcessor(CacheableSourceFileProcessor): |
| def __init__(self, cache_file_path): |
| super(FakeCachedProcessor, self).__init__( |
| use_cache=True, cache_file_path=cache_file_path, file_type='.test') |
| def GetProcessorWorker(self): |
| return object |
| def GetProcessorScript(self): |
| return "echo", [] |
| def DetectUnformattedFiles(_, cmd, worker, files): |
| raise NotImplementedError |
| |
| class FileContentsCacheTest(unittest.TestCase): |
| def setUp(self): |
| _, self.cache_file_path = tempfile.mkstemp() |
| cache = FileContentsCache(self.cache_file_path) |
| cache.Load() |
| |
| def generate_file(): |
| _, file_name = tempfile.mkstemp() |
| with open(file_name, "w") as f: |
| f.write(file_name) |
| |
| return file_name |
| |
| self.target_files = [generate_file() for _ in range(2)] |
| unchanged_files = cache.FilterUnchangedFiles(self.target_files) |
| self.assertEqual(len(unchanged_files), 2) |
| cache.Save() |
| |
| def tearDown(self): |
| for file in [self.cache_file_path] + self.target_files: |
| os.remove(file) |
| |
| def testCachesFiles(self): |
| cache = FileContentsCache(self.cache_file_path) |
| cache.Load() |
| |
| changed_files = cache.FilterUnchangedFiles(self.target_files) |
| self.assertListEqual(changed_files, []) |
| |
| modified_file = self.target_files[0] |
| with open(modified_file, "w") as f: |
| f.write("modification") |
| |
| changed_files = cache.FilterUnchangedFiles(self.target_files) |
| self.assertListEqual(changed_files, [modified_file]) |
| |
| def testCacheableSourceFileProcessor(self): |
| class CachedProcessor(FakeCachedProcessor): |
| def DetectFilesToChange(_, files): |
| self.assertListEqual(files, []) |
| return [] |
| |
| cached_processor = CachedProcessor(cache_file_path=self.cache_file_path) |
| cached_processor.ProcessFiles(self.target_files) |
| |
| def testCacheableSourceFileProcessorWithModifications(self): |
| modified_file = self.target_files[0] |
| with open(modified_file, "w") as f: |
| f.write("modification") |
| |
| class CachedProcessor(FakeCachedProcessor): |
| def DetectFilesToChange(_, files): |
| self.assertListEqual(files, [modified_file]) |
| return [] |
| |
| cached_processor = CachedProcessor( |
| cache_file_path=self.cache_file_path, |
| ) |
| cached_processor.ProcessFiles(self.target_files) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |