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.
8 from features_utility import Parse, Filtered, MergedWith
11 class FeaturesUtilityTest(unittest.TestCase):
12 def testFromJson(self):
15 'extension_types': ['extension', 'platform_app']
18 'extension_types': ['hosted_app', 'packaged_app']
21 'whitelist': 'hashhashashhashashhashashhash'
24 { 'extension_types': 'all' },
25 { 'whitelist': 'hashhashashhashashhashashhash' }
28 'extension_types': ['extension']
31 'extension_types': ['platform_app', 'hosted_app', 'packaged_app']
37 'platforms': ['apps', 'extensions'],
45 'platforms': ['apps', 'extensions'],
49 'platforms': ['extensions'],
53 'platforms': ['apps'],
58 self.assertEqual(expected, Parse(raw_features_json))
60 def testFeatureList(self):
63 { 'extension_types': ['extension'] },
64 { 'extension_types': ['platform_app'] }
67 { 'channel': 'dev', 'extension_types': ['extension', 'platform_app'] },
68 { 'channel': 'stable' }
71 { 'channel': 'beta' },
75 { 'channel': 'beta' },
76 { 'dependencies': ['permission:perm1'] }
82 'platforms': ['apps', 'extensions'],
87 'platforms': ['apps', 'extensions'],
97 'dependencies': ['permission:perm1'],
102 self.assertEqual(expected, Parse(raw_features_json))
104 def testFilter(self):
106 'doc1': { 'platforms': ['apps'] },
107 'doc2': { 'platforms': ['extensions'] },
108 'doc3': { 'platforms': ['apps', 'extensions'] },
109 'doc4': { 'platforms': [] }
112 apps_names = set(('doc1', 'doc3'))
113 extension_names = set(('doc2', 'doc3'))
115 self.assertEqual(sorted(apps_names),
116 sorted(Filtered(unfiltered, 'apps').keys()))
117 self.assertEqual(sorted(extension_names),
118 sorted(Filtered(unfiltered, 'extensions').keys()))
120 def testMergeFeatures(self):
123 'platforms': ['apps']
133 'platforms': ['extensions']
139 'platforms': ['extensions', 'apps']
146 'platforms': ['extensions']
154 'platforms': ['extensions', 'apps']
158 self.assertEqual(expected, MergedWith(features, other))
160 if __name__ == '__main__':