|
1 from __future__ import with_statement |
|
2 # |
|
3 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
4 # All rights reserved. |
|
5 # This component and the accompanying materials are made available |
|
6 # under the terms of "Eclipse Public License v1.0" |
|
7 # which accompanies this distribution, and is available |
|
8 # at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
9 # |
|
10 # Initial Contributors: |
|
11 # Nokia Corporation - initial contribution. |
|
12 # |
|
13 # Contributors: |
|
14 # |
|
15 # Description: |
|
16 # |
|
17 |
|
18 import unittest |
|
19 import os |
|
20 |
|
21 from cone.public import api |
|
22 from cone.storage.filestorage import FileStorage |
|
23 from testautomation import unzip_file |
|
24 from testautomation.base_testcase import BaseTestCase |
|
25 |
|
26 ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) |
|
27 TEMP_DIR = os.path.join(ROOT_PATH, "temp/edit_data") |
|
28 TEST_CPF = os.path.join(ROOT_PATH, "testdata/test_project.cpf") |
|
29 |
|
30 class open_config_and_get_dview(object): |
|
31 def __init__(self, project, mode, config): |
|
32 self.project_path = project |
|
33 self.mode = mode |
|
34 self.config = config |
|
35 self.project = None |
|
36 |
|
37 def __enter__(self): |
|
38 self.project = api.Project(FileStorage(self.project_path, self.mode)) |
|
39 conf = self.project.get_configuration(self.config) |
|
40 dview = conf.get_default_view() |
|
41 return dview |
|
42 setting = dview.get_feature(self.setting_ref) |
|
43 return setting |
|
44 |
|
45 def __exit__(self, type, value, tb): |
|
46 if self.project: |
|
47 if self.mode == 'a': |
|
48 self.project.save() |
|
49 self.project.close() |
|
50 |
|
51 class open_config_and_get_setting(open_config_and_get_dview): |
|
52 def __init__(self, project, mode, config, setting): |
|
53 open_config_and_get_dview.__init__(self, project, mode, config) |
|
54 self.setting_ref = setting |
|
55 |
|
56 def __enter__(self): |
|
57 dview = open_config_and_get_dview.__enter__(self) |
|
58 setting = dview.get_feature(self.setting_ref) |
|
59 return setting |
|
60 |
|
61 class TestEditConfigurationProjectData(BaseTestCase): |
|
62 |
|
63 def test_edit_sequence_data_on_last_layer_with_dview(self): |
|
64 PROJ = os.path.join(TEMP_DIR, "test_project_1") |
|
65 CONF = 'root3.confml' |
|
66 SETTING = 'Feature2.SequenceSetting' |
|
67 unzip_file.unzip_file(TEST_CPF, PROJ, delete_if_exists=True) |
|
68 |
|
69 # Open the temp project in append mode |
|
70 with open_config_and_get_setting(PROJ, 'a', CONF, SETTING) as setting: |
|
71 self.assertEquals(setting.value, |
|
72 [[333, 'layer3 (1)'], |
|
73 [1, 'default 1'], |
|
74 [2, 'default 2'], |
|
75 [222, 'layer2 (1)'], |
|
76 [222, 'layer2 (2)'], |
|
77 [222, 'layer2 (3)']]) |
|
78 |
|
79 # Change the value |
|
80 setting.value = [[123, 'foo1'], |
|
81 [456, 'foo2']] |
|
82 |
|
83 # Reopen the project in read mode and check that the sequence data |
|
84 # was modified correctly |
|
85 with open_config_and_get_setting(PROJ, 'r', CONF, SETTING) as setting: |
|
86 self.assertEquals(setting.value, |
|
87 [[123, 'foo1'], |
|
88 [456, 'foo2']]) |
|
89 self.assertEquals(setting.get_original_value(), |
|
90 [['123', 'foo1'], |
|
91 ['456', 'foo2']]) |
|
92 |
|
93 # Modify the sequence data again by setting it empty |
|
94 with open_config_and_get_setting(PROJ, 'a', CONF, SETTING) as setting: |
|
95 setting.value = [] |
|
96 self.assertEquals(setting.value, []) |
|
97 self.assertEquals(setting.get_original_value(), []) |
|
98 |
|
99 # Reopen and check again |
|
100 with open_config_and_get_setting(PROJ, 'r', CONF, SETTING) as setting: |
|
101 self.assertEquals(setting.value, []) |
|
102 self.assertEquals(setting.get_original_value(), []) |
|
103 |
|
104 # Do the same 'set empty' check with a more complex sequence setting |
|
105 SETTING = 'SequenceSettingTest.SequenceSetting' |
|
106 with open_config_and_get_setting(PROJ, 'a', CONF, SETTING) as setting: |
|
107 setting.value = [] |
|
108 self.assertEquals(setting.value, []) |
|
109 self.assertEquals(setting.get_original_value(), []) |
|
110 with open_config_and_get_setting(PROJ, 'r', CONF, SETTING) as setting: |
|
111 self.assertEquals(setting.value, []) |
|
112 self.assertEquals(setting.get_original_value(), []) |
|
113 |
|
114 def test_edit_complex_sequence_data_on_last_layer_with_dview(self): |
|
115 PROJ = os.path.join(TEMP_DIR, "test_project_4") |
|
116 CONF = 'root3.confml' |
|
117 SETTING = 'SequenceSettingTest.SequenceSetting' |
|
118 unzip_file.unzip_file(TEST_CPF, PROJ, delete_if_exists=True) |
|
119 |
|
120 # Open the temp project in append mode |
|
121 with open_config_and_get_setting(PROJ, 'a', CONF, SETTING) as setting: |
|
122 self.assertEquals(setting.value, |
|
123 [[['seq/layer2_folder2', None], 2.1000000000000001, ['seq/layer2_file2.txt', None], 222, 'L22', True, '1', ('opt 1', 'opt 3'), '\x22\x22'], |
|
124 [['seq/layer2_folder', None], 2.0, ['seq/layer2_file.txt', None], 22, 'L21', True, '2', ('opt 2',), '\x22\x11'], |
|
125 [['seq/def1_folder', None], 1.25, ['seq/def1_file.txt', None], 128, 'def1', False, '1', ('opt 1',), '\x00\x11'], |
|
126 [['seq/def2_folder', None], 1.5, ['seq/def2_file.txt', None], 256, 'def2', False, '1', ('opt 2',), '\x00\x22'], |
|
127 [['seq/layer3_folder', None], 3.0, ['seq/layer3_file.txt', None], 33, 'L31', False, '0', ('opt 3', 'opt 2'), '\x33\x11'], |
|
128 [['seq/layer3_folder', None], 3.3500000000000001, [None, None], 1, 'L32', True, '2', ('opt 1', 'opt 2'), '\x33\x22']]) |
|
129 |
|
130 # Change the value |
|
131 setting.value = [[['seq/foofolder1', None], 5.6, ['seq/foofile1.txt', None], 1010, 'Lfoo', False, '3', ('opt 4', 'opt 0'), '\xaa\xbb'], |
|
132 [['seq/foofolder2', None], 6.5, ['seq/foofile2.txt', None], 2020, 'Lfoo', True, '3', (), ''], |
|
133 [['seq/foofolder1', None], 5.6, ['seq/foofile1.txt', None], 1010, 'Lfoo', False, '3', ('opt 4', 'opt 0'), '\xaa\xbb']] |
|
134 |
|
135 with open_config_and_get_setting(PROJ, 'r', CONF, SETTING) as setting: |
|
136 self.assertEquals(setting.value, |
|
137 [[['seq/foofolder1', None], 5.6, ['seq/foofile1.txt', None], 1010, 'Lfoo', False, '3', ('opt 4', 'opt 0'), '\xaa\xbb'], |
|
138 [['seq/foofolder2', None], 6.5, ['seq/foofile2.txt', None], 2020, 'Lfoo', True, '3', (), ''], |
|
139 [['seq/foofolder1', None], 5.6, ['seq/foofile1.txt', None], 1010, 'Lfoo', False, '3', ('opt 4', 'opt 0'), '\xaa\xbb']]) |
|
140 # Modify the sequence data again by setting it empty |
|
141 with open_config_and_get_setting(PROJ, 'a', CONF, SETTING) as setting: |
|
142 setting.value = [] |
|
143 |
|
144 # Reopen and check again |
|
145 with open_config_and_get_setting(PROJ, 'r', CONF, SETTING) as setting: |
|
146 self.assertEquals(setting.value, []) |
|
147 |
|
148 def test_edit_data_on_last_layer_with_dview(self): |
|
149 PROJ = os.path.join(TEMP_DIR, "test_project_2") |
|
150 CONF = 'root3.confml' |
|
151 unzip_file.unzip_file(TEST_CPF, PROJ, delete_if_exists=True) |
|
152 |
|
153 # Open the temp project in append mode |
|
154 with open_config_and_get_dview(PROJ, 'a', CONF) as dview: |
|
155 self.assertEquals(dview.get_feature('BasicSettingTypesTest.IntSetting').value, 333) |
|
156 self.assertEquals(dview.get_feature('BasicSettingTypesTest.BooleanSetting').value, False) |
|
157 self.assertEquals(dview.get_feature('BasicSettingTypesTest.RealSetting').value, 3.1456) |
|
158 self.assertEquals(dview.get_feature('BasicSettingTypesTest.SelectionSetting').value, '3') |
|
159 self.assertEquals(dview.get_feature('BasicSettingTypesTest.StringSetting').value, 'layer 3 string') |
|
160 self.assertEquals(dview.get_feature('BasicSettingTypesTest.MultiSelectionSetting').value, ('opt 1', 'opt 3')) |
|
161 self.assertEquals(dview.get_feature('BasicSettingTypesTest.HexBinarySetting').value, '\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff') |
|
162 |
|
163 dview.get_feature('BasicSettingTypesTest.IntSetting').value = 1500 |
|
164 dview.get_feature('BasicSettingTypesTest.BooleanSetting').value = True |
|
165 dview.get_feature('BasicSettingTypesTest.RealSetting').value = 15.15 |
|
166 dview.get_feature('BasicSettingTypesTest.SelectionSetting').value = '1' |
|
167 dview.get_feature('BasicSettingTypesTest.StringSetting').value = 'edit data test' |
|
168 dview.get_feature('BasicSettingTypesTest.MultiSelectionSetting').value = ('opt 4', 'opt 0') |
|
169 dview.get_feature('BasicSettingTypesTest.HexBinarySetting').value = '\x12\x34' |
|
170 |
|
171 # Reopen the project in read mode and check that the sequence data |
|
172 # was modified correctly |
|
173 with open_config_and_get_dview(PROJ, 'r', CONF) as dview: |
|
174 self.assertEquals(dview.get_feature('BasicSettingTypesTest.IntSetting').value, 1500) |
|
175 self.assertEquals(dview.get_feature('BasicSettingTypesTest.BooleanSetting').value, True) |
|
176 self.assertEquals(dview.get_feature('BasicSettingTypesTest.RealSetting').value, 15.15) |
|
177 self.assertEquals(dview.get_feature('BasicSettingTypesTest.SelectionSetting').value, '1') |
|
178 self.assertEquals(dview.get_feature('BasicSettingTypesTest.StringSetting').value, 'edit data test') |
|
179 self.assertEquals(dview.get_feature('BasicSettingTypesTest.MultiSelectionSetting').value, ('opt 4', 'opt 0')) |
|
180 self.assertEquals(dview.get_feature('BasicSettingTypesTest.HexBinarySetting').value, '\x12\x34') |
|
181 |
|
182 # Test that setting the multi-selection setting to empty works |
|
183 SETTING = 'BasicSettingTypesTest.MultiSelectionSetting' |
|
184 with open_config_and_get_setting(PROJ, 'a', 'root4.confml', SETTING) as setting: |
|
185 self.assertEquals(setting.value, ('opt 0', 'opt 4')) |
|
186 setting.value = () |
|
187 self.assertEquals(setting.value, ()) |
|
188 with open_config_and_get_setting(PROJ, 'r', 'root4.confml', SETTING) as setting: |
|
189 self.assertEquals(setting.value, ()) |
|
190 |
|
191 def test_read_name_id_mapped_values(self): |
|
192 PROJ = os.path.join(TEMP_DIR, "test_project_5") |
|
193 CONF = 'root3.confml' |
|
194 unzip_file.unzip_file(TEST_CPF, PROJ, delete_if_exists=True) |
|
195 |
|
196 with open_config_and_get_dview(PROJ, 'r', CONF) as dview: |
|
197 def check(setting, expected_value): |
|
198 fea = dview.get_feature('NameIdMappingTestTargetSettings.' + setting) |
|
199 self.assertEquals(fea.get_value(), expected_value) |
|
200 |
|
201 check('Selection', 'seq1_item2') |
|
202 check('Selection2', 12) |
|
203 check('MultiSelection', ('seq1_item1', 'seq1_item2', 'seq2_item2', 'seq2_item3')) |
|
204 check('MultiSelection2', (11, 12, True, False)) |
|
205 check('String', 'seq1_item2') |
|
206 check('Int', 12) |
|
207 check('Real', 1.2) |
|
208 check('Boolean', False) |
|
209 |
|
210 check('Sequence.Selection', ['seq1_item2']) |
|
211 check('Sequence.Selection2', [12]) |
|
212 check('Sequence.MultiSelection', [('seq1_item1', 'seq1_item2', 'seq2_item2', 'seq2_item3')]) |
|
213 check('Sequence.MultiSelection2', [(11, 12, True, False)]) |
|
214 check('Sequence.String', ['seq1_item2']) |
|
215 check('Sequence.Int', [12]) |
|
216 check('Sequence.Real', [1.2]) |
|
217 check('Sequence.Boolean', [False]) |
|
218 |
|
219 if __name__ == '__main__': |
|
220 unittest.main() |