OLD | NEW |
| (Empty) |
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 | |
6 import unittest | |
7 | |
8 from features_utility import Parse, Filtered, MergedWith | |
9 | |
10 | |
11 class FeaturesUtilityTest(unittest.TestCase): | |
12 def testFromJson(self): | |
13 raw_features_json = { | |
14 'doc1': { | |
15 'extension_types': ['extension', 'platform_app'] | |
16 }, | |
17 'doc2': { | |
18 'extension_types': ['hosted_app', 'packaged_app'] | |
19 }, | |
20 'doc3': { | |
21 'whitelist': 'hashhashashhashashhashashhash' | |
22 }, | |
23 'doc4': [ | |
24 { 'extension_types': 'all' }, | |
25 { 'whitelist': 'hashhashashhashashhashashhash' } | |
26 ], | |
27 'doc5': { | |
28 'extension_types': ['extension'] | |
29 }, | |
30 'doc1.sub1': { | |
31 'extension_types': ['platform_app', 'hosted_app', 'packaged_app'] | |
32 } | |
33 } | |
34 | |
35 expected = { | |
36 'doc1': { | |
37 'platforms': ['apps', 'extensions'], | |
38 'name': 'doc1' | |
39 }, | |
40 'doc2': { | |
41 'platforms': [], | |
42 'name': 'doc2' | |
43 }, | |
44 'doc4': { | |
45 'platforms': ['apps', 'extensions'], | |
46 'name': 'doc4' | |
47 }, | |
48 'doc5': { | |
49 'platforms': ['extensions'], | |
50 'name': 'doc5' | |
51 }, | |
52 'doc1.sub1': { | |
53 'platforms': ['apps'], | |
54 'name': 'doc1.sub1' | |
55 } | |
56 } | |
57 | |
58 self.assertEqual(expected, Parse(raw_features_json)) | |
59 | |
60 def testFeatureList(self): | |
61 raw_features_json = { | |
62 'doc1': [ | |
63 { 'extension_types': ['extension'] }, | |
64 { 'extension_types': ['platform_app'] } | |
65 ], | |
66 'doc2': [ | |
67 { 'channel': 'dev', 'extension_types': ['extension', 'platform_app'] }, | |
68 { 'channel': 'stable' } | |
69 ], | |
70 'doc3': [ | |
71 { 'channel': 'beta' }, | |
72 { 'channel': 'dev' } | |
73 ], | |
74 'doc4': [ | |
75 { 'channel': 'beta' }, | |
76 { 'dependencies': ['permission:perm1'] } | |
77 ] | |
78 } | |
79 | |
80 expected = { | |
81 'doc1': { | |
82 'platforms': ['apps', 'extensions'], | |
83 'name': 'doc1' | |
84 }, | |
85 'doc2': { | |
86 'channel': 'stable', | |
87 'platforms': ['apps', 'extensions'], | |
88 'name': 'doc2' | |
89 }, | |
90 'doc3': { | |
91 'platforms': [], | |
92 'channel': 'beta', | |
93 'name': 'doc3' | |
94 }, | |
95 'doc4': { | |
96 'platforms': [], | |
97 'dependencies': ['permission:perm1'], | |
98 'name': 'doc4' | |
99 } | |
100 } | |
101 | |
102 self.assertEqual(expected, Parse(raw_features_json)) | |
103 | |
104 def testFilter(self): | |
105 unfiltered = { | |
106 'doc1': { 'platforms': ['apps'] }, | |
107 'doc2': { 'platforms': ['extensions'] }, | |
108 'doc3': { 'platforms': ['apps', 'extensions'] }, | |
109 'doc4': { 'platforms': [] } | |
110 } | |
111 | |
112 apps_names = set(('doc1', 'doc3')) | |
113 extension_names = set(('doc2', 'doc3')) | |
114 | |
115 self.assertEqual(sorted(apps_names), | |
116 sorted(Filtered(unfiltered, 'apps').keys())) | |
117 self.assertEqual(sorted(extension_names), | |
118 sorted(Filtered(unfiltered, 'extensions').keys())) | |
119 | |
120 def testMergeFeatures(self): | |
121 features = { | |
122 'doc1': { | |
123 'platforms': ['apps'] | |
124 }, | |
125 'doc3': { | |
126 'name': 'doc3' | |
127 } | |
128 } | |
129 | |
130 other = { | |
131 'doc1': { | |
132 'name': 'doc1', | |
133 'platforms': ['extensions'] | |
134 }, | |
135 'doc2': { | |
136 'name': 'doc2' | |
137 }, | |
138 'doc3': { | |
139 'platforms': ['extensions', 'apps'] | |
140 } | |
141 } | |
142 | |
143 expected = { | |
144 'doc1': { | |
145 'name': 'doc1', | |
146 'platforms': ['extensions'] | |
147 }, | |
148 'doc2': { | |
149 'name': 'doc2', | |
150 'platforms': [] | |
151 }, | |
152 'doc3': { | |
153 'name': 'doc3', | |
154 'platforms': ['extensions', 'apps'] | |
155 } | |
156 } | |
157 | |
158 self.assertEqual(expected, MergedWith(features, other)) | |
159 | |
160 if __name__ == '__main__': | |
161 unittest.main() | |
OLD | NEW |