manifest_data_source_test.py revision 3551c9c881056c480085172ff9840cab31610854
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 6from copy import deepcopy 7import json 8import unittest 9 10import manifest_data_source 11 12convert_and_annotate_docs = { 13 'name': { 14 'example': "My {{title}}", 15 'name': 'name', 16 'level': 'required' 17 }, 18 'doc2': { 19 'level': 'required', 20 'name': 'doc2' 21 }, 22 'doc1': { 23 'level': 'required', 24 'name': 'doc1', 25 'children': { 26 'sub1': { 27 'annotations': ['not so important'], 28 'level': 'optional', 29 'name': 'sub1' 30 }, 31 'sub2': { 32 'level': 'required', 33 'name': 'sub2' 34 } 35 } 36 }, 37 'doc3': { 38 'level': 'only_one', 39 'name': 'doc3' 40 }, 41 'doc4': { 42 'level': 'recommended', 43 'name': 'doc4' 44 }, 45 'doc5': { 46 'level': 'only_one', 47 'name': 'doc5' 48 }, 49 'doc6': { 50 'level': 'optional', 51 'name': 'doc6' 52 } 53} 54 55class ManifestDataSourceTest(unittest.TestCase): 56 def testListifyAndSortDocs(self): 57 expected_docs = [ 58 { 59 'level': 'required', 60 'name': 'doc1', 61 'children': [ 62 { 63 'level': 'required', 64 'name': 'sub2' 65 }, 66 { 67 'annotations': ['not so important'], 68 'level': 'optional', 69 'name': 'sub1' 70 } 71 ] 72 }, 73 { 74 'level': 'required', 75 'name': 'doc2' 76 }, 77 { 78 'level': 'required', 79 'example': '"My App"', 80 'has_example': True, 81 'name': 'name' 82 }, 83 { 84 'level': 'recommended', 85 'name': 'doc4' 86 }, 87 { 88 'level': 'only_one', 89 'name': 'doc3' 90 }, 91 { 92 'level': 'only_one', 93 'name': 'doc5' 94 }, 95 { 96 'level': 'optional', 97 'name': 'doc6' 98 } 99 ] 100 101 self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs( 102 deepcopy(convert_and_annotate_docs), 'App')) 103 104 def testAnnotate(self): 105 expected_docs = [ 106 { 107 'level': 'required', 108 'name': 'doc1', 109 'children': [ 110 { 111 'level': 'required', 112 'name': 'sub2' 113 }, 114 { 115 'annotations': ['Optional', 'not so important'], 116 'level': 'optional', 117 'name': 'sub1', 118 'is_last': True 119 } 120 ] 121 }, 122 { 123 'level': 'required', 124 'name': 'doc2' 125 }, 126 { 127 'name': 'name', 128 'level': 'required', 129 'example': '"My App"', 130 'has_example': True 131 }, 132 { 133 'annotations': ['Recommended'], 134 'level': 'recommended', 135 'name': 'doc4' 136 }, 137 { 138 'annotations': ['Pick one (or none)'], 139 'level': 'only_one', 140 'name': 'doc3' 141 }, 142 { 143 'level': 'only_one', 144 'name': 'doc5' 145 }, 146 { 147 'annotations': ['Optional'], 148 'level': 'optional', 149 'name': 'doc6', 150 'is_last': True 151 } 152 ] 153 154 annotated = manifest_data_source._ListifyAndSortDocs( 155 deepcopy(convert_and_annotate_docs), 'App') 156 manifest_data_source._AddLevelAnnotations(annotated) 157 self.assertEqual(expected_docs, annotated) 158 159 def testRestructureChildren(self): 160 docs = { 161 'doc1.sub2': { 162 'name': 'doc1.sub2' 163 }, 164 'doc1': { 165 'name': 'doc1' 166 }, 167 'doc2': { 168 'name': 'doc2' 169 }, 170 'doc1.sub1.subsub1': { 171 'name': 'doc1.sub1.subsub1' 172 }, 173 'doc1.sub1': { 174 'name': 'doc1.sub1' 175 } 176 } 177 178 expected_docs = { 179 'doc1': { 180 'name': 'doc1', 181 'children': { 182 'sub1': { 183 'name': 'sub1', 184 'children': { 185 'subsub1': { 186 'name' :'subsub1' 187 } 188 } 189 }, 190 'sub2': { 191 'name': 'sub2' 192 } 193 } 194 }, 195 'doc2': { 196 'name': 'doc2' 197 } 198 } 199 200 self.assertEqual( 201 expected_docs, manifest_data_source._RestructureChildren(docs)) 202 203 def testExpandedExamples(self): 204 docs = { 205 'doc1': { 206 'name': 'doc1', 207 'example': { 208 'big': { 209 'nested': { 210 'json_example': ['with', 'more', 'json'] 211 } 212 } 213 } 214 } 215 } 216 217 expected_docs = [ 218 { 219 'name': 'doc1', 220 'children': [ 221 { 222 'name': 'big', 223 'children': [ 224 { 225 'name': 'nested', 226 'children': [ 227 { 228 'name': 'json_example', 229 'example': json.dumps(['with', 'more', 'json']), 230 'has_example': True 231 } 232 ] 233 } 234 ] 235 } 236 ] 237 } 238 ] 239 240 self.assertEqual( 241 expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'app')) 242 243if __name__ == '__main__': 244 unittest.main() 245