configurationengine/source/plugins/common/ConeContentPlugin/contentplugin/tests/unittest_content_plugin.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 #
       
     2 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 
       
    17 import unittest
       
    18 import os, shutil
       
    19 import sys
       
    20 import logging
       
    21 import __init__
       
    22 		
       
    23 from cone.public import exceptions,plugin,api,container
       
    24 from cone.storage import filestorage
       
    25 from contentplugin import contentml
       
    26 
       
    27 # Hardcoded value of testdata folder that must be under the current working dir
       
    28 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
       
    29 testdata  = os.path.join(ROOT_PATH,'contentproject')
       
    30 
       
    31 
       
    32 class TestContentPlugin(unittest.TestCase):
       
    33 	    
       
    34     def test_create_copy_list_from_datacontainer_with_test(self):
       
    35         '''
       
    36         Test that the loading of the plugins works
       
    37         '''
       
    38         data = container.DataContainer()
       
    39         data.add_value('test/test.txt','/foo/content/test/test.txt')
       
    40         data.add_value('test/test.txt','/bar/content/test/test.txt')
       
    41         data.add_value('product/aaa.txt','/foo/content/product/aaa.txt')
       
    42         data.add_value('images/kuva.jpg','/foo/content/images/kuva.jpg')
       
    43         data.add_value('include/hide.iby','/bar/content/include/hide.iby')
       
    44         impl = contentml.ContentImpl("foo",None)
       
    45         copylist = impl.create_copy_list(content=data, input='test',output='content')
       
    46         self.assertEquals(copylist[0][1],'content/test.txt')
       
    47 
       
    48     def test_create_copy_list_from_datacontainer_with_defauls(self):
       
    49         '''
       
    50         Test that the loading of the plugins works
       
    51         '''
       
    52         data = container.DataContainer()
       
    53         data.add_value('test/test.txt','/foo/content/test/test.txt')
       
    54         data.add_value('test/test.txt','/bar/content/test/test.txt')
       
    55         data.add_value('product/aaa.txt','/foo/content/product/aaa.txt')
       
    56         data.add_value('images/kuva.jpg','/foo/content/images/kuva.jpg')
       
    57         data.add_value('include/hide.iby','/bar/content/include/hide.iby')
       
    58         impl = contentml.ContentImpl("foo",None)
       
    59         copylist = impl.create_copy_list(content=data)
       
    60         self.assertEquals(copylist[0][0],'/bar/content/test/test.txt')
       
    61         self.assertEquals(copylist[0][1],'test/test.txt')
       
    62         self.assertEquals(copylist[1][0],'/bar/content/include/hide.iby')
       
    63         self.assertEquals(copylist[1][1],'include/hide.iby')
       
    64 
       
    65     def test_create_copy_list_from_datacontainer_with_filters(self):
       
    66         '''
       
    67         Test that the loading of the plugins works
       
    68         '''
       
    69         data = container.DataContainer()
       
    70         data.add_value('test/test.txt','/foo/content/test/test.txt')
       
    71         data.add_value('test/test.txt','/bar/content/test/test.txt')
       
    72         data.add_value('product/aaa.txt','/foo/content/product/aaa.txt')
       
    73         data.add_value('images/kuva.jpg','/foo/content/images/kuva.jpg')
       
    74         data.add_value('include/hide.iby','/bar/content/include/hide.iby')
       
    75         impl = contentml.ContentImpl("foo",None)
       
    76         copylist = impl.create_copy_list(content=data,input='include',include_filter='*.iby')
       
    77         self.assertEquals(copylist[0][0],'/bar/content/include/hide.iby')
       
    78         self.assertEquals(copylist[0][1],'hide.iby')
       
    79 
       
    80 class TestContentPluginOnFileStorage(unittest.TestCase):    
       
    81     def setUp(self):
       
    82         self.curdir = os.getcwd()
       
    83         self.output = 'output'
       
    84         self.workdir = 'workdir'
       
    85         if not os.path.exists(self.workdir):
       
    86             os.mkdir(self.workdir)
       
    87         os.chdir(self.workdir)
       
    88         pass
       
    89 
       
    90     def tearDown(self):
       
    91     	os.chdir(self.curdir)
       
    92         if os.path.exists(self.workdir):
       
    93             shutil.rmtree(self.workdir)
       
    94             pass
       
    95 
       
    96     def load_config(self, config='product.confml'):
       
    97         fs = filestorage.FileStorage(testdata)
       
    98         p = api.Project(fs)
       
    99         return p.get_configuration(config)
       
   100     
       
   101     def load_impl(self, resource_ref, config='product.confml'):
       
   102         configuration = self.load_config(config)
       
   103         impls = plugin.ImplFactory.get_impls_from_file(resource_ref, configuration)
       
   104         self.assertEquals(len(impls), 1)
       
   105         impl = impls[0]
       
   106         impl.set_output_root(self.output)
       
   107         return impl
       
   108 
       
   109     def test_configuration_parse_resource(self):
       
   110         impl = self.load_impl('assets/s60/implml/test_filter_both.content')
       
   111         self.assertEquals(impl.outputs[0].dir,'content')
       
   112         self.assertEquals(impl.outputs[0].inputs[0].include,{'pattern': ['prod']})
       
   113         self.assertEquals(impl.outputs[0].inputs[0].exclude,{'pattern': ['.svn']})
       
   114         self.assertEquals(impl.get_tags(), {'target': ['rofs3', 'uda']})
       
   115         self.assertEquals(impl.has_tag({'target':['rofs3']}), True)
       
   116 
       
   117 
       
   118     def test_configuration_parse_content2(self):
       
   119         impl = self.load_impl('assets/s60/implml/content2_with_tags.content')
       
   120         self.assertEquals(impl.outputs[0].dir,'content')
       
   121         self.assertEquals(impl.outputs[0].inputs[0].include,{'files': ['test/override.txt, test/s60.txt']})
       
   122         self.assertEquals(impl.get_tags(), {'target': ['rofs3', 'uda']})
       
   123         self.assertEquals(impl.has_tag({'target':['rofs3']}), True)
       
   124 
       
   125     def test_configuration_parse_content2_with_tag_refs(self):
       
   126         impl = self.load_impl('assets/s60/implml/content2_with_tags_refs.content')
       
   127         self.assertEquals(impl.get_tags(), {'target': ['rofs3']})
       
   128         self.assertEquals(impl.has_tag({'target':['rofs3']}), True)
       
   129 
       
   130     def test_configuration_parse_and_filter_implementation_with_tags(self):
       
   131         fs = filestorage.FileStorage(testdata)
       
   132         p = api.Project(fs)
       
   133         config = p.get_configuration('product.confml')
       
   134         impls = plugin.get_impl_set(config,'\.content$')
       
   135         impls_rofs3 = impls.filter_implementations(tags={'target':['rofs3']})
       
   136         self.assertEquals(len(list(impls_rofs3)),3)
       
   137         
       
   138     def test_configuration_parse_content_with_include_files(self):
       
   139         impl = self.load_impl('assets/s60/implml/copy_files.content')
       
   140         self.assertEquals(impl.outputs[0].inputs[0].include['files'],['test/override.txt, test/s60.txt'])
       
   141 
       
   142     def test_configuration_content_get_full_copy_list(self):
       
   143         impl = self.load_impl('assets/s60/implml/copy_files.content')
       
   144         files = impl.get_full_copy_list()
       
   145         self.assertEquals(files[0],('family/content/test/override.txt', 'output/content/test/override.txt', False))
       
   146 
       
   147     def test_configuration_content_list_output_files(self):
       
   148         config = self.load_config()
       
   149         impls = plugin.get_impl_set(config,'\.content$')
       
   150         impls.output = self.output
       
   151         files = impls.list_output_files()
       
   152         self.assertTrue('output/content/test/override.txt' in files)
       
   153 
       
   154     def test_configuration_content_list_output_files_with_refs_filter(self):
       
   155         impl = self.load_impl('assets/s60/implml/test_content_with_sequence_refs.content')
       
   156         files = impl.list_output_files()
       
   157         self.assertEquals(files[0],'output/content/override.txt')
       
   158 
       
   159     def test_configuration_content_list_output_files_with_exclude_filter(self):
       
   160         impl = self.load_impl('assets/s60/implml/test_filter_both.content')
       
   161         files = impl.list_output_files()
       
   162         self.assertEquals(files[0],'output/content/prodX/jee/ProdX_specific.txt')
       
   163 #
       
   164     def test_configuration_get_input_with_ref(self):
       
   165         impl = self.load_impl('assets/s60/implml/test_content_with_refs.content')
       
   166         self.assertEquals(impl.outputs[0].dir, 'content')
       
   167         self.assertEquals(impl.outputs[0].inputs[0].dir, 'content')
       
   168 
       
   169     def test_configuration_get_include_with_refs(self):
       
   170         impl = self.load_impl('assets/s60/implml/test_content_with_sequence_refs.content')
       
   171         self.assertEquals(impl.outputs[0].inputs[0].include['files'], ['test/override.txt'])
       
   172         self.assertEquals(impl.list_output_files(), ['output/content/override.txt'])
       
   173 
       
   174     def test_configuration_get_include_with_refs(self):
       
   175         impl = self.load_impl('assets/s60/implml/copy.content')
       
   176         expected = ['output/content/prodX/jee/ProdX_specific.txt', 
       
   177                     'output/content/test/shout.txt', 
       
   178                     'output/content/test/override.txt', 
       
   179                     'output/content/test/s60.txt',
       
   180                     'output/content/test/test_CAP_letters.txt']
       
   181         actual = impl.list_output_files()
       
   182         self.assertEquals(sorted(actual), sorted(expected))
       
   183 
       
   184     def test_configuration_content_create_output(self):
       
   185         impl = self.load_impl('assets/s60/implml/copy.content')
       
   186         impl.set_output_root(self.output)
       
   187         impl.logger.setLevel(logging.DEBUG)
       
   188         impl.create_output()
       
   189         self.assertTrue(os.path.exists(impl.output))
       
   190         self.assertTrue(os.path.exists(os.path.join(impl.output,'content/prodX/jee/ProdX_specific.txt')))
       
   191 
       
   192     def test_configuration_content_generate(self):
       
   193         config = self.load_config()
       
   194         impls = plugin.get_impl_set(config,'\.content$')
       
   195         impls.output = self.output
       
   196         results = impls.generate()
       
   197         self.assertTrue(os.path.exists(impls.output))
       
   198         self.assertTrue(os.path.exists(os.path.join(impls.output,'content/prodX/jee/ProdX_specific.txt')))
       
   199 
       
   200     def test_configuration_content_generate_with_include_refs(self):
       
   201         impl = self.load_impl('assets/s60/implml/test_content_with_sequence_refs.content')
       
   202         impl.set_output_root(self.output)
       
   203         results = impl.generate()
       
   204         self.assertTrue(os.path.exists(impl.output))
       
   205         self.assertTrue(os.path.exists(os.path.join(impl.output,'content/override.txt')))
       
   206 
       
   207     def test_configuration_content_generate_with_multi_output(self):
       
   208         impl = self.load_impl('assets/s60/implml/content2_with_multi_outputs.content')
       
   209         impl.set_output_root(self.output)
       
   210         results = impl.generate()
       
   211         self.assertTrue(os.path.exists(impl.output))
       
   212         self.assertTrue(os.path.exists(os.path.join(impl.output,'content/test/override.txt')))
       
   213         self.assertTrue(os.path.exists(os.path.join(impl.output,'include/s60.txt')))
       
   214 
       
   215     def test_configuration_content_generate_with_refs(self):
       
   216         impl = self.load_impl('assets/s60/implml/test_content_with_refs2.content')
       
   217         impl.set_output_root(self.output)
       
   218         results = impl.generate()
       
   219         self.assertTrue(os.path.exists(impl.output))
       
   220         self.assertTrue(os.path.exists(os.path.join(impl.output,'content2p1/content2p2/override.txt')))
       
   221         
       
   222     def test_configuration_content_generate_with_refs2(self):
       
   223         impl = self.load_impl('assets/s60/implml/test_content_with_refs3.content')
       
   224         impl.set_output_root(self.output)
       
   225         results = impl.generate()
       
   226         self.assertTrue(os.path.exists(impl.output))
       
   227         self.assertTrue(os.path.exists(os.path.join(impl.output,'example/content2p2/override.txt')))
       
   228        
       
   229     def test_configuration_content_generate_capital_letters(self):
       
   230         impl = self.load_impl('assets/s60/implml/test_content_capital_file_input.content')
       
   231         impl.set_output_root(self.output)
       
   232         results = impl.generate()
       
   233         self.assertTrue(os.path.exists(impl.output))
       
   234         self.assertTrue(os.path.exists(os.path.join(impl.output,'content/test_CAP_letters.txt')))
       
   235 
       
   236     def test_get_refs(self):
       
   237         def check(filename, expected_refs):
       
   238             impl = self.load_impl('assets/s60/implml/' + filename)
       
   239             actual_refs = impl.get_refs()
       
   240             
       
   241             if expected_refs is None:
       
   242                 self.assertEquals(actual_refs, None)
       
   243             else:
       
   244                 self.assertTrue(actual_refs is not None)
       
   245                 self.assertEquals(sorted(actual_refs), sorted(expected_refs))
       
   246        
       
   247         check('content2_with_multi_outputs.content', None)
       
   248         check('content2_with_tags_refs.content', None)
       
   249         check('content2_with_tags.content', None)
       
   250         check('copy_files.content', None)
       
   251         check('copy.content', None)
       
   252         check('test_content_with_refs.content', ['content.inputdir'])
       
   253         check('test_content_with_refs2.content', ['content.inputdir2'])
       
   254         check('test_content_with_refs3.content', ['content.inputdir2'])
       
   255         check('test_content_with_sequence_refs.content', ['ContentFiles.contentfile.fileelem.localPath'])
       
   256         check('test_external_input.content', None)
       
   257         check('test_external_with_ref.content', ['CTD_Special.InputPath'])
       
   258         check('test_filter_both.content', None)
       
   259 
       
   260 if __name__ == '__main__':
       
   261     unittest.main()