blob: f9c99befc37cc583b48bcc2be9e6c52d169310b8 [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
from features_bundle import FeaturesBundle
import manifest_data_source
from object_store_creator import ObjectStoreCreator
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, 'apps'))
def testManifestDataSource(self):
manifest_features = {
'doc1': {
'name': 'doc1',
'platforms': ['apps', 'extensions'],
'example': {},
'level': 'required'
},
'doc1.sub1': {
'name': 'doc1.sub1',
'platforms': ['apps'],
'annotations': ['important!'],
'level': 'recommended'
},
'doc2': {
'name': 'doc2',
'platforms': ['extensions']
}
}
expected_app = [
{
'example': '{...}',
'has_example': True,
'level': 'required',
'name': 'doc1',
'platforms': ['apps', 'extensions'],
'children': [
{
'annotations': [
'Recommended',
'important!'
],
'level': 'recommended',
'name': 'sub1',
'platforms': ['apps'],
'is_last': True
}
],
'is_last': True
}
]
class FakeFeaturesBundle(object):
def GetManifestFeatures(self):
return manifest_features
class FakeServerInstance(object):
def __init__(self):
self.features_bundle = FakeFeaturesBundle()
self.object_store_creator = ObjectStoreCreator.ForTest()
mds = manifest_data_source.ManifestDataSource(FakeServerInstance(), None)
self.assertEqual(expected_app, mds.get('apps'))
if __name__ == '__main__':
unittest.main()