- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / caching_rietveld_patcher_test.py
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import unittest
7 from caching_rietveld_patcher import (CachingRietveldPatcher,
8                                       _VERSION_CACHE_MAXAGE)
9 from datetime import datetime
10 from file_system import FileNotFoundError
11 from future import Future
12 from object_store_creator import ObjectStoreCreator
13 from patcher import Patcher
14 from test_patcher import TestPatcher
15
16 _TEST_PATCH_VERSION = '1'
17 _TEST_PATCH_FILES = (['add.txt'], ['del.txt'], ['modify.txt'])
18 _TEST_PATCH_DATA = {
19   'add.txt': 'add',
20   'modify.txt': 'modify',
21 }
22
23 class FakeDateTime(object):
24   def __init__(self, time=datetime.now()):
25     self.time = time
26
27   def now(self):
28     return self.time
29
30 class CachingRietveldPatcherTest(unittest.TestCase):
31   def setUp(self):
32     self._datetime = FakeDateTime()
33     # CachingRietveldPatcher should always call Apply with binary=True.
34     self._test_patcher = TestPatcher(_TEST_PATCH_VERSION,
35                                      _TEST_PATCH_FILES,
36                                      _TEST_PATCH_DATA,
37                                      assert_binary=True)
38     self._patcher = CachingRietveldPatcher(
39         self._test_patcher,
40         ObjectStoreCreator(start_empty=False),
41         self._datetime)
42
43   def testGetVersion(self):
44     # Invalidate cache.
45     self._datetime.time += _VERSION_CACHE_MAXAGE
46     # Fill cache.
47     self._patcher.GetVersion()
48     count = self._test_patcher.get_version_count
49     # Should read from cache.
50     self._patcher.GetVersion()
51     self.assertEqual(count, self._test_patcher.get_version_count)
52     # Invalidate cache.
53     self._datetime.time += _VERSION_CACHE_MAXAGE
54     # Should fetch version.
55     self._patcher.GetVersion()
56     self.assertEqual(count + 1, self._test_patcher.get_version_count)
57
58   def testGetPatchedFiles(self):
59     # Fill cache.
60     self._patcher.GetPatchedFiles()
61     count = self._test_patcher.get_patched_files_count
62     # Should read from cache.
63     self._patcher.GetPatchedFiles()
64     self.assertEqual(count, self._test_patcher.get_patched_files_count)
65
66   def testApply(self):
67     # Fill cache.
68     self._patcher.Apply(['add.txt'], None).Get()
69     count = self._test_patcher.apply_count
70     # Should read from cache even though it's reading another file.
71     self._patcher.Apply(['modify.txt'], None).Get()
72     self.assertEqual(count, self._test_patcher.apply_count)
73
74     # Make sure RietveldPatcher handles |binary| correctly.
75     self.assertTrue(isinstance(self._patcher.Apply(['add.txt'], None, True).
76         Get()['add.txt'], str),
77         'Expected result is binary. It was text.')
78     self.assertTrue(isinstance(self._patcher.Apply(['add.txt'], None).
79         Get()['add.txt'], unicode),
80         'Expected result is text. It was binary.')
81
82 if __name__ == '__main__':
83   unittest.main()