1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#!/usr/bin/env python 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch# found in the LICENSE file. 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from copy import deepcopy 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochimport json 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochimport unittest 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from future import Future 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import manifest_data_source 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from object_store_creator import ObjectStoreCreator 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)convert_and_annotate_docs = { 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': { 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'example': "My {{platform}}", 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name', 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required' 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc2': { 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc1': { 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': { 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'sub1': { 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['not so important'], 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1' 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'sub2': { 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc3': { 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc4': { 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc5': { 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc6': { 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6' 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class ManifestDataSourceTest(unittest.TestCase): 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testListifyAndSortDocs(self): 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['not so important'], 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1' 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': '"My App"', 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True, 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name' 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch { 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6' 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ] 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) deepcopy(convert_and_annotate_docs), 'App')) 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testAnnotate(self): 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Optional', 'not so important'], 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1', 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'is_last': True 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name', 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': '"My App"', 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Recommended'], 1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Pick one (or none)'], 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Optional'], 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6', 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'is_last': True 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) annotated = manifest_data_source._ListifyAndSortDocs( 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) deepcopy(convert_and_annotate_docs), 'App') 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) manifest_data_source._AddLevelAnnotations(annotated) 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual(expected_docs, annotated) 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testExpandedExamples(self): 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) docs = { 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc1': { 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': { 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'big': { 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'nested': { 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'json_example': ['with', 'more', 'json'] 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 173ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 175ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'big', 1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'nested', 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'json_example', 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': json.dumps(['with', 'more', 'json']), 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual( 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'apps')) 202ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def testNonExpandedExamples(self): 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) docs = { 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'doc1': { 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc1', 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': {} 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }, 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'doc2': { 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc2', 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': [] 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }, 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'doc3': { 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc3', 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': [{}] 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_docs = [ 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc1', 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'has_example': True, 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': '{...}' 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }, 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc2', 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'has_example': True, 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': '[...]' 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }, 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'name': 'doc3', 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'has_example': True, 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'example': '[{...}]' 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ] 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self.assertEqual( 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'apps')) 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 239424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) def testManifestDataSource(self): 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) manifest_features = { 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'doc1': { 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'name': 'doc1', 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps', 'extensions'], 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'example': {}, 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'level': 'required' 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'doc1.sub1': { 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'name': 'doc1.sub1', 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps'], 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'annotations': ['important!'], 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'level': 'recommended' 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) expected_app = [ 256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { 257424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'example': '{...}', 258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'has_example': True, 259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'level': 'required', 260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'name': 'doc1', 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps', 'extensions'], 262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'children': [ 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { 264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'annotations': [ 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'Recommended', 266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'important!' 267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ], 268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'level': 'recommended', 269424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'name': 'sub1', 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps'], 271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'is_last': True 272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ], 274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'is_last': True 275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 276424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ] 277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class FakePlatformBundle(object): 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetFeaturesBundle(self, platform): 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return FakeFeaturesBundle() 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) class FakeFeaturesBundle(object): 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) def GetManifestFeatures(self): 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Future(value=manifest_features) 2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) class FakeServerInstance(object): 287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) def __init__(self): 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.platform_bundle = FakePlatformBundle() 2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.object_store_creator = ObjectStoreCreator.ForTest() 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mds = manifest_data_source.ManifestDataSource(FakeServerInstance(), None) 292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) self.assertEqual(expected_app, mds.get('apps')) 293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 294ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochif __name__ == '__main__': 295ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch unittest.main() 296