Suppress tabs permission warning if there is already a browsingHistory warning.
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / content_providers_test.py
blob44d3c754130b1daebcc7a2ce6dd0dc8d3120cc3a
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.
6 import json
7 import unittest
9 from compiled_file_system import CompiledFileSystem
10 from content_providers import ContentProviders
11 from extensions_paths import CHROME_EXTENSIONS
12 from gcs_file_system_provider import CloudStorageFileSystemProvider
13 from object_store_creator import ObjectStoreCreator
14 from test_file_system import TestFileSystem
15 from test_util import DisableLogging
18 _CONTENT_PROVIDERS = {
19 'apples': {
20 'chromium': {
21 'dir': 'chrome/common/extensions/apples'
23 'serveFrom': 'apples-dir',
25 'bananas': {
26 'serveFrom': '',
27 'chromium': {
28 'dir': 'chrome/common/extensions'
31 'github-provider': {
32 'serveFrom': 'gh',
33 'github': {
34 'dir': 'chrome/common/extensions',
35 'owner': 'GoogleChrome',
36 'repo': 'hello-world',
39 'github-provider-with-dir': {
40 'serveFrom': 'gh2',
41 'github': {
42 'dir': 'chrome/common/extensions/tomatoes/are/a',
43 'owner': 'SomeOwner',
44 'repo': 'some-repo',
47 'tomatoes': {
48 'serveFrom': 'tomatoes-dir/are/a',
49 'chromium': {
50 'dir': 'chrome/common/extensions/tomatoes/are/a'
56 _FILE_SYSTEM_DATA = {
57 'docs': {
58 'templates': {
59 'json': {
60 'content_providers.json': json.dumps(_CONTENT_PROVIDERS),
64 'apples': {
65 'gala.txt': 'gala apples',
66 'green': {
67 'granny smith.txt': 'granny smith apples',
70 'tomatoes': {
71 'are': {
72 'a': {
73 'vegetable.txt': 'no they aren\'t',
74 'fruit': {
75 'cherry.txt': 'cherry tomatoes',
83 class _MockGithubFileSystemProvider(object):
84 '''A GithubFileSystemProvider imitation which records every call to Create
85 and returns them from GetAndReset.
86 '''
88 def __init__(self, file_system):
89 self._file_system = file_system
90 self._calls = []
92 def Create(self, owner, repo):
93 self._calls.append((owner, repo))
94 return self._file_system
96 def GetAndReset(self):
97 calls = self._calls
98 self._calls = []
99 return calls
102 class ContentProvidersTest(unittest.TestCase):
103 def setUp(self):
104 object_store_creator = ObjectStoreCreator.ForTest()
105 test_file_system = TestFileSystem(_FILE_SYSTEM_DATA,
106 relative_to=CHROME_EXTENSIONS)
107 self._github_fs_provider = _MockGithubFileSystemProvider(test_file_system)
108 object_store_creator = ObjectStoreCreator.ForTest()
109 # TODO(mangini): create tests for GCS
110 self._gcs_fs_provider = CloudStorageFileSystemProvider(object_store_creator)
111 self._content_providers = ContentProviders(
112 object_store_creator,
113 CompiledFileSystem.Factory(object_store_creator),
114 test_file_system,
115 self._github_fs_provider,
116 self._gcs_fs_provider)
118 def testSimpleRootPath(self):
119 provider = self._content_providers.GetByName('apples')
120 self.assertEqual(
121 'gala apples',
122 provider.GetContentAndType('gala.txt').Get().content)
123 self.assertEqual(
124 'granny smith apples',
125 provider.GetContentAndType('green/granny smith.txt').Get().content)
127 def testComplexRootPath(self):
128 provider = self._content_providers.GetByName('tomatoes')
129 self.assertEqual(
130 'no they aren\'t',
131 provider.GetContentAndType('vegetable.txt').Get().content)
132 self.assertEqual(
133 'cherry tomatoes',
134 provider.GetContentAndType('fruit/cherry.txt').Get().content)
136 def testParentRootPath(self):
137 provider = self._content_providers.GetByName('bananas')
138 self.assertEqual(
139 'gala apples',
140 provider.GetContentAndType('apples/gala.txt').Get().content)
142 def testSimpleServlet(self):
143 provider, serve_from, path = self._content_providers.GetByServeFrom(
144 'apples-dir')
145 self.assertEqual('apples', provider.name)
146 self.assertEqual('apples-dir', serve_from)
147 self.assertEqual('', path)
148 provider, serve_from, path = self._content_providers.GetByServeFrom(
149 'apples-dir/')
150 self.assertEqual('apples', provider.name)
151 self.assertEqual('apples-dir', serve_from)
152 self.assertEqual('', path)
153 provider, serve_from, path = self._content_providers.GetByServeFrom(
154 'apples-dir/are/forever')
155 self.assertEqual('apples', provider.name)
156 self.assertEqual('apples-dir', serve_from)
157 self.assertEqual('are/forever', path)
159 def testComplexServlet(self):
160 provider, serve_from, path = self._content_providers.GetByServeFrom(
161 'tomatoes-dir/are/a')
162 self.assertEqual('tomatoes', provider.name)
163 self.assertEqual('tomatoes-dir/are/a', serve_from)
164 self.assertEqual('', path)
165 provider, serve_from, path = self._content_providers.GetByServeFrom(
166 'tomatoes-dir/are/a/fruit/they/are')
167 self.assertEqual('tomatoes', provider.name)
168 self.assertEqual('tomatoes-dir/are/a', serve_from)
169 self.assertEqual('fruit/they/are', path)
171 def testEmptyStringServlet(self):
172 provider, serve_from, path = self._content_providers.GetByServeFrom(
173 'tomatoes-dir/are')
174 self.assertEqual('bananas', provider.name)
175 self.assertEqual('', serve_from)
176 self.assertEqual('tomatoes-dir/are', path)
177 provider, serve_from, path = self._content_providers.GetByServeFrom('')
178 self.assertEqual('bananas', provider.name)
179 self.assertEqual('', serve_from)
180 self.assertEqual('', path)
182 @DisableLogging('error')
183 def testProviderNotFound(self):
184 self.assertEqual(None, self._content_providers.GetByName('cabbages'))
186 def testGithubContentProvider(self):
187 provider, serve_from, path = self._content_providers.GetByServeFrom(
188 'gh/apples/green/granny smith.txt')
189 self.assertEqual('github-provider', provider.name)
190 self.assertEqual('gh', serve_from)
191 self.assertEqual('apples/green/granny smith.txt', path)
192 self.assertEqual([('GoogleChrome', 'hello-world')],
193 self._github_fs_provider.GetAndReset())
194 self.assertEqual(
195 'granny smith apples',
196 provider.GetContentAndType(path).Get().content)
198 def testGithubContentProviderWithDir(self):
199 provider, serve_from, path = self._content_providers.GetByServeFrom(
200 'gh2/fruit/cherry.txt')
201 self.assertEqual('github-provider-with-dir', provider.name)
202 self.assertEqual('gh2', serve_from)
203 self.assertEqual('fruit/cherry.txt', path)
204 self.assertEqual([('SomeOwner', 'some-repo')],
205 self._github_fs_provider.GetAndReset())
206 self.assertEqual(
207 'cherry tomatoes',
208 provider.GetContentAndType(path).Get().content)
210 if __name__ == '__main__':
211 unittest.main()