blob: da0babccf324fb20b7fdd8be67d98205c256e1c1 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from copy import deepcopy
import json
import unittest
from compiled_file_system import CompiledFileSystem
import manifest_data_source
from object_store_creator import ObjectStoreCreator
from test_file_system import TestFileSystem
convert_and_annotate_docs = {
'name': {
'example': "My {{title}}",
'name': 'name',
'level': 'required'
},
'doc2': {
'level': 'required',
'name': 'doc2'
},
'doc1': {
'level': 'required',
'name': 'doc1',
'children': {
'sub1': {
'annotations': ['not so important'],
'level': 'optional',
'name': 'sub1'
},
'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 testListifyAndSortDocs(self):
expected_docs = [
{
'level': 'required',
'name': 'doc1',
'children': [
{
'level': 'required',
'name': 'sub2'
},
{
'annotations': ['not so important'],
'level': 'optional',
'name': 'sub1'
}
]
},
{
'level': 'required',
'name': 'doc2'
},
{
'level': 'required',
'example': '"My App"',
'has_example': True,
'name': 'name'
},
{
'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._ListifyAndSortDocs(
deepcopy(convert_and_annotate_docs), 'App'))
def testAnnotate(self):
expected_docs = [
{
'level': 'required',
'name': 'doc1',
'children': [
{
'level': 'required',
'name': 'sub2'
},
{
'annotations': ['Optional', 'not so important'],
'level': 'optional',
'name': 'sub1',
'is_last': True
}
]
},
{
'level': 'required',
'name': 'doc2'
},
{
'name': 'name',
'level': 'required',
'example': '"My App"',
'has_example': True
},
{
'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',
'is_last': True
}
]
annotated = manifest_data_source._ListifyAndSortDocs(
deepcopy(convert_and_annotate_docs), 'App')
manifest_data_source._AddLevelAnnotations(annotated)
self.assertEqual(expected_docs, annotated)
def testExpandedExamples(self):
docs = {
'doc1': {
'name': 'doc1',
'example': {
'big': {
'nested': {
'json_example': ['with', 'more', 'json']
}
}
}
}
}
expected_docs = [
{
'name': 'doc1',
'children': [
{
'name': 'big',
'children': [
{
'name': 'nested',
'children': [
{
'name': 'json_example',
'example': json.dumps(['with', 'more', 'json']),
'has_example': True
}
]
}
]
}
]
}
]
self.assertEqual(
expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'app'))
def testManifestDataSource(self):
file_system = TestFileSystem({
'_manifest_features.json': json.dumps({
'doc1': {
'extension_types': 'all'
},
'doc1.sub1': {
'extension_types': ['platform_app']
},
'doc2': {
'extension_types': ['extension']
}
}),
'manifest.json': json.dumps({
'doc1': {
'example': {},
'level': 'required'
},
'doc1.sub1': {
'annotations': ['important!'],
'level': 'recommended'
}
})
})
expected_app = [
{
'example': '{...}',
'has_example': True,
'level': 'required',
'name': 'doc1',
'platforms': ['app', 'extension'],
'children': [
{
'annotations': [
'Recommended',
'important!'
],
'level': 'recommended',
'name': 'sub1',
'platforms': ['app'],
'is_last': True
}
],
'is_last': True
}
]
class FakeServerInstance(object):
def __init__(self):
self.host_file_system = file_system
self.compiled_host_fs_factory = CompiledFileSystem.Factory(
file_system, ObjectStoreCreator.ForTest())
self.manifest_json_path = 'manifest.json'
self.manifest_features_path = '_manifest_features.json'
mds = manifest_data_source.ManifestDataSource(FakeServerInstance(), None)
self.assertEqual(expected_app, mds.get('apps'))
if __name__ == '__main__':
unittest.main()