Home | History | Annotate | Download | only in server2
      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()
    162