configurationengine/source/scripts/tests/unittest_generate.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
# *-* coding: utf-8 *-*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
## 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
# @author Teemu Rytkonen
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
import sys, os, shutil, unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
import __init__
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
from testautomation.base_testcase import BaseTestCase
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
from testautomation import zip_dir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
from scripttest_common import get_cmd
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
testproject = os.path.join(ROOT_PATH,'test_project.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
rootconf = 'root3.confml'
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
class TestGenerate(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
    def test_get_help(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        cmd = '%s -h' % get_cmd('generate')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
        lines = out.split('\r\n')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
        self.assertTrue('Options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        self.assertTrue('  Generate options:' in lines)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
    def test_generate(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self.set_modification_reference_time(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        OUTPUT_DIR = os.path.join(ROOT_PATH, 'temp/gen1/output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        self.remove_if_exists(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        cmd = '%s -p "%s" -c "%s" -o "%s"' % (get_cmd('generate'),testproject,rootconf,OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        self.assert_exists_and_contains_something(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        self.assert_not_modified(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
    def test_generate_with_report(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        self.set_modification_reference_time(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        OUTPUT_DIR  = os.path.join(ROOT_PATH, 'temp/gen2/output')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        REPORT_FILE = os.path.join(ROOT_PATH, 'temp/gen2/report.html')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        self.remove_if_exists([OUTPUT_DIR, REPORT_FILE])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        cmd = '%s -p "%s" -c "%s" -o "%s" -r "%s"' % (get_cmd('generate'),testproject,rootconf, OUTPUT_DIR, REPORT_FILE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
        self.assert_exists_and_contains_something(OUTPUT_DIR)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        self.assert_exists_and_contains_something(REPORT_FILE)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        self.assert_not_modified(testproject)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
       
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
    def test_generate_with_report_using_custom_template(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
            output_dir    = 'temp/gen3/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
            report_file   = 'temp/gen3/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
            template_path = 'template.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
    def test_generate_with_report_using_custom_template_in_relative_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
            output_dir    = 'temp/gen4/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            report_file   = 'temp/gen4/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
            template_path = 'test_template/template2.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
    def test_generate_with_report_using_custom_template_in_relative_dir2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
            output_dir    = 'temp/gen5/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
            report_file   = 'temp/gen5/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
            template_path = '../tests/test_template/template2.csv')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
    def test_generate_with_report_using_custom_template_in_absolute_dir(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
            output_dir    = 'temp/gen6/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
            report_file   = 'temp/gen6/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
            template_path = os.path.join(ROOT_PATH,'test_template/template2.csv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    def _run_test_generate_with_report_using_custom_template(self,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        output_dir, report_file, template_path, project=testproject):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        # Since we are testing also relative paths here, we need
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
        # to run the test in the same directory as the script
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        os.chdir(ROOT_PATH)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
            self.set_modification_reference_time(project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
            self.remove_if_exists([output_dir, report_file])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
            cmd = '%s -p "%s" -c "%s" -o "%s" -r "%s" -t "%s"' % (get_cmd('generate'),project,rootconf, output_dir, report_file, template_path)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
            out = self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
            self.assert_exists_and_contains_something(output_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
            self.assert_exists_and_contains_something(report_file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
            self.assert_not_modified(project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
    def test_generate_with_report_and_invalid_refs_in_data(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        self._run_test_generate_with_report_using_custom_template(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
            project       = os.path.join(ROOT_PATH, 'testdata/generate/test_project_invalid_data_refs.zip'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
            output_dir    = 'temp/gen7/output',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
            report_file   = 'temp/gen7/report.csv',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
            template_path = os.path.join(ROOT_PATH,'test_template/template2.csv'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
class TestGenerateAllImplsOnLastLayer(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
    def _prepare_workdir(self, workdir):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        workdir = os.path.join(ROOT_PATH, workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        self.recreate_dir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        # Any needed extra preparation can be done here
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        return workdir
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
    def test_generate_all_impls_on_last_layer_on_file_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        self._run_test_generate_all_impls_on_last_layer('temp/gen_ll1', project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
    def test_generate_all_impls_on_last_layer_on_zip_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        project_zip = os.path.join(ROOT_PATH, "temp/generation_test_project.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        self.remove_if_exists(project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        zip_dir.zip_dir(project_dir, project_zip, [zip_dir.SVN_IGNORE_PATTERN])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        self.assert_exists_and_contains_something(project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        self._run_test_generate_all_impls_on_last_layer('temp/gen_ll2', project_zip)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    def test_generate_all_impls_on_last_layer_on_file_storage_with_report(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        project_dir = os.path.join(ROOT_PATH, "generation_test_project")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self.assert_exists_and_contains_something(project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        # Create a temp workdir and go there to run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        workdir = self._prepare_workdir('temp/gen_ll3')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        os.chdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
            cmd = '%s -p "%s" --output output --layer -1 --add-setting-file imaker_variantdir.cfg --report report.html' % (get_cmd('generate'), project_dir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
            self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        ACTUAL_REPORT = os.path.join(ROOT_PATH, 'temp/gen_ll3/report.html')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        EXPECTED_REPORT = os.path.join(ROOT_PATH, "testdata/generate/expected_report.html")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        ignores = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
            r'<tr>\s*<td>Report generated</td>\s*<td>.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
            r'<tr>\s*<td>Generation duration</td>\s*<td>.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
            r'<a href=".*">',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            r'<tr>\s*<td align="left">Project</td>\s*<td align="left">.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
            r'<tr>\s*<td align="left">Working directory</td>\s*<td align="left">.*</td>\s*</tr>',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        self.assert_file_contents_equal(ACTUAL_REPORT, EXPECTED_REPORT, ignores)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
    def _run_test_generate_all_impls_on_last_layer(self, workdir, project):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        # Create a temp workdir and go there to run the test
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        orig_workdir = os.getcwd()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
        workdir = self._prepare_workdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        os.chdir(workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
            cmd = '%s -p "%s" --output output --layer -1 --add-setting-file imaker_variantdir.cfg' % (get_cmd('generate'), project)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
            print self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
            EXPECTED_DIR = os.path.join(ROOT_PATH, "testdata/generate/expected")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
            self.assert_dir_contents_equal('output', EXPECTED_DIR, ['.svn'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
            # Check that output has also been generated to the overridden output root directory
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
            self.assert_exists_and_contains_something('overridden_output/output_rootdir_test.txt')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
            self.assert_exists_and_contains_something('overridden_output/test_subdir/output_rootdir_test.txt')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        finally:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
            os.chdir(orig_workdir)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
class TestGenerationImplFilteringByTags(BaseTestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
    def test_no_tag_filtering(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
            name     = 'no_filter',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
            filter   = '',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
            expected = ['none', 't1', 't2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
    def test_filter_by_t1(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
            name     = 't1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
            filter   = '--impl-tag target:t1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
            expected = ['t1', 't1_t2', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
    def test_filter_by_t2(self):    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
            name     = 't2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
            filter   = '--impl-tag target:t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
            expected = ['t2', 't1_t2', 't2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
    def test_filter_by_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
            name     = 't3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
            filter   = '--impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
            expected = ['t3', 't1_t3', 't2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
    def test_filter_by_t1_or_t2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
            name     = 't1_or_t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
            filter   = '--impl-tag target:t1 --impl-tag target:t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
            expected = ['t1', 't2', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
    def test_filter_by_t2_or_t3(self):        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
            name     = 't2_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
            filter   = '--impl-tag target:t2 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            expected = ['t2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
    def test_filter_by_t1_or_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
            name     = 't1_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
            filter   = '--impl-tag target:t1 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            expected = ['t1', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
    def test_filter_by_t1_or_t2_or_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
            name     = 't1_or_t2_or_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag target:t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
            expected = ['t1', 't2', 't3', 't1_t2', 't2_t3', 't1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
    def test_filter_by_t1_and_t2(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            name     = 't1_and_t2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            expected = ['t1_t2', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
    def test_filter_by_t2_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
            name     = 't2_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            filter   = '--impl-tag target:t2 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            expected = ['t2_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
    def test_filter_by_t1_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
            name     = 't1_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
            filter   = '--impl-tag target:t1 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
            expected = ['t1_t3', 't1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
    def test_filter_by_t1_and_t2_and_t3(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        self._run_tag_filtering_test(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
            name     = 't1_and_t2_and_t3',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
            filter   = '--impl-tag target:t1 --impl-tag target:t2 --impl-tag target:t3 --impl-tag-policy=AND',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
            expected = ['t1_t2_t3'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
    def _run_tag_filtering_test(self, name, filter, expected):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        PROJECT = os.path.join(ROOT_PATH, 'tag_filtering_test_project')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
        OUTPUT_ROOT = os.path.join(ROOT_PATH, 'temp/gen_tf/', name)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
        OUTPUT      = os.path.join(OUTPUT_ROOT, 'out')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        LOG         = os.path.join(OUTPUT_ROOT, 'cone.log')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        self.remove_if_exists(OUTPUT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
        cmd = '%s -p "%s" --output "%s" --log-file="%s" %s' % (get_cmd('generate'), PROJECT, OUTPUT, LOG, filter)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        self.run_command(cmd)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        self.assert_exists_and_contains_something(OUTPUT)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        expected_files = sorted([x + '.txt' for x in expected])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
        actual_files = sorted(os.listdir(OUTPUT))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
        self.assertEquals(expected_files, actual_files)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
      unittest.main()