diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/scripts/tests/unittest_info.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/scripts/tests/unittest_info.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,228 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +""" +Test the configuration +""" +import unittest +import string +import sys +import os +import subprocess +import __init__ +from testautomation.base_testcase import BaseTestCase +from scripttest_common import get_cmd + +ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) +testproject = os.path.join(ROOT_PATH,'test_project.cpf') +temp_dir = os.path.join(ROOT_PATH, 'temp/info') +VALUE_REPORT_PROJECT = os.path.join(ROOT_PATH, 'testdata/info/value_report_project') + +class TestInfo(BaseTestCase): + + def test_get_help(self): + cmd = '%s -h' % get_cmd('info') + out = self.run_command(cmd) + lines = out.split('\r\n') + self.assertTrue('Options:' in lines) + self.assertTrue(' Info options:' in lines) + + + def test_get_project_info(self): + self.set_modification_reference_time(testproject) + cmd = '%s -p "%s"' % (get_cmd('info'), testproject) + out = self.run_command(cmd) + + lines = out.split('\r\n') + self.assertTrue('Configurations in the project.' in lines) + self.assertTrue('root1.confml' in lines) + self.assertTrue('root2.confml' in lines) + self.assertTrue('root3.confml' in lines) + self.assertTrue('root4.confml' in lines) + self.assertTrue('root5.confml' in lines) + + self.assert_not_modified(testproject) + + def test_api_report(self): + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/api_report.html') + REPORT_FILE = os.path.join(temp_dir, 'api_report.html') + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" -c root3.confml --report-type api --report "%s"' % (get_cmd('info'), testproject, REPORT_FILE) + out = self.run_command(cmd) + + # Ignore the file links, because their value depends on the current directory + ignores= [r'.*'] + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE, ignores) + + def test_impl_report(self): + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/impl_report.html') + REPORT_FILE = os.path.join(temp_dir, 'impl_report.html') + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" -c root3.confml --report-type impl --report "%s"' % (get_cmd('info'), testproject, REPORT_FILE) + out = self.run_command(cmd) + + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE) + + def test_impl_report_with_impl_containers(self): + PROJECT = os.path.join(ROOT_PATH, 'generation_test_project') + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/impl_report_with_containers.html') + REPORT_FILE = os.path.join(temp_dir, 'impl_report_with_containers.html') + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" -c root.confml --report-type impl --report "%s"' % (get_cmd('info'), PROJECT, REPORT_FILE) + out = self.run_command(cmd) + + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE) + + def test_content_report(self): + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/content_report.html') + REPORT_FILE = os.path.join(temp_dir, 'content_report.html') + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" -c root5.confml --report-type content --report "%s"' % (get_cmd('info'), testproject, REPORT_FILE) + out = self.run_command(cmd) + + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE) + + # -------------------------------------------------- + # Tests for invalid configuration argument detection + # -------------------------------------------------- + + def _run_test_invalid_configuration_args(self, config_args, expected_msg): + REPORT_FILE = os.path.join(temp_dir, "dummy_report.html") + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" %s --report "%s"' \ + % (get_cmd('info'), VALUE_REPORT_PROJECT, config_args, REPORT_FILE) + # Note: The following run_command() should really expect the + # return code 2, but for some reason when running from the + # standalone test set, the return value is 0 + out = self.run_command(cmd, expected_return_code = None) + self.assertFalse(os.path.exists(REPORT_FILE)) + + self.assertTrue(expected_msg in out, + "Expected message '%s' not in output ('%s')" % (expected_msg, out)) + + def test_invalid_single_configuration(self): + self._run_test_invalid_configuration_args( + '--configuration nonexistent_root.confml', + "No such configuration: nonexistent_root.confml") + + def test_invalid_multi_configuration(self): + self._run_test_invalid_configuration_args( + '--configuration product_root.confml --configuration nonexistent_root.confml', + "No such configuration: nonexistent_root.confml") + + def test_invalid_wildcard_configuration(self): + self._run_test_invalid_configuration_args( + '--config-wildcard nonexistent*.confml', + "No matching configurations for wildcard(s) and/or pattern(s).") + + def test_invalid_regex_configuration(self): + self._run_test_invalid_configuration_args( + '--config-regex nonexistent.*\\.confml', + "No matching configurations for wildcard(s) and/or pattern(s).") + + def test_invalid_view_file(self): + self._run_test_invalid_configuration_args( + '-c product_root.confml --view-file nonexistent.confml', + "No such file: nonexistent.confml") + + + # ---------------------- + # Tests for value report + # ---------------------- + + def _run_test_value_report(self, output, expected, args, rep_type='value'): + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/%s' % expected) + REPORT_FILE = os.path.join(temp_dir, output) + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" %s --report-type %s --report "%s"' \ + % (get_cmd('info'), VALUE_REPORT_PROJECT, args, rep_type, REPORT_FILE) + out = self.run_command(cmd) + + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE) + + def test_value_report_configs_with_wildcard(self): + self._run_test_value_report( + output = 'value_report_langpacks_wildcard.html', + expected = 'value_report_langpacks.html', + args = '--config-wildcard product_langpack_*_root.confml') + + def test_value_report_configs_with_regex(self): + self._run_test_value_report( + output = 'value_report_langpacks_regex.html', + expected = 'value_report_langpacks.html', + args = '--config-regex product_langpack_\\d{2}_root.confml') + + def test_value_report_multi_config(self): + self._run_test_value_report( + output = 'value_report_langpacks_regex.html', + expected = 'value_report_langpacks.html', + args = '-c product_langpack_01_root.confml '\ + '-c product_langpack_02_root.confml '\ + '-c product_langpack_03_root.confml') + + def test_value_report_single_config(self): + self._run_test_value_report( + output = 'value_report_single.html', + expected = 'value_report_single.html', + args = '--configuration product_root.confml') + + def test_value_report_multi_config_mixed_args(self): + self._run_test_value_report( + output = 'value_report_multi_mixed.html', + expected = 'value_report_multi_mixed.html', + args = '-c product_root.confml --config-wildcard product_langpack_*_root.confml') + + def test_value_report_single_config_with_view(self): + VIEW_FILE = os.path.join(ROOT_PATH, 'testdata/info/test_view.confml') + self._run_test_value_report( + output = 'value_report_single_with_view.html', + expected = 'value_report_single_with_view.html', + args = '--configuration product_root.confml --view-file "%s"' % VIEW_FILE) + + def test_value_report_single_config_with_included_view(self): + VIEW_FILE = os.path.join(ROOT_PATH, 'testdata/info/include_test_view.confml') + self._run_test_value_report( + output = 'value_report_single_with_included_view.html', + expected = 'value_report_single_with_view.html', + args = '--configuration product_root.confml --view-file "%s"' % VIEW_FILE) + + def test_value_report_csv(self): + self._run_test_value_report( + output = 'value_report.csv', + expected = 'value_report.csv', + args = '--config-wildcard product_langpack_*_root.confml', + rep_type = 'value_csv') + + def test_value_report_csv_with_special_chars(self): + self._run_test_value_report( + output = 'value_report_special_chars.csv', + expected = 'value_report_special_chars.csv', + args = '--configuration csv_test_root.confml', + rep_type = 'value_csv') + + def test_value_report_custom_template(self): + TEMPLATE_FILE = os.path.join(ROOT_PATH, 'testdata/info/custom_value_report_template.html') + EXPECTED_FILE = os.path.join(ROOT_PATH, 'testdata/info/expected/value_report_custom.html') + REPORT_FILE = os.path.join(temp_dir, 'value_report_custom.html') + self.remove_if_exists(REPORT_FILE) + cmd = '%s -p "%s" --template "%s" --report "%s" -c product_root.confml' \ + % (get_cmd('info'), VALUE_REPORT_PROJECT, TEMPLATE_FILE, REPORT_FILE) + out = self.run_command(cmd) + + self.assert_file_contents_equal(EXPECTED_FILE, REPORT_FILE) + +if __name__ == '__main__': + unittest.main()