- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / app_yaml_helper_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
8 from app_yaml_helper import AppYamlHelper
9 from file_system import FileNotFoundError
10 from host_file_system_provider import HostFileSystemProvider
11 from mock_file_system import MockFileSystem
12 from object_store_creator import ObjectStoreCreator
13 from test_file_system import TestFileSystem
14 from test_util import DisableLogging
15
16 _ExtractVersion, _IsGreater, _GenerateAppYaml = (
17     AppYamlHelper.ExtractVersion,
18     AppYamlHelper.IsGreater,
19     AppYamlHelper.GenerateAppYaml)
20
21 class AppYamlHelperTest(unittest.TestCase):
22   def testExtractVersion(self):
23     def run_test(version):
24       self.assertEqual(version, _ExtractVersion(_GenerateAppYaml(version)))
25     run_test('0')
26     run_test('0-0')
27     run_test('0-0-0')
28     run_test('1')
29     run_test('1-0')
30     run_test('1-0-0')
31     run_test('1-0-1')
32     run_test('1-1-0')
33     run_test('1-1-1')
34     run_test('2-0-9')
35     run_test('2-0-12')
36     run_test('2-1')
37     run_test('2-1-0')
38     run_test('2-11-0')
39     run_test('3-1-0')
40     run_test('3-1-3')
41     run_test('3-12-0')
42
43   def testIsGreater(self):
44     def assert_is_greater(lhs, rhs):
45       self.assertTrue(_IsGreater(lhs, rhs), '%s is not > %s' % (lhs, rhs))
46       self.assertFalse(_IsGreater(rhs, lhs),
47                        '%s should not be > %s' % (rhs, lhs))
48     assert_is_greater('0-0', '0')
49     assert_is_greater('0-0-0', '0')
50     assert_is_greater('0-0-0', '0-0')
51     assert_is_greater('1', '0')
52     assert_is_greater('1', '0-0')
53     assert_is_greater('1', '0-0-0')
54     assert_is_greater('1-0', '0-0')
55     assert_is_greater('1-0-0-0', '0-0-0')
56     assert_is_greater('2-0-12', '2-0-9')
57     assert_is_greater('2-0-12', '2-0-9-0')
58     assert_is_greater('2-0-12-0', '2-0-9')
59     assert_is_greater('2-0-12-0', '2-0-9-0')
60     assert_is_greater('2-1', '2-0-9')
61     assert_is_greater('2-1', '2-0-12')
62     assert_is_greater('2-1-0', '2-0-9')
63     assert_is_greater('2-1-0', '2-0-12')
64     assert_is_greater('3-1-0', '2-1')
65     assert_is_greater('3-1-0', '2-1-0')
66     assert_is_greater('3-1-0', '2-11-0')
67     assert_is_greater('3-1-3', '3-1-0')
68     assert_is_greater('3-12-0', '3-1-0')
69     assert_is_greater('3-12-0', '3-1-3')
70     assert_is_greater('3-12-0', '3-1-3-0')
71
72   @DisableLogging('warning')
73   def testInstanceMethods(self):
74     test_data = {
75       'server2': {
76         'app.yaml': _GenerateAppYaml('1-0'),
77         'app_yaml_helper.py': 'Copyright notice etc'
78       }
79     }
80
81     updates = []
82     # Pass a specific file system at head to the HostFileSystemProvider so that
83     # we know it's always going to be backed by a MockFileSystem. The Provider
84     # may decide to wrap it in caching etc.
85     file_system_at_head = MockFileSystem(TestFileSystem(test_data))
86
87     def apply_update(update):
88       file_system_at_head.Update(update)
89       updates.append(update)
90
91     def host_file_system_constructor(branch, revision=None):
92       self.assertEqual('trunk', branch)
93       self.assertTrue(revision is not None)
94       return MockFileSystem.Create(TestFileSystem(test_data),
95                                    updates[:revision])
96
97     object_store_creator = ObjectStoreCreator.ForTest()
98     host_file_system_provider = HostFileSystemProvider(
99         object_store_creator,
100         default_trunk_instance=file_system_at_head,
101         constructor_for_test=host_file_system_constructor)
102     helper = AppYamlHelper('server2/app.yaml',
103                            object_store_creator,
104                            host_file_system_provider)
105
106     def assert_is_up_to_date(version):
107       self.assertTrue(helper.IsUpToDate(version),
108                       '%s is not up to date' % version)
109       self.assertRaises(ValueError,
110                         helper.GetFirstRevisionGreaterThan, version)
111
112     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
113     assert_is_up_to_date('1-0-0')
114     assert_is_up_to_date('1-5-0')
115
116     # Revision 1.
117     apply_update({'server2': {
118       'app.yaml': _GenerateAppYaml('1-5-0')
119     }})
120
121     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
122     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
123     assert_is_up_to_date('1-5-0')
124     assert_is_up_to_date('2-5-0')
125
126     # Revision 2.
127     apply_update({'server2': {
128       'app_yaml_helper.py': 'fixed a bug'
129     }})
130
131     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
132     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
133     assert_is_up_to_date('1-5-0')
134     assert_is_up_to_date('2-5-0')
135
136     # Revision 3.
137     apply_update({'server2': {
138       'app.yaml': _GenerateAppYaml('1-6-0')
139     }})
140
141     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
142     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
143     self.assertEqual(3, helper.GetFirstRevisionGreaterThan('1-5-0'))
144     assert_is_up_to_date('2-5-0')
145
146     # Revision 4.
147     apply_update({'server2': {
148       'app.yaml': _GenerateAppYaml('1-8-0')
149     }})
150     # Revision 5.
151     apply_update({'server2': {
152       'app.yaml': _GenerateAppYaml('2-0-0')
153     }})
154     # Revision 6.
155     apply_update({'server2': {
156       'app.yaml': _GenerateAppYaml('2-2-0')
157     }})
158     # Revision 7.
159     apply_update({'server2': {
160       'app.yaml': _GenerateAppYaml('2-4-0')
161     }})
162     # Revision 8.
163     apply_update({'server2': {
164       'app.yaml': _GenerateAppYaml('2-6-0')
165     }})
166
167     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
168     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
169     self.assertEqual(3, helper.GetFirstRevisionGreaterThan('1-5-0'))
170     self.assertEqual(5, helper.GetFirstRevisionGreaterThan('1-8-0'))
171     self.assertEqual(6, helper.GetFirstRevisionGreaterThan('2-0-0'))
172     self.assertEqual(6, helper.GetFirstRevisionGreaterThan('2-1-0'))
173     self.assertEqual(7, helper.GetFirstRevisionGreaterThan('2-2-0'))
174     self.assertEqual(7, helper.GetFirstRevisionGreaterThan('2-3-0'))
175     self.assertEqual(8, helper.GetFirstRevisionGreaterThan('2-4-0'))
176     self.assertEqual(8, helper.GetFirstRevisionGreaterThan('2-5-0'))
177     assert_is_up_to_date('2-6-0')
178     assert_is_up_to_date('2-7-0')
179
180 if __name__ == '__main__':
181   unittest.main()