configurationengine/source/cone/public/tests/unittest_rules.py
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
# *-* coding: utf8 *-*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    20
from cone.public import rules
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
#### TEST RELATIONS ####
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    24
AA_BA = '${a.a} require ${b.b}'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    25
AB_BB = '${a.b} require ${b.b}'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    26
BA_CA = '${b.a} require ${c.a} and ${c.b} and ${a.b}'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    28
CB_DA = '${c.b} require ${d.a}'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    29
DA_DB = '${d.a} require ${d.b}'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    31
AC_AB_BA = '${a.c} and ${a.a} require ${b.a}'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    33
EA_FSTAR = '${e.a} require ${f.*}'
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
TEST_RELATIONS = {
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
    'a.a' : [AA_BA],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    'a.b' : [AB_BB],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
    'a.c' : [AC_AB_BA],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
    'b.a' : [BA_CA],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
    'c.b' : [CB_DA],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
    'd.a' : [DA_DB],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
    'e.a' : [EA_FSTAR]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    45
#rules.RELATIONS[rules.BaseRelation.KEY] = rules.BaseRelation
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    46
#rules.OPERATORS[rules.BaseRelation.KEY] = rules.BaseRelation
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    47
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
class DummyRelationFactory():
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
    def get_relations_for(self, configuration, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        rels = TEST_RELATIONS.get(ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        if rels:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    53
            relation_container = rules.RelationContainerImpl()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
            for rel in rels:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
                rel_s = rel.split(' ')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
                from_ref = rel_s[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
                relation_name = 'require'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
                to_ref = ' '.join(rel_s[2:])
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    59
                relation = rules.RELATIONS.get(relation_name)(configuration, from_ref, to_ref)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
                relation_container.add_relation(relation)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
                propagated_relations = self.get_relations_for(configuration, to_ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
                if propagated_relations:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
                    for relation in propagated_relations:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
                        relation_container.add_relation(relation)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
                
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
            return relation_container
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        return None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
class DummyConfiguration(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
    VALUES = {
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
        'a.a' : True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
        'a.b' : False,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        'a.c' : False,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        'b.a' : True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        'b.b' : True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        'c.b' : False,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        'd.a' : True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        'e.a' : True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        }
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
    def get_feature(self, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
        return DummyConfiguration.VALUES.get(ref, False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    84
class DummyContext(rules.DefaultContext):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    def handle_terminal(self, expression):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        return DummyConfiguration.VALUES.get(expression, False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    88
class DictContext(rules.DefaultContext):    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    89
    def handle_terminal(self, expression):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    90
        return self.data.get(expression, None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    91
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    92
    def convert_value(self, value):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    93
        if isinstance(value, (str, unicode)):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    94
            return eval(value)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    95
        else:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    96
            return value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    97
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    98
    def set(self, expression, value):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    99
        self.data[expression] =  value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   100
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   101
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   102
class DummyBaseRelation(rules.BaseRelation):
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
    def __init__(self, data, left, right):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        self.context = DummyContext(data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        super(DummyBaseRelation, self).__init__(data, left, right)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
class DummyRequireRelation(DummyBaseRelation):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
    KEY = 'require'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    def __init__(self, data, left, right):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        self.context = DummyContext(data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        super(DummyRequireRelation, self).__init__(data, left, right)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   114
rules.RELATIONS[DummyRequireRelation.KEY] = DummyRequireRelation
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   115
rules.OPERATORS['require'] = rules.RequireExpression
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
multilines = \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
APs.AP configures KCRUidCommsDatCreator.KCommsDatCreatorInputFileName = 'VariantData_commsdat.xml' and
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
  KCRUidStartupSettings.KCRKeyAccessPointPlugin = '0' and
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
  KCRUidStartupSettings.KCRKeyStreamingPlugin = '0' and
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
  KCRUidStartupSettings.KCRKeyMusicShopPlugin = '0' and
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
   KCRUidStartupSettings.KCRKeyDeviceManagementPlugin = '0' and
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
  KCRUidStartupSettings.KCRKeyAGPSPlugin = '0'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
class TestRelations(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        self.configuration = DummyConfiguration()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
    def test_has_ref(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        Tests the relation and relation container
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        factory = DummyRelationFactory()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        rels = factory.get_relations_for(self.configuration, 'a.a')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
        ret= rels.execute()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
    def test_not_has_ref(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        factory = DummyRelationFactory()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        # depends on c.a which has no value in conf
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        rels = factory.get_relations_for(self.configuration, 'b.a')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        ret = rels.execute()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        for rel in rels:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
            ip = rel.interpreter
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
            self.assertTrue(ip.errors)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            errors = ip.errors
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
            self.assertTrue(errors.get('b.a'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
    def test_not_has_ref_in_container(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        factory = DummyRelationFactory()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        rels = factory.get_relations_for(self.configuration, 'c.b')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        ret = rels.execute()
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   157
        self.assertTrue(ret)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
    def test_two_on_the_left(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        factory = DummyRelationFactory()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        rels = factory.get_relations_for(self.configuration, 'a.c')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        ret = rels.execute()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   165
class TestExpressions(unittest.TestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   166
    def test_one_param_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   167
        exp = rules.OneParamExpression(None, rules.ValueTerminal(None, "10"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   168
        c = DictContext({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   169
        self.assertEquals(exp.eval(c), 10)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   170
        exp = rules.OneParamExpression(None, rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   171
        c = DictContext({'foo' : 'Foo string'})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   172
        self.assertEquals(exp.eval(c), 'Foo string')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   173
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   174
    def test_neg_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   175
        exp = rules.NegExpression(None, rules.ValueTerminal(None, "10"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   176
        c = DictContext({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   177
        self.assertEquals(exp.eval(c), -10)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   178
        exp = rules.NegExpression(None, rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   179
        c = DictContext({'foo' : 2})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   180
        self.assertEquals(exp.eval(c), -2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   181
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   182
    def test_and_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   183
        exp = rules.AndExpression(None, rules.ValueTerminal(None, True),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   184
                                  rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   185
        c = DictContext({'foo' : 1})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   186
        self.assertEquals(exp.eval(c), True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   187
        c = DictContext({'foo' : 0})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   188
        self.assertEquals(exp.eval(c), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   189
        c = DictContext({'foo' : ""})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   190
        self.assertEquals(exp.eval(c), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   191
        c = DictContext({'foo' : False})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   192
        self.assertEquals(exp.eval(c), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   193
        c = DictContext({'foo' : True})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   194
        self.assertEquals(exp.eval(c), True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   195
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   196
    def test_minus_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   197
        exp = rules.MinusExpression(None, rules.ValueTerminal(None, "10"), rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   198
        c = DictContext({'foo' : 10})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   199
        self.assertEquals(exp.eval(c), 0)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   200
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   201
    def test_plus_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   202
        exp = rules.PlusExpression(None, rules.ValueTerminal(None, "10"), rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   203
        c = DictContext({'foo' : 10})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   204
        self.assertEquals(exp.eval(c), 20)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   205
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   206
    def test_mul_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   207
        exp = rules.MultiplyExpression(None, rules.ValueTerminal(None, "10"), rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   208
        c = DictContext({'foo' : 10})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   209
        self.assertEquals(exp.eval(c), 100)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   210
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   211
    def test_div_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   212
        exp = rules.DivideExpression(None, rules.ValueTerminal(None, "10"), rules.ReferenceTerminal(None, "${foo}"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   213
        c = DictContext({'foo' : 10}) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   214
        self.assertEquals(exp.eval(c), 1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   215
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   216
    def test_get_expressions_from_relation(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   217
        rel = rules.RequireRelation(None,"${foo} == True","${test} = 2 and ${aaa} == ${bbb}")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   218
        self.assertEquals(len(rel.get_expressions()), 11)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   219
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   220
    def test_get_refs_from_relation(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   221
        rel = rules.BaseRelation(None,"${foo} == True","${test} = 2 and ${aaa} == ${bbb}")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   222
        self.assertEquals(rel.get_refs(), ['foo'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   223
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   224
    def test_set_expression(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   225
        exp = rules.SetExpression(None,rules.ReferenceTerminal(None, "${t}"),  rules.ValueTerminal(None, "10"))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   226
        c = DictContext({'foo' : 10, 't' :None}) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   227
        self.assertEquals(exp.eval(c), True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   228
        self.assertEquals(c.data['t'], 10)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   229
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   230
    def test_set_expression_in_relation(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   231
        rel = rules.RequireRelation(None,"1","${test} = 1")        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   232
        c = DictContext({'test' : None, 't' :None})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   233
        rel.execute(c) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   234
        self.assertEquals(c.data['test'], 1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   235
        rel = rules.RequireRelation(None,"1","${test} = 2 and ${t} = 3")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   236
        rel.execute(c) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   237
        self.assertEquals(c.data['test'], 2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   238
        self.assertEquals(c.data['t'], 3)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   239
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   240
    def test_set_expression_in_relation_and_get_set_elements(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   241
        rel = rules.RequireRelation(None,"1","${test} = 2")        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   242
        self.assertEquals(rel.get_set_expressions()[0].left.get_ref(), 'test')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   243
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   244
        rel = rules.RequireRelation(None,"1","${test} = 2 and ${t} = 3")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   245
        self.assertEquals(len(rel.get_set_expressions()), 2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   246
        self.assertEquals(rel.get_set_expressions()[0].left.get_ref(), 'test')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   247
        self.assertEquals(rel.get_set_expressions()[1].left.get_ref(), 't')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   248
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   249
    def test_set_expression_in_relation_and_get_refs(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   250
        rel = rules.RequireRelation(None,"${foo}","${test} = 2")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   251
        self.assertEquals(rel.get_refs(), ['foo'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   252
        rel = rules.RequireRelation(None,"${foo}","${test} = 2 and ${t} = 3")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   253
        self.assertEquals(rel.get_refs(), ['foo'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   254
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   255
    def test_set_expression_in_relation_and_get_set_refs(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   256
        rel = rules.RequireRelation(None,"1","${test} = 2")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   257
        self.assertEquals(rel.get_set_refs(), ['test'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   258
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   259
        rel = rules.RequireRelation(None,"1","${test} = 2 and ${t} = 3")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   260
        self.assertEquals(rel.get_set_refs(),['test','t'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   261
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   262
    def test_set_expression_in_relation_with_string(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   263
        rel = rules.RequireRelation(None,"1",'${test} = "foo "')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   264
        c = DictContext({'test' : None, 't' :None})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   265
        rel.execute(c) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   266
        self.assertEquals(c.data['test'], 'foo ')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   267
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   268
    def test_set_expression_in_relation_with_string_concat(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   269
        rel = rules.RequireRelation(None,"1",'${test} = "foo " + "bar"')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   270
        c = DictContext({'test' : None, 't' :None})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   271
        rel.execute(c) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   272
        self.assertEquals(c.data['test'], 'foo bar')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   273
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   274
    def test_set_expression_in_relation_with_ref_concat(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   275
        rel = rules.RequireRelation(None,"1",'${test} = ${s1} + " " + u"bar" + ${s2}')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   276
        c = DictContext({'test' : None, 's1' : 'test', 's2' : 'one'})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   277
        rel.execute(c) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   278
        self.assertEquals(c.data['test'], 'test barone')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   279
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   280
class TestRuleUtils(unittest.TestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   281
    def test_is_str_literal(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   282
        self.assertEquals(rules.is_str_literal(1), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   283
        self.assertEquals(rules.is_str_literal([]), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   284
        self.assertEquals(rules.is_str_literal("foo"), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   285
        self.assertEquals(rules.is_str_literal("'foo'"), True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   286
        self.assertEquals(rules.is_str_literal('foo'), False)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   287
        self.assertEquals(rules.is_str_literal('"foo bar"'), True)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   288
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   289
    def test_get_str_literal(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   290
        self.assertEquals(rules.get_str_literal(1), None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   291
        self.assertEquals(rules.get_str_literal([]), None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   292
        self.assertEquals(rules.get_str_literal("foo"), None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   293
        self.assertEquals(rules.get_str_literal("'foo'"), 'foo')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   294
        self.assertEquals(rules.get_str_literal('foo'), None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   295
        self.assertEquals(rules.get_str_literal('"foo bar"'), 'foo bar')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
class TestASTInterpreter(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
    def test_require(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   299
        ip = rules.ASTInterpreter('a excludes b require 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
    def test_get_tokens(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   303
        self.assertEquals(rules.get_tokens("foo=(2+1) * 3"),['foo','=','(','2','+','1',')','*','3'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   304
        self.assertEquals(rules.get_tokens("Arithmetic.MixedResult3 = (Arithmetic.Value2 / 2 + Arithmetic.Value1 * 9) - 7"),['Arithmetic.MixedResult3', '=', '(', 'Arithmetic.Value2', '/', '2', '+', 'Arithmetic.Value1', '*', '9', ')', '-', '7'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   305
        self.assertEquals(len(rules.get_tokens(multilines)),25)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
    def test_get_unindented_multiline_tokens(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   309
            rules.get_tokens("foo = 2+bar\nand foobar = 3 and\nfubar=4"),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
            ['foo', '=', '2', '+', 'bar', 'and', 'foobar', '=', '3', 'and', 'fubar', '=', '4'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
    def test_get_tab_separated_tokens(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   314
            rules.get_tokens("foo\tconfigures\t\tbar\t=\t5"),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
            ['foo', 'configures', 'bar', '=', '5'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
    def test_get_unicode_tokens(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   319
            rules.get_tokens(u'xÿz configures xzÿ = ÿxá'),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
            [u'xÿz', 'configures', u'xzÿ', '=', u'ÿxá'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
    def test_get_unicode_tokens_2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   324
            rules.get_tokens(u'ελληνικά configures ünicode = u"test string" + ελληνικά'),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
            [u'ελληνικά', 'configures', u'ünicode', '=', 'u"test string"', '+', u'ελληνικά'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
    def test_get_unicode_tokens_3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   329
            rules.get_tokens(u'oöoä äöoö oöo öoö äaäa'),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
            [u'oöoä', u'äöoö', u'oöo', u'öoö', u'äaäa'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
    def test_get_unicode_tokens_4(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        self.assertEquals(
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   334
            rules.get_tokens(u'ünicode.rêf1 require rêf2 . ελληνικά'),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
            [u'ünicode.rêf1', u'require', u'rêf2.ελληνικά'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
    def test_get_unicode_tokens_multiline(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        tokenstr = u"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
            foo=(2+1) * 3
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
            xÿz configures xzÿ = ÿxá
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
            ελληνικά configures ünicode = u"test string" + ελληνικά"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
        expected = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
            'foo', '=', '(', '2', '+', '1', ')', '*', '3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
            u'xÿz', 'configures', u'xzÿ', '=', u'ÿxá',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
            u'ελληνικά', 'configures', u'ünicode', '=', 'u"test string"', '+', u'ελληνικά',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
        ]
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   347
        actual = rules.get_tokens(tokenstr)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        self.assertEquals(actual, expected, '\n%r \n!= \n%r' % (actual, expected))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
    def test_multiline_string(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        tokenstr = '''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
tes-
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
ti
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        '''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        expected = ['"""\ntes-\nti\n"""']
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   358
        self.assertEquals(rules.get_tokens(tokenstr), expected)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
    def test_syntax_error(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
        try:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   362
            ip = rules.ASTInterpreter('a and and')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
            self.assertTrue(False)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   364
        except rules.ParseException:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
            self.assertTrue(True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
    def test_empty_expression(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
        expression = ''
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   369
        ip = rules.ASTInterpreter(expression)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        self.assertFalse(result)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
    def test_no_expression(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   374
        ip = rules.ASTInterpreter()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
        self.assertFalse(result)       
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
            ip.create_ast(None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
            self.assertFalse(True)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   381
        except rules.ParseException:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
            self.assertTrue(True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        ip.create_ast('1 and 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
        self.assertTrue(result)       
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
    def test_one_param_ops(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   389
        ip = rules.ASTInterpreter('1 and truth 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
        self.assertTrue(result)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
        ip.create_ast('1 and truth 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
        self.assertFalse(result)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
        ip.create_ast(u'1 and truth not 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
        result = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
        self.assertTrue(result)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
    def test_infix_to_postfix(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
        expression = '1 and not 1'
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   403
        ip = rules.ASTInterpreter(expression)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
        self.assertEqual(ip.postfix_array, ['1', '1', 'not', 'and'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
        self.assertFalse(ip.eval())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   407
    def test_infix_to_postfix_with_minus(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   408
        expression = '1 - 1'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   409
        ip = rules.ASTInterpreter(expression)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   410
        self.assertEqual(ip.postfix_array, ['1', '1', '-'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   411
        self.assertFalse(ip.eval())
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   412
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
    def test_infix_to_postfix_pars(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
        expression = '1 and ( 0 or 1 and 1 )'
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   415
        ip = rules.ASTInterpreter(expression)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
        self.assertEqual(ip.postfix_array, ['1', '0', '1', 'or', '1', 'and', 'and'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   417
        self.assertTrue(ip.eval())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   418
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   419
    def test_not(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   420
        ip = rules.ASTInterpreter(u'not 1',)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   423
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   424
        ip.create_ast(u'not 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   425
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   428
        ip.create_ast('not STRING_VALUE')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
    def test_not_with_multiple(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   433
        ip = rules.ASTInterpreter(u'1 and not 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   434
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   435
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   436
        ip.create_ast(u'1 and not 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   439
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   440
    def test_and(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   441
        ip = rules.ASTInterpreter(u'1 and 1 and 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   442
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   443
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   444
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
        ip.create_ast(u'1 and 1 and 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
    def test_nand(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   450
        ip = rules.ASTInterpreter(u'1 nand 1 nand 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
        ip.create_ast(u'1 nand 1 nand 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   456
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
        ip.create_ast(u'1 nand 0 nand 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   461
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   462
        ip.create_ast(u'0 nand 0 nand 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   463
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   464
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   465
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
    def test_or(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   467
        ip = rules.ASTInterpreter(u'1 or 1 or 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   468
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
    def test_or_for_exclude(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
        On exclude case if OR returns True -> some element is selected
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
        and the rule evaluation should fail, the exclude rule should
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
        evaluate if PostfixRuleEngine.eval(expression) -> return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   477
        ip = rules.ASTInterpreter(u'1 or 1 or 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
        ip.create_ast(u'1 or 1 or 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
        ip.create_ast(u'1 or 0 or 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
        ip.create_ast(u'0 or 1 or 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
        ip.create_ast(u'1 or 0 or 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   497
        ip.create_ast(u'0 or 0 or 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   498
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   499
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   500
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   501
        ip.create_ast(u'0 or 0 or 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   502
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   503
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   504
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   505
    def test_nor(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   506
        ip = rules.ASTInterpreter(u'1 nor 1 nor 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   507
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   508
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   509
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   510
        ip.create_ast(u'1 nor 1 nor 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   511
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   512
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   513
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   514
        ip.create_ast(u'0 nor 1 nor 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   515
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   516
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   517
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   518
        ip.create_ast(u'0 nor 0 nor 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   519
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   520
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   521
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   522
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   523
    def test_xor(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   524
        ip = rules.ASTInterpreter(u'1 xor 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   525
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   526
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   527
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   528
        ip.create_ast(u'1 xor 0 xor 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
        self.assertTrue(ret)  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
    def test_eq_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   533
        ip = rules.ASTInterpreter(u'1 == 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
        ip.create_ast(u'1 == 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
        ip.create_ast(u'DEFINED == DEFINED')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
        self.assertTrue(ret)        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
        ip.create_ast(u'DEFINED == UNDEFINED')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
    def test_neq_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   550
        ip = rules.ASTInterpreter(u'1 != 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   551
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   552
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   553
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   554
        ip.create_ast(u'1 != 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   555
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   556
        self.assertTrue(ret)   
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   557
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   558
    def test_lt_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   559
        ip = rules.ASTInterpreter(u'0 < 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   560
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   561
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   562
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   563
        ip.create_ast(u'0-1 < 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   564
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   565
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   566
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   567
        ip.create_ast(u'0-1 < 0-2')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   570
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
        ip.create_ast(u'2 < 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
    def test_gt_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   576
        ip = rules.ASTInterpreter(u'0 > 0-1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   579
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   580
        ip.create_ast(u'2 > 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   581
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
        ip.create_ast(u'0 > 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   586
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   587
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   588
        ip.create_ast(u'0-1 > 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   589
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   590
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   591
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   592
    def test_lte_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   593
        ip = rules.ASTInterpreter(u'0 <= 1')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   594
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   595
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   596
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   597
        ip.create_ast(u'0 <= 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   598
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   599
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   600
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   601
        ip.create_ast(u'1 <= 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   602
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   603
        self.assertFalse(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   604
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   605
    def test_gte_cmp(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   606
        ip = rules.ASTInterpreter(u'1 >= 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   607
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   608
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   609
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   610
        ip.create_ast(u'0 >= 0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   611
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   612
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   613
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   614
        ip.create_ast(u'0 >= 1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   615
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   616
        self.assertFalse(ret)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   617
 
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   618
    def test_extract_refs(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   619
        refs = rules.ASTInterpreter.extract_refs('${a.a} and ( ${b.c} and ${d.e} )')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   620
        self.assertTrue('a.a' in refs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   621
        self.assertTrue('b.c' in refs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   622
        self.assertTrue('d.e' in refs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   623
        self.assertTrue('and' not in refs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   624
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   625
    def test_one_of(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   626
        """ Test for showing that relation one-of is basically "LEFT and R1 xor R2"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   627
        """
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   628
        ip = rules.ASTInterpreter(u'1 and 1 and 1 xor 0')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   629
        ret = ip.eval()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   630
        self.assertTrue(ret)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   631
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   632
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   633
    unittest.main()