Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(461)

Side by Side Diff: chrome/common/extensions/docs/server2/content_provider_test.py

Issue 54603010: Docserver: Implement the content providers infrastructure, where a (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 from cStringIO import StringIO
7 import json
8 import unittest
9 from zipfile import ZipFile
10
11 from compiled_file_system import CompiledFileSystem
12 from content_provider import ContentProvider
13 from file_system import FileNotFoundError
14 from object_store_creator import ObjectStoreCreator
15 from test_file_system import TestFileSystem
16 from third_party.handlebar import Handlebar
17
18
19 _HOST = 'https://developer.chrome.com/'
20
21
22 _REDIRECTS_JSON = json.dumps({
23 'oldfile.html': 'storage.html',
24 'index.html': 'https://developers.google.com/chrome',
25 })
26
27
28 # Test file system data which exercises many different mimetypes.
29 _TEST_DATA = {
30 'dir': {
31 'a.txt': 'a.txt content',
32 'b.txt': 'b.txt content',
33 'c': {
34 'd.txt': 'd.txt content',
35 },
36 },
37 'dir2': {
38 'dir3': {
39 'a.txt': 'a.txt content',
40 'b.txt': 'b.txt content',
41 'c': {
42 'd.txt': 'd.txt content',
43 },
44 },
45 },
46 'img.png': 'img.png content',
47 'read.txt': 'read.txt content',
48 'redirects.json': _REDIRECTS_JSON,
49 'run.js': 'run.js content',
50 'site.css': 'site.css content',
51 'storage.html': 'storage.html content',
52 }
53
54
55 class ContentProviderUnittest(unittest.TestCase):
56 def setUp(self):
57 self._content_provider = self._CreateContentProvider()
58
59 def _CreateContentProvider(self, supports_zip=False):
60 test_file_system = TestFileSystem(_TEST_DATA)
61 return ContentProvider(
62 'foo',
63 CompiledFileSystem.Factory(ObjectStoreCreator.ForTest()),
64 test_file_system,
65 # TODO(kalman): Test supports_templates=False.
66 supports_templates=True,
67 supports_zip=supports_zip)
68
69 def _assertContent(self, content, content_type, content_and_type):
70 # Assert type so that str is differentiated from unicode.
71 self.assertEqual(type(content), type(content_and_type.content))
72 self.assertEqual(content, content_and_type.content)
73 self.assertEqual(content_type, content_and_type.content_type)
74
75 def testPlainText(self):
76 self._assertContent(
77 u'a.txt content', 'text/plain',
78 self._content_provider.GetContentAndType(_HOST, 'dir/a.txt').Get())
79 self._assertContent(
80 u'd.txt content', 'text/plain',
81 self._content_provider.GetContentAndType(_HOST, 'dir/c/d.txt').Get())
82 self._assertContent(
83 u'read.txt content', 'text/plain',
84 self._content_provider.GetContentAndType(_HOST, 'read.txt').Get())
85 self._assertContent(
86 unicode(_REDIRECTS_JSON, 'utf-8'), 'application/json',
87 self._content_provider.GetContentAndType(_HOST, 'redirects.json').Get())
88 self._assertContent(
89 u'run.js content', 'application/javascript',
90 self._content_provider.GetContentAndType(_HOST, 'run.js').Get())
91 self._assertContent(
92 u'site.css content', 'text/css',
93 self._content_provider.GetContentAndType(_HOST, 'site.css').Get())
94
95 def testTemplate(self):
96 content_and_type = self._content_provider.GetContentAndType(
97 _HOST, 'storage.html').Get()
98 self.assertEqual(Handlebar, type(content_and_type.content))
99 content_and_type.content = content_and_type.content.source
100 self._assertContent(u'storage.html content', 'text/html', content_and_type)
101
102 def testImage(self):
103 self._assertContent(
104 'img.png content', 'image/png',
105 self._content_provider.GetContentAndType(_HOST, 'img.png').Get())
106
107 def testZipTopLevel(self):
108 zip_content_provider = self._CreateContentProvider(supports_zip=True)
109 content_and_type = zip_content_provider.GetContentAndType(
110 _HOST, 'dir.zip').Get()
111 zipfile = ZipFile(StringIO(content_and_type.content))
112 content_and_type.content = zipfile.namelist()
113 self._assertContent(
114 ['dir/a.txt', 'dir/b.txt', 'dir/c/d.txt'], 'application/zip',
115 content_and_type)
116
117 def testZip2ndLevel(self):
118 zip_content_provider = self._CreateContentProvider(supports_zip=True)
119 content_and_type = zip_content_provider.GetContentAndType(
120 _HOST, 'dir2/dir3.zip').Get()
121 zipfile = ZipFile(StringIO(content_and_type.content))
122 content_and_type.content = zipfile.namelist()
123 self._assertContent(
124 ['dir3/a.txt', 'dir3/b.txt', 'dir3/c/d.txt'], 'application/zip',
125 content_and_type)
126
127 def testNotFound(self):
128 self.assertRaises(
129 FileNotFoundError,
130 self._content_provider.GetContentAndType(_HOST, 'oops').Get)
131
132
133 if __name__ == '__main__':
134 unittest.main()
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/server2/content_provider.py ('k') | chrome/common/extensions/docs/server2/content_providers.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698