diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/cone/public/tests/unittest_configuration.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/cone/public/tests/unittest_configuration.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,852 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +""" +Test the configuration +""" +import unittest +import string +import sys,os +import __init__ + +from cone.public import api,exceptions,utils +from cone.storage import persistentdictionary +from cone.confml import persistentconfml + +class TestConfiguration(unittest.TestCase): + def setUp(self): + pass + + # @test + def test_create_configuration(self): + conf = api.Configuration("testmee.confml") + self.assertTrue(conf) + + def test_get_root_configuration(self): + conf = api.Configuration("testmee.confml") + self.assertEquals(conf.get_root_configuration(),conf) + conf.add_configuration(api.Configuration("foo/foo.confml")) + conf.add_configuration(api.Configuration("fii/fii.confml")) + conf.fii__fii_confml.add_configuration(api.Configuration("fii/foo.confml")) + self.assertEquals(conf.fii__fii_confml.get_root_configuration(),conf) + self.assertEquals(conf.foo__foo_confml.get_root_configuration(),conf) + self.assertEquals(conf.fii__fii_confml.fii__foo_confml.get_root_configuration(),conf) + + def test_get_last_configuration(self): + conf = api.Configuration("testmee.confml") + conf.add_configuration(api.Configuration("foo/foo.confml")) + conf.add_configuration(api.Configuration("fii/fii.confml")) + conf.add_configuration(api.Configuration("hii/hii.confml")) + conf.fii__fii_confml.add_configuration(api.Configuration("fii/foo.confml")) + self.assertEquals(conf.list_configurations(), ["foo/foo.confml","fii/fii.confml","hii/hii.confml"]) + + self.assertEquals(conf.get_configuration_by_index(-1).get_path(), "hii/hii.confml") + self.assertEquals(conf.get_configuration_by_index(0).get_path(), "foo/foo.confml") + self.assertEquals(conf.get_configuration_by_index(1).get_path(), "fii/fii.confml") + self.assertEquals(conf.get_configuration_by_index(2).get_path(), "hii/hii.confml") + + def compareconfiguration(self, conf1,conf2): + self.assertEquals(conf1.path,conf2.path) + self.assertEquals(conf1.name,conf2.name) + self.assertEquals(conf1.ref,conf2.ref) + self.assertEquals(conf1.namespace,conf2.namespace) + + def test_clone_single_configuration(self): + conf1 = api.Configuration("testmee.confml") + conf1.add_feature(api.Feature('test1')) + conf1.add_feature(api.Feature('test2')) + conf1.add_feature(api.Feature('child1'),'test1') + dview = conf1.get_default_view() + dview.get_feature('test1').set_value('one') + dview.get_feature('test1.child1').set_value('subone') + conf2 = conf1._clone(recursion=True) + self.compareconfiguration(conf1, conf2) + self.assertEquals(conf2.list_all_features(),['test1', 'test1.child1', 'test2']) + dview2 = conf2.get_default_view() + self.assertEquals(dview2.get_feature('test1').get_value(),'one') + self.assertEquals(dview2.get_feature('test1.child1').get_value(),'subone') + + def test_clone_configuration_with_includes(self): + conf1 = api.Configuration("testmee.confml") + conf1.add_feature(api.Feature('test1')) + conf1.add_feature(api.Feature('test2')) + conf1.add_feature(api.Feature('child1'),'test1') + conf1.create_configuration("confml/data.confml") + dview = conf1.get_default_view() + dview.get_feature('test1').set_value('one') + dview.get_feature('test1.child1').set_value('subone') + conf2 = conf1._clone(recursion=True) + self.compareconfiguration(conf1, conf2) + self.assertEquals(conf2.list_all_features(),['test1', 'test1.child1', 'test2']) + self.assertEquals(conf2.list_configurations(),['confml/data.confml']) + dview2 = conf2.get_default_view() + self.assertEquals(dview2.get_feature('test1').get_value(),'one') + self.assertEquals(dview2.get_feature('test1.child1').get_value(),'subone') + +# def test_create_and_get_root(self): +# conf = api.Configuration("foobar/testmee.confml") +# self.assertEquals(conf.get_root(),"foobar/testmee.confml") + +class TestCompositeConfiguration(unittest.TestCase): + def test_add(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + self.assertEquals(conf.list_configurations()[0],"laa") + + def test_add_and_access_via_member(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + self.assertEquals(conf.laa._name,"laa") + + def test_add_and_add_another_config_under(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf.laa._add(api.Configuration("foo")) + self.assertEquals(conf.laa.foo._name,"foo") + + def test_add_several_configurations(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf._add(api.Configuration("foo")) + conf._add(api.Configuration("faa")) + self.assertEquals(conf.list_configurations()[0],"laa") + self.assertEquals(conf.list_configurations()[1],"foo") + self.assertEquals(conf.list_configurations()[2],"faa") + + def test_add_several_and_remove_one_layer(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf._add(api.Configuration("foo")) + conf._add(api.Configuration("faa")) + conf._remove("foo") + + self.assertEquals(conf.list_configurations()[0],"laa") + self.assertEquals(conf.list_configurations()[1],"faa") + + def test_add_several_and_remove_last_layer(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf._add(api.Configuration("foo")) + conf._add(api.Configuration("faa")) + conf._remove("faa") + self.assertEquals(conf.list_configurations()[0],"laa") + self.assertEquals(conf.list_configurations()[1],"foo") + + def test_add_several_and_remove_all_configurations(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf._add(api.Configuration("foo")) + conf._add(api.Configuration("faa")) + for layername in conf.list_configurations(): + conf._remove(layername) + + self.assertTrue(len(conf.list_configurations())==0) + + def test_add_several_and_try_to_remove_not_existing(self): + conf = api.Configuration("data/simple.confml") + layer = api.Configuration("laa") + conf._add(layer) + conf._add(api.Configuration("foo")) + conf._add(api.Configuration("faa")) + try: + conf._remove("notthere") + self.fail("removing of nonexisting layer succeeds!") + except exceptions.NotFound: + pass + + def test_add_view_simple(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + view = conf.get_view("view1") + self.assertEquals(view._list(),[]) + + def test_add_views_and_list_views(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + conf.add_view("view2") + self.assertEquals(conf.list_views(),['view1','view2']) + + def test_add_views_and_remove_one(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + conf.add_view("view2") + conf.add_view("view3") + conf.remove_view('view2') + self.assertEquals(conf.list_views(),['view1','view3']) + + def test_add_views_and_remove_invalid(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + conf.add_view("view2") + conf.add_view("view3") + try: + conf.remove_view('invalid') + self.fail('Removing invalid view succeeds!') + except exceptions.NotFound: + pass + + def test_add_views_and_remove_all(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + conf.add_view("view2") + conf.add_view("view3") + for view in conf.list_views(): + conf.remove_view(view) + self.assertEquals(conf.list_views(),[]) + + def test_add_view_with_data(self): + conf = api.Configuration("data/simple.confml") + conf.add_view("view1") + view = conf.get_view("view1") + view._add(api.Group("group1")) + view._add(api.Group("group2")) + view._add(api._FeatureProxy("feature1")) + view.group1._add(api.Group("group21")) + view.group1.group21._add(api._FeatureProxy("feature211")) + view.group1.group21._add(api._FeatureProxy("feature212")) + view.feature1._add(api._FeatureProxy("feature11")) + + self.assertEquals(sorted(view._list_traverse()), + sorted(['group1', + 'group2', + 'feature1', + 'group1.group21', + 'group1.group21.feature211', + 'group1.group21.feature212', + 'feature1.feature11'])) + + def test_get_default_view(self): + conf = api.Configuration("data/simple.confml") + dview = conf.get_default_view() + self.assertEquals(dview.ref,'_default_view') + + def test_get_default_view_and_data_to_it(self): + conf = api.Configuration("data/simple.confml") + view = conf.get_default_view() + view._add(api.Group("group1")) + view._add(api.Group("group2")) + view._add(api._FeatureProxy("feature1")) + view.group1._add(api.Group("group21")) + view.group1.group21._add(api._FeatureProxy("feature211")) + view.group1.group21._add(api._FeatureProxy("feature212")) + view.feature1._add(api._FeatureProxy("feature11")) + + self.assertEquals(sorted(view._list_traverse()), + sorted(['group1', + 'group2', + 'feature1', + 'group1.group21', + 'group1.group21.feature211', + 'group1.group21.feature212', + 'feature1.feature11'])) + + + def test_add_feature_normal_configuration(self): + conf = api.Configuration("simple.confml") + conf.add_feature(api.Feature("feature1")) + self.assertEquals(conf.list_all_features(),['feature1']) + + def test_add_feature_normal_and_get_default_view(self): + conf = api.Configuration("simple.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.add_feature(api.Feature("feature11"),'feature1') + view = conf.get_default_view() + + self.assertEquals(view.list_all_features(),['feature1', + 'feature1.feature11', + 'feature2',]) + self.assertEquals(view.get_feature('feature1.feature11')._obj._parent,conf.feature1) + + def test_add_feature_hierarchy_and_get_default_view(self): + root = api.Configuration("data/simple.confml") + conf = api.Configuration("test/root.confml") + root.add_configuration(conf) + conf2 = api.Configuration("test2/root.confml",namespace="com.nokia") + root.add_configuration(conf2) + conf.add_feature(api.Feature("group1")) + conf.add_feature(api.Feature("group2")) + conf.add_feature(api.Feature("feature1")) + conf.group1.add_feature(api.Feature("group21")) + conf.group1.group21.add_feature(api.Feature("feature211")) + conf.group1.group21.add_feature(api.Feature("feature212")) + conf.feature1.add_feature(api.Feature("feature11")) + conf2.add_feature(api.Feature("wlan")) + conf2.add_feature(api.Feature("bluetooth")) + self.assertEquals(conf.list_all_features(), + ['group1', + 'group1.group21', + 'group1.group21.feature211', + 'group1.group21.feature212', + 'group2', + 'feature1', + 'feature1.feature11']) + dview = conf.get_default_view() + self.assertEquals(dview.list_features(), + ['group1', + 'group2', + 'feature1']) + + self.assertEquals(dview.list_groups(),['com']) + self.assertEquals(dview.list_all_features(), + ['group1', + 'group1.group21', + 'group1.group21.feature211', + 'group1.group21.feature212', + 'group2', + 'feature1', + 'feature1.feature11', + 'com.nokia.wlan', + 'com.nokia.bluetooth']) + + def test_add_feature(self): + conf = api.Configuration("simple.confml") + conf.add_feature(api.Feature("feature1")) + self.assertEquals(conf.list_features(),['feature1']) + +# def test_add_feature_namespace(self): +# conf = api.Configuration("test","com.nokia") +# conf.add_feature(api.Feature("feature1")) +# self.assertEquals(conf.list_all_features(),['com.nokia.feature1']) +# self.assertEquals(conf.feature1, conf.get_default_view().com.nokia.feature1._obj) + + def test_add_subconfiguration(self): + conf = api.Configuration("test",namespace="com.nokia") + conf.create_configuration("foo/root.confml") + conf.create_configuration("platforms/s60.confml") + self.assertEquals(conf.list_configurations(),['foo/root.confml', + 'platforms/s60.confml',]) + + def test_remove_configuration(self): + conf = api.Configuration("test.confml",namespace="com.nokia") + conf.create_configuration("foo/root.confml") + self.assertEquals(conf.list_configurations(),['foo/root.confml']) + conf.remove_configuration("foo/root.confml") + self.assertEquals(conf.list_configurations(),[]) + + def test_get_configuration(self): + conf = api.Configuration("test.confml",namespace="com.nokia") + conf.create_configuration("foo/root.confml") + self.assertEquals(conf.list_configurations(),['foo/root.confml']) + foo = conf.get_configuration("foo/root.confml") + self.assertEquals(foo.get_path(),"foo/root.confml") + + + def test_remove_all(self): + conf = api.Configuration("test",namespace="com.nokia") + conf.create_configuration("foo/root.confml") + conf.create_configuration("platforms/s60.confml") + conf.create_configuration("platforms/customsw.confml") + self.assertEquals(conf.list_configurations(),['foo/root.confml', + 'platforms/s60.confml', + 'platforms/customsw.confml']) + for configref in conf.list_configurations(): + conf.remove_configuration(configref) + self.assertEquals(conf.list_configurations(),[]) + + + def test_add_subconfiguration_and_access(self): + conf = api.Configuration("data/simple.confml") + conf.create_configuration("foo/layer1.confml") + self.assertTrue(conf.foo__layer1_confml) + +# def test_add_subconfiguration_and_features(self): +# conf = api.Configuration("test","com.nokia") +# conf.create_configuration("foo/root.confml") +# conf.create_configuration("fii/root.confml") +# conf.foo_root.add_feature(api.Feature("feature1")) +# conf.foo_root.add_feature(api.Feature("feature12"),"feature1") +# conf.fii_root.add_feature(api.Feature("feature2")) +# conf.fii_root.add_feature(api.Feature("feature21"),"feature2") +# self.assertEquals(conf.list_all_features(),['com.nokia.feature1', +# 'com.nokia.feature1.feature12', +# 'com.nokia.feature2', +# 'com.nokia.feature2.feature21', +# ]) +# self.assertEquals(conf.foo_root.feature1.get_ref(), +# conf.get_default_view()._get('com.nokia.feature1').get_ref()) + + def test_add_configuration_with_features_to_root(self): + root= api.Configuration("test",namespace="com.nokia") + conf1 = api.Configuration("foo/foo.confml") + conf1.add_feature(api.Feature("feature1")) + conf1.add_feature(api.Feature("feature12"),"feature1") + conf2 = api.Configuration("bar/bar.confml") + conf2.add_feature(api.Feature("feature2")) + conf2.add_feature(api.Feature("feature22"),"feature2") + root.add_configuration(conf1) + self.assertEquals(root.list_all_features(), + ['feature1', + 'feature1.feature12']) + root.add_configuration(conf2) + self.assertEquals(root.list_all_features(), + ['feature1', + 'feature1.feature12', + 'feature2', + 'feature2.feature22']) + + def test_add_configuration_to_other_conf_and_then_to_root(self): + root= api.Configuration("test",namespace="com.nokia") + conf1 = api.Configuration("foo/foo.confml") + conf1.add_feature(api.Feature("feature1")) + conf1.add_feature(api.Feature("feature12"),"feature1") + conf2 = api.Configuration("bar/foo.confml") + conf2.add_feature(api.Feature("feature2")) + conf2.add_feature(api.Feature("feature22"),"feature2") + conf2.add_configuration(conf1) + self.assertEquals(conf2.list_all_features(), + ['feature2', + 'feature2.feature22', + 'feature1', + 'feature1.feature12']) + root.add_configuration(conf2) + self.assertEquals(root.list_all_features(), + ['feature2', + 'feature2.feature22', + 'feature1', + 'feature1.feature12']) + + def test_add_features_feature_hiararchy_and_then_to_configurations(self): + conf1 = api.Configuration("foo/foo.confml") + fea = api.Feature('feature1') + fea2 = api.Feature('feature12') + fea2.add_feature(api.Feature('feature121')) + fea.add_feature(api.Feature('feature11')) + fea.add_feature(fea2) + self.assertEquals(fea.list_all_features(), + ['feature11', + 'feature12', + 'feature12.feature121']) + conf1.add_feature(fea) + self.assertEquals(conf1.list_all_features(), + ['feature1', + 'feature1.feature11', + 'feature1.feature12', + 'feature1.feature12.feature121']) + + + def test_add_features_and_remove_one(self): + conf1 = api.Configuration("foo/foo.confml") + fea = api.Feature('feature1') + fea2 = api.Feature('feature12') + fea2.add_feature(api.Feature('feature121')) + fea.add_feature(api.Feature('feature11')) + fea.add_feature(fea2) + conf1.add_feature(fea) + conf1.remove_feature('feature1.feature12') + self.assertEquals(conf1.list_all_features(), + ['feature1', + 'feature1.feature11']) + fea.remove_feature('feature11') + self.assertEquals(conf1.list_all_features(), + ['feature1']) + + def test_add_features_and_remove_all(self): + conf = api.Configuration("foo/foo.confml") + fea = api.Feature('feature1') + conf.add_feature(fea) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + for fearef in conf.list_features(): + conf.remove_feature(fearef) + self.assertEquals(conf.list_all_features(), []) + + def test_add_features_and_create_view(self): + + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature11'),'feature1') + conf.add_feature(api.Feature('feature12'),'feature1') + + conf.add_view("rootfeas") + view = conf.get_view('rootfeas') + for fearef in conf.list_features(): + fea = conf.get_feature(fearef) + view.add_feature(fea) + self.assertEquals(view.list_all_features(), ['feature1', + 'feature2', + 'feature3', + 'feature4']) + view.remove_feature('feature2') + self.assertEquals(view.list_all_features(), ['feature1', + 'feature3', + 'feature4']) + + def test_add_features_and_create_view_with_links(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature11'),'feature1') + conf.add_feature(api.Feature('feature12'),'feature1') + conf.add_view('fea1') + view1 = conf.get_view('fea1') + view1.add_group('thegruppe1') + view1.get_group('thegruppe1').add(api.FeatureLink('feature1.feature11')) + view1.add(api.FeatureLink('feature1.*')) + view1.populate() + self.assertEquals(view1.list_all_features(),['thegruppe1.feature11','feature11','feature12']) + fpr = view1.get_feature('thegruppe1.feature11') + self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) + self.assertEquals(view1.list_all_features(), ['thegruppe1.feature11','feature11','feature12']) + + def test_add_features_and_create_all_view_with_links(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature11'),'feature1') + conf.add_feature(api.Feature('feature12'),'feature1') + conf.add_view("all") + view1 = conf.get_view('all') + view1.add(api.FeatureLink('**')) + view1.populate() + self.assertEquals(view1.list_all_features(),['feature1', 'feature11', 'feature12', 'feature2', 'feature3', 'feature4']) + fpr = view1.get_feature('feature11') + self.assertEquals(fpr._obj.fqr,conf.get_default_view().get_feature('feature1.feature11').fqr) + + def test_add_a_configuration_and_remove_it(self): + conf = api.Configuration("simple.confml") + conf.add_configuration(api.Configuration("confml/data.confml")) + self.assertEquals(conf.list_configurations(),['confml/data.confml']) + conf.remove_configuration("confml/data.confml") + self.assertEquals(len(conf.list_configurations()),0) + + def test_add_a_include_and_remove_it(self): + conf = api.Configuration("simple.confml") + conf.include_configuration("confml/data.confml") + self.assertEquals(conf.list_configurations(),['confml/data.confml']) + conf.remove_configuration("confml/data.confml") + self.assertEquals(len(conf.list_configurations()),0) + + def test_add_a_include_with_dots_in_path_and_remove_it(self): + conf = api.Configuration("simple.confml") + conf.include_configuration("test/foo.bar/data.confml") + self.assertEquals(conf.list_configurations(),['test/foo.bar/data.confml']) + conf.remove_configuration("test/foo.bar/data.confml") + self.assertEquals(len(conf.list_configurations()),0) + + def test_add_a_include_with_dots_and_remove_it(self): + conf = api.Configuration("simple.confml") + conf.include_configuration("../foo/data.confml") + self.assertEquals(conf.list_configurations(),['../foo/data.confml']) + conf.remove_configuration("../foo/data.confml") + self.assertEquals(len(conf.list_configurations()),0) + +class TestConfigurationData(unittest.TestCase): + def test_add_features_and_add_data_via_default_view(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature12'),'feature1') + dview = conf.get_default_view() + dview.feature1._add_data(api.Data(ref="feature1", value=123)) + dview.feature2._add_data(api.Data(ref="feature2", value=123)) + dview.feature3._add_data(api.Data(ref="feature3", value=123)) + dview.feature1.feature12._add_data(api.Data(ref="feature12", value=123)) + dview.feature1._add_data(api.Data(ref="feature1", value=123)) + self.assertEquals(dview.feature1.get_value(), 123) + dview.feature1._add_data(api.Data(ref="feature1", value=111)) + self.assertEquals(dview.feature1.get_value(), 111) + + def test_add_data_to_configuration(self): + conf = api.Configuration("foo/foo.confml") + conf.add_data(api.Data(ref='feature1', value=123)) + self.assertEquals(conf.get_data('feature1').get_value(),123) + conf.add_data(api.Data(fqr='feature1.feature12', value="test")) + self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test") + self.assertEquals(conf.data.feature1.feature12.get_value(),"test") + conf.remove_data('feature1.feature12') + self.assertEquals(conf.list_datas(), ['feature1']) + + def test_set_data_to_configuration(self): + conf = api.Configuration("foo/foo.confml") + conf.add_data(api.Data(fqr='feature1', value=123)) + self.assertEquals(conf.get_data('feature1').get_value(),123) + conf.add_data(api.Data(fqr='feature1.feature12', value="test")) + self.assertEquals(conf.get_data('feature1.feature12').get_value(),"test") + self.assertEquals(conf.data.feature1.feature12.get_value(),"test") + + def test_add_features_and_add_data_via_features(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature12'),'feature1') + conf.feature1.set_value(123) + conf.feature1.feature12.set_value("test") + self.assertEquals(conf.feature1.get_value(),123) + self.assertEquals(conf.feature1.feature12.get_value(),"test") + + def test_create_layers_add_features_and_add_data_via_features(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('feature2')) + conf.add_feature(api.Feature('feature3')) + conf.add_feature(api.Feature('feature4')) + conf.add_feature(api.Feature('feature12'),'feature1') + conf.feature1.set_value(123) + self.assertEquals(conf.feature1.get_value(),123) + conf.create_configuration("layer1.confml") + conf.feature1.feature12.set_value("test") + self.assertEquals(conf.feature1.get_data().find_parent(type=api.Configuration),conf) + self.assertEquals(conf.feature1.feature12.get_value(),"test") + + conf.feature1.set_value(321) + conf.create_configuration("layer2.confml") + self.assertEquals(conf.layer2_confml.list_datas(), []) + + self.assertEquals(conf.feature1.get_value(),321) + self.assertEquals(conf.feature1.get_data().find_parent(type=api.Configuration).get_path(),conf.get_configuration("layer1.confml").get_path()) + self.assertEquals(conf.layer1_confml.list_all_datas(), ['feature1','feature1.feature12']) + self.assertEquals([data.get_value() for data in conf.layer1_confml.get_all_datas()], [321,'test']) + self.assertEquals(conf.list_datas(), ['feature1']) + self.assertEquals([data.find_parent(type=api.Configuration).get_path() for data in conf.get_all_datas()], + ['foo/foo.confml', + 'layer1.confml', + 'layer1.confml',]) + + def test_create_layers_add_featuresequence_and_add_data_via_features(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.FeatureSequence('feature1')) + conf.add_feature(api.Feature('child1'),'feature1') + conf.add_feature(api.Feature('child2'),'feature1') + conf.add_feature(api.Feature('child3'),'feature1') + conf.feature1.add_sequence() + conf.feature1.get_data()[0][0].set_value('test1') + conf.feature1.get_data()[0][1].set_value('test2') + conf.feature1.get_data()[0][2].set_value('test3') + conf.feature1.add_sequence(['foo1','foo2','foo3']) + self.assertEquals(conf.feature1.get_data()[1][0].get_value(),'foo1') + self.assertEquals(conf.feature1.get_data()[1][1].get_value(),'foo2') + self.assertEquals(conf.feature1.get_data()[1][2].get_value(),'foo3') + self.assertEquals(conf.feature1.get_value(), + [['test1','test2','test3'], + ['foo1','foo2','foo3']]) + self.assertEquals(conf.list_all_datas(),['feature1', 'feature1.child1', 'feature1.child2', 'feature1.child3', 'feature1', 'feature1.child1', 'feature1.child2', 'feature1.child3']) + + def test_create_featuresequence_and_get_empty_data(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.FeatureSequence('feature1')) + conf.add_feature(api.Feature('child1'),'feature1') + conf.add_feature(api.Feature('child2'),'feature1') + conf.add_feature(api.Feature('child3'),'feature1') + self.assertEquals(conf.get_feature('feature1').get_data(),[]) + self.assertEquals(conf.get_feature('feature1').get_value(),[]) + + def test_create_featuresequence_and_set_template(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.FeatureSequence('feature1')) + conf.add_feature(api.Feature('child1'),'feature1') + conf.add_feature(api.Feature('child2'),'feature1') + conf.add_feature(api.Feature('child3'),'feature1') + fea = conf.get_feature('feature1') + fea.set_template(['test1','test2','test3']) + self.assertEquals(fea.get_template(),['test1', 'test2', 'test3']) + fea.set_template(['test1','test3']) + self.assertEquals(fea.get_template(),['test1','test3','test3']) + try: + fea.set_template(['test1',None,'test3',None]) + self.fail("Able to add more data then allowed") + except IndexError: + pass + + def test_create_features_with_rfs_data(self): + conf = api.Configuration("foo/foo.confml") + conf.add_feature(api.Feature('feature1')) + conf.add_feature(api.Feature('child1'),'feature1') + conf.add_feature(api.Feature('child2'),'feature1') + conf.add_feature(api.Feature('child3'),'feature1') + + conf.add_data(api.Data(fqr='feature1.child1',attr='rfs',value='true')) + conf.add_data(api.Data(fqr='feature1.child2',attr='rfs',value='false')) + dview = conf.get_default_view() + self.assertEquals(dview.get_feature('feature1.child1').get_value(), None) + self.assertEquals(dview.get_feature('feature1.child1').get_value('rfs'), 'true') + self.assertEquals(dview.get_feature('feature1.child2').get_value('rfs'), 'false') + +class TestConfigurationDictStoring(unittest.TestCase): + + def test_dumps_simple(self): + root = api.Configuration("root",namespace="com.nokia") + conf = root.create_configuration("test.confml") + dumped = persistentdictionary.DictWriter().dumps(conf) + dict =dumped['Configuration']['dict'] + self.assertEquals(dict['path'],'test.confml') + self.assertEquals(dict['namespace'],'com.nokia') + + def test_dumps_add_features(self): + root = api.Configuration("root",namespace="com.nokia") + conf = root.create_configuration("test.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + dumped = persistentdictionary.DictWriter().dumps(conf) + dict =dumped['Configuration']['dict'] + self.assertEquals(dict['path'],'test.confml') + self.assertEquals(dict['namespace'],'com.nokia') + self.assertEquals(dumped['Configuration']['children'], + [{'Feature': {'dict': {'name': 'feature1', 'ref': 'feature1'}}}, + {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}}] + ) + + def test_dumps_root_configuration(self): + root = api.Configuration("root",namespace="com.nokia") + conf = root.create_configuration("test.confml") + conf = root.create_configuration("foo/root.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.feature1.add_feature(api.Feature("feature11")) + conf.feature1.add_feature(api.Feature("feature12")) + dumped = persistentdictionary.DictWriter().dumps(root) + dict =dumped['Configuration']['dict'] + self.assertEquals(dict['ref'],'root') + self.assertEquals(dict['namespace'],'com.nokia') + + def test_dumps_feature_hierarchy(self): + root = api.Configuration("root",namespace="com.nokia") + conf = root.create_configuration("test.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.feature1.add_feature(api.Feature("feature11")) + conf.feature1.add_feature(api.Feature("feature12")) + dumped = persistentdictionary.DictWriter().dumps(conf) + dict =dumped['Configuration']['dict'] + self.assertEquals(dict['path'],'test.confml') + self.assertEquals(dict['ref'],'test_confml') + self.assertEquals(dict['namespace'],'com.nokia') + self.assertEquals(dumped['Configuration']['children'], + [{'Feature': {'dict': {'name': 'feature1', 'ref': 'feature1'}, + 'children': [ + {'Feature': {'dict': {'name': 'feature11', 'ref': 'feature11'}}}, + {'Feature': {'dict': {'name': 'feature12', 'ref': 'feature12'}}}]}}, + {'Feature': {'dict': {'name': 'feature2', 'ref': 'feature2'}}} + ]) + + def test_loads(self): + conf = persistentdictionary.DictReader().loads({'Configuration': {'dict' : {'namespace':'test','ref':'test.confml'}}} ) + self.assertTrue(isinstance(conf,api.Configuration)) + self.assertEquals(conf.namespace,'test') + self.assertEquals(conf.get_ref(),'test.confml') + + def test_loads_with_features(self): + root = api.Configuration("root",namespace="com.nokia") + conf = persistentdictionary.DictReader().loads({ + 'Configuration': {'dict' : {'namespace':'test','ref':'test.confml'}, + 'children': [{'Feature': {'dict': {'ref': 'feature1'}, + 'children': [ + {'Feature': {'dict': {'ref': 'feature11'}}}, + {'Feature': {'dict': {'ref': 'feature12'}}}] + } + }, + {'Feature': {'dict': {'ref': 'feature2'}}}]}} ) + + self.assertEquals(conf.namespace,'test') + self.assertEquals(conf.ref,'test.confml') + root.add_configuration(conf) + self.assertEquals(root.list_all_features(),['test.feature1', + 'test.feature1.feature11', + 'test.feature1.feature12', + 'test.feature2']) + + + def test_dumps_and_loads(self): + conf = api.Configuration("test.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.feature1.add_feature(api.Feature("feature11")) + conf.feature1.add_feature(api.Feature("feature12")) + dumped = persistentdictionary.DictWriter().dumps(conf) + + conf2 = persistentdictionary.DictReader().loads(dumped) + self.assertEquals(conf.list_all_features(), + conf2.list_all_features()) + + def test_dumps_and_loads_configuration_hierarchy(self): + root = api.Configuration("root.confml") + root.add_configuration(api.Configuration("layer1.confml")) + layer = api.Configuration("foo/layer2.confml") + conf = api.Configuration("foo/test.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.feature1.add_feature(api.Feature("feature11")) + conf.feature1.add_feature(api.Feature("feature12")) + layer.add_configuration(conf) + root.add_configuration(layer) + dumped = persistentdictionary.DictWriter().dumps(root) + + root2= persistentdictionary.DictReader().loads(dumped) + self.assertEquals(root.list_all_features(), + root2.list_all_features()) + + def test_dumps_and_loads_configuration_hierarchy_with_data(self): + root = api.Configuration("root.confml") + layer = api.Configuration("foo/layer1.confml") + conf = api.Configuration("foo/test.confml") + conf.add_feature(api.Feature("feature1")) + conf.add_feature(api.Feature("feature2")) + conf.feature1.add_feature(api.Feature("feature11")) + conf.feature1.add_feature(api.Feature("feature12")) + conf.feature1.set_value(1) + conf.feature2.set_value(2) + layer.add_configuration(conf) + root.add_configuration(layer) + root.add_configuration(api.Configuration("layer2.confml")) + root.get_default_view().feature1.feature11.set_value("testing11") + root.get_default_view().feature1.set_value("test1") + dumped = persistentdictionary.DictWriter().dumps(root) + root2= persistentdictionary.DictReader().loads(dumped) + self.assertEquals(root.list_all_features(), + root2.list_all_features()) + self.assertEquals(root2.get_default_view().feature1.get_value(), "test1") + self.assertEquals(root2.get_default_view().feature2.get_value(), 2) + self.assertEquals(root2.get_default_view().feature1.feature11.get_value(), "testing11") + + self.assertEquals([data.find_parent(type=api.Configuration).get_path() for data in root2.get_all_datas()], + ['foo/test.confml', 'foo/test.confml', 'layer2.confml','layer2.confml']) + + def test_access_via_configuration_proxy(self): + conf = api.Configuration("root.confml") + conf.add_feature(api.Feature("feature1")) + proxy = api.ConfigurationProxy("root.confml") + proxy.set('_obj',conf) + self.assertEquals(proxy.get_ref(), 'root_confml') + self.assertEquals(proxy.get_path(), 'root.confml') + self.assertEquals(conf.feature1.get_ref(), 'feature1') + self.assertEquals(proxy.feature1.get_ref(), 'feature1') + + +if __name__ == '__main__': + unittest.main() + +""" +{'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': ''}}}]}} +"""