summaryrefslogtreecommitdiffstats
path: root/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py
diff options
context:
space:
mode:
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py')
-rwxr-xr-xdebian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py940
1 files changed, 940 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py b/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py
new file mode 100755
index 00000000..4416e379
--- /dev/null
+++ b/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/tests/cli/test_cli_options.py
@@ -0,0 +1,940 @@
+#!/usr/bin/python
+
+"""
+test_cli_options.py
+
+Tests output generated by Uncrustifys commandline options
+(excluding actual source code formatting)
+
+:author: DanielChumak
+:license: GPL v2+
+"""
+
+from __future__ import print_function
+
+import sys
+from sys import stderr, argv, exit as sys_exit
+from os import makedirs, remove, name as os_name
+from os.path import dirname, relpath, abspath, isdir, isfile, join as path_join, split as path_split
+from shutil import rmtree, copyfile
+from subprocess import Popen, PIPE
+from io import open
+from datetime import date
+import re
+import difflib
+import argparse
+import pprint
+#import traceback
+
+if os_name == 'nt':
+ EX_OK = 0
+ EX_USAGE = 64
+ EX_SOFTWARE = 70
+ NULL_DEVICE = 'nul'
+else:
+ from os import EX_OK, EX_USAGE, EX_SOFTWARE
+ NULL_DEVICE = '/dev/null'
+
+RE_CALLSTACK = r'\[CallStack:( \w+:\w+(, \w+:\w+)*|-DEBUG NOT SET-)?\]'
+RE_DO_SPACE = (r'\n\ndo_space : WARNING: unrecognized do_space:'
+ r'\n[^\n]+\n[^\n]+\n')
+
+
+def eprint(*args, **kwargs):
+ """
+ print() wrapper that sets file=stderr
+ """
+ print(*args, file=stderr, **kwargs)
+
+
+def decode_out(text):
+ text = text.decode('utf-8')
+ text = text.replace(u'\r\n', u'\n')
+ text = text.replace(u'\r', u'\n')
+ return text
+
+
+def proc(bin_path, args_arr=()):
+ """
+ simple Popen wrapper to return std out/err utf8 strings
+
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param bin_path: string
+ path to the binary that is going to be called
+
+ :param args_arr : list/tuple
+ all needed arguments
+
+
+ :return: string, string
+ ----------------------------------------------------------------------------
+ generated output of both stdout and stderr
+
+ >>> proc("echo", "test")
+ 'test'
+ """
+ if not isfile(bin_path):
+ eprint("bin 1 is not a file: %s" % bin_path)
+ return False
+
+ # call uncrustify, hold output in memory
+ call_arr = [bin_path]
+ call_arr.extend(args_arr)
+ proc = Popen(call_arr, stdout=PIPE, stderr=PIPE)
+
+ out_txt, err_txt = proc.communicate()
+
+ return decode_out(out_txt), decode_out(err_txt)
+
+
+def write_to_output_path(output_path, result_str):
+ """
+ writes the contents of result_str to the output path
+ """
+ print("Auto appending differences to: " + output_path)
+
+ '''
+ newline = None: this outputs \r\n
+ newline = "\r": this outputs \r
+ newline = "\n": this outputs \n
+ newline = "" : this outputs \n
+ For the sake of consistency, all newlines are now being written out as \n
+ However, if the result_str itself contains \r\n, then \r\n will be output
+ as this code doesn't post process the data being written out
+ '''
+ with open(output_path, 'w', encoding="utf-8", newline="\n") as f:
+ f.write(result_str)
+
+
+def get_file_content(fp):
+ """
+ returns file content as an utf8 string or None if fp is not a file
+
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param fp: string
+ path of the file that will be read
+
+
+ :return: string or None
+ ----------------------------------------------------------------------------
+ the file content
+
+ """
+ #print("3-1: fp is "+fp)
+ #print("3-1b: gen_result_path is "+gen_result_path)
+ out = None
+
+ if isfile(fp):
+ #print("A: "+abspath(fp))
+ #print("2a is a file: %s" % fp)
+ with open(fp, encoding="utf-8", newline="\n") as f:
+ out = f.read()
+ #else:
+ #print("B: "+abspath(fp))
+ #print("2bx is Not a file: %s" % fp)
+ #for line in traceback.format_stack():
+ # print(line.strip())
+ #print("2bx+ is Not a file: %s" % fp)
+
+ return out
+
+
+def check_generated_output(gen_expected_path, gen_result_path,
+ result_manip=None, program_args=None):
+ """
+ compares the content of two files,
+
+ is intended to compare a file that was generated during a call of Uncrustify
+ with a file that has the expected content
+
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param gen_expected_path: string
+ path to a file that will be compared with the generated file
+
+ :param gen_result_path: string
+ path to the file that will be generated by Uncrustify
+
+ :param result_manip: lambda OR list or tuple of lambdas
+ optional lambda function(s) that will be applied (before the comparison)
+ on the content of the generated file,
+ the lambda function(s) should accept one string parameter
+
+ :param program_args: tuple of options
+ a collection of multiple options used to add extra functionality to the
+ script (i.e. auto apply changes or show diffs on command line)
+
+ :return: bool
+ ----------------------------------------------------------------------------
+ True or False depending on whether both files have the same content
+
+ >>> check_generated_output("/dev/null", "/dev/null")
+ True
+ """
+
+ #print("2-1: gen_expected_path is "+gen_expected_path)
+ #print("2-2: gen_result_path is "+gen_result_path)
+ gen_exp_txt = get_file_content(gen_expected_path)
+ #print("2-3: gen_exp_txt is ")
+ #+gen_exp_txt)
+ if gen_exp_txt is None:
+ return False
+
+ gen_res_txt = get_file_content(gen_result_path)
+ #print("2-4: gen_res_txt is "+gen_res_txt)
+ if gen_res_txt is None:
+ return False
+
+ #print("2: result_manip is "+result_manip)
+ #if result_manip is not None:
+ # print("2-5: result_manip is "+result_manip)
+ #else:
+ # print("2-6: result_manip is None")
+ if result_manip is not None:
+ if type(result_manip) is list or type(result_manip) is tuple:
+ for m in result_manip:
+ gen_res_txt = m(gen_res_txt)
+ else:
+ gen_res_txt = result_manip(gen_res_txt)
+
+ #print("2-7: gen_res_txt is ")
+ #print(gen_res_txt)
+ #print("2-8: gen_exp_txt is ")
+ #print(gen_exp_txt)
+ if gen_res_txt != gen_exp_txt:
+ with open(gen_result_path, 'w', encoding="utf-8", newline="") as f:
+ f.write(gen_res_txt)
+
+ if program_args.apply and program_args.auto_output_path:
+ write_to_output_path(program_args.auto_output_path, gen_res_txt)
+ return True
+ elif program_args.diff:
+ print("\n************************************")
+ print("Problem (1) with %s" % gen_result_path)
+ print("************************************")
+
+ file_diff = difflib.ndiff(gen_res_txt.splitlines(False),
+ gen_exp_txt.splitlines(False))
+
+ for line in file_diff:
+ pprint.PrettyPrinter(indent=4, width=280).pprint(line)
+
+ return False
+ else:
+ print("\nProblem (2) with %s" % gen_result_path)
+ print("use(gen): '--diff' to find out why %s %s are different"
+ % (gen_result_path, gen_expected_path))
+ return False
+
+ remove(gen_result_path)
+ #print(abspath(gen_result_path))
+
+ return True
+
+
+def check_std_output(expected_path, result_path, result_str, result_manip=None,
+ program_args=None):
+ """
+ compares output generated by Uncrustify (std out/err) with a the content of
+ a file
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param expected_path: string
+ path of the file that will be compared with the output of Uncrustify
+
+ :param result_path: string
+ path to which the Uncrustifys output will be saved in case of a mismatch
+
+ :param result_str: string (utf8)
+ the output string generated by Uncrustify
+
+ :param result_manip: lambda OR list or tuple of lambdas
+ see result_manip for check_generated_output
+
+ :param program_args: tuple of options
+ a collection of multiple options used to add extra functionality to the
+ script (i.e. auto apply changes or show diffs on command line)
+
+ :return: bool
+ ----------------------------------------------------------------------------
+ True or False depending on whether both files have the same content
+
+ """
+ exp_txt = get_file_content(expected_path)
+ if exp_txt is None:
+ return False
+
+ if result_manip is not None:
+ if type(result_manip) is list or type(result_manip) is tuple:
+ for m in result_manip:
+ result_str = m(result_str)
+ else:
+ result_str = result_manip(result_str)
+
+ if result_str != exp_txt:
+ with open(result_path, 'w', encoding="utf-8", newline="\n") as f:
+ f.write(result_str)
+
+ if program_args.apply and program_args.auto_output_path:
+ write_to_output_path(program_args.auto_output_path, result_str)
+ return True
+
+ if program_args.diff:
+ print("\n************************************")
+ print("Problem (3) with result_path is %s" % result_path)
+ print(" expected_path is %s" % expected_path)
+ print("************************************")
+
+ file_diff = difflib.ndiff(result_str.splitlines(False),
+ exp_txt.splitlines(False))
+
+ """
+ change the value of width
+ look at: If compact is false (the default)...
+ """
+ for line in file_diff:
+ pprint.PrettyPrinter(indent=4, width=280).pprint(line)
+ else:
+ print("\nProblem (4) with %s" % result_path)
+ print("use: '--diff' to find out why %s %s are different"
+ % (result_path, expected_path))
+ return False
+ return True
+
+
+def check_uncrustify_output(
+ uncr_bin,
+ program_args,
+ args_arr=(),
+ out_expected_path=None, out_result_manip=None, out_result_path=None,
+ err_expected_path=None, err_result_manip=None, err_result_path=None,
+ gen_expected_path=None, gen_result_manip=None, gen_result_path=None):
+ """
+ compares outputs generated by Uncrustify with files
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param uncr_bin: string
+ path to the Uncrustify binary
+
+ :param program_args: tuple of options
+ a collection of multiple options used to add extra functionality to the
+ script (i.e. auto apply changes or show diffs on command line)
+
+ :param args_arr: list/tuple
+ Uncrustify commandline arguments
+
+ :param out_expected_path: string
+ file that will be compared with Uncrustifys stdout output
+
+ :param out_result_manip: string
+ lambda function that will be applied to Uncrustifys stdout output
+ (before the comparison with out_expected_path),
+ the lambda function should accept one string parameter
+
+ :param out_result_path: string
+ path where Uncrustifys stdout output will be saved to in case of a
+ mismatch
+
+ :param err_expected_path: string
+ path to a file that will be compared with Uncrustifys stderr output
+
+ :param err_result_manip: string
+ see out_result_manip (is applied to Uncrustifys stderr instead)
+
+ :param err_result_path: string
+ see out_result_path (is applied to Uncrustifys stderr instead)
+
+ :param gen_expected_path: string
+ path to a file that will be compared with a file generated by Uncrustify
+
+ :param gen_result_path: string
+ path to a file that will be generated by Uncrustify
+
+ :param gen_result_manip:
+ see out_result_path (is applied, in memory, to the file content of the
+ file generated by Uncrustify instead)
+
+
+ :return: bool
+ ----------------------------------------------------------------------------
+ True if all specified files match up, False otherwise
+ """
+ # check param sanity
+ if not out_expected_path and not err_expected_path and not gen_expected_path:
+ eprint("No expected comparison file provided")
+ return False
+
+ if bool(gen_expected_path) != bool(gen_result_path):
+ eprint("'gen_expected_path' and 'gen_result_path' must be used in "
+ "combination")
+ return False
+
+ if gen_result_manip and not gen_result_path:
+ eprint("Set up 'gen_result_path' if 'gen_result_manip' is used")
+
+ out_res_txt, err_res_txt = proc(uncr_bin, args_arr)
+
+ ret_flag = True
+
+ if program_args.apply:
+ valid_path = [out_expected_path, err_expected_path, gen_expected_path]
+ program_args.auto_output_path = next(item for item in valid_path if item is not None)
+
+ if out_expected_path and not check_std_output(
+ out_expected_path, out_result_path, out_res_txt,
+ result_manip=out_result_manip,
+ program_args=program_args):
+ ret_flag = False
+
+ if program_args.apply:
+ valid_path = [err_expected_path, out_expected_path, gen_expected_path]
+ program_args.auto_output_path = next(item for item in valid_path if item is not None)
+
+ if err_expected_path and not check_std_output(
+ err_expected_path, err_result_path, err_res_txt,
+ result_manip=err_result_manip,
+ program_args=program_args):
+ ret_flag = False
+
+ #print("1: gen_expected_path is "+gen_expected_path)
+ #print("1: gen_result_path is "+gen_result_path)
+ #if gen_result_manip is not None:
+ # print("1: gen_result_manip is "+gen_result_manip)
+ #else:
+ # print("1: gen_result_manip is None")
+ #print("program_args is "+program_args)
+ if gen_expected_path and not check_generated_output(
+ gen_expected_path, gen_result_path,
+ result_manip=gen_result_manip,
+ program_args=program_args):
+ ret_flag = False
+
+ return ret_flag
+
+
+def clear_dir(path):
+ """
+ clears a directory by deleting and creating it again
+
+
+ Parameters
+ ----------------------------------------------------------------------------
+ :param path:
+ path of the directory
+
+
+ :return: void
+ """
+ if isdir(path):
+ rmtree(path)
+ makedirs(path)
+
+
+def reg_replace(pattern, replacement):
+ """
+ returns a generated lambda function that applies a regex string replacement
+
+
+ Parameters:
+ ----------------------------------------------------------------------------
+
+ :param pattern: regex pattern
+ the pattern that will be used to find targets to replace
+
+ :param replacement: string
+ the replacement that will be applied
+
+
+ :return: lambda function
+ ----------------------------------------------------------------------------
+ the generated lambda function, takes in a string on which the
+ replacement will be applied and returned
+
+ >>> l = reg_replace(r"a", "b")
+ >>> a = l("a")
+ 'b'
+ """
+ return lambda text: re.sub(pattern, replacement, text)
+
+
+def string_replace(string_target, replacement):
+ """
+ returns a generated lambda function that applies a string replacement
+
+ like reg_replace, uses string.replace() instead
+ """
+ return lambda text: text.replace(string_target, replacement)
+
+
+def s_path_join(path, *paths):
+ """
+ Wrapper for the os.path.join function, splits every path component to
+ replace it with a system specific path separator. This is for consistent
+ path separators (and also systems that don't use either '\' or '/')
+
+
+ Parameter
+ ----------------------------------------------------------------------------
+ :params path, paths: string
+ see os.path.join
+
+ :return: string
+ ----------------------------------------------------------------------------
+ a joined path, see os.path.join
+
+ >>> s_path_join('./z/d/', '../a/b/c/f')
+ r'.\z\a\b\c\f'
+ """
+ p_splits = list(path_split(path))
+ for r in map(path_split, paths):
+ p_splits.extend(r)
+ return path_join(*p_splits)
+
+
+def main(args):
+ # set working dir to script dir
+ script_dir = dirname(relpath(__file__))
+
+ parser = argparse.ArgumentParser(description='Test CLI Options')
+ parser.add_argument('--diff', action='store_true',
+ help='show diffs when there is a test mismatch')
+ parser.add_argument('--apply', action='store_true',
+ help='auto apply the changes from the results folder to the output folder')
+ parser.add_argument('--build',
+ default=s_path_join(script_dir, '../../build'),
+ help='specify location of the build directory')
+ parser.add_argument('--config',
+ default='Release',
+ help='the build_type value (Release or Debug)')
+ parser.add_argument('--test',
+ default=s_path_join(script_dir, '../../build/tests/cli'),
+ help='specify the location of the test cli build folder')
+
+ parsed_args = parser.parse_args()
+
+ # find the uncrustify binary
+ bin_found = False
+ uncr_bin = ''
+ bd_dir = parsed_args.build
+ test_dir = parsed_args.test
+
+ bin_paths = [s_path_join(bd_dir, 'uncrustify'),
+ s_path_join(bd_dir, 'uncrustify.exe'),
+ s_path_join(bd_dir, 'Debug/uncrustify'),
+ s_path_join(bd_dir, 'Debug/uncrustify.exe'),
+ s_path_join(bd_dir, 'Release/uncrustify'),
+ s_path_join(bd_dir, 'Release/uncrustify.exe'),
+ s_path_join(bd_dir, 'RelWithDebInfo/uncrustify'),
+ s_path_join(bd_dir, 'RelWithDebInfo/uncrustify.exe'),
+ s_path_join(bd_dir, 'MinSizeRel/uncrustify'),
+ s_path_join(bd_dir, 'MinSizeRel/uncrustify.exe')]
+ for uncr_bin in bin_paths:
+ if not isfile(uncr_bin):
+ eprint("is 3 not a file: %s" % uncr_bin)
+ else:
+ print("Uncrustify binary found: %s" % uncr_bin)
+ bin_found = True
+ break
+ if not bin_found:
+ eprint("No Uncrustify binary found")
+ sys_exit(EX_USAGE)
+ print("Summary:")
+ print("Python version is: "+sys.version)
+ print("OS is: %s" % os_name)
+
+ clear_dir(s_path_join(test_dir, 'results'))
+
+ return_flag = True
+
+ print("Test help ...")
+ #
+ # Test help
+ # -h -? --help --usage
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ out_expected_path=s_path_join(script_dir, 'output/help.txt'),
+ out_result_path=s_path_join(test_dir, 'results/help.txt'),
+ out_result_manip=[
+ string_replace(' --mtime : Preserve mtime on replaced files.\n', ''),
+ string_replace('.exe', ''),
+ reg_replace(r'currently \d+ options', 'currently x options')
+ ]):
+ return_flag = False
+ print("Test help is OK")
+
+ print("Test false parameter ...")
+ #
+ # Test false parameter
+ # --xyz
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['--xyz'],
+ err_expected_path=s_path_join(script_dir, 'output/xyz-err.txt'),
+ err_result_path=s_path_join(test_dir, 'results/xyz-err.txt')
+ ):
+ return_flag = False
+ print("Test false parameter is OK")
+
+ print("Test Version ...")
+ #
+ # Test Version
+ # -v
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-v'],
+ out_expected_path=s_path_join(script_dir, 'output/v-out.txt'),
+ out_result_path=s_path_join(test_dir, 'results/v-out.txt'),
+ out_result_manip=reg_replace(r'Uncrustify.+', 'Uncrustify')
+ ):
+ return_flag = False
+ print("Test Version is OK")
+
+ # temporary removed
+ #print("Test --show-config ...")
+ ##
+ ## Test --show-config
+ ##
+ #if not check_uncrustify_output(
+ # uncr_bin,
+ # parsed_args,
+ # args_arr=['--show-config'],
+ # out_expected_path=s_path_join(script_dir, 'output/show_config.txt'),
+ # out_result_path=s_path_join(test_dir, 'results/show_config.txt'),
+ # out_result_manip=reg_replace(r'\# Uncrustify.+', '')
+ # ):
+ # return_flag = False
+ #print("Test --show-config is OK")
+
+ print("Test the truncate option ...")
+ #
+ # Test the truncate option
+ #
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/truncate.cfg'),
+ '-f', s_path_join(script_dir, 'input/truncate.cpp'),
+ '-o', NULL_DEVICE,
+ '-L', '83'],
+ err_expected_path=s_path_join(script_dir, 'output/truncate.txt'),
+ err_result_path=s_path_join(test_dir, 'results/truncate.txt'),
+ err_result_manip=[reg_replace(r'\([0-9]+\)', ' '),
+ reg_replace(RE_DO_SPACE, '')]
+ ):
+ return_flag = False
+ print("Test the truncate option is OK")
+
+ #print("Test --update-config ...")
+ # temporary removed
+ ##
+ ## Test --update-config
+ ##
+ #if not check_uncrustify_output(
+ # uncr_bin,
+ # parsed_args,
+ # args_arr=['-c', s_path_join(script_dir, 'config/mini_d.cfg'),
+ # '--update-config'],
+ # out_expected_path=s_path_join(script_dir, 'output/mini_d_uc.txt'),
+ # out_result_path=s_path_join(test_dir, 'results/mini_d_uc.txt'),
+ # out_result_manip=reg_replace(r'\# Uncrustify.+', ''),
+ # err_expected_path=s_path_join(script_dir, 'output/mini_d_error.txt'),
+ # err_result_path=s_path_join(test_dir, 'results/mini_d_error0.txt'),
+ # err_result_manip=string_replace('\\', '/')
+ # ):
+ # return_flag = False
+
+ #if not check_uncrustify_output(
+ # uncr_bin,
+ # parsed_args,
+ # args_arr=['-c', s_path_join(script_dir, 'config/mini_nd.cfg'),
+ # '--update-config'],
+ # out_expected_path=s_path_join(script_dir, 'output/mini_nd_uc.txt'),
+ # out_result_path=s_path_join(test_dir, 'results/mini_nd_uc.txt'),
+ # out_result_manip=reg_replace(r'\# Uncrustify.+', ''),
+ # err_expected_path=s_path_join(script_dir, 'output/mini_d_error.txt'),
+ # err_result_path=s_path_join(test_dir, 'results/mini_d_error1.txt'),
+ # err_result_manip=string_replace('\\', '/')
+ # ):
+ # return_flag = False
+ #print("Test --update-config is OK")
+
+ #print("Test --update-config-with-doc ...")
+ ##
+ ## Test --update-config-with-doc
+ ##
+ #if not check_uncrustify_output(
+ # uncr_bin,
+ # parsed_args,
+ # args_arr=['-c', s_path_join(script_dir, 'config/mini_d.cfg'),
+ # '--update-config-with-doc'],
+ # out_expected_path=s_path_join(script_dir, 'output/mini_d_ucwd.txt'),
+ # out_result_path=s_path_join(test_dir, 'results/mini_d_ucwd.txt'),
+ # out_result_manip=reg_replace(r'\# Uncrustify.+', ''),
+ # err_expected_path=s_path_join(script_dir, 'output/mini_d_error.txt'),
+ # err_result_path=s_path_join(test_dir, 'results/mini_d_error2.txt'),
+ # err_result_manip=string_replace('\\', '/')
+ # ):
+ # return_flag = False
+ #print("Test --update-config-with-doc is OK")
+
+ #if not check_uncrustify_output(
+ # uncr_bin,
+ # parsed_args,
+ # args_arr=['-c', s_path_join(script_dir, 'config/mini_nd.cfg'),
+ # '--update-config-with-doc'],
+ # out_expected_path=s_path_join(script_dir, 'output/mini_nd_ucwd.txt'),
+ # out_result_path=s_path_join(test_dir, 'results/mini_nd_ucwd.txt'),
+ # out_result_manip=reg_replace(r'\# Uncrustify.+', ''),
+ # err_expected_path=s_path_join(script_dir, 'output/mini_d_error.txt'),
+ # err_result_path=s_path_join(test_dir, 'results/mini_d_error3.txt'),
+ # err_result_manip=string_replace('\\', '/')
+ # ):
+ # return_flag = False
+
+ print("Test -p ...")
+ #
+ # Test -p
+ #
+ if os_name != 'nt':
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/mini_nd.cfg'),
+ '-f', s_path_join(script_dir, 'input/testSrcP.cpp'),
+ '-p', s_path_join(test_dir, 'results/p.txt')],
+ gen_expected_path=s_path_join(script_dir, 'output/p.txt'),
+ gen_result_path=s_path_join(test_dir, 'results/p.txt'),
+ gen_result_manip=reg_replace(r'\# Uncrustify.+[^\n\r]', '')
+ ):
+ return_flag = False
+
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-f', s_path_join(script_dir, 'input/class_enum_struct_union.cpp'),
+ '-p', s_path_join(test_dir, 'results/class_enum_struct_union.txt')],
+ gen_expected_path=s_path_join(script_dir, 'output/class_enum_struct_union.txt'),
+ gen_result_path=s_path_join(test_dir, 'results/class_enum_struct_union.txt'),
+ gen_result_manip=reg_replace(r'\# Uncrustify.+[^\n\r]', '')
+ ):
+ return_flag = False
+
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-f', s_path_join(script_dir, 'input/in_fcn_def.cpp'),
+ '-p', s_path_join(test_dir, 'results/in_fcn_def.txt')],
+ gen_expected_path=s_path_join(script_dir, 'output/in_fcn_def.txt'),
+ gen_result_path=s_path_join(test_dir, 'results/in_fcn_def.txt'),
+ gen_result_manip=reg_replace(r'\# Uncrustify.+[^\n\r]', '')
+ ):
+ return_flag = False
+ print("Test -p is OK")
+
+ #print("Test -p and -c with '-' input ...")
+ if os_name == 'nt' or check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', '-',
+ '-f', NULL_DEVICE,
+ '-p', '-'],
+ out_expected_path=s_path_join(script_dir, 'output/pc-.txt'),
+ out_result_manip=reg_replace(r'\# Uncrustify.+[^\n\r]', ''),
+ out_result_path=s_path_join(test_dir, 'results/pc-.txt')
+ ):
+ pass
+
+ #print("Test -p and -c with '-' input ...")
+ #
+ # Test -p and -c with '-' input
+ #
+ else:
+ return_flag = False
+ #print("Test -p and -c with '-' input is OK")
+
+ print("Test -p and --debug-csv-format option ...")
+ #
+ # Test -p and --debug-csv-format option
+ #
+ if os_name != 'nt' and not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', '-',
+ '-f', s_path_join(script_dir, 'input/class_enum_struct_union.cpp'),
+ '-p', s_path_join(test_dir, 'results/class_enum_struct_union.csv'),
+ '--debug-csv-format'],
+ gen_expected_path=s_path_join(script_dir, 'output/class_enum_struct_union.csv'),
+ gen_result_path=s_path_join(test_dir, 'results/class_enum_struct_union.csv'),
+ ):
+ return_flag = False
+ print("Test -p and --debug-csv-format option is OK")
+
+ if parsed_args.config == 'Debug':
+ print("Test --tracking space:FILE ...")
+ print(" config is Debug")
+ #
+ # Test --tracking space:FILE
+ #
+ if os_name != 'nt':
+ # doesn't work under windows
+ temp_result_path = s_path_join(script_dir, 'results/Debug_tracking_space.html')
+ abc = "space:" + temp_result_path # Issue #4066
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/tracking_space.cfg'),
+ '-f', s_path_join(script_dir, 'input/tracking_space.cpp'),
+ '--tracking',
+ abc,
+ #s_path_join(script_dir, 'results/Debug_tracking_space.html')
+ #temp_result_path
+ # '-L'
+ #, 'A'
+ #, '2'
+ #, '>'
+ #, '/home/guy/A-T.txt'
+ ],
+ gen_expected_path=s_path_join(script_dir, 'output/Debug_tracking_space.html'),
+ #gen_result_path=s_path_join(script_dir, 'results/Debug_tracking_space.html')
+ gen_result_path=temp_result_path
+ ):
+ #print("/home/guy/A-T.txt")
+ #else:
+ #print("/home/guy/A-T.txt")
+ return_flag = False
+ print("Test --tracking space:FILE is OK")
+
+ #sys_exit()
+
+ print("Test --replace ...")
+ #
+ # Test --replace
+ #
+ copyfile("input/backup.h-save", "input/backup.h")
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/replace.cfg'),
+ '-F', s_path_join(script_dir, 'input/replace.list'),
+ '--replace', '--no-backup'],
+ gen_expected_path=s_path_join(script_dir, 'output/backup.h'),
+ gen_result_path=s_path_join(script_dir, 'input/backup.h'),
+ err_expected_path=s_path_join(script_dir, 'output/replace.txt'),
+ err_result_path=s_path_join(test_dir, 'results/replace.txt'),
+ ):
+ return_flag = False
+ print("Test --replace is OK")
+
+ print("Test --universalindent ...")
+ # The flag CMAKE_BUILD_TYPE must be set to "Release", or all lines with
+ # 'Description="<html>(<number>)text abc.</html>" must be changed to
+ # 'Description="<html>text abc.</html>"
+ #
+ # OR it is possible to introduce a new parameter: gen_expected_manip
+ #
+ # The last "reg_replace(r'\r', '')" is necessary under Windows, because
+ # fprintf puts a \r\n at the end of a line. To make the check, we use
+ # output/universalindent.cfg, generated under Linux, with only \n at the
+ # end of a line.
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-o', s_path_join(test_dir, 'results/universalindent.cfg'),
+ '--universalindent'],
+ gen_expected_path=s_path_join(script_dir, 'output/universalindent.cfg'),
+ gen_result_path=s_path_join(test_dir, 'results/universalindent.cfg'),
+ gen_result_manip=[reg_replace(r'version=U.+', ''),
+ reg_replace(r'\(\d+\)', ''),
+ reg_replace(r'\r', '')]
+ ):
+ return_flag = False
+ print("Test --universalindent is OK")
+
+ print("Test -L ...")
+ # Debug Options:
+ # -L
+ # look at src/log_levels.h
+ Ls_A = ['9', '21', '25', '28', '31', '36', '66', '92']
+ for L in Ls_A:
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', NULL_DEVICE, '-L', L, '-o', NULL_DEVICE,
+ '-f', s_path_join(script_dir, 'input/testSrc.cpp')],
+ err_expected_path=s_path_join(script_dir, 'output/%s.txt' % L),
+ err_result_path=s_path_join(test_dir, 'results/%s.txt' % L),
+ err_result_manip=[reg_replace(r'\([0-9]+\)', ' '),
+ reg_replace(r'\:[0-9]+\)', ' '),
+ reg_replace(r'\[line [0-9]+', '[ '),
+ reg_replace(r' \[[_|,|1|A-Z]*\]', ' []'),
+ reg_replace(r', \[[_|,|1|A-Z]*\]', ', []'),
+ reg_replace(r', \[0[xX][0-9a-fA-F]+:[_|,|1|A-Z]*\]', ', []'),
+ reg_replace(r' \[0[xX][0-9a-fA-F]+:[_|,|1|A-Z]*\]', ' []'),
+ reg_replace(r'^[ \t]*[_A-Za-z][_A-Za-z0-9]*::', ''),
+ reg_replace(RE_CALLSTACK, '[CallStack]'),
+ reg_replace(RE_DO_SPACE, ''),
+ reg_replace(r'Chunk::', '')]
+ ):
+ return_flag = False
+ print("Test -L is OK")
+
+ ### Test logger buffer overflow
+ ##if not check_uncrustify_output(
+ ## uncr_bin,
+ ## parsed_args,
+ ## args_arr=['-c', NULL_DEVICE, '-L', '99', '-o', NULL_DEVICE,
+ ## '-f', s_path_join(script_dir, 'input/logger.cs')],
+ ## err_expected_path=s_path_join(script_dir, 'output/logger_cs_L_99.txt'),
+ ## err_result_path=s_path_join(test_dir, 'results/logger_cs_L_99.txt'),
+ ## err_result_manip=reg_replace(r'[0-9]', '')
+ ## ):
+ ## return_flag = False
+
+ # misc error_tests
+ error_tests = ["I-842", "unmatched_close_pp"]
+ for test in error_tests:
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/%s.cfg' % test),
+ '-f', s_path_join(script_dir, 'input/%s.cpp' % test),
+ '-o', NULL_DEVICE, '-q'],
+ err_expected_path=s_path_join(script_dir, 'output/%s.txt' % test),
+ err_result_path=s_path_join(test_dir, 'results/%s.txt' % test)
+ ):
+ return_flag = False
+
+ print("Test $(year) keyword ...")
+ # Test $(year) keyword (issue #3251)
+ if not check_uncrustify_output(
+ uncr_bin,
+ parsed_args,
+ args_arr=['-c', s_path_join(script_dir, 'config/copyright-header.cfg'),
+ '-f', s_path_join(script_dir, 'input/testSrc.cpp')],
+ out_expected_path=s_path_join(script_dir, 'output/copyright-header.cpp'),
+ out_result_path=s_path_join(test_dir, 'results/copyright-header.cpp'),
+ out_result_manip=string_replace(str(date.today().year), 'this year'),
+ ):
+ return_flag = False
+ print("Test $(year) keyword is OK")
+
+ if return_flag:
+ print("all tests are OK")
+ sys_exit(EX_OK)
+ else:
+ print("some problem(s) are still present")
+ sys_exit(EX_SOFTWARE)
+
+
+if __name__ == "__main__":
+ main(argv[1:])