| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 from copy import deepcopy | 6 from copy import deepcopy |
| 7 import unittest | 7 import unittest |
| 8 | 8 |
| 9 from features_model import Feature |
| 9 import manifest_data_source | 10 import manifest_data_source |
| 10 | 11 |
| 11 convert_and_annotate_docs = { | 12 convert_and_annotate_docs = { |
| 12 'name': { | 13 'name': Feature({ |
| 13 'example': "My {{title}}", | 14 'example': "My {{title}}", |
| 14 'name': 'name', | 15 'name': 'name', |
| 15 'level': 'required' | 16 'level': 'required' |
| 16 }, | 17 }), |
| 17 'doc2': { | 18 'doc2': Feature({ |
| 18 'level': 'required', | 19 'level': 'required', |
| 19 'name': 'doc2' | 20 'name': 'doc2' |
| 20 }, | 21 }), |
| 21 'doc1': { | 22 'doc1': Feature({ |
| 22 'level': 'required', | 23 'level': 'required', |
| 23 'name': 'doc1', | 24 'name': 'doc1', |
| 24 'children': { | 25 'children': { |
| 25 'sub1': { | 26 'sub1': Feature({ |
| 26 'annotations': ['not so important'], | 27 'annotations': ['not so important'], |
| 27 'level': 'optional', | 28 'level': 'optional', |
| 28 'name': 'sub1' | 29 'name': 'sub1' |
| 29 }, | 30 }), |
| 30 'sub2': { | 31 'sub2': Feature({ |
| 31 'level': 'required', | 32 'level': 'required', |
| 32 'name': 'sub2' | 33 'name': 'sub2' |
| 33 } | 34 }) |
| 34 } | 35 } |
| 35 }, | 36 }), |
| 36 'doc3': { | 37 'doc3': Feature({ |
| 37 'level': 'only_one', | 38 'level': 'only_one', |
| 38 'name': 'doc3' | 39 'name': 'doc3' |
| 39 }, | 40 }), |
| 40 'doc4': { | 41 'doc4': Feature({ |
| 41 'level': 'recommended', | 42 'level': 'recommended', |
| 42 'name': 'doc4' | 43 'name': 'doc4' |
| 43 }, | 44 }), |
| 44 'doc5': { | 45 'doc5': Feature({ |
| 45 'level': 'only_one', | 46 'level': 'only_one', |
| 46 'name': 'doc5' | 47 'name': 'doc5' |
| 47 }, | 48 }), |
| 48 'doc6': { | 49 'doc6': Feature({ |
| 49 'level': 'optional', | 50 'level': 'optional', |
| 50 'name': 'doc6' | 51 'name': 'doc6' |
| 51 } | 52 }) |
| 52 } | 53 } |
| 53 | 54 |
| 54 class ManifestDataSourceTest(unittest.TestCase): | 55 class ManifestDataSourceTest(unittest.TestCase): |
| 55 def testConvertAndSortDocs(self): | 56 def testConvertAndSortDocs(self): |
| 56 expected_docs = [ | 57 expected_docs = [ |
| 57 { | 58 Feature({ |
| 58 'level': 'required', | 59 'level': 'required', |
| 59 'name': 'doc1', | 60 'name': 'doc1', |
| 60 'children': [ | 61 'children': [ |
| 61 { | 62 Feature({ |
| 62 'level': 'required', | 63 'level': 'required', |
| 63 'name': 'sub2' | 64 'name': 'sub2' |
| 64 }, | 65 }), |
| 65 { | 66 Feature({ |
| 66 'annotations': ['not so important'], | 67 'annotations': ['not so important'], |
| 67 'level': 'optional', | 68 'level': 'optional', |
| 68 'name': 'sub1' | 69 'name': 'sub1' |
| 69 } | 70 }) |
| 70 ] | 71 ] |
| 71 }, | 72 }), |
| 72 { | 73 Feature({ |
| 73 'level': 'required', | 74 'level': 'required', |
| 74 'name': 'doc2' | 75 'name': 'doc2' |
| 75 }, | 76 }), |
| 76 { | 77 Feature({ |
| 77 'level': 'required', | 78 'level': 'required', |
| 78 'example': '"My App"', | 79 'example': '"My App"', |
| 79 'has_example': True, | 80 'has_example': True, |
| 80 'name': 'name' | 81 'name': 'name' |
| 81 }, | 82 }), |
| 82 { | 83 Feature({ |
| 83 'level': 'recommended', | 84 'level': 'recommended', |
| 84 'name': 'doc4' | 85 'name': 'doc4' |
| 85 }, | 86 }), |
| 86 { | 87 Feature({ |
| 87 'level': 'only_one', | 88 'level': 'only_one', |
| 88 'name': 'doc3' | 89 'name': 'doc3' |
| 89 }, | 90 }), |
| 90 { | 91 Feature({ |
| 91 'level': 'only_one', | 92 'level': 'only_one', |
| 92 'name': 'doc5' | 93 'name': 'doc5' |
| 93 }, | 94 }), |
| 94 { | 95 Feature({ |
| 95 'level': 'optional', | 96 'level': 'optional', |
| 96 'name': 'doc6' | 97 'name': 'doc6' |
| 97 } | 98 }) |
| 98 ] | 99 ] |
| 99 | 100 |
| 100 self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( | 101 self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( |
| 101 deepcopy(convert_and_annotate_docs), 'app')) | 102 deepcopy(convert_and_annotate_docs), 'app')) |
| 102 | 103 |
| 103 def testAnnotate(self): | 104 def testAnnotate(self): |
| 104 expected_docs = [ | 105 expected_docs = [ |
| 105 { | 106 Feature({ |
| 106 'level': 'required', | 107 'level': 'required', |
| 107 'name': 'doc1', | 108 'name': 'doc1', |
| 108 'children': [ | 109 'children': [ |
| 109 { | 110 Feature({ |
| 110 'level': 'required', | 111 'level': 'required', |
| 111 'name': 'sub2' | 112 'name': 'sub2' |
| 112 }, | 113 }), |
| 113 { | 114 Feature({ |
| 114 'annotations': ['Optional', 'not so important'], | 115 'annotations': ['Optional', 'not so important'], |
| 115 'level': 'optional', | 116 'level': 'optional', |
| 116 'name': 'sub1', | 117 'name': 'sub1', |
| 117 'is_last': True | 118 'is_last': True |
| 118 } | 119 }) |
| 119 ] | 120 ] |
| 120 }, | 121 }), |
| 121 { | 122 Feature({ |
| 122 'level': 'required', | 123 'level': 'required', |
| 123 'name': 'doc2' | 124 'name': 'doc2' |
| 124 }, | 125 }), |
| 125 { | 126 Feature({ |
| 126 'name': 'name', | 127 'name': 'name', |
| 127 'level': 'required', | 128 'level': 'required', |
| 128 'example': '"My App"', | 129 'example': '"My App"', |
| 129 'has_example': True | 130 'has_example': True |
| 130 }, | 131 }), |
| 131 { | 132 Feature({ |
| 132 'annotations': ['Recommended'], | 133 'annotations': ['Recommended'], |
| 133 'level': 'recommended', | 134 'level': 'recommended', |
| 134 'name': 'doc4' | 135 'name': 'doc4' |
| 135 }, | 136 }), |
| 136 { | 137 Feature({ |
| 137 'annotations': ['Pick one (or none)'], | 138 'annotations': ['Pick one (or none)'], |
| 138 'level': 'only_one', | 139 'level': 'only_one', |
| 139 'name': 'doc3' | 140 'name': 'doc3' |
| 140 }, | 141 }), |
| 141 { | 142 Feature({ |
| 142 'level': 'only_one', | 143 'level': 'only_one', |
| 143 'name': 'doc5' | 144 'name': 'doc5' |
| 144 }, | 145 }), |
| 145 { | 146 Feature({ |
| 146 'annotations': ['Optional'], | 147 'annotations': ['Optional'], |
| 147 'level': 'optional', | 148 'level': 'optional', |
| 148 'name': 'doc6', | 149 'name': 'doc6', |
| 149 'is_last': True | 150 'is_last': True |
| 150 } | 151 }) |
| 151 ] | 152 ] |
| 152 | 153 |
| 153 annotated = manifest_data_source._ListifyAndSortDocs( | 154 annotated = manifest_data_source._ListifyAndSortDocs( |
| 154 deepcopy(convert_and_annotate_docs), 'App') | 155 deepcopy(convert_and_annotate_docs), 'App') |
| 155 manifest_data_source._AddLevelAnnotations(annotated) | 156 manifest_data_source._AddLevelAnnotations(annotated) |
| 156 self.assertEqual(expected_docs, annotated) | 157 self.assertEqual(expected_docs, annotated) |
| 157 | 158 |
| 158 def testRestructureChildren(self): | 159 def testRestructureChildren(self): |
| 159 docs = { | 160 docs = { |
| 160 'doc1.sub2': { | 161 'doc1.sub2': Feature({ |
| 161 'name': 'doc1.sub2' | 162 'name': 'doc1.sub2' |
| 162 }, | 163 }), |
| 163 'doc1': { | 164 'doc1': Feature({ |
| 164 'name': 'doc1' | 165 'name': 'doc1' |
| 165 }, | 166 }), |
| 166 'doc2': { | 167 'doc2': Feature({ |
| 167 'name': 'doc2' | 168 'name': 'doc2' |
| 168 }, | 169 }), |
| 169 'doc1.sub1.subsub1': { | 170 'doc1.sub1.subsub1': Feature({ |
| 170 'name': 'doc1.sub1.subsub1' | 171 'name': 'doc1.sub1.subsub1' |
| 171 }, | 172 }), |
| 172 'doc1.sub1': { | 173 'doc1.sub1': Feature({ |
| 173 'name': 'doc1.sub1' | 174 'name': 'doc1.sub1' |
| 174 } | 175 }) |
| 175 } | 176 } |
| 176 | 177 |
| 177 expected_docs = { | 178 expected_docs = { |
| 178 'doc1': { | 179 'doc1': Feature({ |
| 179 'name': 'doc1', | 180 'name': 'doc1', |
| 180 'children': { | 181 'children': { |
| 181 'sub1': { | 182 'sub1': Feature({ |
| 182 'name': 'sub1', | 183 'name': 'sub1', |
| 183 'children': { | 184 'children': { |
| 184 'subsub1': { | 185 'subsub1': Feature({ |
| 185 'name' :'subsub1' | 186 'name' :'subsub1' |
| 186 } | 187 }) |
| 187 } | 188 } |
| 188 }, | 189 }), |
| 189 'sub2': { | 190 'sub2': Feature({ |
| 190 'name': 'sub2' | 191 'name': 'sub2' |
| 191 } | 192 }) |
| 192 } | 193 } |
| 193 }, | 194 }), |
| 194 'doc2': { | 195 'doc2': Feature({ |
| 195 'name': 'doc2' | 196 'name': 'doc2' |
| 196 } | 197 }) |
| 197 } | 198 } |
| 198 | 199 |
| 199 self.assertEqual( | 200 self.assertEqual( |
| 200 expected_docs, manifest_data_source._RestructureChildren(docs)) | 201 expected_docs, manifest_data_source._RestructureChildren(docs)) |
| 201 | 202 |
| 202 if __name__ == '__main__': | 203 if __name__ == '__main__': |
| 203 unittest.main() | 204 unittest.main() |
| OLD | NEW |