configurationengine/source/cone/public/tests/unittest_configuration.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 #
       
     2 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 
       
    17 """
       
    18 Test the configuration
       
    19 """
       
    20 import unittest
       
    21 import string
       
    22 import sys,os
       
    23 import __init__
       
    24 
       
    25 from cone.public import api,exceptions,utils
       
    26 from cone.storage import persistentdictionary
       
    27 from cone.confml import persistentconfml
       
    28 
       
    29 class TestConfiguration(unittest.TestCase):    
       
    30     def setUp(self):
       
    31         pass
       
    32 
       
    33     # @test 
       
    34     def test_create_configuration(self):
       
    35         conf = api.Configuration("testmee.confml")
       
    36         self.assertTrue(conf)
       
    37 
       
    38     def test_get_root_configuration(self):
       
    39         conf = api.Configuration("testmee.confml")
       
    40         self.assertEquals(conf.get_root_configuration(),conf)
       
    41         conf.add_configuration(api.Configuration("foo/foo.confml")) 
       
    42         conf.add_configuration(api.Configuration("fii/fii.confml")) 
       
    43         conf.fii__fii_confml.add_configuration(api.Configuration("fii/foo.confml"))
       
    44         self.assertEquals(conf.fii__fii_confml.get_root_configuration(),conf)
       
    45         self.assertEquals(conf.foo__foo_confml.get_root_configuration(),conf)
       
    46         self.assertEquals(conf.fii__fii_confml.fii__foo_confml.get_root_configuration(),conf)
       
    47 
       
    48     def test_get_last_configuration(self):
       
    49         conf = api.Configuration("testmee.confml")
       
    50         conf.add_configuration(api.Configuration("foo/foo.confml")) 
       
    51         conf.add_configuration(api.Configuration("fii/fii.confml")) 
       
    52         conf.add_configuration(api.Configuration("hii/hii.confml")) 
       
    53         conf.fii__fii_confml.add_configuration(api.Configuration("fii/foo.confml"))
       
    54         self.assertEquals(conf.list_configurations(), ["foo/foo.confml","fii/fii.confml","hii/hii.confml"])
       
    55 
       
    56         self.assertEquals(conf.get_configuration_by_index(-1).get_path(), "hii/hii.confml")
       
    57         self.assertEquals(conf.get_configuration_by_index(0).get_path(), "foo/foo.confml")
       
    58         self.assertEquals(conf.get_configuration_by_index(1).get_path(), "fii/fii.confml")
       
    59         self.assertEquals(conf.get_configuration_by_index(2).get_path(), "hii/hii.confml")
       
    60 
       
    61     def compareconfiguration(self, conf1,conf2):
       
    62         self.assertEquals(conf1.path,conf2.path)
       
    63         self.assertEquals(conf1.name,conf2.name)
       
    64         self.assertEquals(conf1.ref,conf2.ref)
       
    65         self.assertEquals(conf1.namespace,conf2.namespace)
       
    66  
       
    67     def test_clone_single_configuration(self):
       
    68         conf1 = api.Configuration("testmee.confml")
       
    69         conf1.add_feature(api.Feature('test1'))
       
    70         conf1.add_feature(api.Feature('test2'))
       
    71         conf1.add_feature(api.Feature('child1'),'test1')
       
    72         dview = conf1.get_default_view()
       
    73         dview.get_feature('test1').set_value('one')
       
    74         dview.get_feature('test1.child1').set_value('subone')
       
    75         conf2 = conf1._clone(recursion=True)
       
    76         self.compareconfiguration(conf1, conf2)
       
    77         self.assertEquals(conf2.list_all_features(),['test1', 'test1.child1', 'test2'])
       
    78         dview2 = conf2.get_default_view()
       
    79         self.assertEquals(dview2.get_feature('test1').get_value(),'one')
       
    80         self.assertEquals(dview2.get_feature('test1.child1').get_value(),'subone')
       
    81 
       
    82     def test_clone_configuration_with_includes(self):
       
    83         conf1 = api.Configuration("testmee.confml")
       
    84         conf1.add_feature(api.Feature('test1'))
       
    85         conf1.add_feature(api.Feature('test2'))
       
    86         conf1.add_feature(api.Feature('child1'),'test1')
       
    87         conf1.create_configuration("confml/data.confml")
       
    88         dview = conf1.get_default_view()
       
    89         dview.get_feature('test1').set_value('one')
       
    90         dview.get_feature('test1.child1').set_value('subone')
       
    91         conf2 = conf1._clone(recursion=True)
       
    92         self.compareconfiguration(conf1, conf2)
       
    93         self.assertEquals(conf2.list_all_features(),['test1', 'test1.child1', 'test2'])
       
    94         self.assertEquals(conf2.list_configurations(),['confml/data.confml'])
       
    95         dview2 = conf2.get_default_view()
       
    96         self.assertEquals(dview2.get_feature('test1').get_value(),'one')
       
    97         self.assertEquals(dview2.get_feature('test1.child1').get_value(),'subone')
       
    98 
       
    99 #    def test_create_and_get_root(self):
       
   100 #        conf = api.Configuration("foobar/testmee.confml")
       
   101 #        self.assertEquals(conf.get_root(),"foobar/testmee.confml")
       
   102 
       
   103 class TestCompositeConfiguration(unittest.TestCase):    
       
   104     def test_add(self):
       
   105         conf = api.Configuration("data/simple.confml")
       
   106         layer = api.Configuration("laa")
       
   107         conf._add(layer)
       
   108         self.assertEquals(conf.list_configurations()[0],"laa")    
       
   109 
       
   110     def test_add_and_access_via_member(self):
       
   111         conf = api.Configuration("data/simple.confml")
       
   112         layer = api.Configuration("laa")
       
   113         conf._add(layer)
       
   114         self.assertEquals(conf.laa._name,"laa")    
       
   115 
       
   116     def test_add_and_add_another_config_under(self):
       
   117         conf = api.Configuration("data/simple.confml")
       
   118         layer = api.Configuration("laa")
       
   119         conf._add(layer)
       
   120         conf.laa._add(api.Configuration("foo"))
       
   121         self.assertEquals(conf.laa.foo._name,"foo")    
       
   122 
       
   123     def test_add_several_configurations(self):
       
   124         conf = api.Configuration("data/simple.confml")
       
   125         layer = api.Configuration("laa")
       
   126         conf._add(layer)
       
   127         conf._add(api.Configuration("foo"))
       
   128         conf._add(api.Configuration("faa"))
       
   129         self.assertEquals(conf.list_configurations()[0],"laa")    
       
   130         self.assertEquals(conf.list_configurations()[1],"foo")    
       
   131         self.assertEquals(conf.list_configurations()[2],"faa")    
       
   132 
       
   133     def test_add_several_and_remove_one_layer(self):
       
   134         conf = api.Configuration("data/simple.confml")
       
   135         layer = api.Configuration("laa")
       
   136         conf._add(layer)
       
   137         conf._add(api.Configuration("foo"))
       
   138         conf._add(api.Configuration("faa"))
       
   139         conf._remove("foo")
       
   140         
       
   141         self.assertEquals(conf.list_configurations()[0],"laa")    
       
   142         self.assertEquals(conf.list_configurations()[1],"faa")    
       
   143 
       
   144     def test_add_several_and_remove_last_layer(self):
       
   145         conf = api.Configuration("data/simple.confml")
       
   146         layer = api.Configuration("laa")
       
   147         conf._add(layer)
       
   148         conf._add(api.Configuration("foo"))
       
   149         conf._add(api.Configuration("faa"))
       
   150         conf._remove("faa")
       
   151         self.assertEquals(conf.list_configurations()[0],"laa")    
       
   152         self.assertEquals(conf.list_configurations()[1],"foo")    
       
   153 
       
   154     def test_add_several_and_remove_all_configurations(self):
       
   155         conf = api.Configuration("data/simple.confml")
       
   156         layer = api.Configuration("laa")
       
   157         conf._add(layer)
       
   158         conf._add(api.Configuration("foo"))
       
   159         conf._add(api.Configuration("faa"))
       
   160         for layername in conf.list_configurations():
       
   161             conf._remove(layername)
       
   162             
       
   163         self.assertTrue(len(conf.list_configurations())==0)        
       
   164 
       
   165     def test_add_several_and_try_to_remove_not_existing(self):
       
   166         conf = api.Configuration("data/simple.confml")
       
   167         layer = api.Configuration("laa")
       
   168         conf._add(layer)
       
   169         conf._add(api.Configuration("foo"))
       
   170         conf._add(api.Configuration("faa"))
       
   171         try:
       
   172             conf._remove("notthere")
       
   173             self.fail("removing of nonexisting layer succeeds!")
       
   174         except exceptions.NotFound:
       
   175             pass
       
   176 
       
   177     def test_add_view_simple(self):
       
   178         conf = api.Configuration("data/simple.confml")
       
   179         conf.add_view("view1")
       
   180         view = conf.get_view("view1")
       
   181         self.assertEquals(view._list(),[])
       
   182         
       
   183     def test_add_views_and_list_views(self):
       
   184         conf = api.Configuration("data/simple.confml")
       
   185         conf.add_view("view1")
       
   186         conf.add_view("view2")
       
   187         self.assertEquals(conf.list_views(),['view1','view2'])
       
   188 
       
   189     def test_add_views_and_remove_one(self):
       
   190         conf = api.Configuration("data/simple.confml")
       
   191         conf.add_view("view1")
       
   192         conf.add_view("view2")
       
   193         conf.add_view("view3")
       
   194         conf.remove_view('view2')
       
   195         self.assertEquals(conf.list_views(),['view1','view3'])
       
   196 
       
   197     def test_add_views_and_remove_invalid(self):
       
   198         conf = api.Configuration("data/simple.confml")
       
   199         conf.add_view("view1")
       
   200         conf.add_view("view2")
       
   201         conf.add_view("view3")
       
   202         try:
       
   203             conf.remove_view('invalid')
       
   204             self.fail('Removing invalid view succeeds!')
       
   205         except exceptions.NotFound:
       
   206             pass
       
   207         
       
   208     def test_add_views_and_remove_all(self):
       
   209         conf = api.Configuration("data/simple.confml")
       
   210         conf.add_view("view1")
       
   211         conf.add_view("view2")
       
   212         conf.add_view("view3")
       
   213         for view in conf.list_views():
       
   214             conf.remove_view(view)
       
   215         self.assertEquals(conf.list_views(),[])
       
   216 
       
   217     def test_add_view_with_data(self):
       
   218         conf = api.Configuration("data/simple.confml")
       
   219         conf.add_view("view1")
       
   220         view = conf.get_view("view1")
       
   221         view._add(api.Group("group1"))
       
   222         view._add(api.Group("group2"))
       
   223         view._add(api._FeatureProxy("feature1"))
       
   224         view.group1._add(api.Group("group21"))
       
   225         view.group1.group21._add(api._FeatureProxy("feature211"))
       
   226         view.group1.group21._add(api._FeatureProxy("feature212"))
       
   227         view.feature1._add(api._FeatureProxy("feature11"))
       
   228         
       
   229         self.assertEquals(sorted(view._list_traverse()),
       
   230                           sorted(['group1', 
       
   231                                           'group2', 
       
   232                                           'feature1', 
       
   233                                           'group1.group21', 
       
   234                                           'group1.group21.feature211', 
       
   235                                           'group1.group21.feature212', 
       
   236                                           'feature1.feature11']))
       
   237 
       
   238     def test_get_default_view(self):
       
   239         conf = api.Configuration("data/simple.confml")
       
   240         dview = conf.get_default_view()
       
   241         self.assertEquals(dview.ref,'_default_view')
       
   242 
       
   243     def test_get_default_view_and_data_to_it(self):
       
   244         conf = api.Configuration("data/simple.confml")
       
   245         view = conf.get_default_view()
       
   246         view._add(api.Group("group1"))
       
   247         view._add(api.Group("group2"))
       
   248         view._add(api._FeatureProxy("feature1"))
       
   249         view.group1._add(api.Group("group21"))
       
   250         view.group1.group21._add(api._FeatureProxy("feature211"))
       
   251         view.group1.group21._add(api._FeatureProxy("feature212"))
       
   252         view.feature1._add(api._FeatureProxy("feature11"))
       
   253         
       
   254         self.assertEquals(sorted(view._list_traverse()),
       
   255                           sorted(['group1', 
       
   256                                            'group2', 
       
   257                                            'feature1', 
       
   258                                            'group1.group21', 
       
   259                                            'group1.group21.feature211', 
       
   260                                            'group1.group21.feature212', 
       
   261                                            'feature1.feature11']))
       
   262 
       
   263 
       
   264     def test_add_feature_normal_configuration(self):
       
   265         conf = api.Configuration("simple.confml")
       
   266         conf.add_feature(api.Feature("feature1"))
       
   267         self.assertEquals(conf.list_all_features(),['feature1'])
       
   268 
       
   269     def test_add_feature_normal_and_get_default_view(self):
       
   270         conf = api.Configuration("simple.confml")
       
   271         conf.add_feature(api.Feature("feature1"))
       
   272         conf.add_feature(api.Feature("feature2"))
       
   273         conf.add_feature(api.Feature("feature11"),'feature1')
       
   274         view = conf.get_default_view()
       
   275         
       
   276         self.assertEquals(view.list_all_features(),['feature1',
       
   277                                                 'feature1.feature11',
       
   278                                                 'feature2',])
       
   279         self.assertEquals(view.get_feature('feature1.feature11')._obj._parent,conf.feature1)
       
   280 
       
   281     def test_add_feature_hierarchy_and_get_default_view(self):
       
   282         root = api.Configuration("data/simple.confml")
       
   283         conf = api.Configuration("test/root.confml")
       
   284         root.add_configuration(conf)
       
   285         conf2 = api.Configuration("test2/root.confml",namespace="com.nokia")
       
   286         root.add_configuration(conf2)
       
   287         conf.add_feature(api.Feature("group1"))
       
   288         conf.add_feature(api.Feature("group2"))
       
   289         conf.add_feature(api.Feature("feature1"))
       
   290         conf.group1.add_feature(api.Feature("group21"))
       
   291         conf.group1.group21.add_feature(api.Feature("feature211"))
       
   292         conf.group1.group21.add_feature(api.Feature("feature212"))
       
   293         conf.feature1.add_feature(api.Feature("feature11"))
       
   294         conf2.add_feature(api.Feature("wlan"))
       
   295         conf2.add_feature(api.Feature("bluetooth"))
       
   296         self.assertEquals(conf.list_all_features(),
       
   297                           ['group1', 
       
   298                            'group1.group21', 
       
   299                            'group1.group21.feature211', 
       
   300                            'group1.group21.feature212', 
       
   301                            'group2', 
       
   302                            'feature1', 
       
   303                            'feature1.feature11'])
       
   304         dview = conf.get_default_view()
       
   305         self.assertEquals(dview.list_features(),
       
   306                           ['group1', 
       
   307                            'group2', 
       
   308                            'feature1'])
       
   309         
       
   310         self.assertEquals(dview.list_groups(),['com'])
       
   311         self.assertEquals(dview.list_all_features(),
       
   312                           ['group1', 
       
   313                            'group1.group21', 
       
   314                            'group1.group21.feature211', 
       
   315                            'group1.group21.feature212', 
       
   316                            'group2', 
       
   317                            'feature1', 
       
   318                            'feature1.feature11',
       
   319                            'com.nokia.wlan',
       
   320                            'com.nokia.bluetooth'])
       
   321 
       
   322     def test_add_feature(self):
       
   323         conf = api.Configuration("simple.confml")
       
   324         conf.add_feature(api.Feature("feature1"))
       
   325         self.assertEquals(conf.list_features(),['feature1'])
       
   326 
       
   327 #    def test_add_feature_namespace(self):
       
   328 #        conf = api.Configuration("test","com.nokia")
       
   329 #        conf.add_feature(api.Feature("feature1"))
       
   330 #        self.assertEquals(conf.list_all_features(),['com.nokia.feature1'])
       
   331 #        self.assertEquals(conf.feature1, conf.get_default_view().com.nokia.feature1._obj)
       
   332 
       
   333     def test_add_subconfiguration(self):
       
   334         conf = api.Configuration("test",namespace="com.nokia")
       
   335         conf.create_configuration("foo/root.confml")
       
   336         conf.create_configuration("platforms/s60.confml")
       
   337         self.assertEquals(conf.list_configurations(),['foo/root.confml',
       
   338                                                       'platforms/s60.confml',])
       
   339 
       
   340     def test_remove_configuration(self):
       
   341         conf = api.Configuration("test.confml",namespace="com.nokia")
       
   342         conf.create_configuration("foo/root.confml")
       
   343         self.assertEquals(conf.list_configurations(),['foo/root.confml'])
       
   344         conf.remove_configuration("foo/root.confml")
       
   345         self.assertEquals(conf.list_configurations(),[])
       
   346 
       
   347     def test_get_configuration(self):
       
   348         conf = api.Configuration("test.confml",namespace="com.nokia")
       
   349         conf.create_configuration("foo/root.confml")
       
   350         self.assertEquals(conf.list_configurations(),['foo/root.confml'])
       
   351         foo = conf.get_configuration("foo/root.confml")
       
   352         self.assertEquals(foo.get_path(),"foo/root.confml")
       
   353 
       
   354 
       
   355     def test_remove_all(self):
       
   356         conf = api.Configuration("test",namespace="com.nokia")
       
   357         conf.create_configuration("foo/root.confml")
       
   358         conf.create_configuration("platforms/s60.confml")
       
   359         conf.create_configuration("platforms/customsw.confml")
       
   360         self.assertEquals(conf.list_configurations(),['foo/root.confml',
       
   361                                                       'platforms/s60.confml',
       
   362                                                       'platforms/customsw.confml'])
       
   363         for configref in conf.list_configurations():
       
   364             conf.remove_configuration(configref)
       
   365         self.assertEquals(conf.list_configurations(),[])
       
   366 
       
   367 
       
   368     def test_add_subconfiguration_and_access(self):
       
   369         conf = api.Configuration("data/simple.confml")
       
   370         conf.create_configuration("foo/layer1.confml")
       
   371         self.assertTrue(conf.foo__layer1_confml)
       
   372 
       
   373 #    def test_add_subconfiguration_and_features(self):
       
   374 #        conf = api.Configuration("test","com.nokia")
       
   375 #        conf.create_configuration("foo/root.confml")
       
   376 #        conf.create_configuration("fii/root.confml")
       
   377 #        conf.foo_root.add_feature(api.Feature("feature1"))
       
   378 #        conf.foo_root.add_feature(api.Feature("feature12"),"feature1")
       
   379 #        conf.fii_root.add_feature(api.Feature("feature2"))
       
   380 #        conf.fii_root.add_feature(api.Feature("feature21"),"feature2")
       
   381 #        self.assertEquals(conf.list_all_features(),['com.nokia.feature1',
       
   382 #                                                'com.nokia.feature1.feature12',
       
   383 #                                                'com.nokia.feature2',
       
   384 #                                                'com.nokia.feature2.feature21',
       
   385 #                                                ])
       
   386 #        self.assertEquals(conf.foo_root.feature1.get_ref(), 
       
   387 #                          conf.get_default_view()._get('com.nokia.feature1').get_ref())
       
   388 
       
   389     def test_add_configuration_with_features_to_root(self):
       
   390         root= api.Configuration("test",namespace="com.nokia")
       
   391         conf1 = api.Configuration("foo/foo.confml")
       
   392         conf1.add_feature(api.Feature("feature1"))
       
   393         conf1.add_feature(api.Feature("feature12"),"feature1")
       
   394         conf2 = api.Configuration("bar/bar.confml")
       
   395         conf2.add_feature(api.Feature("feature2"))
       
   396         conf2.add_feature(api.Feature("feature22"),"feature2")
       
   397         root.add_configuration(conf1)
       
   398         self.assertEquals(root.list_all_features(),
       
   399                           ['feature1',
       
   400                            'feature1.feature12'])
       
   401         root.add_configuration(conf2)
       
   402         self.assertEquals(root.list_all_features(),
       
   403                           ['feature1',
       
   404                            'feature1.feature12',
       
   405                            'feature2',
       
   406                            'feature2.feature22'])
       
   407 
       
   408     def test_add_configuration_to_other_conf_and_then_to_root(self):
       
   409         root= api.Configuration("test",namespace="com.nokia")
       
   410         conf1 = api.Configuration("foo/foo.confml")
       
   411         conf1.add_feature(api.Feature("feature1"))
       
   412         conf1.add_feature(api.Feature("feature12"),"feature1")
       
   413         conf2 = api.Configuration("bar/foo.confml")
       
   414         conf2.add_feature(api.Feature("feature2"))
       
   415         conf2.add_feature(api.Feature("feature22"),"feature2")
       
   416         conf2.add_configuration(conf1)
       
   417         self.assertEquals(conf2.list_all_features(),
       
   418                           ['feature2',
       
   419                            'feature2.feature22',
       
   420                            'feature1',
       
   421                            'feature1.feature12'])
       
   422         root.add_configuration(conf2)
       
   423         self.assertEquals(root.list_all_features(),
       
   424                           ['feature2',
       
   425                            'feature2.feature22',
       
   426                            'feature1',
       
   427                            'feature1.feature12'])
       
   428 
       
   429     def test_add_features_feature_hiararchy_and_then_to_configurations(self):
       
   430         conf1 = api.Configuration("foo/foo.confml")
       
   431         fea = api.Feature('feature1')
       
   432         fea2 = api.Feature('feature12')
       
   433         fea2.add_feature(api.Feature('feature121'))
       
   434         fea.add_feature(api.Feature('feature11'))
       
   435         fea.add_feature(fea2)
       
   436         self.assertEquals(fea.list_all_features(),
       
   437                                 ['feature11',
       
   438                                  'feature12',
       
   439                                  'feature12.feature121'])
       
   440         conf1.add_feature(fea)
       
   441         self.assertEquals(conf1.list_all_features(),
       
   442                                 ['feature1',
       
   443                                  'feature1.feature11',
       
   444                                  'feature1.feature12',
       
   445                                  'feature1.feature12.feature121'])
       
   446         
       
   447 
       
   448     def test_add_features_and_remove_one(self):
       
   449         conf1 = api.Configuration("foo/foo.confml")
       
   450         fea = api.Feature('feature1')
       
   451         fea2 = api.Feature('feature12')
       
   452         fea2.add_feature(api.Feature('feature121'))
       
   453         fea.add_feature(api.Feature('feature11'))
       
   454         fea.add_feature(fea2)
       
   455         conf1.add_feature(fea)
       
   456         conf1.remove_feature('feature1.feature12')
       
   457         self.assertEquals(conf1.list_all_features(), 
       
   458                           ['feature1',
       
   459                            'feature1.feature11'])
       
   460         fea.remove_feature('feature11')
       
   461         self.assertEquals(conf1.list_all_features(), 
       
   462                           ['feature1'])
       
   463 
       
   464     def test_add_features_and_remove_all(self):
       
   465         conf = api.Configuration("foo/foo.confml")
       
   466         fea = api.Feature('feature1')
       
   467         conf.add_feature(fea)
       
   468         conf.add_feature(api.Feature('feature2'))
       
   469         conf.add_feature(api.Feature('feature3'))
       
   470         conf.add_feature(api.Feature('feature4'))
       
   471         for fearef in conf.list_features():
       
   472             conf.remove_feature(fearef)
       
   473         self.assertEquals(conf.list_all_features(), [])
       
   474 
       
   475     def test_add_features_and_create_view(self):
       
   476         
       
   477         conf = api.Configuration("foo/foo.confml")
       
   478         conf.add_feature(api.Feature('feature1'))
       
   479         conf.add_feature(api.Feature('feature2'))
       
   480         conf.add_feature(api.Feature('feature3'))
       
   481         conf.add_feature(api.Feature('feature4'))
       
   482         conf.add_feature(api.Feature('feature11'),'feature1')
       
   483         conf.add_feature(api.Feature('feature12'),'feature1')
       
   484         
       
   485         conf.add_view("rootfeas")
       
   486         view = conf.get_view('rootfeas')
       
   487         for fearef in conf.list_features():
       
   488             fea = conf.get_feature(fearef)
       
   489             view.add_feature(fea)
       
   490         self.assertEquals(view.list_all_features(), ['feature1',
       
   491                                                      'feature2',
       
   492                                                      'feature3',
       
   493                                                      'feature4'])
       
   494         view.remove_feature('feature2')
       
   495         self.assertEquals(view.list_all_features(), ['feature1',
       
   496                                                      'feature3',
       
   497                                                      'feature4'])
       
   498 
       
   499     def test_add_features_and_create_view_with_links(self):
       
   500         conf = api.Configuration("foo/foo.confml")
       
   501         conf.add_feature(api.Feature('feature1'))
       
   502         conf.add_feature(api.Feature('feature2'))
       
   503         conf.add_feature(api.Feature('feature3'))
       
   504         conf.add_feature(api.Feature('feature4'))
       
   505         conf.add_feature(api.Feature('feature11'),'feature1')
       
   506         conf.add_feature(api.Feature('feature12'),'feature1')
       
   507         conf.add_view('fea1')
       
   508         view1 = conf.get_view('fea1')
       
   509         view1.add_group('thegruppe1')
       
   510         view1.get_group('thegruppe1').add(api.FeatureLink('feature1.feature11'))
       
   511         view1.add(api.FeatureLink('feature1.*'))
       
   512         view1.populate()
       
   513         self.assertEquals(view1.list_all_features(),['thegruppe1.feature11','feature11','feature12'])
       
   514         fpr = view1.get_feature('thegruppe1.feature11')
       
   515         self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) 
       
   516         self.assertEquals(view1.list_all_features(), ['thegruppe1.feature11','feature11','feature12'])
       
   517 
       
   518     def test_add_features_and_create_all_view_with_links(self):
       
   519         conf = api.Configuration("foo/foo.confml")
       
   520         conf.add_feature(api.Feature('feature1'))
       
   521         conf.add_feature(api.Feature('feature2'))
       
   522         conf.add_feature(api.Feature('feature3'))
       
   523         conf.add_feature(api.Feature('feature4'))
       
   524         conf.add_feature(api.Feature('feature11'),'feature1')
       
   525         conf.add_feature(api.Feature('feature12'),'feature1')
       
   526         conf.add_view("all")
       
   527         view1 = conf.get_view('all')
       
   528         view1.add(api.FeatureLink('**'))
       
   529         view1.populate()
       
   530         self.assertEquals(view1.list_all_features(),['feature1', 'feature11', 'feature12', 'feature2', 'feature3', 'feature4'])
       
   531         fpr = view1.get_feature('feature11')
       
   532         self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) 
       
   533 
       
   534     def test_add_a_configuration_and_remove_it(self):
       
   535         conf = api.Configuration("simple.confml")
       
   536         conf.add_configuration(api.Configuration("confml/data.confml"))
       
   537         self.assertEquals(conf.list_configurations(),['confml/data.confml'])
       
   538         conf.remove_configuration("confml/data.confml")
       
   539         self.assertEquals(len(conf.list_configurations()),0)    
       
   540 
       
   541     def test_add_a_include_and_remove_it(self):
       
   542         conf = api.Configuration("simple.confml")
       
   543         conf.include_configuration("confml/data.confml")
       
   544         self.assertEquals(conf.list_configurations(),['confml/data.confml'])
       
   545         conf.remove_configuration("confml/data.confml")
       
   546         self.assertEquals(len(conf.list_configurations()),0)    
       
   547 
       
   548     def test_add_a_include_with_dots_in_path_and_remove_it(self):
       
   549         conf = api.Configuration("simple.confml")
       
   550         conf.include_configuration("test/foo.bar/data.confml")
       
   551         self.assertEquals(conf.list_configurations(),['test/foo.bar/data.confml'])
       
   552         conf.remove_configuration("test/foo.bar/data.confml")
       
   553         self.assertEquals(len(conf.list_configurations()),0)    
       
   554 
       
   555     def test_add_a_include_with_dots_and_remove_it(self):
       
   556         conf = api.Configuration("simple.confml")
       
   557         conf.include_configuration("../foo/data.confml")
       
   558         self.assertEquals(conf.list_configurations(),['../foo/data.confml'])
       
   559         conf.remove_configuration("../foo/data.confml")
       
   560         self.assertEquals(len(conf.list_configurations()),0)    
       
   561 
       
   562 class TestConfigurationData(unittest.TestCase):
       
   563     def test_add_features_and_add_data_via_default_view(self):
       
   564         conf = api.Configuration("foo/foo.confml")
       
   565         conf.add_feature(api.Feature('feature1'))
       
   566         conf.add_feature(api.Feature('feature2'))
       
   567         conf.add_feature(api.Feature('feature3'))
       
   568         conf.add_feature(api.Feature('feature4'))
       
   569         conf.add_feature(api.Feature('feature12'),'feature1')
       
   570         dview = conf.get_default_view()
       
   571         dview.feature1._add_data(api.Data(ref="feature1", value=123))
       
   572         dview.feature2._add_data(api.Data(ref="feature2", value=123))
       
   573         dview.feature3._add_data(api.Data(ref="feature3", value=123))
       
   574         dview.feature1.feature12._add_data(api.Data(ref="feature12", value=123))
       
   575         dview.feature1._add_data(api.Data(ref="feature1", value=123))
       
   576         self.assertEquals(dview.feature1.get_value(), 123)
       
   577         dview.feature1._add_data(api.Data(ref="feature1", value=111))
       
   578         self.assertEquals(dview.feature1.get_value(), 111)
       
   579 
       
   580     def test_add_data_to_configuration(self):
       
   581         conf = api.Configuration("foo/foo.confml")
       
   582         conf.add_data(api.Data(ref='feature1', value=123))
       
   583         self.assertEquals(conf.get_data('feature1').get_value(),123)
       
   584         conf.add_data(api.Data(fqr='feature1.feature12', value="test"))
       
   585         self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test")
       
   586         self.assertEquals(conf.data.feature1.feature12.get_value(),"test")
       
   587         conf.remove_data('feature1.feature12')
       
   588         self.assertEquals(conf.list_datas(), ['feature1'])
       
   589 
       
   590     def test_set_data_to_configuration(self):
       
   591         conf = api.Configuration("foo/foo.confml")
       
   592         conf.add_data(api.Data(fqr='feature1', value=123))
       
   593         self.assertEquals(conf.get_data('feature1').get_value(),123)
       
   594         conf.add_data(api.Data(fqr='feature1.feature12', value="test"))
       
   595         self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test")
       
   596         self.assertEquals(conf.data.feature1.feature12.get_value(),"test")
       
   597 
       
   598     def test_add_features_and_add_data_via_features(self):
       
   599         conf = api.Configuration("foo/foo.confml")
       
   600         conf.add_feature(api.Feature('feature1'))
       
   601         conf.add_feature(api.Feature('feature2'))
       
   602         conf.add_feature(api.Feature('feature3'))
       
   603         conf.add_feature(api.Feature('feature4'))
       
   604         conf.add_feature(api.Feature('feature12'),'feature1')
       
   605         conf.feature1.set_value(123)
       
   606         conf.feature1.feature12.set_value("test")
       
   607         self.assertEquals(conf.feature1.get_value(),123)
       
   608         self.assertEquals(conf.feature1.feature12.get_value(),"test")
       
   609 
       
   610     def test_create_layers_add_features_and_add_data_via_features(self):
       
   611         conf = api.Configuration("foo/foo.confml")
       
   612         conf.add_feature(api.Feature('feature1'))
       
   613         conf.add_feature(api.Feature('feature2'))
       
   614         conf.add_feature(api.Feature('feature3'))
       
   615         conf.add_feature(api.Feature('feature4'))
       
   616         conf.add_feature(api.Feature('feature12'),'feature1')
       
   617         conf.feature1.set_value(123)
       
   618         self.assertEquals(conf.feature1.get_value(),123)
       
   619         conf.create_configuration("layer1.confml")
       
   620         conf.feature1.feature12.set_value("test")
       
   621         self.assertEquals(conf.feature1.get_data().find_parent(type=api.Configuration),conf)
       
   622         self.assertEquals(conf.feature1.feature12.get_value(),"test")
       
   623 
       
   624         conf.feature1.set_value(321)
       
   625         conf.create_configuration("layer2.confml")
       
   626         self.assertEquals(conf.layer2_confml.list_datas(), [])
       
   627         
       
   628         self.assertEquals(conf.feature1.get_value(),321)
       
   629         self.assertEquals(conf.feature1.get_data().find_parent(type=api.Configuration).get_path(),conf.get_configuration("layer1.confml").get_path())
       
   630         self.assertEquals(conf.layer1_confml.list_all_datas(), ['feature1','feature1.feature12'])
       
   631         self.assertEquals([data.get_value() for data in conf.layer1_confml.get_all_datas()], [321,'test'])
       
   632         self.assertEquals(conf.list_datas(), ['feature1'])
       
   633         self.assertEquals([data.find_parent(type=api.Configuration).get_path() for data in conf.get_all_datas()], 
       
   634                           ['foo/foo.confml',
       
   635                            'layer1.confml',
       
   636                            'layer1.confml',])
       
   637 
       
   638     def test_create_layers_add_featuresequence_and_add_data_via_features(self):
       
   639         conf = api.Configuration("foo/foo.confml")
       
   640         conf.add_feature(api.FeatureSequence('feature1'))
       
   641         conf.add_feature(api.Feature('child1'),'feature1')
       
   642         conf.add_feature(api.Feature('child2'),'feature1')
       
   643         conf.add_feature(api.Feature('child3'),'feature1')
       
   644         conf.feature1.add_sequence()
       
   645         conf.feature1.get_data()[0][0].set_value('test1')
       
   646         conf.feature1.get_data()[0][1].set_value('test2')
       
   647         conf.feature1.get_data()[0][2].set_value('test3')
       
   648         conf.feature1.add_sequence(['foo1','foo2','foo3'])
       
   649         self.assertEquals(conf.feature1.get_data()[1][0].get_value(),'foo1')
       
   650         self.assertEquals(conf.feature1.get_data()[1][1].get_value(),'foo2')
       
   651         self.assertEquals(conf.feature1.get_data()[1][2].get_value(),'foo3')
       
   652         self.assertEquals(conf.feature1.get_value(),
       
   653                           [['test1','test2','test3'],
       
   654                            ['foo1','foo2','foo3']])
       
   655         self.assertEquals(conf.list_all_datas(),['feature1', 'feature1.child1', 'feature1.child2', 'feature1.child3', 'feature1', 'feature1.child1', 'feature1.child2', 'feature1.child3'])
       
   656 
       
   657     def test_create_featuresequence_and_get_empty_data(self):
       
   658         conf = api.Configuration("foo/foo.confml")
       
   659         conf.add_feature(api.FeatureSequence('feature1'))
       
   660         conf.add_feature(api.Feature('child1'),'feature1')
       
   661         conf.add_feature(api.Feature('child2'),'feature1')
       
   662         conf.add_feature(api.Feature('child3'),'feature1')
       
   663         self.assertEquals(conf.get_feature('feature1').get_data(),[])
       
   664         self.assertEquals(conf.get_feature('feature1').get_value(),[])
       
   665 
       
   666     def test_create_featuresequence_and_set_template(self):
       
   667         conf = api.Configuration("foo/foo.confml")
       
   668         conf.add_feature(api.FeatureSequence('feature1'))
       
   669         conf.add_feature(api.Feature('child1'),'feature1')
       
   670         conf.add_feature(api.Feature('child2'),'feature1')
       
   671         conf.add_feature(api.Feature('child3'),'feature1')
       
   672         fea = conf.get_feature('feature1')
       
   673         fea.set_template(['test1','test2','test3'])
       
   674         self.assertEquals(fea.get_template(),['test1', 'test2', 'test3'])
       
   675         fea.set_template(['test1','test3'])
       
   676         self.assertEquals(fea.get_template(),['test1','test3','test3'])
       
   677         try:
       
   678             fea.set_template(['test1',None,'test3',None])
       
   679             self.fail("Able to add more data then allowed")
       
   680         except IndexError:
       
   681             pass
       
   682 
       
   683     def test_create_features_with_rfs_data(self):
       
   684         conf = api.Configuration("foo/foo.confml")
       
   685         conf.add_feature(api.Feature('feature1'))
       
   686         conf.add_feature(api.Feature('child1'),'feature1')
       
   687         conf.add_feature(api.Feature('child2'),'feature1')
       
   688         conf.add_feature(api.Feature('child3'),'feature1')
       
   689         
       
   690         conf.add_data(api.Data(fqr='feature1.child1',attr='rfs',value='true'))
       
   691         conf.add_data(api.Data(fqr='feature1.child2',attr='rfs',value='false'))
       
   692         dview = conf.get_default_view()
       
   693         self.assertEquals(dview.get_feature('feature1.child1').get_value(), None)
       
   694         self.assertEquals(dview.get_feature('feature1.child1').get_value('rfs'), 'true')
       
   695         self.assertEquals(dview.get_feature('feature1.child2').get_value('rfs'), 'false')
       
   696 
       
   697 class TestConfigurationDictStoring(unittest.TestCase):    
       
   698     
       
   699     def test_dumps_simple(self):
       
   700         root = api.Configuration("root",namespace="com.nokia")
       
   701         conf = root.create_configuration("test.confml")
       
   702         dumped = persistentdictionary.DictWriter().dumps(conf)
       
   703         dict =dumped['Configuration']['dict']
       
   704         self.assertEquals(dict['path'],'test.confml')
       
   705         self.assertEquals(dict['namespace'],'com.nokia')
       
   706 
       
   707     def test_dumps_add_features(self):
       
   708         root = api.Configuration("root",namespace="com.nokia")
       
   709         conf = root.create_configuration("test.confml")
       
   710         conf.add_feature(api.Feature("feature1"))
       
   711         conf.add_feature(api.Feature("feature2"))
       
   712         dumped = persistentdictionary.DictWriter().dumps(conf)
       
   713         dict =dumped['Configuration']['dict']
       
   714         self.assertEquals(dict['path'],'test.confml')
       
   715         self.assertEquals(dict['namespace'],'com.nokia')
       
   716         self.assertEquals(dumped['Configuration']['children'],
       
   717                           [{'Feature': {'dict': {'name': 'feature1', 'ref': 'feature1'}}}, 
       
   718                            {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}}]
       
   719                                             )
       
   720 
       
   721     def test_dumps_root_configuration(self):
       
   722         root = api.Configuration("root",namespace="com.nokia")
       
   723         conf = root.create_configuration("test.confml")
       
   724         conf = root.create_configuration("foo/root.confml")
       
   725         conf.add_feature(api.Feature("feature1"))
       
   726         conf.add_feature(api.Feature("feature2"))
       
   727         conf.feature1.add_feature(api.Feature("feature11"))
       
   728         conf.feature1.add_feature(api.Feature("feature12"))
       
   729         dumped = persistentdictionary.DictWriter().dumps(root)
       
   730         dict =dumped['Configuration']['dict']
       
   731         self.assertEquals(dict['ref'],'root')
       
   732         self.assertEquals(dict['namespace'],'com.nokia')
       
   733 
       
   734     def test_dumps_feature_hierarchy(self):
       
   735         root = api.Configuration("root",namespace="com.nokia")
       
   736         conf = root.create_configuration("test.confml")
       
   737         conf.add_feature(api.Feature("feature1"))
       
   738         conf.add_feature(api.Feature("feature2"))
       
   739         conf.feature1.add_feature(api.Feature("feature11"))
       
   740         conf.feature1.add_feature(api.Feature("feature12"))
       
   741         dumped = persistentdictionary.DictWriter().dumps(conf)
       
   742         dict =dumped['Configuration']['dict']
       
   743         self.assertEquals(dict['path'],'test.confml')
       
   744         self.assertEquals(dict['ref'],'test_confml')
       
   745         self.assertEquals(dict['namespace'],'com.nokia')
       
   746         self.assertEquals(dumped['Configuration']['children'],
       
   747                         [{'Feature': {'dict': {'name': 'feature1', 'ref': 'feature1'}, 
       
   748                                 'children': [
       
   749                                     {'Feature': {'dict': {'name': 'feature11', 'ref': 'feature11'}}},
       
   750                                     {'Feature': {'dict': {'name': 'feature12', 'ref': 'feature12'}}}]}}, 
       
   751                         {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}}
       
   752                         ])
       
   753 
       
   754     def test_loads(self):
       
   755         conf = persistentdictionary.DictReader().loads({'Configuration': {'dict' : {'namespace':'test','ref':'test.confml'}}} )
       
   756         self.assertTrue(isinstance(conf,api.Configuration))
       
   757         self.assertEquals(conf.namespace,'test')
       
   758         self.assertEquals(conf.get_ref(),'test.confml')
       
   759 
       
   760     def test_loads_with_features(self):
       
   761         root = api.Configuration("root",namespace="com.nokia")
       
   762         conf = persistentdictionary.DictReader().loads({
       
   763         'Configuration': {'dict' : {'namespace':'test','ref':'test.confml'},
       
   764         'children': [{'Feature': {'dict': {'ref': 'feature1'}, 
       
   765                                   'children': [
       
   766                                                {'Feature': {'dict': {'ref': 'feature11'}}}, 
       
   767                                                {'Feature': {'dict': {'ref': 'feature12'}}}]
       
   768                                   }
       
   769                     }, 
       
   770                     {'Feature': {'dict': {'ref': 'feature2'}}}]}} )
       
   771 
       
   772         self.assertEquals(conf.namespace,'test')
       
   773         self.assertEquals(conf.ref,'test.confml')
       
   774         root.add_configuration(conf)
       
   775         self.assertEquals(root.list_all_features(),['test.feature1',
       
   776                                                 'test.feature1.feature11',
       
   777                                                 'test.feature1.feature12',
       
   778                                                 'test.feature2'])
       
   779 
       
   780 
       
   781     def test_dumps_and_loads(self):
       
   782         conf = api.Configuration("test.confml")
       
   783         conf.add_feature(api.Feature("feature1"))
       
   784         conf.add_feature(api.Feature("feature2"))
       
   785         conf.feature1.add_feature(api.Feature("feature11"))
       
   786         conf.feature1.add_feature(api.Feature("feature12"))
       
   787         dumped = persistentdictionary.DictWriter().dumps(conf)
       
   788         
       
   789         conf2 = persistentdictionary.DictReader().loads(dumped)
       
   790         self.assertEquals(conf.list_all_features(),
       
   791                           conf2.list_all_features())
       
   792 
       
   793     def test_dumps_and_loads_configuration_hierarchy(self):
       
   794         root = api.Configuration("root.confml")
       
   795         root.add_configuration(api.Configuration("layer1.confml"))
       
   796         layer = api.Configuration("foo/layer2.confml")
       
   797         conf = api.Configuration("foo/test.confml")
       
   798         conf.add_feature(api.Feature("feature1"))
       
   799         conf.add_feature(api.Feature("feature2"))
       
   800         conf.feature1.add_feature(api.Feature("feature11"))
       
   801         conf.feature1.add_feature(api.Feature("feature12"))
       
   802         layer.add_configuration(conf)
       
   803         root.add_configuration(layer)
       
   804         dumped = persistentdictionary.DictWriter().dumps(root)
       
   805         
       
   806         root2= persistentdictionary.DictReader().loads(dumped)
       
   807         self.assertEquals(root.list_all_features(),
       
   808                           root2.list_all_features())
       
   809 
       
   810     def test_dumps_and_loads_configuration_hierarchy_with_data(self):
       
   811         root = api.Configuration("root.confml")
       
   812         layer = api.Configuration("foo/layer1.confml")
       
   813         conf = api.Configuration("foo/test.confml")
       
   814         conf.add_feature(api.Feature("feature1"))
       
   815         conf.add_feature(api.Feature("feature2"))
       
   816         conf.feature1.add_feature(api.Feature("feature11"))
       
   817         conf.feature1.add_feature(api.Feature("feature12"))
       
   818         conf.feature1.set_value(1)
       
   819         conf.feature2.set_value(2)
       
   820         layer.add_configuration(conf)
       
   821         root.add_configuration(layer)
       
   822         root.add_configuration(api.Configuration("layer2.confml"))
       
   823         root.get_default_view().feature1.feature11.set_value("testing11")
       
   824         root.get_default_view().feature1.set_value("test1")
       
   825         dumped = persistentdictionary.DictWriter().dumps(root)
       
   826         root2= persistentdictionary.DictReader().loads(dumped)
       
   827         self.assertEquals(root.list_all_features(),
       
   828                           root2.list_all_features())
       
   829         self.assertEquals(root2.get_default_view().feature1.get_value(), "test1")
       
   830         self.assertEquals(root2.get_default_view().feature2.get_value(), 2)
       
   831         self.assertEquals(root2.get_default_view().feature1.feature11.get_value(), "testing11")
       
   832 
       
   833         self.assertEquals([data.find_parent(type=api.Configuration).get_path() for data in root2.get_all_datas()],
       
   834                           ['foo/test.confml', 'foo/test.confml', 'layer2.confml','layer2.confml'])
       
   835 
       
   836     def test_access_via_configuration_proxy(self):
       
   837         conf = api.Configuration("root.confml")
       
   838         conf.add_feature(api.Feature("feature1"))
       
   839         proxy = api.ConfigurationProxy("root.confml")
       
   840         proxy.set('_obj',conf)
       
   841         self.assertEquals(proxy.get_ref(), 'root_confml')
       
   842         self.assertEquals(proxy.get_path(), 'root.confml')
       
   843         self.assertEquals(conf.feature1.get_ref(), 'feature1')
       
   844         self.assertEquals(proxy.feature1.get_ref(), 'feature1')
       
   845         
       
   846 
       
   847 if __name__ == '__main__':
       
   848       unittest.main()
       
   849       
       
   850 """
       
   851 {'Configuration': {'dict': {'path': 'root.confml', 'ref': 'root', 'namespace': '', 'desc': ''}, 'children': [{'Configuration': {'dict': {'path': 'foo/layer1.confml', 'ref': 'foo_layer1', 'namespace': '', 'desc': ''}, 'children': [{'Configuration': {'dict': {'path': 'foo/test.confml', 'ref': 'foo_test', 'namespace': '', 'desc': ''}, 'children': [{'Feature': {'dict': {'ref': 'feature1'}, 'children': [{'Feature': {'dict': {'ref': 'feature11'}}}, {'Feature': {'dict': {'ref': 'feature12'}}}]}}, {'Feature': {'dict': {'ref': 'feature2'}}}, {'DataContainer': {'dict': {'ref': 'data'}, 'children': [{'Data': {'dict': {'ref': 'feature1', 'value': 1}}}, {'Data': {'dict': {'ref': 'feature2', 'value': 2}}}]}}]}}]}}, {'Configuration': {'dict': {'path': 'layer2.confml', 'ref': 'layer2', 'namespace': '', 'desc': ''}}}]}}
       
   852 """