Index: chrome/common/extensions/docs/server2/manifest_data_source_test.py |
diff --git a/chrome/common/extensions/docs/server2/manifest_data_source_test.py b/chrome/common/extensions/docs/server2/manifest_data_source_test.py |
index 3f971b6b5d0cdab9613cd633443886f99dc5bbcd..89220b1b1576fbc1505e2cdda434050b331d7a7c 100755 |
--- a/chrome/common/extensions/docs/server2/manifest_data_source_test.py |
+++ b/chrome/common/extensions/docs/server2/manifest_data_source_test.py |
@@ -3,126 +3,200 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import json |
+from copy import deepcopy |
import unittest |
-from compiled_file_system import CompiledFileSystem |
-from manifest_data_source import ManifestDataSource |
-from object_store_creator import ObjectStoreCreator |
-from test_file_system import TestFileSystem |
- |
-file_system = TestFileSystem({ |
- "_manifest_features.json": json.dumps({ |
- 'req0': { |
- 'extension_types': ['platform_app', 'extension'] |
- }, |
- 'req1': { |
- 'extension_types': 'all' |
- }, |
- 'opt0': { |
- 'extension_types': ['extension'] |
- }, |
- 'opt1': { |
- 'extension_types': ['hosted_app'] |
- }, |
- 'free0': { |
- 'extension_types': ['platform_app'] |
- }, |
- 'free1': { |
- 'extension_types': ['platform_app', 'hosted_app', 'extension'] |
- }, |
- 'only0': { |
- 'extension_types': 'all' |
- }, |
- 'only1': { |
- 'extension_types': ['platform_app'] |
- }, |
- 'rec0': { |
- 'extension_types': ['extension'] |
- }, |
- 'rec1': { |
- 'extension_types': ['platform_app', 'extension'] |
- } |
- }), |
- "manifest.json": json.dumps({ |
- 'required': [ |
- { |
- 'name': 'req0', |
- 'example': 'Extension' |
+import manifest_data_source |
+ |
+convert_and_annotate_docs = { |
+ 'doc2': { |
+ 'level': 'required', |
+ 'name': 'doc2' |
+ }, |
+ 'doc1': { |
+ 'level': 'required', |
+ 'name': 'doc1', |
+ 'subdocs': { |
+ 'sub1': { |
+ 'annotations': ['not so important'], |
+ 'level': 'optional', |
+ 'name': 'sub1' |
}, |
- {'name': 'req1'} |
- ], |
- 'only_one': [ |
- {'name': 'only0'}, |
- {'name': 'only1'} |
- ], |
- 'recommended': [ |
- {'name': 'rec0'}, |
- {'name': 'rec1'} |
- ], |
- 'optional': [ |
- {'name': 'opt0'}, |
- {'name': 'opt1'} |
- ] |
- }) |
-}) |
+ 'sub2': { |
+ 'level': 'required', |
+ 'name': 'sub2' |
+ } |
+ } |
+ }, |
+ 'doc3': { |
+ 'level': 'only_one', |
+ 'name': 'doc3' |
+ }, |
+ 'doc4': { |
+ 'level': 'recommended', |
+ 'name': 'doc4' |
+ }, |
+ 'doc5': { |
+ 'level': 'only_one', |
+ 'name': 'doc5' |
+ }, |
+ 'doc6': { |
+ 'level': 'optional', |
+ 'name': 'doc6' |
+ } |
+} |
class ManifestDataSourceTest(unittest.TestCase): |
- def testCreateManifestData(self): |
- expected_extensions = { |
- 'required': [ |
- { |
- 'name': 'req0', |
- 'example': 'Extension' |
- }, |
- {'name': 'req1'} |
- ], |
- 'recommended': [ |
- {'name': 'rec0'}, |
- {'name': 'rec1'} |
- ], |
- 'only_one': [ |
- {'name': 'only0'} |
- ], |
- 'optional': [ |
- {'name': 'free1'}, |
- { |
- 'name': 'opt0', |
- 'is_last': True |
- } |
- ] |
+ def testInsertSubDocs(self): |
+ docs = { |
+ 'doc1': {}, |
+ 'doc1.nest1': {}, |
+ 'doc1.nest1.child1': {}, |
+ 'doc1.nest2.child1': {}, |
+ 'doc1.nest2': {}, |
+ 'doc1.nest2.child2': {}, |
+ 'doc2': {}, |
} |
- expected_apps = { |
- 'required': [ |
- { |
- 'name': 'req0', |
- 'example': 'Application' |
- }, |
- {'name': 'req1'} |
- ], |
- 'recommended': [ |
- {'name': 'rec1'} |
- ], |
- 'only_one': [ |
- {'name': 'only0'}, |
- {'name': 'only1'} |
- ], |
- 'optional': [ |
- {'name': 'free0'}, |
- { |
- 'name': 'free1', |
- 'is_last': True |
+ expected_docs = { |
+ 'doc1': { |
+ 'subdocs': { |
+ 'nest1': { |
+ 'subdocs': { |
+ 'child1': { 'name': 'child1' } |
+ }, |
+ 'name': 'nest1' |
+ }, |
+ 'nest2': { |
+ 'subdocs': { |
+ 'child1': { 'name': 'child1' }, |
+ 'child2': { 'name': 'child2' } |
+ }, |
+ 'name': 'nest2' |
+ } |
} |
- ] |
+ }, |
+ 'doc2': {} |
+ } |
+ |
+ manifest_data_source._InsertSubDocs(docs) |
+ self.assertEqual(expected_docs, docs) |
+ |
+ def testFilter(self): |
+ master = { |
+ 'doc1': { 'platform': ['app', 'extension'] }, |
+ 'doc2': { 'platform': ['app'] }, |
+ 'doc3': { 'platform': ['extension'] }, |
+ 'doc4': { 'platform': [] } |
+ } |
+ |
+ apps_expected = { |
+ 'doc1': { 'platform': ['app', 'extension'] }, |
+ 'doc2': { 'platform': ['app'] } |
+ } |
+ |
+ extensions_expected = { |
+ 'doc1': { 'platform': ['app', 'extension'] }, |
+ 'doc3': { 'platform': ['extension'] } |
} |
- mds = ManifestDataSource( |
- CompiledFileSystem.Factory(file_system, ObjectStoreCreator.ForTest()), |
- file_system, 'manifest.json', '_manifest_features.json') |
+ filtered_apps = deepcopy(master) |
+ filtered_extensions = deepcopy(master) |
+ |
+ manifest_data_source._Filter(filtered_apps, 'app') |
+ manifest_data_source._Filter(filtered_extensions, 'extension') |
+ |
+ self.assertEqual(apps_expected, filtered_apps) |
+ self.assertEqual(extensions_expected, filtered_extensions) |
+ |
+ def testConvertAndSortDocs(self): |
+ expected_docs = [ |
+ { |
+ 'level': 'required', |
+ 'name': 'doc1', |
+ 'subdocs': [ |
+ { |
+ 'level': 'required', |
+ 'name': 'sub2' |
+ }, |
+ { |
+ 'annotations': ['not so important'], |
+ 'level': 'optional', |
+ 'name': 'sub1' |
+ } |
+ ] |
+ }, |
+ { |
+ 'level': 'required', |
+ 'name': 'doc2' |
+ }, |
+ { |
+ 'level': 'recommended', |
+ 'name': 'doc4' |
+ }, |
+ { |
+ 'level': 'only_one', |
+ 'name': 'doc3' |
+ }, |
+ { |
+ 'level': 'only_one', |
+ 'name': 'doc5' |
+ }, |
+ { |
+ 'level': 'optional', |
+ 'name': 'doc6' |
+ } |
+ ] |
+ |
+ self.assertEqual(expected_docs, manifest_data_source._ConvertAndSortDocs( |
+ deepcopy(convert_and_annotate_docs))) |
+ |
+ def testAnnotate(self): |
+ expected_docs = [ |
+ { |
+ 'level': 'required', |
+ 'name': 'doc1', |
+ 'subdocs': [ |
+ { |
+ 'level': 'required', |
+ 'name': 'sub2' |
+ }, |
+ { |
+ 'annotations': ['Optional', 'not so important'], |
+ 'level': 'optional', |
+ 'name': 'sub1' |
+ } |
+ ] |
+ }, |
+ { |
+ 'level': 'required', |
+ 'name': 'doc2' |
+ }, |
+ { |
+ 'annotations': ['Recommended'], |
+ 'level': 'recommended', |
+ 'name': 'doc4' |
+ }, |
+ { |
+ 'annotations': ['Pick one (or none)'], |
+ 'level': 'only_one', |
+ 'name': 'doc3' |
+ }, |
+ { |
+ 'level': 'only_one', |
+ 'name': 'doc5' |
+ }, |
+ { |
+ 'annotations': ['Optional'], |
+ 'level': 'optional', |
+ 'name': 'doc6' |
+ } |
+ ] |
- self.assertEqual(expected_extensions, mds.get('extensions')) |
- self.assertEqual(expected_apps, mds.get('apps')) |
+ annotated = manifest_data_source._ConvertAndSortDocs( |
+ deepcopy(convert_and_annotate_docs)) |
+ manifest_data_source._Annotate(annotated) |
+ self.assertEqual(expected_docs, annotated) |
if __name__ == '__main__': |
unittest.main() |