configurationengine/source/scripts/tests/unittest_merge.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
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
Test the configuration
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import os
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import shutil
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import zipfile
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import __init__
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
from testautomation.base_testcase import BaseTestCase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
from testautomation import unzip_file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
from scripttest_common import get_cmd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
    from cElementTree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
    try:    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
        from elementtree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
    except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
            from xml.etree import cElementTree as ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
        except ImportError:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
            from xml.etree import ElementTree
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
TESTDATA_DIR = os.path.join(ROOT_PATH, 'testdata/merge')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
TEMP_DIR = os.path.join(ROOT_PATH, 'temp/merge')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
TEST_PROJECT_CPF = os.path.join(ROOT_PATH, 'test_project.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
TEST_VARIANT_CPF = os.path.join(ROOT_PATH, 'test_variant.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
TEST_VARIANT_CPF_V1 = os.path.join(TESTDATA_DIR, 'test_variant_v1.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
TEST_VARIANT_CPF_V2 = os.path.join(TESTDATA_DIR, 'test_variant_v2.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
class TestMerge(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    def _prepare_workdir_with_project(self, workdir, expected_zip=None):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        Prepare a working directory for running a test.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        @param workdir: Sub-directory of the workdir.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        @param expected_zip: Zip file containing expected data that should
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
            be extracted under the workdir, can be None. The path should be
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
            relative to testdata/merge.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        @return: Tuple (test_project_abs, expected_dir_abs). expected_dir_abs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
            will be None if expected_zip was None.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        workdir = os.path.join(TEMP_DIR, workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
        self.recreate_dir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        # Unzip the test project
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        test_project_dir = os.path.join(workdir, 'test_project')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        unzip_file.unzip_file(TEST_PROJECT_CPF, test_project_dir, delete_if_exists=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        # Check that it was unzipped correctly
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        paths = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            "Layer1/", "Layer2/","Layer3/", "Layer4/", "Layer5/",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
            "root1.confml", "root2.confml", "root3.confml", "root4.confml", "root5.confml"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        for path in paths:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
            self.assert_exists_and_contains_something(os.path.join(test_project_dir, path))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        expected_dir = None
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        # Unzip the expected data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        if expected_zip:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
            expected_zip = os.path.join(TESTDATA_DIR, expected_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
            expected_dir = os.path.join(workdir, 'expected')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
            unzip_file.unzip_file(expected_zip, expected_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        return test_project_dir, expected_dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    def test_get_help(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        cmd = '%s -h' % get_cmd('merge')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        lines = out.split('\r\n')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        self.assertTrue('Options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        self.assertTrue('  Merge options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
    def test_merge_cpf_last_layer_to_project(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        project_dir, expected_dir = self._prepare_workdir_with_project('last_layer_from_cpf', 'last_layer_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        self.set_modification_reference_time(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        self.set_modification_reference_time(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1 -v 5'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        self.assert_modified(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        self.assert_not_modified(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
    def test_merge_cpf_last_layer_to_project_with_rename(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        project_dir, expected_dir = self._prepare_workdir_with_project('last_layer_from_cpf_rename', 'last_layer_rename_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        self.set_modification_reference_time(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self.set_modification_reference_time(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1 -v 5 --rename'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        self.assert_modified(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        self.assert_not_modified(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
    def test_merge_cpf_multiple_last_layers_to_project(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        project_dir, expected_dir = self._prepare_workdir_with_project('multiple_last_layers_from_cpf', 'multiple_last_layers_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        self.set_modification_reference_time(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        self.set_modification_reference_time(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        # Pass the merged layers in random order to check that it doesn't affect
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        # the output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -3 -l -1 -l -2 -v 5'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        self.assert_modified(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        self.assert_not_modified(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
    def test_merge_cpf_multiple_mixed_layers_to_project(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        project_dir, expected_dir = self._prepare_workdir_with_project('mixed_multiple_last_layers_from_cpf', 'multiple_last_layers_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        self.set_modification_reference_time(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        self.set_modification_reference_time(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -3 -l -1 -l 4 -l 5 -v 5'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self.assert_modified(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        self.assert_not_modified(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
                
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
    def test_merge_layer_to_cpf(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        project_cpf = os.path.join(ROOT_PATH, "temp/merge/layer_to_cpf/project.cpf")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        self.create_dir_for_file_path(project_cpf)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        shutil.copy2(TEST_PROJECT_CPF, project_cpf)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        self.set_modification_reference_time(project_cpf)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        self.set_modification_reference_time(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1 -v 5'  % (get_cmd('merge'), project_cpf, TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        def check(entry):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
            zf = zipfile.ZipFile(project_cpf, "r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
            try:     self.assertTrue(entry in zf.namelist(), "Entry '%s' not in zip file '%s'" % (entry, project_cpf))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
            finally: zf.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        check('variant/root.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        check('variant/confml/data.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        check('variant/content/empty/')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        self.assertEquals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
            self.get_xinclude_list(self.read_data_from_zip_file(project_cpf, "root5.confml")),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
            ["Layer1/root.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
             "Layer2/root.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
             "Layer3/root.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
             "Layer4/root.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
             "Layer5/root.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
             "variant/root.confml"])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        self.assert_modified(project_cpf)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        self.assert_not_modified(TEST_VARIANT_CPF)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
    def test_merge_cpf_last_layer_two_versions(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        project_dir, expected_dir = self._prepare_workdir_with_project('last_layer_two_versions', 'last_layer_variant_v1_v2_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF_V1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF_V2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
    def test_merge_cpf_last_layer_two_versions_overwrite_layer(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        project_dir, expected_dir = self._prepare_workdir_with_project('last_layer_two_versions_overwrite', 'last_layer_variant_v2_expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1 --merge-policy overwrite-layer'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF_V1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        cmd = '%s -p "%s" -r "%s" -c root5.confml -l -1 --merge-policy overwrite-layer'  % (get_cmd('merge'), project_dir, TEST_VARIANT_CPF_V2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        self.assert_dir_contents_equal(expected_dir, project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
    def get_xinclude_list(self, confml_file_data):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
        Read the XInlude element list from a ConfML file and assert that.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        @param confml_file_data: The raw binary data of the ConfML file.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        root_elem = ElementTree.fromstring(confml_file_data)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        # Make sure that we have a ConfML file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        self.assertTrue(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
            root_elem.tag in ("{http://www.s60.com/xml/confml/1}configuration", "{http://www.s60.com/xml/confml/2}configuration"),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
            "The root element is not a ConfML configuration element (tag is '%s')" % root_elem.tag)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        # Read the xi:include list
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        for elem in root_elem.findall("{http://www.w3.org/2001/XInclude}include"):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
            result.append(elem.get("href"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
# =============================================================================
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
def run_in_workdir(workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
    Decorator for running asset merge tests in a specific working directory.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
    workdir_abs = os.path.join(ROOT_PATH, 'temp/merge/assetmerge', workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    def decorate(testmethod):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        def run_test(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
            assert isinstance(self, TestAssetMerge)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
            # Prepare the working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
            workdir = self.prepare_workdir(workdir_abs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            # Go into the working directory to run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
            orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            os.chdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
            try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
                # Run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
                testmethod(self)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
            finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
                # Revert back to the original working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
                os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        return run_test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
    return decorate
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
class TestAssetMerge(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
    Tests for merging an asset (basically a single configuration layer) into
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
    a specific layer in an existing project.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
    TESTDATA_ZIP = os.path.join(ROOT_PATH, 'testdata/merge/assetmerge/data.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
    EXPECTED_ZIP = os.path.join(ROOT_PATH, 'testdata/merge/assetmerge/expected.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
    def prepare_workdir(self, workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
        Prepare a working directory with all needed test data into
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
        the given sub-dir under the temporary directory.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
        @param workdir: Absolute path to the working directory.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        assert os.path.isabs(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        # Remove the working directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
        self.remove_if_exists(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
        # Extract asset merge test data into the working dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
        unzip_file.unzip_file(self.TESTDATA_ZIP, workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        # Extract expected data
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
        unzip_file.unzip_file(self.EXPECTED_ZIP, os.path.join(workdir, 'expected'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
        return workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
    def assert_is_expected(self, subdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
        Assert that the current main_project is equal to the expected data.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
        current_dir = os.path.abspath('main_project')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        expected_dir = os.path.abspath(os.path.join('expected', subdir))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
        self.assert_exists_and_contains_something(expected_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        self.assert_dir_contents_equal(current_dir, expected_dir, ['.svn', '.metadata'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
    @run_in_workdir('merge_asset1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
    def test_merge_asset1(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        self.assert_is_expected('asset1_merged')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
    @run_in_workdir('merge_and_update_asset1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
    def test_merge_and_update_asset1(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
        self.assert_is_expected('asset1_merged')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v2 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        self.assert_is_expected('asset1_merged_and_updated')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
    @run_in_workdir('merge_both')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
    def test_merge_both(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset2_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
        self.assert_is_expected('both_merged')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
    @run_in_workdir('merge_both_and_update')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
    def test_merge_both_and_update(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset2_v1 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
        self.assert_is_expected('both_merged')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset1_v2 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
        self.run_command('%s -p main_project --targetlayer assets/test/root.confml -r asset2_v2 --sourcelayer root.confml' % get_cmd('merge'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
        self.assert_is_expected('both_merged_and_updated')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
class TestMergeInvalidParameters(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
    def _run_test(self, args, expected_msg):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
        if not isinstance(args, basestring):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
            args = ' '.join(args)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
        cmd = get_cmd('merge') + ' ' + args
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
        # Note: The following run_command() should really expect the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
        #       return code 2, but for some reason when running from the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
        #       standalone test set, the return value is 0 for some cases
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
        #       (specifically, the ones that don't use parser.error() to
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
        #       exit the program)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
        out = self.run_command(cmd, expected_return_code = None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
        self.assertTrue(expected_msg in out,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
                        "Expected message '%s' not in output ('%s')" % (expected_msg, out))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
    def test_no_remote(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
        self._run_test('', "Remote project must be given")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
    def test_source_root_and_target_layer(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
        self._run_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
           "-p x --targetlayer t.confml -r y --sourceconfiguration s.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
           "Cannot merge a configuration into a layer!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
    def test_source_layer_and_target_root(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self._run_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
           "-p x --configuration t.confml -r y --sourcelayer s.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
           "Merging a layer into a configuration is not supported at the moment!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
    def test_source_layer_and_layer_indices(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
        self._run_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
            ["-p x --configuration t.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
             "-r y --sourcelayer s.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
             "--layer -1 --layer -2"],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
            "Specifying layer indices using --layer is not supported when using --sourcelayer or --targetlayer!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
    def test_target_layer_and_layer_indices(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
        self._run_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
            ["-p x --targetlayer t.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
             "-r y --sourceconfiguration s.confml",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
             "--layer -1 --layer -2"],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
            "Specifying layer indices using --layer is not supported when using --sourcelayer or --targetlayer!")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
    def test_invalid_source_layer(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
        source_dir = os.path.join(TEMP_DIR, 'invalid_source_layer/source_proj')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        target_dir = os.path.join(TEMP_DIR, 'invalid_source_layer/target_proj')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
        self.recreate_dir(source_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
        self.recreate_dir(target_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
        self._run_test('-p "%s" --targetlayer foo/root.confml -r "%s" --sourcelayer foo/bar/root.confml' % (source_dir, target_dir),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
                       "Could not merge: Layer root 'foo/bar/root.confml' not found in source project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
    def test_invalid_source_config(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        source_dir = os.path.join(TEMP_DIR, 'invalid_source_root/source_proj')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        target_dir = os.path.join(TEMP_DIR, 'invalid_source_root/target_proj')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        self.recreate_dir(source_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
        self.recreate_dir(target_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
        self._run_test('-p "%s" -c foo_root.confml -r "%s" --sourceconfiguration foobar_root.confml' % (source_dir, target_dir),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
                       "Could not merge: Configuration root 'foobar_root.confml' not found in source project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
    def test_invalid_merge_policy(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
        self._run_test('-p x -r y --merge-policy foopolicy',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
                       "Invalid merge policy: foopolicy")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
    def test_invalid_source_layer_root(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
        self._run_test('-p x -r y --sourcelayer foobar --targetlayer test/foo.confml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
                       "Source layer root should be a .confml file")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
    def test_invalid_target_layer_root(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
        self._run_test('-p x -r y --sourcelayer test/foo.confml --targetlayer foobar',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
                       "Target layer root should be a .confml file")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
    unittest.main()