#!/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()