manifest_data_source_test.py revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from compiled_file_system import CompiledFileSystem 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)from features_bundle import FeaturesBundle 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import manifest_data_source 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from object_store_creator import ObjectStoreCreator 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)convert_and_annotate_docs = { 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': { 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': "My {{title}}", 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name', 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required' 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc2': { 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc1': { 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': { 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'sub1': { 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['not so important'], 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1' 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'sub2': { 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc3': { 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc4': { 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc5': { 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc6': { 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6' 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class ManifestDataSourceTest(unittest.TestCase): 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testListifyAndSortDocs(self): 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['not so important'], 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1' 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': '"My App"', 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True, 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name' 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 92ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch { 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6' 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ] 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) deepcopy(convert_and_annotate_docs), 'App')) 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testAnnotate(self): 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub2' 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Optional', 'not so important'], 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'sub1', 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'is_last': True 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc2' 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'name', 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'required', 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': '"My App"', 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Recommended'], 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'recommended', 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc4' 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Pick one (or none)'], 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc3' 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'only_one', 1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc5' 1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }, 1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'annotations': ['Optional'], 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'level': 'optional', 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc6', 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'is_last': True 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) annotated = manifest_data_source._ListifyAndSortDocs( 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) deepcopy(convert_and_annotate_docs), 'App') 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) manifest_data_source._AddLevelAnnotations(annotated) 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual(expected_docs, annotated) 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testExpandedExamples(self): 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) docs = { 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'doc1': { 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': { 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'big': { 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'nested': { 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'json_example': ['with', 'more', 'json'] 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 177ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected_docs = [ 1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'doc1', 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'big', 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'nested', 1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'children': [ 1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'name': 'json_example', 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'example': json.dumps(['with', 'more', 'json']), 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'has_example': True 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ] 200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEqual( 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'apps')) 203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) def testManifestDataSource(self): 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) manifest_features = { 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'doc1': { 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'name': 'doc1', 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps', 'extensions'], 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'example': {}, 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'level': 'required' 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'doc1.sub1': { 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'name': 'doc1.sub1', 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps'], 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'annotations': ['important!'], 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'level': 'recommended' 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }, 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'doc2': { 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'name': 'doc2', 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['extensions'] 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 224424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) expected_app = [ 225424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { 226424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'example': '{...}', 227424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'has_example': True, 228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'level': 'required', 229424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'name': 'doc1', 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps', 'extensions'], 231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'children': [ 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'annotations': [ 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'Recommended', 235424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'important!' 236424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ], 237424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'level': 'recommended', 238424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'name': 'sub1', 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'platforms': ['apps'], 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'is_last': True 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ], 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'is_last': True 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 245424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ] 246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) class FakeFeaturesBundle(object): 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) def GetManifestFeatures(self): 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return manifest_features 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) class FakeServerInstance(object): 252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) def __init__(self): 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.features_bundle = FakeFeaturesBundle() 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.object_store_creator = ObjectStoreCreator.ForTest() 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mds = manifest_data_source.ManifestDataSource(FakeServerInstance(), None) 257424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) self.assertEqual(expected_app, mds.get('apps')) 258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 259ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochif __name__ == '__main__': 260ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch unittest.main() 261