2dbcb703a765ad378a5b013733a504748d49130e
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / subversion_file_system_test.py
1 #!/usr/bin/env python
2 # Copyright (c) 2012 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 json
7 import os
8 import unittest
9
10 from extensions_paths import SERVER2
11 from fake_url_fetcher import FakeUrlFetcher
12 from file_system import FileSystemError, StatInfo
13 from subversion_file_system import SubversionFileSystem
14 from test_util import ReadFile, Server2Path
15
16
17 _SHARED_FILE_SYSTEM_TEST_DATA = Server2Path('test_data', 'file_system')
18 _SUBVERSION_FILE_SYSTEM_TEST_DATA = Server2Path(
19     'test_data', 'subversion_file_system')
20
21
22 def _CreateSubversionFileSystem(path):
23   fetcher = FakeUrlFetcher(path)
24   return SubversionFileSystem(fetcher, fetcher, path), fetcher
25
26
27 class SubversionFileSystemTest(unittest.TestCase):
28   def testReadFiles(self):
29     expected = {
30       'test1.txt': 'test1\n',
31       'test2.txt': 'test2\n',
32       'test3.txt': 'test3\n',
33     }
34     file_system, fetcher = _CreateSubversionFileSystem(
35         _SHARED_FILE_SYSTEM_TEST_DATA)
36     read_future = file_system.Read(['test1.txt', 'test2.txt', 'test3.txt'])
37     self.assertTrue(*fetcher.CheckAndReset(async_count=3))
38     self.assertEqual(expected, read_future.Get())
39     self.assertTrue(*fetcher.CheckAndReset(async_resolve_count=3))
40
41   def testListDir(self):
42     expected = ['dir/'] + ['file%d.html' % i for i in range(7)]
43     file_system, fetcher = _CreateSubversionFileSystem(
44         _SHARED_FILE_SYSTEM_TEST_DATA)
45     list_future = file_system.ReadSingle('list/')
46     self.assertTrue(*fetcher.CheckAndReset(async_count=1))
47     self.assertEqual(expected, sorted(list_future.Get()))
48     self.assertTrue(*fetcher.CheckAndReset(async_resolve_count=1))
49
50   def testListSubDir(self):
51     expected = ['empty.txt'] + ['file%d.html' % i for i in range(3)]
52     file_system, fetcher = _CreateSubversionFileSystem(
53         _SHARED_FILE_SYSTEM_TEST_DATA)
54     list_future = file_system.ReadSingle('list/dir/')
55     self.assertTrue(*fetcher.CheckAndReset(async_count=1))
56     self.assertEqual(expected, sorted(list_future.Get()))
57     self.assertTrue(*fetcher.CheckAndReset(async_resolve_count=1))
58
59   def testDirStat(self):
60     file_system, fetcher = _CreateSubversionFileSystem(
61         _SHARED_FILE_SYSTEM_TEST_DATA)
62     stat_info = file_system.Stat('stat/')
63     self.assertTrue(*fetcher.CheckAndReset(sync_count=1))
64     expected = StatInfo(
65       '151113',
66       child_versions=json.loads(ReadFile(
67           SERVER2, 'test_data', 'file_system', 'stat_result.json')))
68     self.assertEqual(expected, stat_info)
69
70   def testFileStat(self):
71     file_system, fetcher = _CreateSubversionFileSystem(
72         _SHARED_FILE_SYSTEM_TEST_DATA)
73     stat_info = file_system.Stat('stat/extension_api.h')
74     self.assertTrue(*fetcher.CheckAndReset(sync_count=1))
75     self.assertEqual(StatInfo('146163'), stat_info)
76
77   def testRevisions(self):
78     # This is a super hacky test. Record the path that was fetched then exit the
79     # test. Compare.
80     class ValueErrorFetcher(object):
81       def __init__(self):
82         self.last_fetched = None
83
84       def FetchAsync(self, path):
85         class ThrowsValueError(object):
86           def Get(self): raise ValueError()
87         self.last_fetched = path
88         return ThrowsValueError()
89
90       def Fetch(self, path, **kwargs):
91         self.last_fetched = path
92         raise ValueError()
93
94     file_fetcher = ValueErrorFetcher()
95     stat_fetcher = ValueErrorFetcher()
96     svn_path = 'svn:'
97
98     svn_file_system = SubversionFileSystem(file_fetcher,
99                                            stat_fetcher,
100                                            svn_path,
101                                            revision=42)
102
103     self.assertRaises(FileSystemError,
104                       svn_file_system.ReadSingle('dir/file').Get)
105     self.assertEqual('dir/file?p=42', file_fetcher.last_fetched)
106     # Stat() will always stat directories.
107     self.assertRaises(FileSystemError, svn_file_system.Stat, 'dir/file')
108     self.assertEqual('dir?pathrev=42', stat_fetcher.last_fetched)
109
110     self.assertRaises(FileSystemError,
111                       svn_file_system.ReadSingle('dir/').Get)
112     self.assertEqual('dir/?p=42', file_fetcher.last_fetched)
113     self.assertRaises(FileSystemError, svn_file_system.Stat, 'dir/')
114     self.assertEqual('dir?pathrev=42', stat_fetcher.last_fetched)
115
116   def testDirectoryVersionOnDeletion(self):
117     '''Tests the case when the most recent operation on a directory is the
118     deletion of a file. Here it is not enough to take the maximum version of all
119     files in the directory, as we used to, for obvious reasons.
120     '''
121     file_system, _ = _CreateSubversionFileSystem(
122         _SUBVERSION_FILE_SYSTEM_TEST_DATA)
123     dir_stat = file_system.Stat('docs_public_extensions_214898/')
124     self.assertEqual('214692', dir_stat.version)
125
126   def testEmptyDirectory(self):
127     file_system, _ = _CreateSubversionFileSystem(
128         _SUBVERSION_FILE_SYSTEM_TEST_DATA)
129     dir_stat = file_system.Stat('api_icons_214898/')
130     self.assertEqual('193838', dir_stat.version)
131     self.assertEqual({}, dir_stat.child_versions)
132
133 if __name__ == '__main__':
134   unittest.main()