33 def tearDown(self): |
32 def tearDown(self): |
34 self.project.close() |
33 self.project.close() |
35 |
34 |
36 def _execute_rules(self, impl_filter): |
35 def _execute_rules(self, impl_filter): |
37 implcontainer = plugin.get_impl_set(self.config, impl_filter) |
36 implcontainer = plugin.get_impl_set(self.config, impl_filter) |
38 context = plugin.GenerationContext() |
37 context = plugin.GenerationContext(configuration=self.config) |
|
38 context.output = os.path.join(ROOT_PATH,'temp/output') |
|
39 |
|
40 if not os.path.exists(context.output): |
|
41 os.makedirs(context.output) |
|
42 |
39 implcontainer.generate(context) |
43 implcontainer.generate(context) |
40 return context.results |
44 return context.generation_output |
41 |
45 |
|
46 def test_eval_generation_context_access(self): |
|
47 config = self.config |
|
48 |
|
49 self._execute_rules(r'^implml/eval_generation_context\.ruleml$') |
|
50 dview = config.get_default_view() |
|
51 self.assertEquals(dview.get_feature("EvalTest.output").value, os.path.join(ROOT_PATH,'temp/output')) |
|
52 self.assertEquals(True, os.path.isfile(dview.get_feature("EvalTest.file").value)) |
|
53 |
|
54 self.config.close() |
|
55 self.project.close() |
|
56 |
|
57 if os.path.exists(os.path.join(ROOT_PATH, 'temp/output')): |
|
58 shutil.rmtree(os.path.join(ROOT_PATH, 'temp/output')) |
|
59 |
42 def test_arithmetic_operations(self): |
60 def test_arithmetic_operations(self): |
43 self._execute_rules(r'^implml/arithmetic\.ruleml$') |
61 self._execute_rules(r'^implml/arithmetic\.ruleml$') |
44 |
62 |
45 # Values used in the ConfML (the calculations are duplicated here to make |
63 # Values used in the ConfML (the calculations are duplicated here to make |
46 # the tests more readable) |
64 # the tests more readable) |
126 |
144 |
127 def test_eval(self): |
145 def test_eval(self): |
128 config = self.config |
146 config = self.config |
129 |
147 |
130 self.assert_setting_equals(config, 'EvalTest.FullSequence', |
148 self.assert_setting_equals(config, 'EvalTest.FullSequence', |
131 [['Full 1', '10', '1.5', 'true'], |
149 [['Full 1', 10, 1.5, True], |
132 ['Full 2', '20', '2.5', 'false']]) |
150 ['Full 2', 20, 2.5, False]]) |
133 |
151 |
134 self._execute_rules(r'^implml/eval\.ruleml$') |
152 self._execute_rules(r'^implml/eval\.ruleml$') |
135 |
153 |
136 self.assert_setting_equals(config, 'EvalTest.StringLenResult', 8) |
154 self.assert_setting_equals(config, 'EvalTest.StringLenResult', 8) |
137 self.assert_setting_equals(config, 'EvalTest.EvalConstantResult', 12345) |
155 self.assert_setting_equals(config, 'EvalTest.EvalConstantResult', 12345) |
142 self.assert_setting_equals(config, 'EvalTest.Bit0Result', False) |
160 self.assert_setting_equals(config, 'EvalTest.Bit0Result', False) |
143 self.assert_setting_equals(config, 'EvalTest.Bit1Result', True) |
161 self.assert_setting_equals(config, 'EvalTest.Bit1Result', True) |
144 self.assert_setting_equals(config, 'EvalTest.Bit2Result', False) |
162 self.assert_setting_equals(config, 'EvalTest.Bit2Result', False) |
145 self.assert_setting_equals(config, 'EvalTest.Bit3Result', True) |
163 self.assert_setting_equals(config, 'EvalTest.Bit3Result', True) |
146 self.assert_setting_equals(config, 'EvalTest.FullSequence', |
164 self.assert_setting_equals(config, 'EvalTest.FullSequence', |
147 [['Full 1', '10', '1.5', 'true'], |
165 [['Full 1', 10, 1.5, True], |
148 ['Full 2', '20', '2.5', 'false'], |
166 ['Full 2', 20, 2.5, False], |
149 ['Stripped 1', '1', '0.1', 'false'], |
167 ['Stripped 1', 1, 0.1, False], |
150 ['Stripped 2', '2', '0.1', 'false']]) |
168 ['Stripped 2', 2, 0.1, False]]) |
151 self.assert_setting_equals(config, 'EvalTest.EvalBuiltinResult', 'ruleml_test_config') |
169 self.assert_setting_equals(config, 'EvalTest.EvalBuiltinResult', 'ruleml_test_config') |
152 |
170 |
153 def assert_setting_equals(self, config, setting, expected_value, msg=None): |
171 def assert_setting_equals(self, config, setting, expected_value, msg=None): |
154 if msg == None: |
172 if msg == None: |
155 self.assertEquals(config.get_default_view().get_feature(setting).get_value(), expected_value) |
173 self.assertEquals(config.get_default_view().get_feature(setting).get_value(), expected_value) |
157 self.assertEquals(config.get_default_view().get_feature(setting).get_value(), expected_value, msg) |
175 self.assertEquals(config.get_default_view().get_feature(setting).get_value(), expected_value, msg) |
158 |
176 |
159 def test_rule_execution_results(self): |
177 def test_rule_execution_results(self): |
160 results = self._execute_rules(r'^implml/rules\.ruleml$') |
178 results = self._execute_rules(r'^implml/rules\.ruleml$') |
161 |
179 |
162 def r(index, input_refs, affected_refs): |
180 outputs = [(output.name, output.implementation.get_refs()) for output in results if output.type == 'ref'] |
163 return plugin.RelationExecutionResult(index = index, |
181 self.assertEquals(outputs, [(u'imakerapi.outputLocation', [u'imaker.imagetarget']), |
164 source = 'implml/rules.ruleml', |
182 (u'imakerapi.outputLocationY', [u'imakerapi.outputLocationY']), |
165 input_refs = input_refs, |
183 (u'operations.minus', [u'operations.minus']), |
166 affected_refs = affected_refs) |
184 (u'operations.minus1', [u'operations.minus1']), |
167 expected = [ |
185 (u'operations.minus4', [u'operations.minus4']), |
168 r(1, ['imaker.imagetarget'], ['imakerapi.outputLocation']), |
186 (u'operations.minus6', [u'operations.minus6']), |
169 r(6, ['imakerapi.outputLocationY'], ['imakerapi.outputLocationY']), |
187 (u'StringConcatenationTest.Result1', []), |
170 r(7, ['operations.minus'], ['operations.minus']), |
188 (u'StringConcatenationTest.Result2', []), |
171 r(8, ['operations.minus1'], ['operations.minus1']), |
189 (u'StringConcatenationTest.Result3', []), |
172 r(9, ['operations.minus4'], ['operations.minus4']), |
190 (u'StringConcatenationTest.Result4', []), |
173 r(10, ['operations.minus6'], ['operations.minus6']), |
191 (u'StringConcatenationTest.Result5', []), |
174 r(11, [], ['StringConcatenationTest.Result1']), |
192 (u'StringConcatenationTest.Result6', []), |
175 r(12, [], ['StringConcatenationTest.Result2']), |
193 (u'ударения.ελληνικά', []), |
176 r(13, [], ['StringConcatenationTest.Result3']), |
194 (u'SequenceTest.Sequence1', [])]) |
177 r(14, [], ['StringConcatenationTest.Result4']), |
|
178 r(15, [], ['StringConcatenationTest.Result5']), |
|
179 r(16, [], ['StringConcatenationTest.Result6']), |
|
180 r(17, [], [u'ударения.ελληνικά']), |
|
181 ] |
|
182 |
|
183 self.assertEquals(results, expected) |
|
184 |
195 |
185 if __name__ == '__main__': |
196 if __name__ == '__main__': |
186 unittest.main() |
197 unittest.main() |