configurationengine/source/cone/public/tests/unittest_plugin_api.py
author m2lahtel
Wed, 08 Sep 2010 12:20:56 +0300
changeset 4 0951727b8815
parent 3 e7e0ae78773e
permissions -rw-r--r--
Updated to 1.2.13 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
import os
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
    19
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
from cone.public import *
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
from cone.public import _plugin_reader
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
    22
from testautomation.utils import remove_if_exists
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
    23
import pickle
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
Tfd = _plugin_reader.TempVariableDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
Tsfd = _plugin_reader.TempVariableSequenceDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
Sro = _plugin_reader.SettingRefsOverride
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
MULTI_IMPL_1 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
<common:container xmlns:common="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
    <impl xmlns="http://www.test.com/xml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
        <elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
    <impl xmlns="http://www.test.com/xml/2">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        <dummy z="500"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        <elem x="10" y="20"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
    <impl xmlns="http://www.test.com/xml/3">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        <elem x="100" y="200"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        <elem z="300"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
</common:container>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
MULTI_IMPL_2 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
<container xmlns="http://www.symbianfoundation.org/xml/implml/1"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    xmlns:ns0="http://www.test.com/xml/1" 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
    xmlns:ns2="http://www.test.com/xml/2"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
    xmlns:ns3="http://www.test.com/xml/3">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
    <ns0:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
      <ns0:elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
    </ns0:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
    <ns2:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
      <ns2:dummy z="500"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
      <ns2:elem x="10" y="20"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
    </ns2:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
    <ns3:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
      <ns3:elem x="100" y="200"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
      <ns3:elem z="300"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
    </ns3:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
</container>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
MULTI_IMPL_3 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
<container xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
    <impl1:impl xmlns:impl1="http://www.test.com/xml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        <impl1:elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
    </impl1:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
    <impl2:impl xmlns:impl2="http://www.test.com/xml/2">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        <impl2:elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
    </impl2:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    <impl1:impl xmlns:impl1="http://www.test.com/xml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        <impl1:elem a="1" b="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
    </impl1:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    <impl2:impl xmlns:impl2="http://www.test.com/xml/2">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        <impl2:elem a="1" b="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
    </impl2:impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
</container>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
UNSUPPORTED_IMPL_1 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
<test_impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
    <impl xmlns="http://www.test.com/xml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        <elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
    <impl xmlns="http://www.test.com/xml/2">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        <dummy z="500"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        <elem x="10" y="20"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
    <impl xmlns="http://www.test.com/xml/4">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        <elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
    </impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
</test_impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
UNSUPPORTED_IMPL_2 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
<test_impl xmlns="http://www.test.com/xml/6"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    xmlns:ns2="http://www.test.com/xml/2"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    xmlns:ns4="http://www.test.com/xml/4">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
    <elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
    <ns2:dummy z="500"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
    <ns2:elem x="10" y="20"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
    <ns4:elem x="1" y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
</test_impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
SINGLE_IMPL_1 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
<impl xmlns="http://www.test.com/xml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    <elem x="1"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
    <elem y="2"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
    <elem z="3"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
</impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
SINGLE_IMPL_2 = """<?xml version="1.0" encoding="UTF-8"?>
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   132
<impl xmlns="http://www.test.com/xml/2"/>
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
SINGLE_IMPL_3 = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
<impl xmlns="http://www.test.com/xml/3">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    <elem x="1"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
</impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
NO_IMPL = """<?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
<impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
</impl>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
""".encode('utf-8')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
class Mock(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
    pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
class MockView(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
    def __init__(self, feature_dict):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        self.feature_dict = feature_dict
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
    def get_feature(self, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        feature = Mock()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        feature.get_value = lambda: self.feature_dict[ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        feature.get_original_value = lambda: self.feature_dict[ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        return feature
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
class MockConfiguration(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
    def __init__(self, resources, features={}):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        self.resources = resources
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        self.features = features
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
    def get_resource(self, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        res = Mock()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        res.read = lambda: self.resources[ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        res.close = lambda: None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
        return res
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
    def get_layer(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        layer = Mock()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        layer.list_implml = lambda: self.resources.keys()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        return layer
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
    def get_doc(self, ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        return utils.etree.fromstring(self.get_resource(ref).read())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
    def get_default_view(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
        return MockView(self.features)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   180
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   181
    def layered_implml(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   182
        result = container.DataContainer()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   183
        for res in self.resources.iterkeys():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   184
            result.add_value(res, res)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   185
        return result
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   186
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   187
class SimpleImpl(plugin.ImplBase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   188
    def __init__(self, ref, configuration):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   189
        super(SimpleImpl, self).__init__(ref, configuration)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   190
        self.generate_invoked = False
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   191
        self.outputfile = ''
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   192
    
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   193
    def generate(self, context=None):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   194
        if context:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   195
            if self.outputfile:
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   196
                f = context.create_file(self.outputfile, implementation=self)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   197
                f.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   198
                
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   199
        self.generate_invoked = True
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
class MockImpl(plugin.ImplBase):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   202
    IMPL_TYPE_ID = 'mock'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   203
    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    def __init__(self, data):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        self.data = data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        self.generate_invoked = False
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   207
        self.outputfile = ''
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   208
        self.refs = None
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   209
        self.ref = ''
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   210
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
    def create(cls, resource_ref, configuration, data):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        impl = cls(data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        plugin.ImplBase.__init__(impl, resource_ref, configuration)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        return impl
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    def generate(self, context=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        if context and hasattr(context,'objects'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
            context.objects.append(self) 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        self.generate_invoked = True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
    def __repr__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        return "MockImpl(%r)" % self.data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
    def __eq__(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
        if type(self) == type(other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
            return self.data == other.data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
    def __ne__(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
        return not (self == other)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
    def __lt__(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        if type(self) == type(other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            return self.data < other.data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   240
    def get_refs(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   241
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   242
        Return a list of all ConfML setting references that affect this
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   243
        implementation. May also return None if references are not relevant
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   244
        for the implementation.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   245
        """
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   246
        return self.refs
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   247
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
class MockReaderBase(plugin.ReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
    @classmethod
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
    def read_impl(cls, resource_ref, configuration, root_elem):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        data = [cls.__name__, resource_ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
        for elem in root_elem.findall('{%s}elem' % cls.NAMESPACE):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
            data.append(elem.attrib)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
        return MockImpl.create(resource_ref, configuration, data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
class MockReader1(MockReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    NAMESPACE = "http://www.test.com/xml/1"
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   258
    NAMESPACE_ID = "mock1"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   259
    ROOT_ELEMENT_NAME = "impl"
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
    FILE_EXTENSIONS = ['mock1ml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
class MockReader2(MockReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
    NAMESPACE = "http://www.test.com/xml/2"
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   263
    NAMESPACE_ID = "mock2"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   264
    ROOT_ELEMENT_NAME = "impl"
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
    FILE_EXTENSIONS = ['mock2ml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
class MockReader3(MockReaderBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
    NAMESPACE = "http://www.test.com/xml/3"
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   268
    NAMESPACE_ID = "mock3"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   269
    ROOT_ELEMENT_NAME = "impl"
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
    IGNORED_NAMESPACES = ["http://www.test.com/xml/ignored/3"]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
    FILE_EXTENSIONS = ['mock3ml', 'test3ml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
MOCK_READER_CLASSES = [MockReader1, MockReader2, MockReader3]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
mock_config = MockConfiguration({
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
    'layer1/implml/multi1.implml'           : MULTI_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
    'layer1/implml/multi2.implml'           : MULTI_IMPL_2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
    'layer1/implml/multi3.implml'           : MULTI_IMPL_3,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
    'layer1/implml/unsupported1.implml'     : UNSUPPORTED_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
    'layer1/implml/unsupported2.implml'     : UNSUPPORTED_IMPL_2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
    'layer1/implml/single1.implml'          : SINGLE_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
    'layer1/implml/single2.implml'          : SINGLE_IMPL_2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
    'layer1/implml/single3.implml'          : SINGLE_IMPL_3,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
    'layer1/implml/none.implml'             : NO_IMPL,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
    'layer1/implml/broken.implml'           : 'Some invalid XML data...',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
    'layer1/implml/single1.mock1ml'         : SINGLE_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
    'layer1/implml/single2.mock2ml'         : SINGLE_IMPL_2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
    'layer1/implml/single3.mock3ml'         : SINGLE_IMPL_3,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
    'layer1/implml/single3.test3ml'         : SINGLE_IMPL_3,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
    'layer1/implml/multi1.dummyml'          : MULTI_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
    'layer1/implml/dummy'                   : MULTI_IMPL_1,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   294
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   295
class TestPluginGenerationContext(unittest.TestCase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   296
    def test_generation_context_handle_terminal(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   297
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   298
        context = plugin.GenerationContext(configuration=config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   299
        self.assertRaises(exceptions.NotFound, context.handle_terminal, 'feature')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   300
        config.create_feature('feature')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   301
        # rebuild default view
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   302
        config._remove('?default_view')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   303
        self.assertEquals(context.handle_terminal('feature'), None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   304
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   305
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   306
    def test_generation_create_file(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   307
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   308
        context = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   309
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   310
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   311
        mi = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   312
        outfile = context.create_file('foobar/test.txt', implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   313
        outfile.write("Test output file creation")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   314
        outfile.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   315
        expected = utils.resourceref.norm(os.path.join(context.output, 'foobar/test.txt'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   316
        self.assertEquals(len(context.generation_output), 1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   317
        self.assertEquals(context.generation_output[0].name, expected)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   318
        self.assertEquals(context.generation_output[0].implementation, mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   319
        self.assertEquals(context.generation_output[0].phase, "normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   320
        self.assertTrue(os.path.exists(expected))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   321
        os.unlink(expected)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   322
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   323
        absfile = utils.resourceref.norm(os.path.join(ROOT_PATH, 'temp/foobar/abspath.txt'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   324
        outfile = context.create_file(absfile, implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   325
        outfile.write("Test output file creation")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   326
        outfile.close()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   327
        self.assertEquals(len(context.generation_output), 2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   328
        self.assertEquals(context.generation_output[1].name, absfile)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   329
        self.assertEquals(context.generation_output[1].implementation, mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   330
        self.assertEquals(context.generation_output[1].phase, "normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   331
        self.assertTrue(os.path.exists(absfile))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   332
        os.unlink(absfile)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   333
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   334
    def test_generation_add_output(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   335
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   336
        context = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   337
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   338
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   339
        mi = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   340
        context.add_file('add.txt', implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   341
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   342
        self.assertEquals(len(context.generation_output), 1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   343
        self.assertEquals(context.generation_output[0].name, utils.resourceref.norm(os.path.join(context.output, 'add.txt')))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   344
        self.assertEquals(context.generation_output[0].implementation, mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   345
        self.assertEquals(context.generation_output[0].phase, "normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   346
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   347
        external_output = utils.resourceref.norm(os.path.join(ROOT_PATH, 'temp', 'external/foobar.txt'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   348
        context.add_file(external_output, implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   349
        self.assertEquals(len(context.generation_output), 2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   350
        self.assertEquals(context.generation_output[1].name, external_output)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   351
        self.assertEquals(context.generation_output[1].implementation, mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   352
        self.assertEquals(context.generation_output[1].phase, "normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   353
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   354
    def test_generation_get_output(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   355
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   356
        context = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   357
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   358
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   359
        mi = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   360
        context.add_file('add1.txt', implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   361
        context.add_file('foo/add2.txt', implementation=None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   362
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   363
        self.assertEquals(len(context.get_output()), 2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   364
        self.assertEquals(context.get_output()[1].filename, 'add2.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   365
        self.assertEquals(context.get_output()[1].abspath, os.path.normpath(os.path.join(context.output,'foo/add2.txt')))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   366
        self.assertEquals(context.get_output()[1].relpath, os.path.normpath('foo/add2.txt'))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   367
        self.assertEquals(len(context.get_output(implml_type='mock')), 1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   368
        self.assertEquals(context.get_output(implml_type='mock')[0].filename, 'add1.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   369
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   370
    def test_generation_get_refs_no_output(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   371
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   372
        context = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   373
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   374
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   375
        self.assertEquals(context.get_refs_with_no_output(),[]) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   376
        self.assertEquals(context.get_refs_with_no_output(['']),['']) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   377
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   378
        context.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   379
                                'foo.two',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   380
                                'foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   381
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   382
        self.assertEquals(context.get_refs_with_no_output(),['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   383
                                                             'foo.three',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   384
                                                             'foo.two']) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   385
        mi = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   386
        mi.refs = ['foo.bar','nonno.noo','foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   387
        context.add_file('add1.txt', implementation=mi)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   388
        context.add_file('foo/add2.txt', implementation=None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   389
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   390
        self.assertEquals(context.get_refs_with_no_output(),['foo.two']) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   391
        context.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   392
                                'foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   393
        self.assertEquals(context.get_refs_with_no_output(),[]) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   394
        mi.refs = []
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   395
        self.assertEquals(context.get_refs_with_no_output(),['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   396
                                                             'foo.three']) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   397
        mi.refs = None
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   398
        self.assertEquals(context.get_refs_with_no_output(),['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   399
                                                             'foo.three']) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   400
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   401
    def test_merged_context_get_changed_refs_intersect(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   402
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   403
        context1 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   404
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   405
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   406
        context2 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   407
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   408
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   409
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   410
        context1.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   411
                                'foo.two',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   412
                                'foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   413
        context2.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   414
                                'foo.two1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   415
        outs = plugin.MergedContext([context1,context2])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   416
        self.assertEquals(sorted(outs.get_changed_refs(operation='union')), 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   417
                          sorted(['foo.two1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   418
                                  'foo.bar',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   419
                                  'foo.two',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   420
                                  'foo.three']))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   421
        self.assertEquals(outs.get_changed_refs(operation='intersection'), ['foo.bar'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   422
        self.assertEquals(sorted(outs.get_changed_refs(operation='difference')), sorted(['foo.three',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   423
                                                                                         'foo.two']))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   424
        self.assertEquals(sorted(outs.get_changed_refs(operation='symmetric_difference')), sorted(['foo.two1', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   425
                                                                                          'foo.three', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   426
                                                                                          'foo.two']))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   427
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   428
    def test_generation_get_refs_no_output_with_two_contexts(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   429
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   430
        context1 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   431
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   432
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   433
        context2 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   434
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   435
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   436
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   437
        context1.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   438
                                'foo.two',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   439
                                'foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   440
        context2.changed_refs = ['foo.bar1', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   441
                                'foo.two1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   442
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   443
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   444
        mi1 = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   445
        mi1.refs = ['foo.bar','nonno.noo','foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   446
        mi2 = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   447
        mi2.refs = ['foo.bar1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   448
        context1.add_file('add1.txt', implementation=mi1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   449
        context1.add_file('foo/add2.txt', implementation=None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   450
        context2.add_file('add2.txt', implementation=mi2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   451
        outs = plugin.MergedContext([context1,context2])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   452
        self.assertEquals(outs.get_refs_with_no_output(), ['foo.two', 'foo.two1'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   453
        self.assertEquals(outs.get_refs_with_no_output(['foo.two']), ['foo.two'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   454
        self.assertEquals(outs.get_refs_with_no_output(['foo.bar']), [])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   455
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   456
    def test_generation_get_refs_with_no_implementation(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   457
        config = api.Configuration()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   458
        context1 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   459
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   460
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   461
        context2 = plugin.GenerationContext(configuration=config, 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   462
                                           output=os.path.join(ROOT_PATH, 'temp'),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   463
                                           phase="normal")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   464
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   465
        context1.changed_refs = ['foo.bar', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   466
                                'foo.two',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   467
                                'foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   468
        context2.changed_refs = ['foo.bar1', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   469
                                'foo.two1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   470
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   471
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   472
        mi1 = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   473
        mi1.ref = 'mi1'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   474
        mi1.refs = ['foo.bar','nonno.noo','foo.three']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   475
        mi2 = MockImpl({})
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   476
        mi2.ref = 'mi2'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   477
        mi2.refs = ['foo.bar1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   478
        context1.impl_set.add(mi1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   479
        context2.impl_set.add(mi2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   480
        outs = plugin.MergedContext([context1,context2])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   481
        self.assertEquals(outs.get_refs_with_no_implementation(), ['foo.two', 'foo.two1'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   482
        self.assertEquals(outs.get_refs_with_no_implementation(['foo.bar']), [])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   483
        self.assertEquals(outs.get_refs_with_no_implementation(['foo.two', 'foo.bar1']), ['foo.two'])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   484
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   485
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   486
    def test_context_data_grep_log(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   487
        context = plugin.GenerationContext()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   488
        context.log = ['foo bar',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   489
                     'foo faa',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   490
                     'jee jee jehu']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   491
        self.assertEquals(context.grep_log('jee'), [(2,'jee jee jehu')])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   492
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   493
    def test_context_pickle(self):
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   494
        remove_if_exists(os.path.join(ROOT_PATH,'temp'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   495
        os.mkdir(os.path.join(ROOT_PATH, 'temp'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   496
        
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   497
        config = api.Configuration()
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   498
        config.create_feature('feature')
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   499
        context = plugin.GenerationContext(configuration=config, 
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   500
                                           output=os.path.join(ROOT_PATH, 'temp'),
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   501
                                           phase="normal")
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   502
        
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   503
        dfile  = open(os.path.join(ROOT_PATH,'temp/out_gencontext.dat'), 'w')
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   504
        pickle.dump(context, dfile)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   505
        dfile.close()
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   506
        dfile  = open(os.path.join(ROOT_PATH,'temp/out_gencontext.dat'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   507
        context2 = pickle.load(dfile)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   508
        self.assertEquals(context2.configuration.path, context.configuration.path)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   509
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   510
    def test_context_with_project_pickle(self):
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   511
        remove_if_exists(os.path.join(ROOT_PATH,'temp'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   512
        os.mkdir(os.path.join(ROOT_PATH, 'temp'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   513
        prj = api.Project(api.Storage(""))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   514
        config = api.Configuration()
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   515
        config.create_feature('feature')
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   516
        prj.add_configuration(config, True)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   517
        context = plugin.GenerationContext(configuration=config, 
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   518
                                           output=os.path.join(ROOT_PATH, 'temp'),
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   519
                                           phase="normal")
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   520
        
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   521
        dfile  = open(os.path.join(ROOT_PATH,'temp/out_gencontext2.dat'), 'w')
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   522
        pickle.dump(context, dfile)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   523
        dfile.close()
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   524
        dfile  = open(os.path.join(ROOT_PATH,'temp/out_gencontext2.dat'))
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   525
        context2 = pickle.load(dfile)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   526
        self.assertEquals(context2.configuration.path, context.configuration.path)
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   527
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
   528
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   529
class TestPluginImplBase(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   530
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   531
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   532
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   533
    def test_implbase_add_tags(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   534
        impl = plugin.ImplBase('test',None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   535
        impl.set_tags({'target': ['test', 'foo']})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   536
        self.assertEquals(impl.get_tags()['target'],['test','foo'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   537
        #self.assertEquals(impl.has_tag({}, policy='OR'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   538
        self.assertEquals(impl.has_tag({'target': ['test']}, policy='OR'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   539
        self.assertEquals(impl.has_tag({'target': ['test']}, policy='AND'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   540
        self.assertEquals(impl.has_tag({'target': ['foo']}, policy='OR'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   541
        self.assertEquals(impl.has_tag({'target': ['foo']}, policy='AND'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   542
        self.assertEquals(impl.has_tag({'target': ['test','foo']}, policy='OR'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   543
        self.assertEquals(impl.has_tag({'target': ['test','foo']}, policy='AND'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   544
        self.assertEquals(impl.has_tag({'target': ['test2','foo']}, policy='OR'), True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   545
        self.assertEquals(impl.has_tag({'target': ['test2','foo']}, policy='AND'), False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   546
        self.assertEquals(impl.has_tag({'foo': ['foo']}, policy='OR'), False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   547
        self.assertEquals(impl.has_tag({'foo': ['foo']}, policy='AND'), False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   548
        self.assertEquals(impl.has_tag({'target': ['foo'], 'foo':['bar']}, policy='AND'), False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   549
        self.assertEquals(impl.has_tag({'target': ['foo'], 'foo':['bar']}, policy='OR'), True)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   550
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   551
    def test_implbase_output(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   552
        str = api.Storage(utils.relpath(ROOT_PATH))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   553
        config = api.Configuration('foo')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   554
        config.storage = str
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   555
        impl = plugin.ImplBase('foo.implml', config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   556
        self.assertEquals(impl.output, '')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   557
        impl.plugin_output = 'test'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   558
        self.assertEquals(impl.output, 'test')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   559
        impl.set_output_root('foobar')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   560
        self.assertEquals(impl.output, 'foobar/test')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   561
        impl.set_output_root('/foobar')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   562
        self.assertEquals(impl.output, '/foobar/test')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   563
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   564
        self.assertEquals(impl.path, 'foo.implml')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   565
        self.assertEquals(impl.abspath, os.path.abspath(os.path.join(ROOT_PATH,'foo.implml')))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   566
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   567
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   568
    def test_implbase_tags_with_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   569
        config = MockConfiguration({}, features = {
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   570
            'Foo.Bar'           : 'foobar',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   571
            'Foo.Baz'           : 'foobaz',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   572
            'Feature.TagName'   : 'tagname',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   573
            'Feature.TagValue'  : 'tagvalue',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   574
        })
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   575
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   576
        impl = plugin.ImplBase('test', config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   577
        impl.set_tags({
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   578
            'test'              : ['${Foo.Bar}', 'foo', 'bar', '${Foo.Bar} and ${Foo.Baz}'],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   579
            '${Feature.TagName}': ['${Feature.TagValue}']})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   580
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   581
        expected = {
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   582
            'test': ['foobar', 'foo', 'bar', 'foobar and foobaz'],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   583
            'tagname': ['tagvalue'],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   584
        }
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   585
        self.assertEquals(impl.get_tags(), expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   586
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   587
    def test_has_ref(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   588
        impl = plugin.ImplBase('test', None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   589
        self.assertEquals(impl.has_ref('Foo.Bar'), None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   590
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   591
        impl.get_refs = lambda: ['Foo.Bar', 'Xyz']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   592
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   593
        # Test using different supported parameter types
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   594
        self.assertTrue(impl.has_ref('Foo.Bar'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   595
        self.assertTrue(impl.has_ref(['Foo.Bar']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   596
        self.assertTrue(impl.has_ref(('Foo.Bar',)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   597
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   598
        # Impl uses the exact given ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   599
        self.assertTrue(impl.has_ref('Foo.Bar'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   600
        self.assertTrue(impl.has_ref('Xyz'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   601
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   602
        # Impl uses the given ref's parent ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   603
        self.assertTrue(impl.has_ref('Foo.Bar.Baz'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   604
        self.assertTrue(impl.has_ref('Xyz.Zyx'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   605
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   606
        # Impl does not use the entire parent ref of 'Foo.Bar', only the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   607
        # 'Bar' sub-ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   608
        self.assertFalse(impl.has_ref('Foo'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   609
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   610
        # Various refs almost matching a specified ref
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   611
        self.assertFalse(impl.has_ref('Fo'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   612
        self.assertFalse(impl.has_ref('Fog'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   613
        self.assertFalse(impl.has_ref('Food'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   614
        self.assertFalse(impl.has_ref('Foo.Ba'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   615
        self.assertFalse(impl.has_ref('Foo.Bag'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   616
        self.assertFalse(impl.has_ref('Foo.Bard'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   617
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   618
        # Various refs not at all in the impl's ref list
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   619
        self.assertFalse(impl.has_ref('Yay'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   620
        self.assertFalse(impl.has_ref(['Yay', 'Fhtagn']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   621
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   622
        # One of the refs in the given list matches
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   623
        self.assertTrue(impl.has_ref(['Yay', 'Fhtagn', 'Foo.Bar']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   624
        self.assertTrue(impl.has_ref(['Yay', 'Foo.Bar.Baz', 'Fhtagn']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   625
        self.assertTrue(impl.has_ref(['Yay', 'Xyz', 'Fhtagn']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   626
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   627
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   628
class TestPlugin(plugin.ImplBase):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   629
    def __init__(self, ref):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   630
        super(TestPlugin, self).__init__(ref, None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   631
        self.refs = None
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   632
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   633
    def get_refs(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   634
        return self.refs
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   635
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   636
class TestPluginImplSet(unittest.TestCase):    
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   637
    def test_add_implementation_and_list(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   638
        iset= plugin.ImplSet()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   639
        imp1  = plugin.ImplBase("implml/test.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   640
        imp2a = plugin.ImplBase("implml/copy.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   641
        imp2b = plugin.ImplBase("implml/copy.content",None)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   642
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   643
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   644
        iset.add_implementation(imp2b)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   645
        self.assertEquals(sorted(iset.list_implementation()),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   646
                          sorted(['implml/test.content',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   647
                                  'implml/copy.content']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   648
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   649
    def test_add_implementation_and_generate(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   650
        iset = plugin.ImplSet()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   651
        imp1  = SimpleImpl("implml/test1.content", None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   652
        imp1.outputfile = 'test/foo.txt'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   653
        imp2a = SimpleImpl("implml/test2.content", None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   654
        imp2b = SimpleImpl("implml/test3.content", None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   655
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   656
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   657
        iset.add_implementation(imp2b)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   658
        context = plugin.GenerationContext(output="temp")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   659
        iset.generate(context)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   660
        self.assertEquals(sorted(context.executed_impls), sorted([imp1, imp2a, imp2b])) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   661
        self.assertEquals(context.generation_output[0].name, 'temp/test/foo.txt')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   662
        self.assertTrue(os.path.exists(context.generation_output[0].name))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   663
        self.assertEquals(context.generation_output[0].implementation,imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   664
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   665
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   666
    def test__generate_with_exception(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   667
        def generate_exception(*args):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   668
            raise Exception("test exception %s" % args)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   669
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   670
        iset = plugin.ImplSet()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   671
        imp1  = SimpleImpl("implml/test1.content", None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   672
        imp1.outputfile = 'test/foo.txt'
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   673
        imp2a = SimpleImpl("implml/test2.content", None)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   674
        imp2a.generate = generate_exception
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   675
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   676
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   677
        context = plugin.GenerationContext(output="temp")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   678
        iset.generate(context)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   679
        self.assertEquals(sorted(context.executed_impls), sorted([imp1, imp2a])) 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   680
        self.assertEquals(context.generation_output[1].type, 'exception')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   681
        self.assertEquals(context.generation_output[1].name, 'exception from implml/test2.content')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   682
        self.assertEquals(context.generation_output[1].implementation, imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   683
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   684
    def test_add_implementation_and_get_implementations_by_file(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   685
        iset = plugin.ImplSet()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   686
        imp1  = plugin.ImplBase("implml/test.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   687
        imp2a = plugin.ImplBase("implml/copy.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   688
        imp2b = plugin.ImplBase("implml/copy.content",None)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   689
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   690
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   691
        iset.add_implementation(imp2b)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   692
        self.assertEquals(iset.get_implementations_by_file("implml/test.content"), [imp1])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   693
        self.assertEquals(sorted(iset.get_implementations_by_file("implml/copy.content")),
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   694
                          sorted([imp2a, imp2b]))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   695
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   696
    def test_add_implementation_and_remove_implementation(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   697
        iset = plugin.ImplSet()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   698
        imp1  = plugin.ImplBase("implml/test.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   699
        imp2a = plugin.ImplBase("implml/copy.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   700
        imp2b = plugin.ImplBase("implml/copy.content",None)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   701
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   702
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   703
        iset.add_implementation(imp2b)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   704
        iset.remove_implementation("implml/test.content")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   705
        self.assertEquals(len(iset.list_implementation()),1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   706
        self.assertEquals(iset.list_implementation()[0],"implml/copy.content")
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   707
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   708
    def test_add_implementation_and_remove_all(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   709
        iset = plugin.ImplSet()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   710
        imp1  = plugin.ImplBase("implml/test.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   711
        imp2a = plugin.ImplBase("implml/copy.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   712
        imp2b = plugin.ImplBase("implml/copy.content",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   713
        imp3  = plugin.ImplBase("implml/foo.content",None)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   714
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   715
        iset.add_implementation(imp2a)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   716
        iset.add_implementation(imp2b)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   717
        iset.add_implementation(imp3)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   718
        for implref in iset.list_implementation():
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   719
            iset.remove_implementation(implref)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   720
        self.assertEquals(len(iset.list_implementation()),0)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   721
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   722
    def test_create_impl_set(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   723
        plugin.create_impl_set('',None);
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   724
        pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   725
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   726
    def test_add_implementation_find_with_tags(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   727
        def impl_list(impl_iterable):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   728
            return sorted(list(impl_iterable), key=lambda impl: impl.ref)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   729
        
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   730
        iset = plugin.ImplSet()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   731
        imp1 = TestPlugin("implml/test.content")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   732
        imp2 = TestPlugin("implml/copy.content")
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   733
        imp3 = TestPlugin("implml/foo.content")
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   734
        imp1.set_tags({'target': ['core','rofs2','rofs3']})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   735
        imp2.set_tags({'target': ['rofs3','uda']})
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   736
        imp3.set_tags({'target': ['mmc','uda']})
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   737
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   738
        iset.add_implementation(imp2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   739
        iset.add_implementation(imp3)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   740
        self.assertEquals(impl_list(iset.filter_implementations(tags={'target' : ['rofs3']})),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   741
                          impl_list([imp1,imp2]))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   742
        self.assertEquals(impl_list(iset.filter_implementations(tags={'target' : ['uda']})),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   743
                          impl_list([imp2,imp3]))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   744
        self.assertEquals(impl_list(iset.filter_implementations(tags={'target' : ['mmc','uda']}, policy='AND')),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   745
                          impl_list([imp3]))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   746
        self.assertEquals(impl_list(iset.filter_implementations(tags={'target' : ['mmc','uda']}, policy='OR')),
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   747
                          impl_list([imp2, imp3]))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   748
        cont = iset.filter_implementations(tags={'target' : ['core']}) | iset.filter_implementations(tags={'target' : ['mmc']}) 
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   749
        self.assertEquals(len(cont),2)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   750
        self.assertEquals(impl_list(cont), impl_list([imp1,imp3]))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   751
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   752
        cont = iset.filter_implementations(tags={'target' : ['rofs3']}) & iset.filter_implementations(tags={'target' : ['uda']}) 
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   753
        self.assertEquals(len(cont),1)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   754
        self.assertEquals(impl_list(cont), impl_list([imp2]))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   755
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   756
    def test_pre_impl_filter(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   757
        resources = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   758
            "foo.txt",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   759
            ".hidden_file",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   760
            ".test/test.txt",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   761
            "layer1/implml/.hidden",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   762
            "layer1/implml/test.crml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   763
            "layer1/implml/test3.gcfml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   764
            "layer1/implml/.svn/text-base/test.crml.svn-base",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   765
            "layer1/implml/subdir/test5.crml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   766
            "layer1/implml/subdir/test6.ruleml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   767
            "layer1/implml/subdir/.scripts/test6_ruleml.py",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   768
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   769
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   770
        expected = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   771
            "foo.txt",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   772
            "layer1/implml/test.crml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   773
            "layer1/implml/test3.gcfml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   774
            "layer1/implml/subdir/test5.crml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   775
            "layer1/implml/subdir/test6.ruleml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   776
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   777
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   778
        self.assertEquals(expected, plugin.pre_filter_impls(resources))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   779
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   780
        # Test with backslashes
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   781
        resources = map(lambda path: path.replace('/', '\\'), resources)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   782
        expected = map(lambda path: path.replace('/', '\\'), expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   783
        self.assertEquals(expected, plugin.pre_filter_impls(resources))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   784
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   785
    def test_get_implemented_refs(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   786
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   787
        iset = plugin.ImplSet()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   788
        imp1 = TestPlugin('imp1')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   789
        imp2 = TestPlugin('imp2')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   790
        imp3 = TestPlugin('imp3')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   791
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   792
        iset.add_implementation(imp2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   793
        iset.add_implementation(imp3)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   794
        imp1.refs = ['fea.child1', 'fea.child2']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   795
        imp2.refs = ['fea.setting1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   796
        imp3.refs = ['foo.bar']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   797
        self.assertEquals(sorted(iset.get_implemented_refs()), sorted(['fea.child1', 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   798
                                                                       'fea.child2',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   799
                                                                       'fea.setting1',
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   800
                                                                       'foo.bar']))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   801
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   802
    def test_get_implementations_with_ref(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   803
            
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   804
        iset = plugin.ImplSet()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   805
        imp1 = TestPlugin('implml1')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   806
        imp2 = TestPlugin('implml2')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   807
        imp3 = TestPlugin('implml3')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   808
        imp4 = TestPlugin('implml3')
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   809
        iset.add_implementation(imp1)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   810
        iset.add_implementation(imp2)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   811
        iset.add_implementation(imp3)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   812
        iset.add_implementation(imp4)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   813
        imp1.refs = ['fea.child1', 'fea.child2']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   814
        imp2.refs = ['foo.bar', 'fea.setting1']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   815
        imp3.refs = ['foo.bar']
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   816
        self.assertEquals(iset.get_implementations_with_ref('fea.child1'), [imp1])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   817
        self.assertEquals(iset.get_implementations_with_ref('fea.setting1'), [imp2])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   818
        self.assertEquals(iset.get_implementations_with_ref('foo.bar'), [imp2, imp3])
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   819
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   820
class TestPluginImplSetCopy(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   821
    class TestImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   822
        pass # No default invocation phase specified, should be 'normal'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   823
    class PreImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   824
        DEFAULT_INVOCATION_PHASE = 'pre'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   825
    class NormalImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   826
        DEFAULT_INVOCATION_PHASE = 'normal'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   827
    class PostImpl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   828
        DEFAULT_INVOCATION_PHASE = 'post'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   829
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   830
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   831
        plugin.ImplFactory.set_reader_classes_override(MOCK_READER_CLASSES)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   832
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   833
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   834
        plugin.ImplFactory.set_reader_classes_override(None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   835
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   836
    def _get_impl_container(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   837
        impl_files = ['layer1/implml/single1.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   838
                      'layer1/implml/single2.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   839
                      'layer1/implml/single3.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   840
                      'layer1/implml/multi1.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   841
                      'layer1/implml/multi2.implml']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   842
        return plugin.create_impl_set(impl_files, mock_config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   843
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   844
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   845
    def test_get_test_impl_iset(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   846
        iset = self._get_impl_container()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   847
        # There are 5 ImplML files
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   848
        self.assertEquals(len(iset.list_implementation()), 5)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   849
        # ...but two of them contain 3 implementations each
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   850
        self.assertEquals(len(iset), 5)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   851
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   852
    def _get_phase_test_impl_container(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   853
        return plugin.ImplSet([
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   854
            self.TestImpl('foo.test', None),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   855
            self.NormalImpl('foo.norm', None),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   856
            self.PreImpl('foo.pre', None),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   857
            self.PostImpl('test.post', None),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   858
            self.PostImpl('foo.post', None),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   859
        ])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   860
    
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   861
    def test_get_phase_test_impl_iset(self):
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   862
        iset = self._get_phase_test_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   863
        self.assertEquals(5, len(iset))
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   864
        self.assertEquals(len(iset.list_implementation()), 5)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   865
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   866
        def check(filename, phase):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   867
            impls = iset.get_implementations_by_file(filename)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   868
            self.assertEquals(1, len(impls))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   869
            impl = impls[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   870
            self.assertEquals(impl.ref, filename)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   871
            self.assertEquals(impl.invocation_phase(), phase)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   872
        check('foo.test', 'normal')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   873
        check('foo.norm', 'normal')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   874
        check('foo.pre', 'pre')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   875
        check('test.post', 'post')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   876
        check('foo.post', 'post')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   877
        
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   878
        return iset
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   879
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   880
    def test_create_impl_set(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   881
        iset = self._get_impl_container()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   882
        # There are 5 ImplML files
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   883
        self.assertEquals(len(iset.list_implementation()), 5)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   884
        # ...but two of them contain 3 implementations each
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   885
        self.assertEquals(len(iset), 5)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   886
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   887
    def test_invocation_phases(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   888
        iset = self._get_phase_test_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   889
        phases = iset.invocation_phases()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   890
        self.assertEquals(phases,['pre','normal','post'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   891
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   892
    def test_copy(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   893
        iset = self._get_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   894
        newcontainer = iset.copy()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   895
        self.assertTrue(newcontainer is not iset)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   896
        self.assertEquals(len(newcontainer), 5)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   897
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   898
    def test_execute_generate(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   899
        iset = self._get_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   900
        iset.execute(iset, 'generate')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   901
        actual_impls = []
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   902
        for impl in iset:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   903
            if isinstance(impl, plugin.ImplContainer):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   904
                actual_impls += impl.get_all_implementations()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   905
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   906
                actual_impls.append(impl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   907
        for impl in actual_impls:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   908
            self.assertTrue(impl.generate_invoked)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   909
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   910
    def test_impl_container_generate(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   911
        iset = self._get_impl_container()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   912
        context = plugin.GenerationContext()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   913
        context.history = ""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   914
        context.objects = []
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   915
        iset.generate(context)
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   916
        self.assertEquals(len(context.objects), 9)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   917
        actual_impls = []
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   918
        for impl in iset:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   919
            if isinstance(impl, plugin.ImplContainer):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   920
                actual_impls += impl.get_all_implementations()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   921
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   922
                actual_impls.append(impl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   923
        for impl in actual_impls:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   924
            self.assertTrue(impl.generate_invoked)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   925
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   926
    def test_filter_all(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   927
        iset = self._get_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   928
        impl_list = iset.filter_implementations()
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   929
        self.assertEquals(len(impl_list), 5)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   930
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   931
    def test_filter_for_pre_phase(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   932
        iset = self._get_phase_test_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   933
        impl_list = list(iset.filter_implementations(phase='pre'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   934
        self.assertEquals(len(impl_list), 1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   935
        self.assertEquals(impl_list[0].invocation_phase(), 'pre')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   936
        self.assertEquals(impl_list[0].ref, 'foo.pre')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   937
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   938
    def test_filter_for_normal_phase(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   939
        iset = self._get_phase_test_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   940
        impl_list = list(iset.filter_implementations(phase='normal'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   941
        self.assertEquals(len(impl_list), 2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   942
        self.assertEquals(impl_list[0].invocation_phase(), 'normal')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   943
        self.assertEquals(impl_list[1].invocation_phase(), 'normal')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   944
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   945
    def test_filter_for_post_phase(self):
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   946
        iset = self._get_phase_test_impl_container()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   947
        impl_list = list(iset.filter_implementations(phase='post'))
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   948
        self.assertEquals(len(impl_list), 2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   949
        self.assertEquals(impl_list[0].invocation_phase(), 'post')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   950
        self.assertEquals(impl_list[1].invocation_phase(), 'post')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   951
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   952
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   953
class TestPluginImplSettings(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   954
    class Test1Impl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   955
        IMPL_TYPE_ID = "test1"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   956
    class Test2Impl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   957
        IMPL_TYPE_ID = "test2"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   958
    class Test3Impl(plugin.ImplBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   959
        IMPL_TYPE_ID = "test3"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   960
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   961
    def test_plugin_settings(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   962
        settings.SettingsFactory.cone_parser().read([os.path.join(ROOT_PATH,'test_defaults.cfg')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   963
        impl = TestPluginImplSettings.Test1Impl("",None)
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   964
        self.assertEquals(impl.output_root, '')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   965
        self.assertEquals(impl.output_subdir, '')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   966
        impl.output_subdir = 'foobar'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   967
        self.assertEquals(impl.get_tags(), {})
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
   968
        self.assertEquals(impl.output, 'foobar')
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   969
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   970
        impl = TestPluginImplSettings.Test2Impl("",None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   971
        self.assertEquals(impl.output_subdir, '')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   972
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   973
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   974
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   975
class TestReaders(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   976
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   977
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   978
        plugin.ImplFactory.set_reader_classes_override(MOCK_READER_CLASSES)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   979
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   980
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   981
        plugin.ImplFactory.set_reader_classes_override(None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   982
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   983
    def assert_namespace_list_equals(self, resource_ref, expected_namespaces):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   984
        self.assertEquals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   985
            expected_namespaces,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   986
            _plugin_reader.ImplReader._get_namespaces(mock_config.get_doc(resource_ref)))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   987
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   988
    def test_get_needed_reader_classes(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   989
        self.assert_namespace_list_equals('layer1/implml/none.implml', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   990
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   991
        self.assert_namespace_list_equals('layer1/implml/single1.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   992
            ['http://www.test.com/xml/1'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   993
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   994
        self.assert_namespace_list_equals('layer1/implml/single2.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   995
            ['http://www.test.com/xml/2'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   996
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   997
        self.assert_namespace_list_equals('layer1/implml/multi1.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   998
            ['http://www.symbianfoundation.org/xml/implml/1', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   999
             'http://www.test.com/xml/1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1000
             'http://www.test.com/xml/2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1001
             'http://www.test.com/xml/3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1002
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1003
        self.assert_namespace_list_equals('layer1/implml/multi2.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1004
            ['http://www.symbianfoundation.org/xml/implml/1', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1005
             'http://www.test.com/xml/1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1006
             'http://www.test.com/xml/2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1007
             'http://www.test.com/xml/3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1008
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1009
        self.assert_namespace_list_equals('layer1/implml/multi3.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1010
            ['http://www.symbianfoundation.org/xml/implml/1', 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1011
             'http://www.test.com/xml/1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1012
             'http://www.test.com/xml/2'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1013
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1014
        self.assert_namespace_list_equals('layer1/implml/unsupported1.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1015
            ['http://www.test.com/xml/1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1016
             'http://www.test.com/xml/2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1017
             'http://www.test.com/xml/4'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1018
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1019
        self.assert_namespace_list_equals('layer1/implml/unsupported2.implml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1020
            ['http://www.test.com/xml/6',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1021
             'http://www.test.com/xml/2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1022
             'http://www.test.com/xml/4'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1023
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1024
    def assert_read_impls_equal(self, expected, resource_ref):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1025
        actual = plugin.ImplFactory.get_impls_from_file(resource_ref, mock_config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1026
        if len(actual) == 1 and isinstance(actual[0], plugin.ImplContainer):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1027
            actual = actual[0].get_all_implementations() 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1028
        self.assertEquals(expected, actual)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1029
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1030
#        # Assert that the implementations have the correct impl indices set
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1031
#        for i, impl in enumerate(actual):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1032
#            self.assertEquals(i, impl.index, "Impl %r does not have the expected index %r (is %r)" % (impl, i, impl.index))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1033
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1034
    def test_get_impls_from_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1035
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1036
            [],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1037
            'layer1/implml/none.implml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1038
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1039
        file = 'layer1/implml/single1.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1040
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1041
            [MockImpl(['MockReader1', file, {'x': '1'}, {'y': '2'}, {'z': '3'}])],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1042
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1043
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1044
        file = 'layer1/implml/single2.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1045
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1046
            [MockImpl(['MockReader2', file])],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1047
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1048
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1049
        file = 'layer1/implml/single3.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1050
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1051
            [MockImpl(['MockReader3', file, {'x': '1'}])],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1052
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1053
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1054
        file = 'layer1/implml/multi1.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1055
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1056
            [MockImpl(['MockReader1', file, {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1057
             MockImpl(['MockReader2', file, {'x': '10', 'y': '20'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1058
             MockImpl(['MockReader3', file, {'x': '100', 'y': '200'}, {'z': '300'}])],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1059
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1060
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1061
        file = 'layer1/implml/multi2.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1062
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1063
            [MockImpl(['MockReader1', file, {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1064
             MockImpl(['MockReader2', file, {'x': '10', 'y': '20'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1065
             MockImpl(['MockReader3', file, {'x': '100', 'y': '200'}, {'z': '300'}])],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1066
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1067
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1068
        file = 'layer1/implml/multi3.implml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1069
        self.assert_read_impls_equal(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1070
            [MockImpl(['MockReader1', file, {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1071
             MockImpl(['MockReader2', file, {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1072
             MockImpl(['MockReader1', file, {'a': '1', 'b': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1073
             MockImpl(['MockReader2', file, {'a': '1', 'b': '2'}]),],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1074
            file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1075
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1076
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1077
        self.assert_read_impls_equal([], 'layer1/implml/unsupported1.implml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1078
        self.assert_read_impls_equal([], 'layer1/implml/unsupported2.implml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1079
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1080
        self.assert_read_impls_equal([], 'layer1/implml/broken.implml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1081
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1082
    def test_is_supported_impl_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1083
        def check(filename, expected):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1084
            self.assertEquals(expected, plugin.ImplFactory.is_supported_impl_file(filename))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1085
        check('test.implml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1086
        check('layer/implml/test.implml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1087
        check('layer/implml/test.mock1ml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1088
        check('layer/implml/test.mock2ml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1089
        check('layer/implml/test.mock3ml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1090
        check('layer/implml/test.test3ml', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1091
        check('layer/implml/test.dummyml', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1092
        check('layer/implml/test.xml', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1093
        check('layer/implml/test', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1094
        check('layer/implml/test.IMPLML', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1095
        check('layer/implml/test.ImplML', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1096
        check('layer/implml/test.Mock1ML', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1097
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1098
    def test_read_all_impls(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1099
        actual = list(plugin.get_impl_set(mock_config))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1100
        actual_impls = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1101
        for impl in actual:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1102
            if isinstance(impl, plugin.ImplContainer):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1103
                actual_impls += impl.get_all_implementations()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1104
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1105
                actual_impls.append(impl)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1106
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1107
        expected = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1108
            MockImpl(['MockReader1', 'layer1/implml/single1.implml', {'x': '1'}, {'y': '2'}, {'z': '3'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1109
            MockImpl(['MockReader2', 'layer1/implml/single2.implml']),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1110
            MockImpl(['MockReader3', 'layer1/implml/single3.implml', {'x': '1'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1111
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1112
            MockImpl(['MockReader1', 'layer1/implml/single1.mock1ml', {'x': '1'}, {'y': '2'}, {'z': '3'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1113
            MockImpl(['MockReader2', 'layer1/implml/single2.mock2ml']),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1114
            MockImpl(['MockReader3', 'layer1/implml/single3.mock3ml', {'x': '1'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1115
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1116
            MockImpl(['MockReader3', 'layer1/implml/single3.test3ml', {'x': '1'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1117
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1118
            MockImpl(['MockReader1','layer1/implml/multi1.implml', {'y': '2', 'x': '1'}]),  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1119
            MockImpl(['MockReader2', 'layer1/implml/multi1.implml', {'y': '20', 'x': '10'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1120
            MockImpl(['MockReader3', 'layer1/implml/multi1.implml', {'y': '200', 'x': '100'}, {'z': '300'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1121
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1122
            MockImpl(['MockReader1', 'layer1/implml/multi2.implml', {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1123
            MockImpl(['MockReader2', 'layer1/implml/multi2.implml', {'x': '10', 'y': '20'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1124
            MockImpl(['MockReader3', 'layer1/implml/multi2.implml', {'x': '100', 'y': '200'}, {'z': '300'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1125
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1126
            MockImpl(['MockReader1', 'layer1/implml/multi3.implml', {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1127
            MockImpl(['MockReader2', 'layer1/implml/multi3.implml', {'x': '1', 'y': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1128
            MockImpl(['MockReader1', 'layer1/implml/multi3.implml', {'a': '1', 'b': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1129
            MockImpl(['MockReader2', 'layer1/implml/multi3.implml', {'a': '1', 'b': '2'}]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1130
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1131
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1132
        if sorted(expected) != sorted(actual_impls):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1133
            print 50 * '-'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1134
            for impl in sorted(expected): print impl
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1135
            print 50 * '-'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1136
            for impl in sorted(actual_impls): print impl
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1137
            print 50 * '-'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1138
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1139
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1140
        self.assertEquals(sorted(expected), sorted(actual_impls))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1141
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1142
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1143
class TestTempFeatureDefinition(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1144
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1145
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1146
        plugin.ImplFactory.set_reader_classes_override(MOCK_READER_CLASSES)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1147
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1148
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1149
        plugin.ImplFactory.set_reader_classes_override(None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1150
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1151
    def assert_contains_feature(self, config, ref, type, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1152
        dview = config.get_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1153
        feature = dview.get_feature(ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1154
        self.assertEquals(type, feature.get_type())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1155
        self.assertEquals(value, feature.get_value())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1156
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1157
    def test_create_feature(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1158
        config = api.Configuration("test.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1159
        def add_feature(setting_ref, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1160
            config.add_feature(api.Feature(setting_ref), "ExistingFeature")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1161
            config.add_data(api.Data(fqr="ExistingFeature." + setting_ref, value=value))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1162
        add_feature('String', 'existing value')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1163
        add_feature('Boolean', '0')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1164
        add_feature('Boolean2', 'true')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1165
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1166
        Tfd = _plugin_reader.TempVariableDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1167
        feadefs = [Tfd('TempFeature.String',    'string',   'testing'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1168
                   Tfd('TempFeature.Int',       'int',      '500'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1169
                   Tfd('TempFeature.Real',      'real',     '1.5'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1170
                   Tfd('TempFeature.Boolean',   'boolean',  'true'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1171
                   Tfd('TempFeature.String2',   'string',   'xyz ${ExistingFeature.String} zyx'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1172
                   Tfd('TempFeature.Boolean2',  'boolean',  '${ExistingFeature.Boolean}'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1173
                   Tfd('TempFeature.Boolean3',  'boolean',  '${ExistingFeature.Boolean2}')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1174
        for feadef in feadefs:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1175
            feadef.create_feature(config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1176
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1177
        # This needs to be done or the default view won't be up-to-date
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1178
        config.recreate_default_view()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1179
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1180
        self.assert_contains_feature(config, 'TempFeature.String', 'string', 'testing')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1181
        self.assert_contains_feature(config, 'TempFeature.Int', 'int', 500)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1182
        self.assert_contains_feature(config, 'TempFeature.Real', 'real', 1.5)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1183
        self.assert_contains_feature(config, 'TempFeature.Boolean', 'boolean', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1184
        self.assert_contains_feature(config, 'TempFeature.String2', 'string', 'xyz existing value zyx')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1185
        self.assert_contains_feature(config, 'TempFeature.Boolean2', 'boolean', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1186
        self.assert_contains_feature(config, 'TempFeature.Boolean3', 'boolean', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1187
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1188
    def test_create_seq_feature(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1189
        Tsfd = _plugin_reader.TempVariableSequenceDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1190
        feadef = Tsfd('TempFeature.Seq', [('String', 'string'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1191
                                          ('Int', 'int'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1192
                                          ('Real', 'real'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1193
                                          ('Boolean', 'boolean'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1194
                                          ('DefaultType', 'string')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1195
        config = api.Configuration("test.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1196
        feadef.create_feature(config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1197
        self.assert_contains_feature(config, 'TempFeature.Seq', 'sequence', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1198
        self.assert_contains_feature(config, 'TempFeature.Seq.String', 'string', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1199
        self.assert_contains_feature(config, 'TempFeature.Seq.Int', 'int', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1200
        self.assert_contains_feature(config, 'TempFeature.Seq.Real', 'real', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1201
        self.assert_contains_feature(config, 'TempFeature.Seq.Boolean', 'boolean', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1202
        self.assert_contains_feature(config, 'TempFeature.Seq.DefaultType', 'string', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1203
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1204
        fea = config.get_default_view().get_feature('TempFeature.Seq')
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1205
        fea.set_value([['test', 1, 2.0, True, 'foo']])
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1206
        self.assertEquals(fea.get_value(), [['test', 1, 2.0, True, 'foo']])
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1207
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1208
    def _create_mock_impl(self, temp_var_defs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1209
        impl = Mock()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1210
        impl.ref = "test.implml"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1211
        impl.get_temp_variable_definitions = lambda: temp_var_defs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1212
        return impl
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1213
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1214
    def test_create_from_impl_container(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1215
        impls = plugin.ImplSet()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1216
        Tfd = _plugin_reader.TempVariableDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1217
        Tsfd = _plugin_reader.TempVariableSequenceDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1218
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1219
        feadefs = [Tfd('TempFeature.String',    'string',   'testing'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1220
                   Tfd('TempFeature.Int',       'int',      '500')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1221
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1222
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1223
        feadefs = [Tfd('TempFeature.Real',      'real',     '1.5'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1224
                   Tfd('TempFeature.Boolean',   'boolean',  'true')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1225
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1226
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1227
        feadefs = [Tsfd('TempFeature.Seq', [('String',  'string'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1228
                                            ('Int',     'int'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1229
                                            ('Real',    'real'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1230
                                            ('Boolean', 'boolean')])]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1231
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1232
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1233
        config = api.Configuration("test.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1234
        impls.create_temp_features(config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1235
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1236
        self.assert_contains_feature(config, 'TempFeature.String', 'string', 'testing')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1237
        self.assert_contains_feature(config, 'TempFeature.Int', 'int', 500)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1238
        self.assert_contains_feature(config, 'TempFeature.Real', 'real', 1.5)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1239
        self.assert_contains_feature(config, 'TempFeature.Boolean', 'boolean', True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1240
        self.assert_contains_feature(config, 'TempFeature.Seq', 'sequence', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1241
        self.assert_contains_feature(config, 'TempFeature.Seq.String', 'string', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1242
        self.assert_contains_feature(config, 'TempFeature.Seq.Int', 'int', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1243
        self.assert_contains_feature(config, 'TempFeature.Seq.Real', 'real', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1244
        self.assert_contains_feature(config, 'TempFeature.Seq.Boolean', 'boolean', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1245
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1246
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1247
    def test_create_from_impl_container_with_duplicates(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1248
        impls = plugin.ImplSet()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1249
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1250
        Tfd = _plugin_reader.TempVariableDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1251
        feadefs = [Tfd('TempFeature.String',    'string',   'testing'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1252
                   Tfd('TempFeature.Int',       'int',      '500')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1253
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1254
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1255
        feadefs = [Tfd('TempFeature.Real',      'real',     '1.5'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1256
                   Tfd('TempFeature.Boolean',   'boolean',  'true'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1257
                   Tfd('TempFeature.Int',       'int',      '500')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1258
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1259
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1260
        config = api.Configuration("test.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1261
        self.assertRaises(exceptions.AlreadyExists, impls.create_temp_features, config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1262
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1263
    def test_create_from_impl_container_with_existing(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1264
        impls = plugin.ImplSet()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1265
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1266
        Tfd = _plugin_reader.TempVariableDefinition
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1267
        feadefs = [Tfd('TempFeature.String',    'string',   'testing'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1268
                   Tfd('TempFeature.Int',       'int',      '500')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1269
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1270
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1271
        feadefs = [Tfd('TempFeature.Real',      'real',     '1.5'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1272
                   Tfd('TempFeature.Boolean',   'boolean',  'true')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1273
        impls.add_implementation(self._create_mock_impl(feadefs))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1274
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1275
        config = api.Configuration("test.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1276
        config.add_feature(api.Feature("Int"), "TempFeature")
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1277
        #self.assertRaises(exceptions.AlreadyExists, impls.create_temp_features, config)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1278
        temp_feature_refs = impls.create_temp_features(config)
4
0951727b8815 Updated to 1.2.13 release
m2lahtel
parents: 3
diff changeset
  1279
        self.assertEquals(temp_feature_refs.sort(), ['TempFeature.String', 'TempFeature.Real', 'TempFeature.Boolean'].sort())
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents: 0
diff changeset
  1280
        
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1281
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1282
class TestCommonImplmlDataReader(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1283
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1284
    def _read_data(self, xml_data):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1285
        etree = utils.etree.fromstring(xml_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1286
        return _plugin_reader.CommonImplmlDataReader.read_data(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1287
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1288
    def test_simple_all_tags(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1289
        XML = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1290
            <phase name="pre"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1291
            <tag name="target" value="rofs3"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1292
            <tempVariable ref="Temp.Feature" type="string" value="test"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1293
            <tempVariableSequence ref="Temp.SeqFeature">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1294
                <tempVariable ref="Sub" type="int"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1295
            </tempVariableSequence>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1296
            <settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1297
                <settingRef value="Foo.Bar"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1298
            </settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1299
            <outputRootDir value="output_root"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1300
            <outputSubDir value="output_sub"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1301
        </test>"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1302
        actual = self._read_data(XML)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1303
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1304
        expected = _plugin_reader.CommonImplmlData()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1305
        expected.phase = 'pre'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1306
        expected.tags = {'target': ['rofs3']}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1307
        expected.tempvar_defs = [Tfd('Temp.Feature', 'string', 'test'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1308
                                      Tsfd('Temp.SeqFeature', [('Sub', 'int')])]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1309
        expected.setting_refs_override = Sro(['Foo.Bar'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1310
        expected.output_root_dir = 'output_root'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1311
        expected.output_sub_dir = 'output_sub'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1312
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1313
        self.assertEquals(actual, expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1314
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1315
    def test_invalid_phases(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1316
        XML = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1317
            <phase/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1318
        </test>"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1319
        self.assertRaises(exceptions.ParseError, self._read_data, XML)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1320
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1321
        XML = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1322
            <phase name="foo"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1323
        </test>"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1324
        self.assertRaises(exceptions.ParseError, self._read_data, XML)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1325
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1326
    def test_valid_phases(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1327
        def run_test(phase ):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1328
            xml_data = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1329
                <phase name="%s"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1330
            </test>""" % phase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1331
            actual = self._read_data(xml_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1332
            expected = _plugin_reader.CommonImplmlData()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1333
            expected.phase = phase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1334
            self.assertEquals(actual, expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1335
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1336
        run_test('pre')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1337
        run_test('normal')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1338
        run_test('post')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1339
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1340
    def test_invalid_temp_features(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1341
        def run_test(element_xml_data):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1342
            xml_data = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1343
                %s
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1344
            </test>""" % element_xml_data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1345
            self.assertRaises(exceptions.ParseError, self._read_data, xml_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1346
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1347
        run_test('<tempVariable/>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1348
        run_test('<tempVariable ref="Foo.Bar" type="foo"/>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1349
        run_test('<tempVariable ref="Foo.Bar" type="foo" value="x"/>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1350
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1351
        run_test('<tempVariableSequence/>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1352
        run_test('<tempVariableSequence ref="Foo.Seq"/>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1353
        run_test('<tempVariableSequence ref="Foo.Seq"><tempVariable/></tempVariableSequence>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1354
        run_test('<tempVariableSequence ref="Foo.Seq"><tempVariable ref="SubFoo" type="foo"/></tempVariableSequence>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1355
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1356
    def test_valid_temp_feature_types(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1357
        def run_test(type):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1358
            # Test for simple features
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1359
            xml_data = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1360
                <tempVariable ref="Foo.Bar" type="%s"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1361
            </test>""" % type
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1362
            actual = self._read_data(xml_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1363
            expected = _plugin_reader.CommonImplmlData()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1364
            expected.tempvar_defs = [Tfd('Foo.Bar', type, '')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1365
            self.assertEquals(actual, expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1366
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1367
            # Test for sequence features
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1368
            xml_data = """<test xmlns="http://www.symbianfoundation.org/xml/implml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1369
                    <tempVariableSequence ref="Foo.Bar">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1370
                        <tempVariable ref="Sub" type="%s"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1371
                    </tempVariableSequence>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1372
                </test>""" % type
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1373
            actual = self._read_data(xml_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1374
            expected = _plugin_reader.CommonImplmlData()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1375
            expected.tempvar_defs = [Tsfd('Foo.Bar', [('Sub', type)])]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1376
            self.assertEquals(actual, expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1377
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1378
        run_test('string')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1379
        run_test('int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1380
        run_test('real')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1381
        run_test('boolean')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1382
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1383
    def test_setting_refs_override(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1384
        def check(xml, expected_refs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1385
            xml = '<test xmlns="http://www.symbianfoundation.org/xml/implml/1">%s</test>' % xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1386
            actual = self._read_data(xml)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1387
            expected = _plugin_reader.CommonImplmlData()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1388
            expected.setting_refs_override = Sro(expected_refs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1389
            self.assertEquals(actual, expected)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1390
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1391
        check('<settingRefsOverride/>', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1392
        check('<settingRefsOverride refsIrrelevant="false"/>', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1393
        check('<settingRefsOverride refsIrrelevant="true"/>', None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1394
        check("""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1395
                <settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1396
                    <settingRef value="Foo.Bar"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1397
                </settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1398
            """,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1399
            ['Foo.Bar'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1400
        check("""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1401
                <settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1402
                    <settingRef value="Foo.Bar"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1403
                    <settingRef value="Foo.Baz"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1404
                    <settingRef value="Test.Setting"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1405
                </settingRefsOverride>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1406
            """,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1407
            ['Foo.Bar', 'Foo.Baz', 'Test.Setting'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
  1408