configurationengine/source/scripts/tests/unittest_info.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /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'<td><a href="file://.*">.*</a></td>']
+        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()