From 218fa2cbe8a2fe859a5248b8c9933163ab4569af Mon Sep 17 00:00:00 2001 From: Andrei Korigodskii Date: Sun, 2 Feb 2020 22:00:27 +0300 Subject: [PATCH] Add TEST_RANGE to specify arg ranges in parameterized tests TEST_RANGE([start, stop, step]) generates following runs of the test function: test(start), test(start + step), ..., test(start + n * step), where start + n * step <= stop. The step must be positive. If the test function takes several arguments, the following syntax must be used: TEST_RANGE([arg1_start, arg1_stop, arg1_step], ..., [argN_start, argN_stop, argN_step]) This addresses issues #53 and #144. Reported-by: Alex Rodriguez Reported-by: Hiroaki Yamazoe --- auto/generate_test_runner.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/auto/generate_test_runner.rb b/auto/generate_test_runner.rb index 4944e0b..a6e25cb 100644 --- a/auto/generate_test_runner.rb +++ b/auto/generate_test_runner.rb @@ -128,7 +128,7 @@ class UnityTestRunnerGenerator lines.each_with_index do |line, _index| # find tests - next unless line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/m + next unless line =~ /^((?:\s*(?:TEST_CASE|TEST_RANGE)\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/m arguments = Regexp.last_match(1) name = Regexp.last_match(2) @@ -139,6 +139,21 @@ class UnityTestRunnerGenerator if @options[:use_param_tests] && !arguments.empty? args = [] arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) { |a| args << a[0] } + + arguments.scan(/\s*TEST_RANGE\s*\((.*)\)\s*$/).flatten.each do |range_str| + args += range_str.scan(/\[(-?\d+.?\d*), *(-?\d+.?\d*), *(-?\d+.?\d*)\]/) + .map { |arg_values_str| + arg_values_str.map { |arg_value_str| + (arg_value_str.include? ".") ? arg_value_str.to_f : arg_value_str.to_i + } + }.map { |arg_values| + (arg_values[0]..arg_values[1]).step(arg_values[2]).to_a + }.reduce { |result, arg_range_expanded| + result.product(arg_range_expanded) + }.map { |arg_combinations| + arg_combinations.flatten.join(", ") + } + end end tests_and_line_numbers << { test: name, args: args, call: call, params: params, line_number: 0 }