2018-12-18 13:50:53 +00:00
|
|
|
#!/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__(
|
2018-12-18 15:22:59 +00:00
|
|
|
use_cache=True, cache_file_path=cache_file_path, file_type='.test')
|
2018-12-18 13:50:53 +00:00
|
|
|
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()
|