configurationengine/source/plugins/symbian/ConeGenconfmlPlugin/genconfmlplugin/tests/unittest_gcfml_plugin.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
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, os, shutil
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
import __init__	
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
from genconfmlplugin import genconfmlplugin
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
from cone.public import exceptions,plugin,api
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
from cone.storage import filestorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
from cone.confml import implml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
    from cElementTree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
    try:    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
        from elementtree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
    except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
            from xml.etree import cElementTree as ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
        except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
            from xml.etree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
# Hardcoded value of testdata folder that must be under the current working dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
testdata  = os.path.join(ROOT_PATH,'project')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
invalidxml_string = '<file xmlns="http://www.s60.com/xml/genconfml/1">'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
genconfgml_string = \
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
'<file xmlns="http://www.s60.com/xml/genconfml/1" name="Setting/Data.xml" target="output">'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
'  <setting ref="Setting/Settings"/>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
'  <setting ref="Setting/ContentSettings"/>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
'  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/xinclude">'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
'    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
'    <xsl:template match="configuration/data">'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
'      <Variant>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
'        <xsl:copy-of select="Setting/Settings"/>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
'        <xsl:copy-of select="Setting/ContentSettings"/>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
'      </Variant>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
'    </xsl:template>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
'  </xsl:stylesheet>'\
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
'</file>'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
class TestGenconfmlPlugin(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        self.curdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        self.output = os.path.join(ROOT_PATH, 'temp/output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
    def test_example_parse_and_generate_prj2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        fs = filestorage.FileStorage(testdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        p = api.Project(fs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        config = p.get_configuration('root1.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        impls = plugin.get_impl_set(config,'\.gcfml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        impls.output = self.output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        impl = impls.get_implementations_by_file('Layer1/implml/feature1.gcfml')[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
        impls.generate()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
    def test_predefined_contacts_parse_and_generate(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        fs = filestorage.FileStorage(testdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        p = api.Project(fs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        config = p.get_configuration('product.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        impls = plugin.get_impl_set(config,'\.gcfml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        impls.output = self.output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        impl = impls.get_implementations_by_file('assets/s60/implml/predefinedcontacts.gcfml')[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        impls.generate()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    def test_write_element_fo_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        '''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        Fix this
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        '''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        OUTFILE = os.path.join(ROOT_PATH, 'temp/elementfile.xml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        if not os.path.exists(os.path.join(ROOT_PATH, 'temp')):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
            os.makedirs(os.path.join(ROOT_PATH, 'temp'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        #fs = filestorage.FileStorage(testdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        #p = api.Project(fs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        #config = p.get_configuration('product.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        #genconfml_plugin = genconfmlplugin.GenconfmlImpl(None, config)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        element = ElementTree.fromstring('<test>kfkadl</test>')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        genconfmlplugin.write_element(element, OUTFILE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        self.assertTrue(os.path.exists(OUTFILE))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        #out_file = open(output, 'r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        #out_file.write(xml.etree.ElementTree.tostring(element))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        #out_file.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        #resource = self.configuration.get_resource("elementfile.xml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
    def test_parse_target(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        etree = ElementTree.fromstring(genconfgml_string)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        target = reader.parse_target(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self.assertEquals(target,'output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    def test_parse_stylesheet(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        etree = ElementTree.fromstring(genconfgml_string)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        stylesheet = reader.parse_stylesheet(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        #print stylesheet
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        #FIX THIS
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        #self.assertEquals(stylesheet, etree.find("{%s}stylesheet" % 'http://www.w3.org/1999/XSL/Transform'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
    def test_parse_name(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        etree = ElementTree.fromstring(genconfgml_string)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        name = reader.parse_name(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        self.assertEquals(name,'Setting/Data.xml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    def test_parse_subdir_without_definition(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        etree = ElementTree.fromstring(genconfgml_string)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        subdir = reader.parse_subdir(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        self.assertEquals(subdir, "")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
    def test_parse_subdir_with_definition(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        etree = ElementTree.fromstring(genconfgml_string.replace("target=\"output\"", "subdir=\"include\""))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        subdir = reader.parse_subdir(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        self.assertEquals(subdir, "include")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    def test_parse_settings(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        etree = ElementTree.fromstring(genconfgml_string)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        reader = genconfmlplugin.GenconfmlImplReader()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        settings = reader.parse_settings(etree)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        self.assertEquals(settings[0],'Setting/Settings')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        self.assertEquals(settings[1],'Setting/ContentSettings')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
    def test_has_ref(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        fs = filestorage.FileStorage(testdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        p = api.Project(fs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        config = p.get_configuration('product.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        impls = plugin.get_impl_set(config,'\.gcfml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        impls.output = self.output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
        impl = impls.get_implementations_by_file('assets/s60/implml/predefinedcontacts.gcfml')[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        self.assertEquals(impl.get_refs(), ['Contacts.Contact'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        self.assertFalse(impl.has_ref(['ref1', 'ref2']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        self.assertTrue(impl.has_ref(['Contacts.Contact']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        self.assertTrue(impl.has_ref(['Contacts.Contact.FirstName']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        self.assertFalse(impl.has_ref(['Contacts.OtherSetting']))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
    def test_list_output_files(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        fs = filestorage.FileStorage(testdata)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        p = api.Project(fs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        config = p.get_configuration('product.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        impls = plugin.get_impl_set(config,'\.gcfml$')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        impls.output = self.output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        impl = impls.get_implementations_by_file('assets/s60/implml/predefinedcontacts.gcfml')[0]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        self.assertEquals(impl.list_output_files(), ['output\\private\\2000BEE5\\predefinedcontacts.xml'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
    unittest.main()