configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/tests/unittest_rules.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    16 #
    16 #
    17 
    17 
    18 import unittest
    18 import unittest
    19 import os, shutil
    19 import os, shutil
    20 import sys
    20 import sys
    21 import __init__
    21 
    22         
       
    23 from ruleplugin import ruleml
    22 from ruleplugin import ruleml
    24 from cone.public import api, plugin
    23 from cone.public import api, plugin
    25 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    24 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    26 
    25 
    27 class TestRuleExecutes(unittest.TestCase):
    26 class TestRuleExecutes(unittest.TestCase):
    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()