configurationengine/source/cone/public/tests/unittest_configuration.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
child 4 0951727b8815
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    10 # Nokia Corporation - initial contribution.
    10 # Nokia Corporation - initial contribution.
    11 #
    11 #
    12 # Contributors:
    12 # Contributors:
    13 #
    13 #
    14 # Description: 
    14 # Description: 
    15 #
    15 #    
    16 
    16 
    17 """
    17 """
    18 Test the configuration
    18 Test the configuration
    19 """
    19 """
    20 import unittest
    20 import unittest
    21 import string
    21 import os
    22 import sys,os
    22 import pickle 
    23 import __init__
    23 
    24 
    24 from cone.public import api,exceptions
    25 from cone.public import api,exceptions,utils
       
    26 from cone.storage import persistentdictionary
    25 from cone.storage import persistentdictionary
    27 from cone.confml import persistentconfml
    26 from testautomation.utils import remove_if_exists
       
    27 
       
    28 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    28 
    29 
    29 class TestConfiguration(unittest.TestCase):    
    30 class TestConfiguration(unittest.TestCase):    
    30     def setUp(self):
    31     def setUp(self):
    31         pass
    32         pass
    32 
    33 
    33     # @test 
    34     # @test 
    34     def test_create_configuration(self):
    35     def test_create_configuration(self):
    35         conf = api.Configuration("testmee.confml")
    36         conf = api.Configuration("testmee.confml")
    36         self.assertTrue(conf)
    37         self.assertTrue(conf)
       
    38 
       
    39     def test_configuration_reduce_ex(self):
       
    40         prj = api.Project(api.Storage('.'))
       
    41         conf = api.Configuration("testmee.confml")
       
    42         prj.add_configuration(conf)
       
    43         tpl = conf.__reduce_ex__(2)
       
    44         self.assertEquals(tpl[2]['_storeint'],prj)
       
    45         self.assertEquals(tpl[2]['path'],'testmee.confml')
       
    46         
       
    47     def test_configuration_pickle(self):
       
    48         remove_if_exists(os.path.join(ROOT_PATH,'temp'))
       
    49         prj = api.Project(api.Storage.open(os.path.join(ROOT_PATH,'temp'), 'w'))
       
    50         conf = api.Configuration("testmee.confml")
       
    51         prj.add_configuration(conf, True)
       
    52         prj.save()
       
    53         dfile  = open(os.path.join(ROOT_PATH,'temp/out.dat'), 'w')
       
    54         pickle.dump(conf, dfile)
       
    55         dfile.close()
       
    56         dfile  = open(os.path.join(ROOT_PATH,'temp/out.dat'))
       
    57         conf2 = pickle.load(dfile)
       
    58         self.assertEquals(conf2.path,'testmee.confml')
       
    59         self.assertEquals(conf2.name,'testmee_confml')
       
    60 
    37 
    61 
    38     def test_get_root_configuration(self):
    62     def test_get_root_configuration(self):
    39         conf = api.Configuration("testmee.confml")
    63         conf = api.Configuration("testmee.confml")
    40         self.assertEquals(conf.get_root_configuration(),conf)
    64         self.assertEquals(conf.get_root_configuration(),conf)
    41         conf.add_configuration(api.Configuration("foo/foo.confml")) 
    65         conf.add_configuration(api.Configuration("foo/foo.confml")) 
    62         self.assertEquals(conf1.path,conf2.path)
    86         self.assertEquals(conf1.path,conf2.path)
    63         self.assertEquals(conf1.name,conf2.name)
    87         self.assertEquals(conf1.name,conf2.name)
    64         self.assertEquals(conf1.ref,conf2.ref)
    88         self.assertEquals(conf1.ref,conf2.ref)
    65         self.assertEquals(conf1.namespace,conf2.namespace)
    89         self.assertEquals(conf1.namespace,conf2.namespace)
    66  
    90  
       
    91     def test_get_configuration_and_path(self):
       
    92         conf1 = api.Configuration("testmee.confml")
       
    93         fea = conf1.create_feature('test1')
       
    94         conf1.create_feature('test2')
       
    95         subfea = fea.create_feature('child1')
       
    96         self.assertEquals(fea.get_configuration(), conf1)
       
    97         self.assertEquals(fea.get_configuration_path(), 'testmee.confml')
       
    98         self.assertEquals(subfea.get_configuration(), conf1)
       
    99         self.assertEquals(subfea.get_configuration_path(), 'testmee.confml')
       
   100         
    67     def test_clone_single_configuration(self):
   101     def test_clone_single_configuration(self):
    68         conf1 = api.Configuration("testmee.confml")
   102         conf1 = api.Configuration("testmee.confml")
    69         conf1.add_feature(api.Feature('test1'))
   103         conf1.add_feature(api.Feature('test1'))
    70         conf1.add_feature(api.Feature('test2'))
   104         conf1.add_feature(api.Feature('test2'))
    71         conf1.add_feature(api.Feature('child1'),'test1')
   105         conf1.add_feature(api.Feature('child1'),'test1')
   102 
   136 
   103 class TestCompositeConfiguration(unittest.TestCase):    
   137 class TestCompositeConfiguration(unittest.TestCase):    
   104     def test_add(self):
   138     def test_add(self):
   105         conf = api.Configuration("data/simple.confml")
   139         conf = api.Configuration("data/simple.confml")
   106         layer = api.Configuration("laa")
   140         layer = api.Configuration("laa")
   107         conf._add(layer)
   141         conf.add_configuration(layer)
   108         self.assertEquals(conf.list_configurations()[0],"laa")    
   142         self.assertEquals(conf.list_configurations()[0],"laa")    
   109 
   143 
   110     def test_add_and_access_via_member(self):
   144     def test_add_and_access_via_member(self):
   111         conf = api.Configuration("data/simple.confml")
   145         conf = api.Configuration("data/simple.confml")
   112         layer = api.Configuration("laa")
   146         layer = api.Configuration("laa")
   113         conf._add(layer)
   147         conf.add_configuration(layer)
   114         self.assertEquals(conf.laa._name,"laa")    
   148         self.assertEquals(conf.laa.name,"laa")    
   115 
   149 
   116     def test_add_and_add_another_config_under(self):
   150     def test_add_and_add_another_config_under(self):
   117         conf = api.Configuration("data/simple.confml")
   151         conf = api.Configuration("data/simple.confml")
   118         layer = api.Configuration("laa")
   152         layer = api.Configuration("laa")
   119         conf._add(layer)
   153         conf.add_configuration(layer)
   120         conf.laa._add(api.Configuration("foo"))
   154         conf.laa.add_configuration(api.Configuration("foo"))
   121         self.assertEquals(conf.laa.foo._name,"foo")    
   155         self.assertEquals(conf.laa.foo.name,"foo")    
   122 
   156 
   123     def test_add_several_configurations(self):
   157     def test_add_several_configurations(self):
   124         conf = api.Configuration("data/simple.confml")
   158         conf = api.Configuration("data/simple.confml")
   125         layer = api.Configuration("laa")
   159         layer = api.Configuration("laa")
   126         conf._add(layer)
   160         conf.add_configuration(layer)
   127         conf._add(api.Configuration("foo"))
   161         conf.add_configuration(api.Configuration("foo"))
   128         conf._add(api.Configuration("faa"))
   162         conf.add_configuration(api.Configuration("faa"))
   129         self.assertEquals(conf.list_configurations()[0],"laa")    
   163         self.assertEquals(conf.list_configurations()[0],"laa")    
   130         self.assertEquals(conf.list_configurations()[1],"foo")    
   164         self.assertEquals(conf.list_configurations()[1],"foo")    
   131         self.assertEquals(conf.list_configurations()[2],"faa")    
   165         self.assertEquals(conf.list_configurations()[2],"faa")    
   132 
   166 
   133     def test_add_several_and_remove_one_layer(self):
   167     def test_add_several_and_remove_one_layer(self):
   134         conf = api.Configuration("data/simple.confml")
   168         conf = api.Configuration("data/simple.confml")
   135         layer = api.Configuration("laa")
   169         layer = api.Configuration("laa")
   136         conf._add(layer)
   170         conf.add_configuration(layer)
   137         conf._add(api.Configuration("foo"))
   171         conf.add_configuration(api.Configuration("foo"))
   138         conf._add(api.Configuration("faa"))
   172         conf.add_configuration(api.Configuration("faa"))
   139         conf._remove("foo")
   173         conf.remove_configuration("foo")
   140         
   174         
   141         self.assertEquals(conf.list_configurations()[0],"laa")    
   175         self.assertEquals(conf.list_configurations()[0],"laa")    
   142         self.assertEquals(conf.list_configurations()[1],"faa")    
   176         self.assertEquals(conf.list_configurations()[1],"faa")    
   143 
   177 
   144     def test_add_several_and_remove_last_layer(self):
   178     def test_add_several_and_remove_last_layer(self):
   145         conf = api.Configuration("data/simple.confml")
   179         conf = api.Configuration("data/simple.confml")
   146         layer = api.Configuration("laa")
   180         layer = api.Configuration("laa")
   147         conf._add(layer)
   181         conf.add_configuration(layer)
   148         conf._add(api.Configuration("foo"))
   182         conf.add_configuration(api.Configuration("foo"))
   149         conf._add(api.Configuration("faa"))
   183         conf.add_configuration(api.Configuration("faa"))
   150         conf._remove("faa")
   184         conf.remove_configuration("faa")
   151         self.assertEquals(conf.list_configurations()[0],"laa")    
   185         self.assertEquals(conf.list_configurations()[0],"laa")    
   152         self.assertEquals(conf.list_configurations()[1],"foo")    
   186         self.assertEquals(conf.list_configurations()[1],"foo")    
   153 
   187 
   154     def test_add_several_and_remove_all_configurations(self):
   188     def test_add_several_and_remove_all_configurations(self):
   155         conf = api.Configuration("data/simple.confml")
   189         conf = api.Configuration("data/simple.confml")
   156         layer = api.Configuration("laa")
   190         layer = api.Configuration("laa")
   157         conf._add(layer)
   191         conf.add_configuration(layer)
   158         conf._add(api.Configuration("foo"))
   192         conf.add_configuration(api.Configuration("foo"))
   159         conf._add(api.Configuration("faa"))
   193         conf.add_configuration(api.Configuration("faa"))
   160         for layername in conf.list_configurations():
   194         for layername in conf.list_configurations():
   161             conf._remove(layername)
   195             conf.remove_configuration(layername)
   162             
   196             
   163         self.assertTrue(len(conf.list_configurations())==0)        
   197         self.assertTrue(len(conf.list_configurations())==0)        
   164 
   198 
   165     def test_add_several_and_try_to_remove_not_existing(self):
   199     def test_add_several_and_try_to_remove_not_existing(self):
   166         conf = api.Configuration("data/simple.confml")
   200         conf = api.Configuration("data/simple.confml")
   167         layer = api.Configuration("laa")
   201         layer = api.Configuration("laa")
   168         conf._add(layer)
   202         conf.add_configuration(layer)
   169         conf._add(api.Configuration("foo"))
   203         conf.add_configuration(api.Configuration("foo"))
   170         conf._add(api.Configuration("faa"))
   204         conf.add_configuration(api.Configuration("faa"))
   171         try:
   205         try:
   172             conf._remove("notthere")
   206             conf.remove_configuration("notthere")
   173             self.fail("removing of nonexisting layer succeeds!")
   207             self.fail("removing of nonexisting layer succeeds!")
   174         except exceptions.NotFound:
   208         except exceptions.NotFound:
   175             pass
   209             pass
   176 
   210 
   177     def test_add_view_simple(self):
   211     def test_create_view_simple(self):
   178         conf = api.Configuration("data/simple.confml")
   212         conf = api.Configuration("data/simple.confml")
   179         conf.add_view("view1")
   213         conf.create_view("view1")
   180         view = conf.get_view("view1")
   214         view = conf.get_view("view1")
   181         self.assertEquals(view._list(),[])
   215         self.assertEquals(view.list_groups(),[])
   182         
   216         
   183     def test_add_views_and_list_views(self):
   217     def test_create_views_and_list_views(self):
   184         conf = api.Configuration("data/simple.confml")
   218         conf = api.Configuration("data/simple.confml")
   185         conf.add_view("view1")
   219         conf.create_view("view1")
   186         conf.add_view("view2")
   220         conf.create_view("view2")
   187         self.assertEquals(conf.list_views(),['view1','view2'])
   221         self.assertEquals(conf.list_views(),['view1','view2'])
   188 
   222 
   189     def test_add_views_and_remove_one(self):
   223     def test_create_views_and_remove_one(self):
   190         conf = api.Configuration("data/simple.confml")
   224         conf = api.Configuration("data/simple.confml")
   191         conf.add_view("view1")
   225         conf.create_view("view1")
   192         conf.add_view("view2")
   226         conf.create_view("view2")
   193         conf.add_view("view3")
   227         conf.create_view("view3")
   194         conf.remove_view('view2')
   228         conf.remove_view('view2')
   195         self.assertEquals(conf.list_views(),['view1','view3'])
   229         self.assertEquals(conf.list_views(),['view1','view3'])
   196 
   230 
   197     def test_add_views_and_remove_invalid(self):
   231     def test_create_views_and_remove_invalid(self):
   198         conf = api.Configuration("data/simple.confml")
   232         conf = api.Configuration("data/simple.confml")
   199         conf.add_view("view1")
   233         conf.create_view("view1")
   200         conf.add_view("view2")
   234         conf.create_view("view2")
   201         conf.add_view("view3")
   235         conf.create_view("view3")
   202         try:
   236         try:
   203             conf.remove_view('invalid')
   237             conf.remove_view('invalid')
   204             self.fail('Removing invalid view succeeds!')
   238             self.fail('Removing invalid view succeeds!')
   205         except exceptions.NotFound:
   239         except exceptions.NotFound:
   206             pass
   240             pass
   207         
   241         
   208     def test_add_views_and_remove_all(self):
   242     def test_create_views_and_remove_all(self):
   209         conf = api.Configuration("data/simple.confml")
   243         conf = api.Configuration("data/simple.confml")
   210         conf.add_view("view1")
   244         conf.create_view("view1")
   211         conf.add_view("view2")
   245         conf.create_view("view2")
   212         conf.add_view("view3")
   246         conf.create_view("view3")
   213         for view in conf.list_views():
   247         for view in conf.list_views():
   214             conf.remove_view(view)
   248             conf.remove_view(view)
   215         self.assertEquals(conf.list_views(),[])
   249         self.assertEquals(conf.list_views(),[])
   216 
   250 
   217     def test_add_view_with_data(self):
   251     def test_create_view_with_data(self):
   218         conf = api.Configuration("data/simple.confml")
   252         conf = api.Configuration("data/simple.confml")
   219         conf.add_view("view1")
   253         conf.create_view("view1")
   220         view = conf.get_view("view1")
   254         view = conf.get_view("view1")
   221         view._add(api.Group("group1"))
   255         view.add_group(api.Group("group1"))
   222         view._add(api.Group("group2"))
   256         view.add_group(api.Group("group2"))
   223         view._add(api._FeatureProxy("feature1"))
   257         view.create_featurelink("feature1")
   224         view.group1._add(api.Group("group21"))
   258         view.group1.add_group(api.Group("group21"))
   225         view.group1.group21._add(api._FeatureProxy("feature211"))
   259         view.group1.group21.create_featurelink("feature211")
   226         view.group1.group21._add(api._FeatureProxy("feature212"))
   260         view.group1.group21.create_featurelink("feature212")
   227         view.feature1._add(api._FeatureProxy("feature11"))
       
   228         
   261         
   229         self.assertEquals(sorted(view._list_traverse()),
   262         self.assertEquals(sorted(view._list_traverse()),
   230                           sorted(['group1', 
   263                           sorted(['group1', 
   231                                           'group2', 
   264                                   'group1.group21', 
   232                                           'feature1', 
   265                                   'group1.group21.link_feature211', 
   233                                           'group1.group21', 
   266                                   'group1.group21.link_feature212', 
   234                                           'group1.group21.feature211', 
   267                                   'group2', 
   235                                           'group1.group21.feature212', 
   268                                   'link_feature1']))
   236                                           'feature1.feature11']))
       
   237 
   269 
   238     def test_get_default_view(self):
   270     def test_get_default_view(self):
   239         conf = api.Configuration("data/simple.confml")
   271         conf = api.Configuration("data/simple.confml")
   240         dview = conf.get_default_view()
   272         dview = conf.get_default_view()
   241         self.assertEquals(dview.ref,'_default_view')
   273         self.assertEquals(dview.ref,'?default_view')
       
   274 
       
   275     def test_create_configuration_and_features(self):
       
   276         conf = api.Configuration("data/simple.confml")
       
   277         fea = conf.create_feature("test")
       
   278         self.assertEquals(conf.get_feature('test'), fea)
       
   279         fea = conf.create_feature("test1", name="test name")
       
   280         self.assertEquals(conf.get_feature('test1').name, 'test name')
       
   281         fea.create_feature("subfea", name="subfea name")
       
   282         self.assertEquals(conf.list_all_features(), ['test','test1','test1.subfea'])
   242 
   283 
   243     def test_get_default_view_and_data_to_it(self):
   284     def test_get_default_view_and_data_to_it(self):
   244         conf = api.Configuration("data/simple.confml")
   285         conf = api.Configuration("data/simple.confml")
   245         view = conf.get_default_view()
   286         view = conf.get_default_view()
   246         view._add(api.Group("group1"))
   287         view._add(api.Group("group1"))
   327 #    def test_add_feature_namespace(self):
   368 #    def test_add_feature_namespace(self):
   328 #        conf = api.Configuration("test","com.nokia")
   369 #        conf = api.Configuration("test","com.nokia")
   329 #        conf.add_feature(api.Feature("feature1"))
   370 #        conf.add_feature(api.Feature("feature1"))
   330 #        self.assertEquals(conf.list_all_features(),['com.nokia.feature1'])
   371 #        self.assertEquals(conf.list_all_features(),['com.nokia.feature1'])
   331 #        self.assertEquals(conf.feature1, conf.get_default_view().com.nokia.feature1._obj)
   372 #        self.assertEquals(conf.feature1, conf.get_default_view().com.nokia.feature1._obj)
       
   373     def test_get_path_for_parent(self):
       
   374         conf = api.Configuration("test.confml")
       
   375         conf.create_configuration("foo/root.confml")
       
   376         conf.get_configuration("foo/root.confml").create_configuration("confml/jee.confml")
       
   377         self.assertEquals(conf.get_path_for_parent(None), "test.confml")
       
   378         self.assertEquals(conf.get_configuration("foo/root.confml").get_path_for_parent(None), "foo/root.confml")
       
   379         foo = conf.get_configuration("foo/root.confml")
       
   380         jee = foo.get_configuration("confml/jee.confml")
       
   381         self.assertEquals(foo.get_path_for_parent(conf), "foo/root.confml")
       
   382         self.assertEquals(jee.get_path_for_parent(conf), "foo/confml/jee.confml")
       
   383         self.assertEquals(jee.get_path_for_parent(foo._obj), "confml/jee.confml")
       
   384 
   332 
   385 
   333     def test_add_subconfiguration(self):
   386     def test_add_subconfiguration(self):
   334         conf = api.Configuration("test",namespace="com.nokia")
   387         conf = api.Configuration("test",namespace="com.nokia")
   335         conf.create_configuration("foo/root.confml")
   388         conf.create_configuration("foo/root.confml")
   336         conf.create_configuration("platforms/s60.confml")
   389         conf.create_configuration("platforms/s60.confml")
       
   390         dconf = api.Configuration('confml/data.confml')
       
   391         sconf = conf.get_configuration('foo/root.confml')
       
   392         sconf.add_configuration(dconf)
   337         self.assertEquals(conf.list_configurations(),['foo/root.confml',
   393         self.assertEquals(conf.list_configurations(),['foo/root.confml',
   338                                                       'platforms/s60.confml',])
   394                                                       'platforms/s60.confml',])
   339 
   395         self.assertEquals(conf.list_all_configurations(),['foo/root.confml',
       
   396                                                           'foo/confml/data.confml',
       
   397                                                           'platforms/s60.confml'])
       
   398         self.assertEquals(conf.get_configuration('foo/root.confml').list_all_configurations(),['confml/data.confml'])
       
   399         
       
   400         
   340     def test_remove_configuration(self):
   401     def test_remove_configuration(self):
   341         conf = api.Configuration("test.confml",namespace="com.nokia")
   402         conf = api.Configuration("test.confml",namespace="com.nokia")
   342         conf.create_configuration("foo/root.confml")
   403         conf.create_configuration("foo/root.confml")
   343         self.assertEquals(conf.list_configurations(),['foo/root.confml'])
   404         self.assertEquals(conf.list_configurations(),['foo/root.confml'])
   344         conf.remove_configuration("foo/root.confml")
   405         conf.remove_configuration("foo/root.confml")
   480         conf.add_feature(api.Feature('feature3'))
   541         conf.add_feature(api.Feature('feature3'))
   481         conf.add_feature(api.Feature('feature4'))
   542         conf.add_feature(api.Feature('feature4'))
   482         conf.add_feature(api.Feature('feature11'),'feature1')
   543         conf.add_feature(api.Feature('feature11'),'feature1')
   483         conf.add_feature(api.Feature('feature12'),'feature1')
   544         conf.add_feature(api.Feature('feature12'),'feature1')
   484         
   545         
   485         conf.add_view("rootfeas")
   546         conf.create_view("rootfeas")
   486         view = conf.get_view('rootfeas')
   547         view = conf.get_view('rootfeas')
   487         for fearef in conf.list_features():
   548         for fearef in conf.list_features():
   488             fea = conf.get_feature(fearef)
   549             fea = conf.get_feature(fearef)
   489             view.add_feature(fea)
   550             view.add_feature(fea)
   490         self.assertEquals(view.list_all_features(), ['feature1',
   551         self.assertEquals(view.list_all_features(), ['feature1',
   502         conf.add_feature(api.Feature('feature2'))
   563         conf.add_feature(api.Feature('feature2'))
   503         conf.add_feature(api.Feature('feature3'))
   564         conf.add_feature(api.Feature('feature3'))
   504         conf.add_feature(api.Feature('feature4'))
   565         conf.add_feature(api.Feature('feature4'))
   505         conf.add_feature(api.Feature('feature11'),'feature1')
   566         conf.add_feature(api.Feature('feature11'),'feature1')
   506         conf.add_feature(api.Feature('feature12'),'feature1')
   567         conf.add_feature(api.Feature('feature12'),'feature1')
   507         conf.add_view('fea1')
   568         conf.create_view('fea1')
   508         view1 = conf.get_view('fea1')
   569         view1 = conf.get_view('fea1')
   509         view1.add_group('thegruppe1')
   570         view1.create_group('thegruppe1')
   510         view1.get_group('thegruppe1').add(api.FeatureLink('feature1.feature11'))
   571         view1.get_group('thegruppe1').add(api.FeatureLink('feature1.feature11'))
   511         view1.add(api.FeatureLink('feature1.*'))
   572         view1.add(api.FeatureLink('feature1.*'))
   512         view1.populate()
   573         view1.populate()
   513         self.assertEquals(view1.list_all_features(),['thegruppe1.feature11','feature11','feature12'])
   574         self.assertEquals(view1.list_all_features(),
   514         fpr = view1.get_feature('thegruppe1.feature11')
   575                           ['thegruppe1.proxy_feature1_feature11',
       
   576                            'proxy_feature1_feature11',
       
   577                            'proxy_feature1_feature12'])
       
   578         fpr = view1.get_feature('thegruppe1.proxy_feature1_feature11')
   515         self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) 
   579         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'])
   580         self.assertEquals(view1.list_all_features(),
       
   581                           ['thegruppe1.proxy_feature1_feature11',
       
   582                            'proxy_feature1_feature11',
       
   583                            'proxy_feature1_feature12'])
   517 
   584 
   518     def test_add_features_and_create_all_view_with_links(self):
   585     def test_add_features_and_create_all_view_with_links(self):
   519         conf = api.Configuration("foo/foo.confml")
   586         conf = api.Configuration("foo/foo.confml")
   520         conf.add_feature(api.Feature('feature1'))
   587         conf.add_feature(api.Feature('feature1'))
   521         conf.add_feature(api.Feature('feature2'))
   588         conf.add_feature(api.Feature('feature2'))
   522         conf.add_feature(api.Feature('feature3'))
   589         conf.add_feature(api.Feature('feature3'))
   523         conf.add_feature(api.Feature('feature4'))
   590         conf.add_feature(api.Feature('feature4'))
   524         conf.add_feature(api.Feature('feature11'),'feature1')
   591         conf.add_feature(api.Feature('feature11'),'feature1')
   525         conf.add_feature(api.Feature('feature12'),'feature1')
   592         conf.add_feature(api.Feature('feature12'),'feature1')
   526         conf.add_view("all")
   593         conf.create_view("all")
   527         view1 = conf.get_view('all')
   594         view1 = conf.get_view('all')
   528         view1.add(api.FeatureLink('**'))
   595         view1.add(api.FeatureLink('**'))
   529         view1.populate()
   596         view1.populate()
   530         self.assertEquals(view1.list_all_features(),['feature1', 'feature11', 'feature12', 'feature2', 'feature3', 'feature4'])
   597         self.assertEquals(view1.list_all_features(),
   531         fpr = view1.get_feature('feature11')
   598                           ['proxy_feature1',
       
   599                            'proxy_feature1_feature11',
       
   600                            'proxy_feature1_feature12',
       
   601                            'proxy_feature2',
       
   602                            'proxy_feature3',
       
   603                            'proxy_feature4'])
       
   604         fpr = view1.get_feature('proxy_feature1_feature11')
   532         self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) 
   605         self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) 
   533 
   606 
   534     def test_add_a_configuration_and_remove_it(self):
   607     def test_add_a_configuration_and_remove_it(self):
   535         conf = api.Configuration("simple.confml")
   608         conf = api.Configuration("simple.confml")
   536         conf.add_configuration(api.Configuration("confml/data.confml"))
   609         conf.add_configuration(api.Configuration("confml/data.confml"))
   584         conf.add_data(api.Data(fqr='feature1.feature12', value="test"))
   657         conf.add_data(api.Data(fqr='feature1.feature12', value="test"))
   585         self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test")
   658         self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test")
   586         self.assertEquals(conf.data.feature1.feature12.get_value(),"test")
   659         self.assertEquals(conf.data.feature1.feature12.get_value(),"test")
   587         conf.remove_data('feature1.feature12')
   660         conf.remove_data('feature1.feature12')
   588         self.assertEquals(conf.list_datas(), ['feature1'])
   661         self.assertEquals(conf.list_datas(), ['feature1'])
       
   662     
       
   663     def test_add_data_to_configuration_from_list(self):
       
   664         def check(data_objs, policy, expected):
       
   665             conf = api.Configuration("foo/foo.confml")
       
   666             conf.add_data(api.Data(ref='base1', value="foo"))
       
   667             conf.add_data(api.Data(ref='foo', value="foobar"))
       
   668             conf.add_data(api.Data(ref='base2', value="bar"))
       
   669             
       
   670             if policy is None:
       
   671                 conf.add_data(data_objs)
       
   672             else:
       
   673                 conf.add_data(data_objs, policy=policy)
       
   674             
       
   675             actual = []
       
   676             for d in conf._traverse(type=api.Data):
       
   677                 actual.append((d.fqr, d.value))
       
   678             self.assertEquals(actual, expected)
       
   679         
       
   680         # Adding an empty list should do nothing
       
   681         check(data_objs = [],
       
   682               policy    = None,
       
   683               expected  = [('base1', 'foo'),
       
   684                            ('foo', 'foobar'),
       
   685                            ('base2', 'bar')])
       
   686         
       
   687         # Default policy (replace)
       
   688         check(data_objs = [api.Data(ref="foo", value="1"),
       
   689                            api.Data(ref="foo", value="2"),
       
   690                            api.Data(ref="foo", value="3"),],
       
   691               policy    = None,
       
   692               expected  = [('base1', 'foo'),
       
   693                            ('foo', '1'),
       
   694                            ('foo', '2'),
       
   695                            ('foo', '3'),
       
   696                            ('base2', 'bar')])
       
   697         
       
   698         # Replace explicitly
       
   699         check(data_objs = [api.Data(ref="foo", value="1"),
       
   700                            api.Data(ref="foo", value="2"),
       
   701                            api.Data(ref="foo", value="3"),],
       
   702               policy    = api.container.REPLACE,
       
   703               expected  = [('base1', 'foo'),
       
   704                            ('foo', '1'),
       
   705                            ('foo', '2'),
       
   706                            ('foo', '3'),
       
   707                            ('base2', 'bar')])
       
   708         
       
   709         # Append
       
   710         check(data_objs = [api.Data(ref="foo", value="1"),
       
   711                            api.Data(ref="foo", value="2"),
       
   712                            api.Data(ref="foo", value="3"),],
       
   713               policy    = api.container.APPEND,
       
   714               expected  = [('base1', 'foo'),
       
   715                            ('foo', 'foobar'),
       
   716                            ('foo', '1'),
       
   717                            ('foo', '2'),
       
   718                            ('foo', '3'),
       
   719                            ('base2', 'bar')])
       
   720         
       
   721         # Prepend
       
   722         check(data_objs = [api.Data(ref="foo", value="1"),
       
   723                            api.Data(ref="foo", value="2"),
       
   724                            api.Data(ref="foo", value="3"),],
       
   725               policy    = api.container.PREPEND,
       
   726               expected  = [('base1', 'foo'),
       
   727                            ('foo', '1'),
       
   728                            ('foo', '2'),
       
   729                            ('foo', '3'),
       
   730                            ('foo', 'foobar'),
       
   731                            ('base2', 'bar')])
   589 
   732 
   590     def test_set_data_to_configuration(self):
   733     def test_set_data_to_configuration(self):
   591         conf = api.Configuration("foo/foo.confml")
   734         conf = api.Configuration("foo/foo.confml")
   592         conf.add_data(api.Data(fqr='feature1', value=123))
   735         conf.add_data(api.Data(fqr='feature1', value=123))
   593         self.assertEquals(conf.get_data('feature1').get_value(),123)
   736         self.assertEquals(conf.get_data('feature1').get_value(),123)
   670         conf.add_feature(api.Feature('child2'),'feature1')
   813         conf.add_feature(api.Feature('child2'),'feature1')
   671         conf.add_feature(api.Feature('child3'),'feature1')
   814         conf.add_feature(api.Feature('child3'),'feature1')
   672         fea = conf.get_feature('feature1')
   815         fea = conf.get_feature('feature1')
   673         fea.set_template(['test1','test2','test3'])
   816         fea.set_template(['test1','test2','test3'])
   674         self.assertEquals(fea.get_template(),['test1', 'test2', 'test3'])
   817         self.assertEquals(fea.get_template(),['test1', 'test2', 'test3'])
   675         fea.set_template(['test1','test3'])
   818         fea.set_template(['Test1','Test2','Test3'])
   676         self.assertEquals(fea.get_template(),['test1','test3','test3'])
   819         self.assertEquals(fea.get_template(),['Test1','Test2','Test3'])
   677         try:
   820         
   678             fea.set_template(['test1',None,'test3',None])
   821         self.assertRaises(ValueError, fea.set_template, [])
   679             self.fail("Able to add more data then allowed")
   822         self.assertRaises(ValueError, fea.set_template, ['foo', 'bar'])
   680         except IndexError:
   823         self.assertRaises(ValueError, fea.set_template, ['foo', 'bar', 'foo', 'bar'])
   681             pass
       
   682 
   824 
   683     def test_create_features_with_rfs_data(self):
   825     def test_create_features_with_rfs_data(self):
   684         conf = api.Configuration("foo/foo.confml")
   826         conf = api.Configuration("foo/foo.confml")
   685         conf.add_feature(api.Feature('feature1'))
   827         conf.add_feature(api.Feature('feature1'))
   686         conf.add_feature(api.Feature('child1'),'feature1')
   828         conf.add_feature(api.Feature('child1'),'feature1')
   705         self.assertEquals(dict['namespace'],'com.nokia')
   847         self.assertEquals(dict['namespace'],'com.nokia')
   706 
   848 
   707     def test_dumps_add_features(self):
   849     def test_dumps_add_features(self):
   708         root = api.Configuration("root",namespace="com.nokia")
   850         root = api.Configuration("root",namespace="com.nokia")
   709         conf = root.create_configuration("test.confml")
   851         conf = root.create_configuration("test.confml")
   710         conf.add_feature(api.Feature("feature1"))
   852         conf.add_feature(api.Feature("feature1", name="feature1"))
   711         conf.add_feature(api.Feature("feature2"))
   853         conf.add_feature(api.Feature("feature2", name="feature2"))
   712         dumped = persistentdictionary.DictWriter().dumps(conf)
   854         dumped = persistentdictionary.DictWriter().dumps(conf)
   713         dict =dumped['Configuration']['dict']
   855         dict =dumped['Configuration']['dict']
   714         self.assertEquals(dict['path'],'test.confml')
   856         self.assertEquals(dict['path'],'test.confml')
   715         self.assertEquals(dict['namespace'],'com.nokia')
   857         self.assertEquals(dict['namespace'],'com.nokia')
   716         self.assertEquals(dumped['Configuration']['children'],
   858         self.assertEquals(dumped['Configuration']['children'],
   718                            {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}}]
   860                            {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}}]
   719                                             )
   861                                             )
   720 
   862 
   721     def test_dumps_root_configuration(self):
   863     def test_dumps_root_configuration(self):
   722         root = api.Configuration("root",namespace="com.nokia")
   864         root = api.Configuration("root",namespace="com.nokia")
   723         conf = root.create_configuration("test.confml")
       
   724         conf = root.create_configuration("foo/root.confml")
   865         conf = root.create_configuration("foo/root.confml")
   725         conf.add_feature(api.Feature("feature1"))
   866         conf.add_feature(api.Feature("feature1"))
   726         conf.add_feature(api.Feature("feature2"))
   867         conf.add_feature(api.Feature("feature2"))
   727         conf.feature1.add_feature(api.Feature("feature11"))
   868         conf.feature1.add_feature(api.Feature("feature11"))
   728         conf.feature1.add_feature(api.Feature("feature12"))
   869         conf.feature1.add_feature(api.Feature("feature12"))
   732         self.assertEquals(dict['namespace'],'com.nokia')
   873         self.assertEquals(dict['namespace'],'com.nokia')
   733 
   874 
   734     def test_dumps_feature_hierarchy(self):
   875     def test_dumps_feature_hierarchy(self):
   735         root = api.Configuration("root",namespace="com.nokia")
   876         root = api.Configuration("root",namespace="com.nokia")
   736         conf = root.create_configuration("test.confml")
   877         conf = root.create_configuration("test.confml")
   737         conf.add_feature(api.Feature("feature1"))
   878         conf.add_feature(api.Feature("feature1", name="feature1"))
   738         conf.add_feature(api.Feature("feature2"))
   879         conf.add_feature(api.Feature("feature2", name="feature2"))
   739         conf.feature1.add_feature(api.Feature("feature11"))
   880         conf.feature1.add_feature(api.Feature("feature11", name="feature11"))
   740         conf.feature1.add_feature(api.Feature("feature12"))
   881         conf.feature1.add_feature(api.Feature("feature12", name="feature12"))
   741         dumped = persistentdictionary.DictWriter().dumps(conf)
   882         dumped = persistentdictionary.DictWriter().dumps(conf)
   742         dict =dumped['Configuration']['dict']
   883         dict =dumped['Configuration']['dict']
   743         self.assertEquals(dict['path'],'test.confml')
   884         self.assertEquals(dict['path'],'test.confml')
   744         self.assertEquals(dict['ref'],'test_confml')
   885         self.assertEquals(dict['ref'],'test_confml')
   745         self.assertEquals(dict['namespace'],'com.nokia')
   886         self.assertEquals(dict['namespace'],'com.nokia')
   790         self.assertEquals(conf.list_all_features(),
   931         self.assertEquals(conf.list_all_features(),
   791                           conf2.list_all_features())
   932                           conf2.list_all_features())
   792 
   933 
   793     def test_dumps_and_loads_configuration_hierarchy(self):
   934     def test_dumps_and_loads_configuration_hierarchy(self):
   794         root = api.Configuration("root.confml")
   935         root = api.Configuration("root.confml")
   795         root.add_configuration(api.Configuration("layer1.confml"))
   936         root.add_configuration(api.Configuration("layer1"))
   796         layer = api.Configuration("foo/layer2.confml")
   937         layer = api.Configuration("layer2")
   797         conf = api.Configuration("foo/test.confml")
   938         conf = api.Configuration("test")
   798         conf.add_feature(api.Feature("feature1"))
   939         conf.add_feature(api.Feature("feature1"))
   799         conf.add_feature(api.Feature("feature2"))
   940         conf.add_feature(api.Feature("feature2"))
   800         conf.feature1.add_feature(api.Feature("feature11"))
   941         conf.feature1.add_feature(api.Feature("feature11"))
   801         conf.feature1.add_feature(api.Feature("feature12"))
   942         conf.feature1.add_feature(api.Feature("feature12"))
   802         layer.add_configuration(conf)
   943         layer.add_configuration(conf)
   807         self.assertEquals(root.list_all_features(),
   948         self.assertEquals(root.list_all_features(),
   808                           root2.list_all_features())
   949                           root2.list_all_features())
   809 
   950 
   810     def test_dumps_and_loads_configuration_hierarchy_with_data(self):
   951     def test_dumps_and_loads_configuration_hierarchy_with_data(self):
   811         root = api.Configuration("root.confml")
   952         root = api.Configuration("root.confml")
   812         layer = api.Configuration("foo/layer1.confml")
   953         layer = api.Configuration("layer1")
   813         conf = api.Configuration("foo/test.confml")
   954         conf = api.Configuration("test")
   814         conf.add_feature(api.Feature("feature1"))
   955         conf.add_feature(api.Feature("feature1"))
   815         conf.add_feature(api.Feature("feature2"))
   956         conf.add_feature(api.Feature("feature2"))
   816         conf.feature1.add_feature(api.Feature("feature11"))
   957         conf.feature1.add_feature(api.Feature("feature11"))
   817         conf.feature1.add_feature(api.Feature("feature12"))
   958         conf.feature1.add_feature(api.Feature("feature12"))
   818         conf.feature1.set_value(1)
   959         conf.feature1.set_value(1)
   819         conf.feature2.set_value(2)
   960         conf.feature2.set_value(2)
   820         layer.add_configuration(conf)
   961         layer.add_configuration(conf)
   821         root.add_configuration(layer)
   962         root.add_configuration(layer)
   822         root.add_configuration(api.Configuration("layer2.confml"))
   963         root.add_configuration(api.Configuration("layer2"))
   823         root.get_default_view().feature1.feature11.set_value("testing11")
   964         root.get_default_view().feature1.feature11.set_value("testing11")
   824         root.get_default_view().feature1.set_value("test1")
   965         root.get_default_view().feature1.set_value("test1")
   825         dumped = persistentdictionary.DictWriter().dumps(root)
   966         dumped = persistentdictionary.DictWriter().dumps(root)
   826         root2= persistentdictionary.DictReader().loads(dumped)
   967         root2= persistentdictionary.DictReader().loads(dumped)
   827         self.assertEquals(root.list_all_features(),
   968         self.assertEquals(root.list_all_features(),
   829         self.assertEquals(root2.get_default_view().feature1.get_value(), "test1")
   970         self.assertEquals(root2.get_default_view().feature1.get_value(), "test1")
   830         self.assertEquals(root2.get_default_view().feature2.get_value(), 2)
   971         self.assertEquals(root2.get_default_view().feature2.get_value(), 2)
   831         self.assertEquals(root2.get_default_view().feature1.feature11.get_value(), "testing11")
   972         self.assertEquals(root2.get_default_view().feature1.feature11.get_value(), "testing11")
   832 
   973 
   833         self.assertEquals([data.find_parent(type=api.Configuration).get_path() for data in root2.get_all_datas()],
   974         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'])
   975                           ['test', 'test', 'layer2','layer2'])
   835 
   976 
   836     def test_access_via_configuration_proxy(self):
   977     def test_access_via_configuration_proxy(self):
   837         conf = api.Configuration("root.confml")
   978         conf = api.Configuration("root.confml")
   838         conf.add_feature(api.Feature("feature1"))
   979         conf.add_feature(api.Feature("feature1"))
   839         proxy = api.ConfigurationProxy("root.confml")
   980         proxy = api.ConfigurationProxy("root.confml")
   840         proxy.set('_obj',conf)
   981         proxy._set_obj(conf)
   841         self.assertEquals(proxy.get_ref(), 'root_confml')
   982         self.assertEquals(proxy.get_ref(), 'root_confml')
   842         self.assertEquals(proxy.get_path(), 'root.confml')
   983         self.assertEquals(proxy.get_path(), 'root.confml')
   843         self.assertEquals(conf.feature1.get_ref(), 'feature1')
   984         self.assertEquals(conf.feature1.get_ref(), 'feature1')
   844         self.assertEquals(proxy.feature1.get_ref(), 'feature1')
   985         self.assertEquals(proxy.feature1.get_ref(), 'feature1')
   845         
   986         
   846 
   987 
       
   988 class TestConfigurationInclude(unittest.TestCase):    
       
   989     class StoreTestInt(object):
       
   990         def load(self, ref):
       
   991             return api.Configuration(ref)
       
   992 
       
   993         def dump(self, obj, ref):
       
   994             pass
       
   995     
       
   996     def get_store_interface(self):
       
   997         return TestConfigurationInclude.StoreTestInt()
       
   998     
       
   999     def _test_include(self):
       
  1000         inc = api.Include("foo/bar.txt", self.get_store_interface())
       
  1001         objs =inc._objects()
       
  1002         self.assertEquals(len(objs),1)
       
  1003         self.assertEquals(objs[0].path,"foo/bar.txt")  
       
  1004         
       
  1005     def test_include_clone(self):
       
  1006         inc = api.Include("foo/bar.txt", store_interface=self.get_store_interface())
       
  1007         ci = inc._clone()
       
  1008         self.assertEquals(inc.ref, ci.ref)
       
  1009         self.assertEquals(inc.get_path(), ci.get_path())
       
  1010         
       
  1011 #    def test_configuration_with_include(self):
       
  1012 #        conf = api.Configuration("foo.confml")
       
  1013 #        # Set the get_store_interface function to test stub method 
       
  1014 #        conf.get_store_interface = self.get_store_interface
       
  1015 #        conf.include_configuration("foo/test.confml")
       
  1016 #        subconfs = conf.list_configurations()
       
  1017 #        self.assertEquals(len(subconfs),1)
       
  1018 #        self.assertTrue(isinstance(subconfs[0], api.Configuration))  
       
  1019 #        self.assertEquals(subconfs[0].path,"foo/test.confml")  
       
  1020         
   847 if __name__ == '__main__':
  1021 if __name__ == '__main__':
   848       unittest.main()
  1022     unittest.main()
   849       
  1023       
   850 """
  1024 """
   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': ''}}}]}}
  1025 {'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 """
  1026 """