configurationengine/source/plugins/common/ConeRulePlugin/ruleplugin/tests/unittest_eval.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 # *-* coding: utf-8 *-*
       
     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, shutil
       
    20 import sys
       
    21 import re
       
    22 
       
    23 import __init__
       
    24 
       
    25 from ruleplugin import ruleml, relations
       
    26 from cone.public import api, exceptions
       
    27 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
       
    28 
       
    29 class MockObject(object):
       
    30     pass
       
    31 
       
    32 class MockFeature(object):
       
    33     def __init__(self, ref, feature_values):
       
    34         self.ref = ref
       
    35         self.feature_values = feature_values
       
    36     
       
    37     def get_value(self):
       
    38         return self.feature_values[self.ref]
       
    39     
       
    40     def set_value(self, value):
       
    41         self.feature_values[self.ref] = value
       
    42 
       
    43 class MockConfigurationContext(object):
       
    44     def __init__(self, feature_values):
       
    45         self.data = MockObject()
       
    46         default_view = MockObject()
       
    47         default_view.get_feature = lambda ref: MockFeature(ref, feature_values)
       
    48         self.data.get_default_view = lambda: default_view
       
    49         self.ref_eval_callback = None
       
    50 
       
    51 class MockExpression(object):
       
    52     def __init__(self, expression):
       
    53         self.expression = repr(expression)
       
    54 
       
    55 class TestEvalExpression(unittest.TestCase):
       
    56     def test_extract_refs(self):
       
    57         ee = relations.EvalExpression(
       
    58             None, MockExpression("'%05d 0x%08X %d' % (${Feature1.Setting1}.get_value(), ${Feature1.Setting2}.get_value(), ${Feature2.Setting1}.get_value())"))
       
    59         self.assertEquals(sorted(ee.extract_refs()), sorted(["Feature1.Setting1", "Feature1.Setting2", "Feature2.Setting1"]))
       
    60         
       
    61         ee = relations.EvalExpression(None, MockExpression("'%05d 0x%08X %d' % (1, 2, 3)"))
       
    62         self.assertEquals(ee.extract_refs(), [])
       
    63         
       
    64         ee = relations.EvalExpression(None, MockExpression(u"${ударения.ελληνικά}"))
       
    65         self.assertEquals(ee.extract_refs(), [u'ударения.ελληνικά'])
       
    66     
       
    67     def test_execute(self):
       
    68         feature_values = {
       
    69             "Feature1.Setting1":  16,
       
    70             "Feature1.Setting2":  32,
       
    71             "Feature2.Setting1":  64,
       
    72             u'ударения.ελληνικά': 100,
       
    73         }
       
    74         context = MockConfigurationContext(feature_values)
       
    75         
       
    76         ee = relations.EvalExpression(None,
       
    77             MockExpression("'%05d 0x%08X %d' % (@{Feature1.Setting1}.get_value(), @{Feature1.Setting2}.get_value(), @{Feature2.Setting1}.get_value())"))
       
    78         self.assertEquals(ee.eval(context), "00016 0x00000020 64")
       
    79         
       
    80         ee = relations.EvalExpression(None, MockExpression("'%05d 0x%08X %d' % (1, 2, 3)"))
       
    81         self.assertEquals(ee.eval(context), "00001 0x00000002 3")
       
    82         
       
    83         ee = relations.EvalExpression(None, MockExpression(u"'%d' % @{ударения.ελληνικά}.get_value()"))
       
    84         self.assertEquals(ee.eval(context), "100")
       
    85 
       
    86 class TestReplaceEvalBlocks(unittest.TestCase):
       
    87     def test_replace_eval_blocks(self):
       
    88         replace = ruleml.RuleImplReader2._replace_eval_blocks
       
    89         
       
    90         orig = """some.setting configures x = y"""
       
    91         self.assertEquals(replace(orig), orig)
       
    92         
       
    93         orig = """some.setting configures x = {% do_something(@{Fea.Set}) %}"""
       
    94         self.assertEquals(replace(orig), """some.setting configures x = __eval__ 'do_something(@{Fea.Set})'""")
       
    95         
       
    96         orig = """{% 'test' %}"""
       
    97         self.assertEquals(replace(orig), '''__eval__ "'test'"''')
       
    98         orig = """{%'test'%}"""
       
    99         self.assertEquals(replace(orig), '''__eval__ "'test'"''')
       
   100         
       
   101         orig = """{% len(@{Fea.Set}.get_value()) %} == 3 configures x = {% do_something('test') %}"""
       
   102         self.assertEquals(replace(orig), '''__eval__ 'len(@{Fea.Set}.get_value())' == 3 configures x = __eval__ "do_something('test')"''')
       
   103         
       
   104         orig = u"True configures X.Y = {% len(@{ударения.ελληνικά}.get_value()) %}"
       
   105         self.assertEquals(replace(orig), u"True configures X.Y = __eval__ %r" % u"len(@{ударения.ελληνικά}.get_value())")
       
   106         
       
   107 if __name__ == "__main__":
       
   108     unittest.main()