manifest_data_source_test.py revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
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 6from copy import deepcopy 7import json 8import unittest 9 10from compiled_file_system import CompiledFileSystem 11import manifest_data_source 12from object_store_creator import ObjectStoreCreator 13from test_file_system import TestFileSystem 14 15convert_and_annotate_docs = { 16 'name': { 17 'example': "My {{title}}", 18 'name': 'name', 19 'level': 'required' 20 }, 21 'doc2': { 22 'level': 'required', 23 'name': 'doc2' 24 }, 25 'doc1': { 26 'level': 'required', 27 'name': 'doc1', 28 'children': { 29 'sub1': { 30 'annotations': ['not so important'], 31 'level': 'optional', 32 'name': 'sub1' 33 }, 34 'sub2': { 35 'level': 'required', 36 'name': 'sub2' 37 } 38 } 39 }, 40 'doc3': { 41 'level': 'only_one', 42 'name': 'doc3' 43 }, 44 'doc4': { 45 'level': 'recommended', 46 'name': 'doc4' 47 }, 48 'doc5': { 49 'level': 'only_one', 50 'name': 'doc5' 51 }, 52 'doc6': { 53 'level': 'optional', 54 'name': 'doc6' 55 } 56} 57 58class ManifestDataSourceTest(unittest.TestCase): 59 def testListifyAndSortDocs(self): 60 expected_docs = [ 61 { 62 'level': 'required', 63 'name': 'doc1', 64 'children': [ 65 { 66 'level': 'required', 67 'name': 'sub2' 68 }, 69 { 70 'annotations': ['not so important'], 71 'level': 'optional', 72 'name': 'sub1' 73 } 74 ] 75 }, 76 { 77 'level': 'required', 78 'name': 'doc2' 79 }, 80 { 81 'level': 'required', 82 'example': '"My App"', 83 'has_example': True, 84 'name': 'name' 85 }, 86 { 87 'level': 'recommended', 88 'name': 'doc4' 89 }, 90 { 91 'level': 'only_one', 92 'name': 'doc3' 93 }, 94 { 95 'level': 'only_one', 96 'name': 'doc5' 97 }, 98 { 99 'level': 'optional', 100 'name': 'doc6' 101 } 102 ] 103 104 self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( 105 deepcopy(convert_and_annotate_docs), 'App')) 106 107 def testAnnotate(self): 108 expected_docs = [ 109 { 110 'level': 'required', 111 'name': 'doc1', 112 'children': [ 113 { 114 'level': 'required', 115 'name': 'sub2' 116 }, 117 { 118 'annotations': ['Optional', 'not so important'], 119 'level': 'optional', 120 'name': 'sub1', 121 'is_last': True 122 } 123 ] 124 }, 125 { 126 'level': 'required', 127 'name': 'doc2' 128 }, 129 { 130 'name': 'name', 131 'level': 'required', 132 'example': '"My App"', 133 'has_example': True 134 }, 135 { 136 'annotations': ['Recommended'], 137 'level': 'recommended', 138 'name': 'doc4' 139 }, 140 { 141 'annotations': ['Pick one (or none)'], 142 'level': 'only_one', 143 'name': 'doc3' 144 }, 145 { 146 'level': 'only_one', 147 'name': 'doc5' 148 }, 149 { 150 'annotations': ['Optional'], 151 'level': 'optional', 152 'name': 'doc6', 153 'is_last': True 154 } 155 ] 156 157 annotated = manifest_data_source._ListifyAndSortDocs( 158 deepcopy(convert_and_annotate_docs), 'App') 159 manifest_data_source._AddLevelAnnotations(annotated) 160 self.assertEqual(expected_docs, annotated) 161 162 def testExpandedExamples(self): 163 docs = { 164 'doc1': { 165 'name': 'doc1', 166 'example': { 167 'big': { 168 'nested': { 169 'json_example': ['with', 'more', 'json'] 170 } 171 } 172 } 173 } 174 } 175 176 expected_docs = [ 177 { 178 'name': 'doc1', 179 'children': [ 180 { 181 'name': 'big', 182 'children': [ 183 { 184 'name': 'nested', 185 'children': [ 186 { 187 'name': 'json_example', 188 'example': json.dumps(['with', 'more', 'json']), 189 'has_example': True 190 } 191 ] 192 } 193 ] 194 } 195 ] 196 } 197 ] 198 199 self.assertEqual( 200 expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'app')) 201 202 def testManifestDataSource(self): 203 file_system = TestFileSystem({ 204 '_manifest_features.json': json.dumps({ 205 'doc1': { 206 'extension_types': 'all' 207 }, 208 'doc1.sub1': { 209 'extension_types': ['platform_app'] 210 }, 211 'doc2': { 212 'extension_types': ['extension'] 213 } 214 }), 215 'manifest.json': json.dumps({ 216 'doc1': { 217 'example': {}, 218 'level': 'required' 219 }, 220 'doc1.sub1': { 221 'annotations': ['important!'], 222 'level': 'recommended' 223 } 224 }) 225 }) 226 227 expected_app = [ 228 { 229 'example': '{...}', 230 'has_example': True, 231 'level': 'required', 232 'name': 'doc1', 233 'platforms': ['app', 'extension'], 234 'children': [ 235 { 236 'annotations': [ 237 'Recommended', 238 'important!' 239 ], 240 'level': 'recommended', 241 'name': 'sub1', 242 'platforms': ['app'], 243 'is_last': True 244 } 245 ], 246 'is_last': True 247 } 248 ] 249 250 class FakeServerInstance(object): 251 def __init__(self): 252 self.host_file_system = file_system 253 self.compiled_host_fs_factory = CompiledFileSystem.Factory( 254 file_system, ObjectStoreCreator.ForTest()) 255 self.manifest_json_path = 'manifest.json' 256 self.manifest_features_path = '_manifest_features.json' 257 258 mds = manifest_data_source.ManifestDataSource(FakeServerInstance()) 259 self.maxDiff = None 260 self.assertEqual(expected_app, mds.get('apps')) 261 262if __name__ == '__main__': 263 unittest.main() 264