mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-09-18 00:00:00 +00:00
Merge branch 'master' into float-printing
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ before_install:
|
|||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --assume-yes --quiet gcc-multilib; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --assume-yes --quiet gcc-multilib; fi
|
||||||
install:
|
install:
|
||||||
- gem install rspec
|
- gem install rspec
|
||||||
- gem install rubocop
|
- gem install rubocop -v 0.57.2
|
||||||
script:
|
script:
|
||||||
- cd test && rake ci
|
- cd test && rake ci
|
||||||
- make -s
|
- make -s
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Running Tests
|
|||||||
|
|
||||||
RUN_TEST(func, linenum)
|
RUN_TEST(func, linenum)
|
||||||
|
|
||||||
Each Test is run within the macro `RUN_TEST`. This macro performs necessary setup before the test is called and handles cleanup and result tabulation afterwards.
|
Each Test is run within the macro `RUN_TEST`. This macro performs necessary setup before the test is called and handles cleanup and result tabulation afterwards.
|
||||||
|
|
||||||
Ignoring Tests
|
Ignoring Tests
|
||||||
--------------
|
--------------
|
||||||
@@ -75,7 +75,7 @@ Another way of calling `TEST_ASSERT_FALSE`
|
|||||||
TEST_FAIL()
|
TEST_FAIL()
|
||||||
TEST_FAIL_MESSAGE(message)
|
TEST_FAIL_MESSAGE(message)
|
||||||
|
|
||||||
This test is automatically marked as a failure. The message is output stating why.
|
This test is automatically marked as a failure. The message is output stating why.
|
||||||
|
|
||||||
Numerical Assertions: Integers
|
Numerical Assertions: Integers
|
||||||
------------------------------
|
------------------------------
|
||||||
@@ -87,7 +87,7 @@ Numerical Assertions: Integers
|
|||||||
TEST_ASSERT_EQUAL_INT64(expected, actual)
|
TEST_ASSERT_EQUAL_INT64(expected, actual)
|
||||||
|
|
||||||
Compare two integers for equality and display errors as signed integers. A cast will be performed
|
Compare two integers for equality and display errors as signed integers. A cast will be performed
|
||||||
to your natural integer size so often this can just be used. When you need to specify the exact size,
|
to your natural integer size so often this can just be used. When you need to specify the exact size,
|
||||||
like when comparing arrays, you can use a specific version:
|
like when comparing arrays, you can use a specific version:
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_UINT(expected, actual)
|
TEST_ASSERT_EQUAL_UINT(expected, actual)
|
||||||
@@ -96,7 +96,7 @@ like when comparing arrays, you can use a specific version:
|
|||||||
TEST_ASSERT_EQUAL_UINT32(expected, actual)
|
TEST_ASSERT_EQUAL_UINT32(expected, actual)
|
||||||
TEST_ASSERT_EQUAL_UINT64(expected, actual)
|
TEST_ASSERT_EQUAL_UINT64(expected, actual)
|
||||||
|
|
||||||
Compare two integers for equality and display errors as unsigned integers. Like INT, there are
|
Compare two integers for equality and display errors as unsigned integers. Like INT, there are
|
||||||
variants for different sizes also.
|
variants for different sizes also.
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_HEX(expected, actual)
|
TEST_ASSERT_EQUAL_HEX(expected, actual)
|
||||||
@@ -105,7 +105,7 @@ variants for different sizes also.
|
|||||||
TEST_ASSERT_EQUAL_HEX32(expected, actual)
|
TEST_ASSERT_EQUAL_HEX32(expected, actual)
|
||||||
TEST_ASSERT_EQUAL_HEX64(expected, actual)
|
TEST_ASSERT_EQUAL_HEX64(expected, actual)
|
||||||
|
|
||||||
Compares two integers for equality and display errors as hexadecimal. Like the other integer comparisons,
|
Compares two integers for equality and display errors as hexadecimal. Like the other integer comparisons,
|
||||||
you can specify the size... here the size will also effect how many nibbles are shown (for example, `HEX16`
|
you can specify the size... here the size will also effect how many nibbles are shown (for example, `HEX16`
|
||||||
will show 4 nibbles).
|
will show 4 nibbles).
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ Another way of calling TEST_ASSERT_EQUAL_INT
|
|||||||
|
|
||||||
TEST_ASSERT_INT_WITHIN(delta, expected, actual)
|
TEST_ASSERT_INT_WITHIN(delta, expected, actual)
|
||||||
|
|
||||||
Asserts that the actual value is within plus or minus delta of the expected value. This also comes in
|
Asserts that the actual value is within plus or minus delta of the expected value. This also comes in
|
||||||
size specific variants.
|
size specific variants.
|
||||||
|
|
||||||
|
|
||||||
@@ -199,12 +199,12 @@ Compare two null-terminate strings. Fail if any character is different or if th
|
|||||||
|
|
||||||
TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message)
|
TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message)
|
||||||
|
|
||||||
Compare two strings. Fail if any character is different, stop comparing after len characters. Output a custom message on failure.
|
Compare two strings. Fail if any character is different, stop comparing after len characters. Output a custom message on failure.
|
||||||
|
|
||||||
Pointer Assertions
|
Pointer Assertions
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
Most pointer operations can be performed by simply using the integer comparisons above. However, a couple of special cases are added for clarity.
|
Most pointer operations can be performed by simply using the integer comparisons above. However, a couple of special cases are added for clarity.
|
||||||
|
|
||||||
TEST_ASSERT_NULL(pointer)
|
TEST_ASSERT_NULL(pointer)
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ColourCommandLine
|
|||||||
return unless RUBY_PLATFORM =~ /(win|w)32$/
|
return unless RUBY_PLATFORM =~ /(win|w)32$/
|
||||||
get_std_handle = Win32API.new('kernel32', 'GetStdHandle', ['L'], 'L')
|
get_std_handle = Win32API.new('kernel32', 'GetStdHandle', ['L'], 'L')
|
||||||
@set_console_txt_attrb =
|
@set_console_txt_attrb =
|
||||||
Win32API.new('kernel32', 'SetConsoleTextAttribute', %w(L N), 'I')
|
Win32API.new('kernel32', 'SetConsoleTextAttribute', %w[L N], 'I')
|
||||||
@hout = get_std_handle.call(-11)
|
@hout = get_std_handle.call(-11)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ class ColourCommandLine
|
|||||||
$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
|
$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end # ColourCommandLine
|
end
|
||||||
|
|
||||||
def colour_puts(role, str)
|
def colour_puts(role, str)
|
||||||
ColourCommandLine.new.out_c(:puts, role, str)
|
ColourCommandLine.new.out_c(:puts, role, str)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# [Released under MIT License. Please refer to license.txt for details]
|
# [Released under MIT License. Please refer to license.txt for details]
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
require "#{File.expand_path(File.dirname(__FILE__))}/colour_prompt"
|
require_relative 'colour_prompt'
|
||||||
|
|
||||||
$colour_output = true
|
$colour_output = true
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,6 @@ TEMPLATE_INC ||= '#ifndef _%3$s_H
|
|||||||
class UnityModuleGenerator
|
class UnityModuleGenerator
|
||||||
############################
|
############################
|
||||||
def initialize(options = nil)
|
def initialize(options = nil)
|
||||||
here = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
|
|
||||||
@options = UnityModuleGenerator.default_options
|
@options = UnityModuleGenerator.default_options
|
||||||
case options
|
case options
|
||||||
when NilClass then @options
|
when NilClass then @options
|
||||||
@@ -56,9 +54,9 @@ class UnityModuleGenerator
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Create default file paths if none were provided
|
# Create default file paths if none were provided
|
||||||
@options[:path_src] = here + '../src/' if @options[:path_src].nil?
|
@options[:path_src] = "#{__dir__}/../src/" if @options[:path_src].nil?
|
||||||
@options[:path_inc] = @options[:path_src] if @options[:path_inc].nil?
|
@options[:path_inc] = @options[:path_src] if @options[:path_inc].nil?
|
||||||
@options[:path_tst] = here + '../test/' if @options[:path_tst].nil?
|
@options[:path_tst] = "#{__dir__}/../test/" if @options[:path_tst].nil?
|
||||||
@options[:path_src] += '/' unless @options[:path_src][-1] == 47
|
@options[:path_src] += '/' unless @options[:path_src][-1] == 47
|
||||||
@options[:path_inc] += '/' unless @options[:path_inc][-1] == 47
|
@options[:path_inc] += '/' unless @options[:path_inc][-1] == 47
|
||||||
@options[:path_tst] += '/' unless @options[:path_tst][-1] == 47
|
@options[:path_tst] += '/' unless @options[:path_tst][-1] == 47
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
# [Released under MIT License. Please refer to license.txt for details]
|
# [Released under MIT License. Please refer to license.txt for details]
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
File.expand_path(File.join(File.dirname(__FILE__), 'colour_prompt'))
|
|
||||||
|
|
||||||
class UnityTestRunnerGenerator
|
class UnityTestRunnerGenerator
|
||||||
def initialize(options = nil)
|
def initialize(options = nil)
|
||||||
@options = UnityTestRunnerGenerator.default_options
|
@options = UnityTestRunnerGenerator.default_options
|
||||||
@@ -15,7 +13,7 @@ class UnityTestRunnerGenerator
|
|||||||
when Hash then @options.merge!(options)
|
when Hash then @options.merge!(options)
|
||||||
else raise 'If you specify arguments, it should be a filename or a hash of options'
|
else raise 'If you specify arguments, it should be a filename or a hash of options'
|
||||||
end
|
end
|
||||||
require "#{File.expand_path(File.dirname(__FILE__))}/type_sanitizer"
|
require_relative 'type_sanitizer'
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.default_options
|
def self.default_options
|
||||||
@@ -26,6 +24,7 @@ class UnityTestRunnerGenerator
|
|||||||
framework: :unity,
|
framework: :unity,
|
||||||
test_prefix: 'test|spec|should',
|
test_prefix: 'test|spec|should',
|
||||||
mock_prefix: 'Mock',
|
mock_prefix: 'Mock',
|
||||||
|
mock_suffix: '',
|
||||||
setup_name: 'setUp',
|
setup_name: 'setUp',
|
||||||
teardown_name: 'tearDown',
|
teardown_name: 'tearDown',
|
||||||
main_name: 'main', # set to :auto to automatically generate each time
|
main_name: 'main', # set to :auto to automatically generate each time
|
||||||
@@ -148,7 +147,7 @@ class UnityTestRunnerGenerator
|
|||||||
mock_headers = []
|
mock_headers = []
|
||||||
includes.each do |include_path|
|
includes.each do |include_path|
|
||||||
include_file = File.basename(include_path)
|
include_file = File.basename(include_path)
|
||||||
mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}/i
|
mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}.*#{@options[:mock_suffix]}$/i
|
||||||
end
|
end
|
||||||
mock_headers
|
mock_headers
|
||||||
end
|
end
|
||||||
@@ -162,7 +161,9 @@ class UnityTestRunnerGenerator
|
|||||||
output.puts('#endif')
|
output.puts('#endif')
|
||||||
output.puts("#include \"#{@options[:framework]}.h\"")
|
output.puts("#include \"#{@options[:framework]}.h\"")
|
||||||
output.puts('#include "cmock.h"') unless mocks.empty?
|
output.puts('#include "cmock.h"') unless mocks.empty?
|
||||||
|
output.puts('#ifndef UNITY_EXCLUDE_SETJMP_H')
|
||||||
output.puts('#include <setjmp.h>')
|
output.puts('#include <setjmp.h>')
|
||||||
|
output.puts('#endif')
|
||||||
output.puts('#include <stdio.h>')
|
output.puts('#include <stdio.h>')
|
||||||
if @options[:defines] && !@options[:defines].empty?
|
if @options[:defines] && !@options[:defines].empty?
|
||||||
@options[:defines].each { |d| output.puts("#define #{d}") }
|
@options[:defines].each { |d| output.puts("#define #{d}") }
|
||||||
@@ -194,9 +195,11 @@ class UnityTestRunnerGenerator
|
|||||||
output.puts("\n/*=======External Functions This Runner Calls=====*/")
|
output.puts("\n/*=======External Functions This Runner Calls=====*/")
|
||||||
output.puts("extern void #{@options[:setup_name]}(void);")
|
output.puts("extern void #{@options[:setup_name]}(void);")
|
||||||
output.puts("extern void #{@options[:teardown_name]}(void);")
|
output.puts("extern void #{@options[:teardown_name]}(void);")
|
||||||
|
output.puts("\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif") if @options[:externc]
|
||||||
tests.each do |test|
|
tests.each do |test|
|
||||||
output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
|
output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
|
||||||
end
|
end
|
||||||
|
output.puts("#ifdef __cplusplus\n}\n#endif") if @options[:externc]
|
||||||
output.puts('')
|
output.puts('')
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -374,7 +377,7 @@ class UnityTestRunnerGenerator
|
|||||||
end
|
end
|
||||||
output.puts
|
output.puts
|
||||||
output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty?
|
output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty?
|
||||||
output.puts(" return suite_teardown(UnityEnd());")
|
output.puts(' return suite_teardown(UnityEnd());')
|
||||||
output.puts('}')
|
output.puts('}')
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -436,6 +439,7 @@ if $0 == __FILE__
|
|||||||
' *.h - header files are added as #includes in runner',
|
' *.h - header files are added as #includes in runner',
|
||||||
' options:',
|
' options:',
|
||||||
' -cexception - include cexception support',
|
' -cexception - include cexception support',
|
||||||
|
' -externc - add extern "C" for cpp support',
|
||||||
' --setup_name="" - redefine setUp func name to something else',
|
' --setup_name="" - redefine setUp func name to something else',
|
||||||
' --teardown_name="" - redefine tearDown func name to something else',
|
' --teardown_name="" - redefine tearDown func name to something else',
|
||||||
' --main_name="" - redefine main func name to something else',
|
' --main_name="" - redefine main func name to something else',
|
||||||
|
|||||||
+226
-124
@@ -1,206 +1,308 @@
|
|||||||
#============================================================
|
#============================================================
|
||||||
# Author: John Theofanopoulos
|
# Author: John Theofanopoulos
|
||||||
# A simple parser. Takes the output files generated during the build process and
|
# A simple parser. Takes the output files generated during the
|
||||||
# extracts information relating to the tests.
|
# build process and extracts information relating to the tests.
|
||||||
#
|
#
|
||||||
# Notes:
|
# Notes:
|
||||||
# To capture an output file under VS builds use the following:
|
# To capture an output file under VS builds use the following:
|
||||||
# devenv [build instructions] > Output.txt & type Output.txt
|
# devenv [build instructions] > Output.txt & type Output.txt
|
||||||
#
|
#
|
||||||
# To capture an output file under GCC/Linux builds use the following:
|
# To capture an output file under Linux builds use the following:
|
||||||
# make | tee Output.txt
|
# make | tee Output.txt
|
||||||
#
|
#
|
||||||
|
# This script can handle the following output formats:
|
||||||
|
# - normal output (raw unity)
|
||||||
|
# - fixture output (unity_fixture.h/.c)
|
||||||
|
# - fixture output with verbose flag set ("-v")
|
||||||
|
#
|
||||||
# To use this parser use the following command
|
# To use this parser use the following command
|
||||||
# ruby parseOutput.rb [options] [file]
|
# ruby parseOutput.rb [options] [file]
|
||||||
# options: -xml : produce a JUnit compatible XML file
|
# options: -xml : produce a JUnit compatible XML file
|
||||||
# file : file to scan for results
|
# file: file to scan for results
|
||||||
#============================================================
|
#============================================================
|
||||||
|
|
||||||
|
# Parser class for handling the input file
|
||||||
class ParseOutput
|
class ParseOutput
|
||||||
def initialize
|
def initialize
|
||||||
@test_flag = false
|
# internal data
|
||||||
|
@class_name_idx = 0
|
||||||
|
@path_delim = nil
|
||||||
|
|
||||||
|
# xml output related
|
||||||
@xml_out = false
|
@xml_out = false
|
||||||
@array_list = false
|
@array_list = false
|
||||||
@total_tests = false
|
|
||||||
@class_index = false
|
# current suite name and statistics
|
||||||
|
@test_suite = nil
|
||||||
|
@total_tests = 0
|
||||||
|
@test_passed = 0
|
||||||
|
@test_failed = 0
|
||||||
|
@test_ignored = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
# Set the flag to indicate if there will be an XML output file or not
|
# Set the flag to indicate if there will be an XML output file or not
|
||||||
def set_xml_output
|
def set_xml_output
|
||||||
@xml_out = true
|
@xml_out = true
|
||||||
end
|
end
|
||||||
|
|
||||||
# if write our output to XML
|
# If write our output to XML
|
||||||
def write_xml_output
|
def write_xml_output
|
||||||
output = File.open('report.xml', 'w')
|
output = File.open('report.xml', 'w')
|
||||||
output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||||
@array_list.each do |item|
|
@array_list.each do |item|
|
||||||
output << item << "\n"
|
output << item << "\n"
|
||||||
end
|
end
|
||||||
output << "</testsuite>\n"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# This function will try and determine when the suite is changed. This is
|
# Pushes the suite info as xml to the array list, which will be written later
|
||||||
|
def push_xml_output_suite_info
|
||||||
|
# Insert opening tag at front
|
||||||
|
heading = '<testsuite name="Unity" tests="' + @total_tests.to_s + '" failures="' + @test_failed.to_s + '"' + ' skips="' + @test_ignored.to_s + '">'
|
||||||
|
@array_list.insert(0, heading)
|
||||||
|
# Push back the closing tag
|
||||||
|
@array_list.push '</testsuite>'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Pushes xml output data to the array list, which will be written later
|
||||||
|
def push_xml_output_passed(test_name)
|
||||||
|
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '"/>'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Pushes xml output data to the array list, which will be written later
|
||||||
|
def push_xml_output_failed(test_name, reason)
|
||||||
|
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
||||||
|
@array_list.push ' <failure type="ASSERT FAILED">' + reason + '</failure>'
|
||||||
|
@array_list.push ' </testcase>'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Pushes xml output data to the array list, which will be written later
|
||||||
|
def push_xml_output_ignored(test_name, reason)
|
||||||
|
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
||||||
|
@array_list.push ' <skipped type="TEST IGNORED">' + reason + '</skipped>'
|
||||||
|
@array_list.push ' </testcase>'
|
||||||
|
end
|
||||||
|
|
||||||
|
# This function will try and determine when the suite is changed. This is
|
||||||
# is the name that gets added to the classname parameter.
|
# is the name that gets added to the classname parameter.
|
||||||
def test_suite_verify(test_suite_name)
|
def test_suite_verify(test_suite_name)
|
||||||
return if @test_flag
|
|
||||||
|
|
||||||
@test_flag = true
|
|
||||||
# Split the path name
|
# Split the path name
|
||||||
test_name = test_suite_name.split('/')
|
test_name = test_suite_name.split(@path_delim)
|
||||||
# Remove the extension
|
|
||||||
base_name = test_name[test_name.size - 1].split('.')
|
# Remove the extension and extract the base_name
|
||||||
@test_suite = 'test.' + base_name[0]
|
base_name = test_name[test_name.size - 1].split('.')[0]
|
||||||
|
|
||||||
|
# Return if the test suite hasn't changed
|
||||||
|
return unless base_name.to_s != @test_suite.to_s
|
||||||
|
|
||||||
|
@test_suite = base_name
|
||||||
printf "New Test: %s\n", @test_suite
|
printf "New Test: %s\n", @test_suite
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Prepares the line for verbose fixture output ("-v")
|
||||||
|
def prepare_fixture_line(line)
|
||||||
|
line = line.sub('IGNORE_TEST(', '')
|
||||||
|
line = line.sub('TEST(', '')
|
||||||
|
line = line.sub(')', ',')
|
||||||
|
line = line.chomp
|
||||||
|
array = line.split(',')
|
||||||
|
array.map { |x| x.to_s.lstrip.chomp }
|
||||||
|
end
|
||||||
|
|
||||||
|
# Test was flagged as having passed so format the output.
|
||||||
|
# This is using the Unity fixture output and not the original Unity output.
|
||||||
|
def test_passed_unity_fixture(array)
|
||||||
|
class_name = array[0]
|
||||||
|
test_name = array[1]
|
||||||
|
test_suite_verify(class_name)
|
||||||
|
printf "%-40s PASS\n", test_name
|
||||||
|
|
||||||
|
push_xml_output_passed(test_name) if @xml_out
|
||||||
|
end
|
||||||
|
|
||||||
|
# Test was flagged as having failed so format the output.
|
||||||
|
# This is using the Unity fixture output and not the original Unity output.
|
||||||
|
def test_failed_unity_fixture(array)
|
||||||
|
class_name = array[0]
|
||||||
|
test_name = array[1]
|
||||||
|
test_suite_verify(class_name)
|
||||||
|
reason_array = array[2].split(':')
|
||||||
|
reason = reason_array[-1].lstrip.chomp + ' at line: ' + reason_array[-4]
|
||||||
|
|
||||||
|
printf "%-40s FAILED\n", test_name
|
||||||
|
|
||||||
|
push_xml_output_failed(test_name, reason) if @xml_out
|
||||||
|
end
|
||||||
|
|
||||||
|
# Test was flagged as being ignored so format the output.
|
||||||
|
# This is using the Unity fixture output and not the original Unity output.
|
||||||
|
def test_ignored_unity_fixture(array)
|
||||||
|
class_name = array[0]
|
||||||
|
test_name = array[1]
|
||||||
|
reason = 'No reason given'
|
||||||
|
if array.size > 2
|
||||||
|
reason_array = array[2].split(':')
|
||||||
|
tmp_reason = reason_array[-1].lstrip.chomp
|
||||||
|
reason = tmp_reason == 'IGNORE' ? 'No reason given' : tmp_reason
|
||||||
|
end
|
||||||
|
test_suite_verify(class_name)
|
||||||
|
printf "%-40s IGNORED\n", test_name
|
||||||
|
|
||||||
|
push_xml_output_ignored(test_name, reason) if @xml_out
|
||||||
|
end
|
||||||
|
|
||||||
# Test was flagged as having passed so format the output
|
# Test was flagged as having passed so format the output
|
||||||
def test_passed(array)
|
def test_passed(array)
|
||||||
last_item = array.length - 1
|
last_item = array.length - 1
|
||||||
test_name = array[last_item - 1]
|
test_name = array[last_item - 1]
|
||||||
test_suite_verify(array[@class_name])
|
test_suite_verify(array[@class_name_idx])
|
||||||
printf "%-40s PASS\n", test_name
|
printf "%-40s PASS\n", test_name
|
||||||
|
|
||||||
return unless @xml_out
|
return unless @xml_out
|
||||||
|
|
||||||
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '"/>'
|
push_xml_output_passed(test_name) if @xml_out
|
||||||
end
|
end
|
||||||
|
|
||||||
# Test was flagged as having passed so format the output.
|
# Test was flagged as having failed so format the line
|
||||||
# This is using the Unity fixture output and not the original Unity output.
|
|
||||||
def test_passed_unity_fixture(array)
|
|
||||||
test_suite = array[0].sub('TEST(', '')
|
|
||||||
test_suite = test_suite.sub(',', '')
|
|
||||||
test_name = array[1].sub(')', '')
|
|
||||||
|
|
||||||
return unless @xml_out
|
|
||||||
|
|
||||||
@array_list.push ' <testcase classname="' + test_suite + '" name="' + test_name + '"/>'
|
|
||||||
end
|
|
||||||
|
|
||||||
# Test was flagged as being ingored so format the output
|
|
||||||
def test_ignored(array)
|
|
||||||
last_item = array.length - 1
|
|
||||||
test_name = array[last_item - 2]
|
|
||||||
reason = array[last_item].chomp
|
|
||||||
test_suite_verify(array[@class_name])
|
|
||||||
printf "%-40s IGNORED\n", test_name
|
|
||||||
|
|
||||||
if test_name.start_with? 'TEST('
|
|
||||||
array2 = test_name.split(' ')
|
|
||||||
@test_suite = array2[0].sub('TEST(', '')
|
|
||||||
@test_suite = @test_suite.sub(',', '')
|
|
||||||
test_name = array2[1].sub(')', '')
|
|
||||||
end
|
|
||||||
|
|
||||||
return unless @xml_out
|
|
||||||
|
|
||||||
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
|
||||||
@array_list.push ' <skipped type="TEST IGNORED"> ' + reason + ' </skipped>'
|
|
||||||
@array_list.push ' </testcase>'
|
|
||||||
end
|
|
||||||
|
|
||||||
# Test was flagged as having failed so format the line
|
|
||||||
def test_failed(array)
|
def test_failed(array)
|
||||||
last_item = array.length - 1
|
last_item = array.length - 1
|
||||||
test_name = array[last_item - 2]
|
test_name = array[last_item - 2]
|
||||||
reason = array[last_item].chomp + ' at line: ' + array[last_item - 3]
|
reason = array[last_item].chomp.lstrip + ' at line: ' + array[last_item - 3]
|
||||||
test_suite_verify(array[@class_name])
|
class_name = array[@class_name_idx]
|
||||||
printf "%-40s FAILED\n", test_name
|
|
||||||
|
|
||||||
if test_name.start_with? 'TEST('
|
if test_name.start_with? 'TEST('
|
||||||
array2 = test_name.split(' ')
|
array2 = test_name.split(' ')
|
||||||
@test_suite = array2[0].sub('TEST(', '')
|
|
||||||
@test_suite = @test_suite.sub(',', '')
|
test_suite = array2[0].sub('TEST(', '')
|
||||||
|
test_suite = test_suite.sub(',', '')
|
||||||
|
class_name = test_suite
|
||||||
|
|
||||||
test_name = array2[1].sub(')', '')
|
test_name = array2[1].sub(')', '')
|
||||||
end
|
end
|
||||||
|
|
||||||
return unless @xml_out
|
test_suite_verify(class_name)
|
||||||
|
printf "%-40s FAILED\n", test_name
|
||||||
|
|
||||||
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
push_xml_output_failed(test_name, reason) if @xml_out
|
||||||
@array_list.push ' <failure type="ASSERT FAILED"> ' + reason + ' </failure>'
|
|
||||||
@array_list.push ' </testcase>'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Figure out what OS we are running on. For now we are assuming if it's not Windows it must
|
# Test was flagged as being ignored so format the output
|
||||||
# be Unix based.
|
def test_ignored(array)
|
||||||
def detect_os
|
last_item = array.length - 1
|
||||||
os = RUBY_PLATFORM.split('-')
|
test_name = array[last_item - 2]
|
||||||
@class_name = if os.size == 2
|
reason = array[last_item].chomp.lstrip
|
||||||
if os[1] == 'mingw32'
|
class_name = array[@class_name_idx]
|
||||||
1
|
|
||||||
else
|
if test_name.start_with? 'TEST('
|
||||||
0
|
array2 = test_name.split(' ')
|
||||||
end
|
|
||||||
else
|
test_suite = array2[0].sub('TEST(', '')
|
||||||
0
|
test_suite = test_suite.sub(',', '')
|
||||||
end
|
class_name = test_suite
|
||||||
|
|
||||||
|
test_name = array2[1].sub(')', '')
|
||||||
|
end
|
||||||
|
|
||||||
|
test_suite_verify(class_name)
|
||||||
|
printf "%-40s IGNORED\n", test_name
|
||||||
|
|
||||||
|
push_xml_output_ignored(test_name, reason) if @xml_out
|
||||||
|
end
|
||||||
|
|
||||||
|
# Adjusts the os specific members according to the current path style
|
||||||
|
# (Windows or Unix based)
|
||||||
|
def detect_os_specifics(line)
|
||||||
|
if line.include? '\\'
|
||||||
|
# Windows X:\Y\Z
|
||||||
|
@class_name_idx = 1
|
||||||
|
@path_delim = '\\'
|
||||||
|
else
|
||||||
|
# Unix Based /X/Y/Z
|
||||||
|
@class_name_idx = 0
|
||||||
|
@path_delim = '/'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Main function used to parse the file that was captured.
|
# Main function used to parse the file that was captured.
|
||||||
def process(name)
|
def process(file_name)
|
||||||
@test_flag = false
|
|
||||||
@array_list = []
|
@array_list = []
|
||||||
|
|
||||||
detect_os
|
puts 'Parsing file: ' + file_name
|
||||||
|
|
||||||
puts 'Parsing file: ' + name
|
@test_passed = 0
|
||||||
|
@test_failed = 0
|
||||||
test_pass = 0
|
@test_ignored = 0
|
||||||
test_fail = 0
|
|
||||||
test_ignore = 0
|
|
||||||
puts ''
|
puts ''
|
||||||
puts '=================== RESULTS ====================='
|
puts '=================== RESULTS ====================='
|
||||||
puts ''
|
puts ''
|
||||||
File.open(name).each do |line|
|
File.open(file_name).each do |line|
|
||||||
# Typical test lines look like this:
|
# Typical test lines look like these:
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# 1. normal output:
|
||||||
# <path>/<test_file>.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0
|
# <path>/<test_file>.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0
|
||||||
# <path>/<test_file>.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented
|
# <path>/<test_file>.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented
|
||||||
# <path>/<test_file>.c:115:test_tc5100_initCanVoidPtrs:PASS
|
# <path>/<test_file>.c:115:test_tc5100_initCanVoidPtrs:PASS
|
||||||
#
|
#
|
||||||
# where path is different on Unix vs Windows devices (Windows leads with a drive letter)
|
# 2. fixture output
|
||||||
|
# <path>/<test_file>.c:63:TEST(<test_group>, <test_function>):FAIL: Expected 0x00001234 Was 0x00005A5A
|
||||||
|
# <path>/<test_file>.c:36:TEST(<test_group>, <test_function>):IGNORE
|
||||||
|
# Note: "PASS" information won't be generated in this mode
|
||||||
|
#
|
||||||
|
# 3. fixture output with verbose information ("-v")
|
||||||
|
# TEST(<test_group, <test_file>)<path>/<test_file>:168::FAIL: Expected 0x8D Was 0x8C
|
||||||
|
# TEST(<test_group>, <test_file>)<path>/<test_file>:22::IGNORE: This Test Was Ignored On Purpose
|
||||||
|
# IGNORE_TEST(<test_group, <test_file>)
|
||||||
|
# TEST(<test_group, <test_file>) PASS
|
||||||
|
#
|
||||||
|
# Note: Where path is different on Unix vs Windows devices (Windows leads with a drive letter)!
|
||||||
|
detect_os_specifics(line)
|
||||||
line_array = line.split(':')
|
line_array = line.split(':')
|
||||||
|
|
||||||
# If we were able to split the line then we can look to see if any of our target words
|
# If we were able to split the line then we can look to see if any of our target words
|
||||||
# were found. Case is important.
|
# were found. Case is important.
|
||||||
if (line_array.size >= 4) || (line.start_with? 'TEST(')
|
next unless (line_array.size >= 4) || (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(')
|
||||||
# Determine if this test passed
|
|
||||||
if line.include? ':PASS'
|
# check if the output is fixture output (with verbose flag "-v")
|
||||||
test_passed(line_array)
|
if (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(')
|
||||||
test_pass += 1
|
line_array = prepare_fixture_line(line)
|
||||||
elsif line.include? ':FAIL:'
|
if line.include? ' PASS'
|
||||||
test_failed(line_array)
|
test_passed_unity_fixture(line_array)
|
||||||
test_fail += 1
|
@test_passed += 1
|
||||||
elsif line.include? ':IGNORE:'
|
elsif line.include? 'FAIL'
|
||||||
test_ignored(line_array)
|
test_failed_unity_fixture(line_array)
|
||||||
test_ignore += 1
|
@test_failed += 1
|
||||||
elsif line.start_with? 'TEST('
|
elsif line.include? 'IGNORE'
|
||||||
if line.include? ' PASS'
|
test_ignored_unity_fixture(line_array)
|
||||||
line_array = line.split(' ')
|
@test_ignored += 1
|
||||||
test_passed_unity_fixture(line_array)
|
|
||||||
test_pass += 1
|
|
||||||
end
|
|
||||||
# If none of the keywords are found there are no more tests for this suite so clear
|
|
||||||
# the test flag
|
|
||||||
else
|
|
||||||
@test_flag = false
|
|
||||||
end
|
end
|
||||||
else
|
# normal output / fixture output (without verbose "-v")
|
||||||
@test_flag = false
|
elsif line.include? ':PASS'
|
||||||
|
test_passed(line_array)
|
||||||
|
@test_passed += 1
|
||||||
|
elsif line.include? ':FAIL'
|
||||||
|
test_failed(line_array)
|
||||||
|
@test_failed += 1
|
||||||
|
elsif line.include? ':IGNORE:'
|
||||||
|
test_ignored(line_array)
|
||||||
|
@test_ignored += 1
|
||||||
|
elsif line.include? ':IGNORE'
|
||||||
|
line_array.push('No reason given')
|
||||||
|
test_ignored(line_array)
|
||||||
|
@test_ignored += 1
|
||||||
end
|
end
|
||||||
|
@total_tests = @test_passed + @test_failed + @test_ignored
|
||||||
end
|
end
|
||||||
puts ''
|
puts ''
|
||||||
puts '=================== SUMMARY ====================='
|
puts '=================== SUMMARY ====================='
|
||||||
puts ''
|
puts ''
|
||||||
puts 'Tests Passed : ' + test_pass.to_s
|
puts 'Tests Passed : ' + @test_passed.to_s
|
||||||
puts 'Tests Failed : ' + test_fail.to_s
|
puts 'Tests Failed : ' + @test_failed.to_s
|
||||||
puts 'Tests Ignored : ' + test_ignore.to_s
|
puts 'Tests Ignored : ' + @test_ignored.to_s
|
||||||
@total_tests = test_pass + test_fail + test_ignore
|
|
||||||
|
|
||||||
return unless @xml_out
|
return unless @xml_out
|
||||||
|
|
||||||
heading = '<testsuite tests="' + @total_tests.to_s + '" failures="' + test_fail.to_s + '"' + ' skips="' + test_ignore.to_s + '">'
|
# push information about the suite
|
||||||
@array_list.insert(0, heading)
|
push_xml_output_suite_info
|
||||||
|
# write xml output file
|
||||||
write_xml_output
|
write_xml_output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -209,11 +311,11 @@ end
|
|||||||
parse_my_file = ParseOutput.new
|
parse_my_file = ParseOutput.new
|
||||||
|
|
||||||
if ARGV.size >= 1
|
if ARGV.size >= 1
|
||||||
ARGV.each do |a|
|
ARGV.each do |arg|
|
||||||
if a == '-xml'
|
if arg == '-xml'
|
||||||
parse_my_file.set_xml_output
|
parse_my_file.set_xml_output
|
||||||
else
|
else
|
||||||
parse_my_file.process(a)
|
parse_my_file.process(arg)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ class ArgvParser
|
|||||||
|
|
||||||
opts.parse!(args)
|
opts.parse!(args)
|
||||||
options
|
options
|
||||||
end # parse()
|
end
|
||||||
end # class OptparseExample
|
end
|
||||||
|
|
||||||
class UnityToJUnit
|
class UnityToJUnit
|
||||||
include FileUtils::Verbose
|
include FileUtils::Verbose
|
||||||
@@ -155,10 +155,6 @@ class UnityToJUnit
|
|||||||
[Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i]
|
[Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i]
|
||||||
end
|
end
|
||||||
|
|
||||||
def here
|
|
||||||
File.expand_path(File.dirname(__FILE__))
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def results_structure
|
def results_structure
|
||||||
@@ -221,9 +217,9 @@ class UnityToJUnit
|
|||||||
def write_suites_footer(stream)
|
def write_suites_footer(stream)
|
||||||
stream.puts '</testsuites>'
|
stream.puts '</testsuites>'
|
||||||
end
|
end
|
||||||
end # UnityToJUnit
|
end
|
||||||
|
|
||||||
if __FILE__ == $0
|
if $0 == __FILE__
|
||||||
# parse out the command options
|
# parse out the command options
|
||||||
options = ArgvParser.parse(ARGV)
|
options = ArgvParser.parse(ARGV)
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ module RakefileHelpers
|
|||||||
def initialize(all_files = false)
|
def initialize(all_files = false)
|
||||||
@all_files = all_files
|
@all_files = all_files
|
||||||
|
|
||||||
return false unless @all_files
|
return unless @all_files
|
||||||
return false unless File.exist?('test_file_filter.yml')
|
return unless File.exist?('test_file_filter.yml')
|
||||||
|
|
||||||
filters = YAML.load_file('test_file_filter.yml')
|
filters = YAML.load_file('test_file_filter.yml')
|
||||||
@all_files = filters[:all_files]
|
@all_files = filters[:all_files]
|
||||||
|
|||||||
@@ -101,10 +101,6 @@ class UnityTestSummary
|
|||||||
raise "Couldn't parse test results: #{summary}" unless summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
|
raise "Couldn't parse test results: #{summary}" unless summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
|
||||||
[Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i]
|
[Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i]
|
||||||
end
|
end
|
||||||
|
|
||||||
def here
|
|
||||||
File.expand_path(File.dirname(__FILE__))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if $0 == __FILE__
|
if $0 == __FILE__
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# ThrowTheSwitch.org Coding Standard
|
# ThrowTheSwitch.org Coding Standard
|
||||||
|
|
||||||
Hi. Welcome to the coding standard for ThrowTheSwitch.org. For the most part,
|
Hi. Welcome to the coding standard for ThrowTheSwitch.org. For the most part,
|
||||||
we try to follow these standards to unify our contributors' code into a cohesive
|
we try to follow these standards to unify our contributors' code into a cohesive
|
||||||
@@ -11,7 +11,7 @@ and we'll try to be polite when we notice yours.
|
|||||||
|
|
||||||
## Why Have A Coding Standard?
|
## Why Have A Coding Standard?
|
||||||
|
|
||||||
Being consistent makes code easier to understand. We've made an attempt to keep
|
Being consistent makes code easier to understand. We've tried to keep
|
||||||
our standard simple because we also believe that we can only expect someone to
|
our standard simple because we also believe that we can only expect someone to
|
||||||
follow something that is understandable. Please do your best.
|
follow something that is understandable. Please do your best.
|
||||||
|
|
||||||
@@ -51,11 +51,11 @@ much as they can, but give the user the power to override it when it's wrong.
|
|||||||
|
|
||||||
Let's talk about naming things. Programming is all about naming things. We name
|
Let's talk about naming things. Programming is all about naming things. We name
|
||||||
files, functions, variables, and so much more. While we're not always going to
|
files, functions, variables, and so much more. While we're not always going to
|
||||||
find the best name for something, we actually put quite a bit of effort into
|
find the best name for something, we actually put a bit of effort into
|
||||||
finding *What Something WANTS to be Called*™.
|
finding *What Something WANTS to be Called*™.
|
||||||
|
|
||||||
When naming things, we more or less follow this hierarchy, the first being the
|
When naming things, we follow this hierarchy, the first being the
|
||||||
most important to us (but we do all four whenever possible):
|
most important to us (but we do all four when possible):
|
||||||
1. Readable
|
1. Readable
|
||||||
2. Descriptive
|
2. Descriptive
|
||||||
3. Consistent
|
3. Consistent
|
||||||
@@ -74,7 +74,7 @@ abbreviations (sticking to ones we feel are common).
|
|||||||
We like descriptive names for things, especially functions and variables.
|
We like descriptive names for things, especially functions and variables.
|
||||||
Finding the right name for something is an important endeavor. You might notice
|
Finding the right name for something is an important endeavor. You might notice
|
||||||
from poking around our code that this often results in names that are a little
|
from poking around our code that this often results in names that are a little
|
||||||
longer than the average. Guilty. We're okay with a tiny bit more typing if it
|
longer than the average. Guilty. We're okay with a bit more typing if it
|
||||||
means our code is easier to understand.
|
means our code is easier to understand.
|
||||||
|
|
||||||
There are two exceptions to this rule that we also stick to as religiously as
|
There are two exceptions to this rule that we also stick to as religiously as
|
||||||
@@ -82,8 +82,7 @@ possible:
|
|||||||
|
|
||||||
First, while we realize hungarian notation (and similar systems for encoding
|
First, while we realize hungarian notation (and similar systems for encoding
|
||||||
type information into variable names) is providing a more descriptive name, we
|
type information into variable names) is providing a more descriptive name, we
|
||||||
feel that (for the average developer) it takes away from readability and
|
feel that (for the average developer) it takes away from readability and is to be avoided.
|
||||||
therefore is to be avoided.
|
|
||||||
|
|
||||||
Second, loop counters and other local throw-away variables often have a purpose
|
Second, loop counters and other local throw-away variables often have a purpose
|
||||||
which is obvious. There's no need, therefore, to get carried away with complex
|
which is obvious. There's no need, therefore, to get carried away with complex
|
||||||
@@ -128,7 +127,7 @@ the same. It will only hurt a little. We promise.
|
|||||||
#### Whitespace
|
#### Whitespace
|
||||||
|
|
||||||
Our C-style is to use spaces and to use 4 of them per indent level. It's a nice
|
Our C-style is to use spaces and to use 4 of them per indent level. It's a nice
|
||||||
power-of-2 number that looks decent on a wide screen. We have no more reason
|
power-of-2 number that looks decent on a wide-screen. We have no more reason
|
||||||
than that. We break that rule when we have lines that wrap (macros or function
|
than that. We break that rule when we have lines that wrap (macros or function
|
||||||
arguments or whatnot). When that happens, we like to indent further to line
|
arguments or whatnot). When that happens, we like to indent further to line
|
||||||
things up in nice tidy columns.
|
things up in nice tidy columns.
|
||||||
@@ -200,7 +199,7 @@ that happens, we like to indent further to line things up in nice tidy columns.
|
|||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Egad. Really? We use markdown and we like pdf files because they can be made to
|
Egad. Really? We use mark down and we like pdf files because they can be made to
|
||||||
look nice while still being portable. Good enough?
|
look nice while still being portable. Good enough?
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ marked as an optional parameter because some assertions only need a single
|
|||||||
"actual" parameter (e.g. null check).
|
"actual" parameter (e.g. null check).
|
||||||
"Size/count" refers to string lengths, number of array elements, etc.
|
"Size/count" refers to string lengths, number of array elements, etc.
|
||||||
|
|
||||||
Many of Unity's assertions are apparent duplications in that the same data type
|
Many of Unity's assertions are clear duplications in that the same data type
|
||||||
is handled by several assertions. The differences among these are in how failure
|
is handled by several assertions. The differences among these are in how failure
|
||||||
messages are presented. For instance, a `_HEX` variant of an assertion prints
|
messages are presented. For instance, a `_HEX` variant of an assertion prints
|
||||||
the expected and actual values of that assertion formatted as hexadecimal.
|
the expected and actual values of that assertion formatted as hexadecimal.
|
||||||
@@ -104,6 +104,15 @@ becomes messageified like thus...
|
|||||||
|
|
||||||
TEST_ASSERT_X_MESSAGE( {modifiers}, {expected}, actual, {size/count}, message )
|
TEST_ASSERT_X_MESSAGE( {modifiers}, {expected}, actual, {size/count}, message )
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- The `_MESSAGE` variants intentionally do not support `printf` style formatting
|
||||||
|
since many embedded projects don't support or avoid `printf` for various reasons.
|
||||||
|
It is possible to use `sprintf` before the assertion to assemble a complex fail
|
||||||
|
message, if necessary.
|
||||||
|
- If you want to output a counter value within an assertion fail message (e.g. from
|
||||||
|
a loop) , building up an array of results and then using one of the `_ARRAY`
|
||||||
|
assertions (see below) might be a handy alternative to `sprintf`.
|
||||||
|
|
||||||
|
|
||||||
#### TEST_ASSERT_X_ARRAY Variants
|
#### TEST_ASSERT_X_ARRAY Variants
|
||||||
|
|
||||||
@@ -694,7 +703,7 @@ point value.
|
|||||||
|
|
||||||
So what happens when it's zero? Zero - even more than other floating point
|
So what happens when it's zero? Zero - even more than other floating point
|
||||||
values - can be represented many different ways. It doesn't matter if you have
|
values - can be represented many different ways. It doesn't matter if you have
|
||||||
0 x 20or 0 x 263.It's still zero, right? Luckily, if you
|
0 x 20 or 0 x 263.It's still zero, right? Luckily, if you
|
||||||
subtract these values from each other, they will always produce a difference of
|
subtract these values from each other, they will always produce a difference of
|
||||||
zero, which will still fall between 0 plus or minus a delta of 0. So it still
|
zero, which will still fall between 0 plus or minus a delta of 0. So it still
|
||||||
works!
|
works!
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Unity Configuration Guide
|
# Unity Configuration Guide
|
||||||
|
|
||||||
## C Standards, Compilers and Microcontrollers
|
## C Standards, Compilers and Microcontrollers
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ definitions. A couple are macros with arguments. They live inside the
|
|||||||
unity_internals.h header file. We don't necessarily recommend opening that file
|
unity_internals.h header file. We don't necessarily recommend opening that file
|
||||||
unless you really need to. That file is proof that a cross-platform library is
|
unless you really need to. That file is proof that a cross-platform library is
|
||||||
challenging to build. From a more positive perspective, it is also proof that a
|
challenging to build. From a more positive perspective, it is also proof that a
|
||||||
great deal of complexity can be centralized primarily to one place in order to
|
great deal of complexity can be centralized primarily to one place to
|
||||||
provide a more consistent and simple experience elsewhere.
|
provide a more consistent and simple experience elsewhere.
|
||||||
|
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ sizes. It starts off by trying to do it automatically.
|
|||||||
##### `UNITY_EXCLUDE_STDINT_H`
|
##### `UNITY_EXCLUDE_STDINT_H`
|
||||||
|
|
||||||
The first thing that Unity does to guess your types is check `stdint.h`.
|
The first thing that Unity does to guess your types is check `stdint.h`.
|
||||||
This file includes defines like `UINT_MAX` that Unity can make use of to
|
This file includes defines like `UINT_MAX` that Unity can use to
|
||||||
learn a lot about your system. It's possible you don't want it to do this
|
learn a lot about your system. It's possible you don't want it to do this
|
||||||
(um. why not?) or (more likely) it's possible that your system doesn't
|
(um. why not?) or (more likely) it's possible that your system doesn't
|
||||||
support `stdint.h`. If that's the case, you're going to want to define this.
|
support `stdint.h`. If that's the case, you're going to want to define this.
|
||||||
@@ -215,6 +215,18 @@ Guide.
|
|||||||
_Example:_
|
_Example:_
|
||||||
#define UNITY_FLOAT_PRECISION 0.001f
|
#define UNITY_FLOAT_PRECISION 0.001f
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
|
||||||
|
##### `UNITY_EXCLUDE_STDDEF_H`
|
||||||
|
|
||||||
|
Unity uses the `NULL` macro, which defines the value of a null pointer constant,
|
||||||
|
defined in `stddef.h` by default. If you want to provide
|
||||||
|
your own macro for this, you should exclude the `stddef.h` header file by adding this
|
||||||
|
define to your configuration.
|
||||||
|
|
||||||
|
_Example:_
|
||||||
|
#define UNITY_EXCLUDE_STDDEF_H
|
||||||
|
|
||||||
|
|
||||||
### Toolset Customization
|
### Toolset Customization
|
||||||
|
|
||||||
@@ -222,7 +234,7 @@ In addition to the options listed above, there are a number of other options
|
|||||||
which will come in handy to customize Unity's behavior for your specific
|
which will come in handy to customize Unity's behavior for your specific
|
||||||
toolchain. It is possible that you may not need to touch any of these... but
|
toolchain. It is possible that you may not need to touch any of these... but
|
||||||
certain platforms, particularly those running in simulators, may need to jump
|
certain platforms, particularly those running in simulators, may need to jump
|
||||||
through extra hoops to operate properly. These macros will help in those
|
through extra hoops to run properly. These macros will help in those
|
||||||
situations.
|
situations.
|
||||||
|
|
||||||
|
|
||||||
@@ -248,7 +260,8 @@ _Example:_
|
|||||||
Say you are forced to run your test suite on an embedded processor with no
|
Say you are forced to run your test suite on an embedded processor with no
|
||||||
`stdout` option. You decide to route your test result output to a custom serial
|
`stdout` option. You decide to route your test result output to a custom serial
|
||||||
`RS232_putc()` function you wrote like thus:
|
`RS232_putc()` function you wrote like thus:
|
||||||
|
#include "RS232_header.h"
|
||||||
|
...
|
||||||
#define UNITY_OUTPUT_CHAR(a) RS232_putc(a)
|
#define UNITY_OUTPUT_CHAR(a) RS232_putc(a)
|
||||||
#define UNITY_OUTPUT_START() RS232_config(115200,1,8,0)
|
#define UNITY_OUTPUT_START() RS232_config(115200,1,8,0)
|
||||||
#define UNITY_OUTPUT_FLUSH() RS232_flush()
|
#define UNITY_OUTPUT_FLUSH() RS232_flush()
|
||||||
@@ -256,10 +269,7 @@ Say you are forced to run your test suite on an embedded processor with no
|
|||||||
|
|
||||||
_Note:_
|
_Note:_
|
||||||
`UNITY_OUTPUT_FLUSH()` can be set to the standard out flush function simply by
|
`UNITY_OUTPUT_FLUSH()` can be set to the standard out flush function simply by
|
||||||
specifying `UNITY_USE_FLUSH_STDOUT`. No other defines are required. If you
|
specifying `UNITY_USE_FLUSH_STDOUT`. No other defines are required.
|
||||||
specify a custom flush function instead with `UNITY_OUTPUT_FLUSH` directly, it
|
|
||||||
will declare an instance of your function by default. If you want to disable
|
|
||||||
this behavior, add `UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION`.
|
|
||||||
|
|
||||||
|
|
||||||
##### `UNITY_WEAK_ATTRIBUTE`
|
##### `UNITY_WEAK_ATTRIBUTE`
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ functional. The core Unity test framework is three files: a single C file and a
|
|||||||
couple header files. These team up to provide functions and macros to make
|
couple header files. These team up to provide functions and macros to make
|
||||||
testing easier.
|
testing easier.
|
||||||
|
|
||||||
Unity was designed to be cross platform. It works hard to stick with C standards
|
Unity was designed to be cross-platform. It works hard to stick with C standards
|
||||||
while still providing support for the many embedded C compilers that bend the
|
while still providing support for the many embedded C compilers that bend the
|
||||||
rules. Unity has been used with many compilers, including GCC, IAR, Clang,
|
rules. Unity has been used with many compilers, including GCC, IAR, Clang,
|
||||||
Green Hills, Microchip, and MS Visual Studio. It's not much work to get it to
|
Green Hills, Microchip, and MS Visual Studio. It's not much work to get it to
|
||||||
@@ -100,10 +100,11 @@ find setUp or tearDown when it links, you'll know you need to at least include
|
|||||||
an empty function for these.
|
an empty function for these.
|
||||||
|
|
||||||
The majority of the file will be a series of test functions. Test functions
|
The majority of the file will be a series of test functions. Test functions
|
||||||
follow the convention of starting with the word "test" or "spec". You don't HAVE
|
follow the convention of starting with the word "test_" or "spec_". You don't HAVE
|
||||||
to name them this way, but it makes it clear what functions are tests for other
|
to name them this way, but it makes it clear what functions are tests for other
|
||||||
developers. Test functions take no arguments and return nothing. All test
|
developers. Also, the automated scripts that come with Unity or Ceedling will default
|
||||||
accounting is handled internally in Unity.
|
to looking for test functions to be prefixed this way. Test functions take no arguments
|
||||||
|
and return nothing. All test accounting is handled internally in Unity.
|
||||||
|
|
||||||
Finally, at the bottom of your test file, you will write a `main()` function.
|
Finally, at the bottom of your test file, you will write a `main()` function.
|
||||||
This function will call `UNITY_BEGIN()`, then `RUN_TEST` for each test, and
|
This function will call `UNITY_BEGIN()`, then `RUN_TEST` for each test, and
|
||||||
@@ -148,7 +149,7 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
It's possible that you will require more customization than this, eventually.
|
It's possible that you will need more customization than this, eventually.
|
||||||
For that sort of thing, you're going to want to look at the configuration guide.
|
For that sort of thing, you're going to want to look at the configuration guide.
|
||||||
This should be enough to get you going, though.
|
This should be enough to get you going, though.
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
## With a Little Help From Our Friends
|
## With a Little Help From Our Friends
|
||||||
|
|
||||||
Sometimes what it takes to be a really efficient C programmer is a little non-C.
|
Sometimes what it takes to be a really efficient C programmer is a little non-C.
|
||||||
The Unity project includes a couple Ruby scripts for making your life just a tad
|
The Unity project includes a couple of Ruby scripts for making your life just a tad
|
||||||
easier. They are completely optional. If you choose to use them, you'll need a
|
easier. They are completely optional. If you choose to use them, you'll need a
|
||||||
copy of Ruby, of course. Just install whatever the latest version is, and it is
|
copy of Ruby, of course. Just install whatever the latest version is, and it is
|
||||||
likely to work. You can find Ruby at [ruby-lang.org](https://ruby-labg.org/).
|
likely to work. You can find Ruby at [ruby-lang.org](https://ruby-labg.org/).
|
||||||
@@ -105,7 +105,7 @@ UnityTestRunnerGenerator.new.run(testfile, runner_name, options)
|
|||||||
|
|
||||||
If you have multiple files to generate in a build script (such as a Rakefile),
|
If you have multiple files to generate in a build script (such as a Rakefile),
|
||||||
you might want to instantiate a generator object with your options and call it
|
you might want to instantiate a generator object with your options and call it
|
||||||
to generate each runner thereafter. Like thus:
|
to generate each runner afterwards. Like thus:
|
||||||
|
|
||||||
```Ruby
|
```Ruby
|
||||||
gen = UnityTestRunnerGenerator.new(options)
|
gen = UnityTestRunnerGenerator.new(options)
|
||||||
@@ -160,6 +160,18 @@ everything to run smoothly. If you provide the same YAML to the generator as
|
|||||||
used in CMock's configuration, you've already configured the generator properly.
|
used in CMock's configuration, you've already configured the generator properly.
|
||||||
|
|
||||||
|
|
||||||
|
##### `:externc`
|
||||||
|
|
||||||
|
This option should be defined if you are mixing C and CPP and want your test
|
||||||
|
runners to automatically include extern "C" support when they are generated.
|
||||||
|
|
||||||
|
##### `:mock_prefix` and `:mock_suffix`
|
||||||
|
|
||||||
|
Unity automatically generates calls to Init, Verify and Destroy for every file
|
||||||
|
included in the main test file that starts with the given mock prefix and ends
|
||||||
|
with the given mock suffix, file extension not included. By default, Unity
|
||||||
|
assumes a `Mock` prefix and no suffix.
|
||||||
|
|
||||||
##### `:plugins`
|
##### `:plugins`
|
||||||
|
|
||||||
This option specifies an array of plugins to be used (of course, the array can
|
This option specifies an array of plugins to be used (of course, the array can
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
int Counter = 0;
|
int Counter = 0;
|
||||||
int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */
|
int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */
|
||||||
|
|
||||||
/* This function is supposed to search through NumbersToFind and find a particular number.
|
/* This function is supposed to search through NumbersToFind and find a particular number.
|
||||||
* If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
|
* If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
|
||||||
* NumbersToFind is indexed from 1. Unfortunately it's broken
|
* NumbersToFind is indexed from 1. Unfortunately it's broken
|
||||||
* (and should therefore be caught by our tests) */
|
* (and should therefore be caught by our tests) */
|
||||||
int FindFunction_WhichIsBroken(int NumberToFind)
|
int FindFunction_WhichIsBroken(int NumberToFind)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i <= 8) /* Notice I should have been in braces */
|
while (i < 8) /* Notice I should have been in braces */
|
||||||
i++;
|
i++;
|
||||||
if (NumbersToFind[i] == NumberToFind) /* Yikes! I'm getting run after the loop finishes instead of during it! */
|
if (NumbersToFind[i] == NumberToFind) /* Yikes! I'm getting run after the loop finishes instead of during it! */
|
||||||
return i;
|
return i;
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
HERE = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/../..'
|
|
||||||
|
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require 'rake/clean'
|
require 'rake/clean'
|
||||||
require HERE + 'rakefile_helper'
|
require_relative 'rakefile_helper'
|
||||||
|
|
||||||
TEMP_DIRS = [
|
TEMP_DIRS = [
|
||||||
File.join(HERE, 'build')
|
File.join(__dir__, 'build')
|
||||||
].freeze
|
].freeze
|
||||||
|
|
||||||
TEMP_DIRS.each do |dir|
|
TEMP_DIRS.each do |dir|
|
||||||
@@ -32,8 +29,8 @@ task :summary do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc 'Build and test Unity'
|
desc 'Build and test Unity'
|
||||||
task all: %i(clean unit summary)
|
task all: %i[clean unit summary]
|
||||||
task default: %i(clobber all)
|
task default: %i[clobber all]
|
||||||
task ci: [:default]
|
task ci: [:default]
|
||||||
task cruise: [:default]
|
task cruise: [:default]
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require UNITY_ROOT + '/auto/unity_test_summary'
|
require_relative '../../auto/unity_test_summary'
|
||||||
require UNITY_ROOT + '/auto/generate_test_runner'
|
require_relative '../../auto/generate_test_runner'
|
||||||
require UNITY_ROOT + '/auto/colour_reporter'
|
require_relative '../../auto/colour_reporter'
|
||||||
|
|
||||||
module RakefileHelpers
|
module RakefileHelpers
|
||||||
C_EXTENSION = '.c'.freeze
|
C_EXTENSION = '.c'.freeze
|
||||||
@@ -149,7 +149,7 @@ module RakefileHelpers
|
|||||||
|
|
||||||
def report_summary
|
def report_summary
|
||||||
summary = UnityTestSummary.new
|
summary = UnityTestSummary.new
|
||||||
summary.root = HERE
|
summary.root = __dir__
|
||||||
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
||||||
results_glob.tr!('\\', '/')
|
results_glob.tr!('\\', '/')
|
||||||
results = Dir[results_glob]
|
results = Dir[results_glob]
|
||||||
|
|||||||
@@ -236,4 +236,12 @@
|
|||||||
/* #define UNITY_PTR_ATTRIBUTE __attribute__((far)) */
|
/* #define UNITY_PTR_ATTRIBUTE __attribute__((far)) */
|
||||||
/* #define UNITY_PTR_ATTRIBUTE near */
|
/* #define UNITY_PTR_ATTRIBUTE near */
|
||||||
|
|
||||||
|
/* Print execution time of each test when executed in verbose mode
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* TEST - PASS (10 ms)
|
||||||
|
*/
|
||||||
|
/* #define UNITY_INCLUDE_EXEC_TIME */
|
||||||
|
|
||||||
#endif /* UNITY_CONFIG_H */
|
#endif /* UNITY_CONFIG_H */
|
||||||
|
|||||||
@@ -4,15 +4,13 @@
|
|||||||
# [Released under MIT License. Please refer to license.txt for details]
|
# [Released under MIT License. Please refer to license.txt for details]
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
HERE = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
|
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require 'rake/clean'
|
require 'rake/clean'
|
||||||
require 'rake/testtask'
|
require 'rake/testtask'
|
||||||
require HERE + 'rakefile_helper'
|
require_relative 'rakefile_helper'
|
||||||
|
|
||||||
TEMP_DIRS = [
|
TEMP_DIRS = [
|
||||||
File.join(HERE, 'build')
|
File.join(__dir__, 'build')
|
||||||
].freeze
|
].freeze
|
||||||
|
|
||||||
TEMP_DIRS.each do |dir|
|
TEMP_DIRS.each do |dir|
|
||||||
@@ -33,10 +31,10 @@ task unit: [:prepare_for_tests] do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc 'Build and test Unity Framework'
|
desc 'Build and test Unity Framework'
|
||||||
task all: %i(clean unit)
|
task all: %i[clean unit]
|
||||||
task default: %i(clobber all)
|
task default: %i[clobber all]
|
||||||
task ci: %i(no_color default)
|
task ci: %i[no_color default]
|
||||||
task cruise: %i(no_color default)
|
task cruise: %i[no_color default]
|
||||||
|
|
||||||
desc 'Load configuration'
|
desc 'Load configuration'
|
||||||
task :config, :config_file do |_t, args|
|
task :config, :config_file do |_t, args|
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require HERE + '../../auto/unity_test_summary'
|
require_relative '../../auto/unity_test_summary'
|
||||||
require HERE + '../../auto/generate_test_runner'
|
require_relative '../../auto/generate_test_runner'
|
||||||
require HERE + '../../auto/colour_reporter'
|
require_relative '../../auto/colour_reporter'
|
||||||
|
|
||||||
module RakefileHelpers
|
module RakefileHelpers
|
||||||
C_EXTENSION = '.c'.freeze
|
C_EXTENSION = '.c'.freeze
|
||||||
@@ -16,7 +16,7 @@ module RakefileHelpers
|
|||||||
def load_configuration(config_file)
|
def load_configuration(config_file)
|
||||||
return if $configured
|
return if $configured
|
||||||
|
|
||||||
$cfg_file = HERE + "../../test/targets/#{config_file}" unless config_file =~ /[\\|\/]/
|
$cfg_file = "#{__dir__}/../../test/targets/#{config_file}" unless config_file =~ /[\\|\/]/
|
||||||
$cfg = YAML.load(File.read($cfg_file))
|
$cfg = YAML.load(File.read($cfg_file))
|
||||||
$colour_output = false unless $cfg['colour']
|
$colour_output = false unless $cfg['colour']
|
||||||
$configured = true if config_file != DEFAULT_CONFIG_FILE
|
$configured = true if config_file != DEFAULT_CONFIG_FILE
|
||||||
@@ -128,7 +128,7 @@ module RakefileHelpers
|
|||||||
|
|
||||||
def report_summary
|
def report_summary
|
||||||
summary = UnityTestSummary.new
|
summary = UnityTestSummary.new
|
||||||
summary.root = HERE
|
summary.root = __dir__
|
||||||
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
||||||
results_glob.tr!('\\', '/')
|
results_glob.tr!('\\', '/')
|
||||||
results = Dir[results_glob]
|
results = Dir[results_glob]
|
||||||
@@ -145,9 +145,9 @@ module RakefileHelpers
|
|||||||
$cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
|
$cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
|
||||||
|
|
||||||
# Get a list of all source files needed
|
# Get a list of all source files needed
|
||||||
src_files = Dir[HERE + 'src/*.c']
|
src_files = Dir["#{__dir__}/src/*.c"]
|
||||||
src_files += Dir[HERE + 'test/*.c']
|
src_files += Dir["#{__dir__}/test/*.c"]
|
||||||
src_files += Dir[HERE + 'test/main/*.c']
|
src_files += Dir["#{__dir__}/test/main/*.c"]
|
||||||
src_files << '../../src/unity.c'
|
src_files << '../../src/unity.c'
|
||||||
|
|
||||||
# Build object files
|
# Build object files
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ void UnityTestRunner(unityfunction* setup,
|
|||||||
UnityMalloc_StartTest();
|
UnityMalloc_StartTest();
|
||||||
UnityPointer_Init();
|
UnityPointer_Init();
|
||||||
|
|
||||||
|
UNITY_EXEC_TIME_START();
|
||||||
|
|
||||||
if (TEST_PROTECT())
|
if (TEST_PROTECT())
|
||||||
{
|
{
|
||||||
setup();
|
setup();
|
||||||
@@ -418,6 +420,8 @@ void UnityConcludeFixtureTest(void)
|
|||||||
if (UnityFixture.Verbose)
|
if (UnityFixture.Verbose)
|
||||||
{
|
{
|
||||||
UnityPrint(" PASS");
|
UnityPrint(" PASS");
|
||||||
|
UNITY_EXEC_TIME_STOP();
|
||||||
|
UNITY_PRINT_EXEC_TIME();
|
||||||
UNITY_PRINT_EOL();
|
UNITY_PRINT_EOL();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,6 @@ int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* You must compile with malloc replacement, as defined in unity_fixture_malloc_overrides.h */
|
/* You must compile with malloc replacement, as defined in unity_fixture_malloc_overrides.h */
|
||||||
void UnityMalloc_MakeMallocFailAfterCount(int count);
|
void UnityMalloc_MakeMallocFailAfterCount(int countdown);
|
||||||
|
|
||||||
#endif /* UNITY_FIXTURE_H_ */
|
#endif /* UNITY_FIXTURE_H_ */
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ extern struct UNITY_FIXTURE_T UnityFixture;
|
|||||||
|
|
||||||
typedef void unityfunction(void);
|
typedef void unityfunction(void);
|
||||||
void UnityTestRunner(unityfunction* setup,
|
void UnityTestRunner(unityfunction* setup,
|
||||||
unityfunction* body,
|
unityfunction* testBody,
|
||||||
unityfunction* teardown,
|
unityfunction* teardown,
|
||||||
const char* printableName,
|
const char* printableName,
|
||||||
const char* group,
|
const char* group,
|
||||||
@@ -37,7 +37,7 @@ void UnityMalloc_EndTest(void);
|
|||||||
int UnityGetCommandLineOptions(int argc, const char* argv[]);
|
int UnityGetCommandLineOptions(int argc, const char* argv[]);
|
||||||
void UnityConcludeFixtureTest(void);
|
void UnityConcludeFixtureTest(void);
|
||||||
|
|
||||||
void UnityPointer_Set(void** ptr, void* newValue, UNITY_LINE_TYPE line);
|
void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line);
|
||||||
void UnityPointer_UndoAllSets(void);
|
void UnityPointer_UndoAllSets(void);
|
||||||
void UnityPointer_Init(void);
|
void UnityPointer_Init(void);
|
||||||
#ifndef UNITY_MAX_POINTERS
|
#ifndef UNITY_MAX_POINTERS
|
||||||
|
|||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
121
|
122
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2.4.2
|
2.4.3
|
||||||
|
|
||||||
|
|||||||
+117
-22
@@ -14,8 +14,8 @@ void UNITY_OUTPUT_CHAR(int);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Helpful macros for us to use here in Assert functions */
|
/* Helpful macros for us to use here in Assert functions */
|
||||||
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; TEST_ABORT(); }
|
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); }
|
||||||
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; TEST_ABORT(); }
|
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); }
|
||||||
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return
|
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return
|
||||||
|
|
||||||
struct UNITY_STORAGE_T Unity;
|
struct UNITY_STORAGE_T Unity;
|
||||||
@@ -67,6 +67,7 @@ static const char UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " ";
|
|||||||
* Pretty Printers & Test Result Output Handlers
|
* Pretty Printers & Test Result Output Handlers
|
||||||
*-----------------------------------------------*/
|
*-----------------------------------------------*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityPrint(const char* string)
|
void UnityPrint(const char* string)
|
||||||
{
|
{
|
||||||
const char* pch = string;
|
const char* pch = string;
|
||||||
@@ -116,6 +117,7 @@ void UnityPrint(const char* string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityPrintLen(const char* string, const UNITY_UINT32 length)
|
void UnityPrintLen(const char* string, const UNITY_UINT32 length)
|
||||||
{
|
{
|
||||||
const char* pch = string;
|
const char* pch = string;
|
||||||
@@ -212,7 +214,9 @@ void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print)
|
|||||||
int nibble;
|
int nibble;
|
||||||
char nibbles = nibbles_to_print;
|
char nibbles = nibbles_to_print;
|
||||||
if ((unsigned)nibbles > (2 * sizeof(number)))
|
if ((unsigned)nibbles > (2 * sizeof(number)))
|
||||||
|
{
|
||||||
nibbles = 2 * sizeof(number);
|
nibbles = 2 * sizeof(number);
|
||||||
|
}
|
||||||
|
|
||||||
while (nibbles > 0)
|
while (nibbles > 0)
|
||||||
{
|
{
|
||||||
@@ -287,15 +291,24 @@ void UnityPrintFloat(const UNITY_DOUBLE input_number)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* handle zero, NaN, and +/- infinity */
|
/* handle zero, NaN, and +/- infinity */
|
||||||
if (number == 0.0f) UnityPrint("0");
|
if (number == 0.0f)
|
||||||
else if (isnan(number)) UnityPrint("nan");
|
{
|
||||||
else if (isinf(number)) UnityPrint("inf");
|
UnityPrint("0");
|
||||||
|
}
|
||||||
|
else if (isnan(number))
|
||||||
|
{
|
||||||
|
UnityPrint("nan");
|
||||||
|
}
|
||||||
|
else if (isinf(number))
|
||||||
|
{
|
||||||
|
UnityPrint("inf");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UNITY_INT32 n_int = 0, n;
|
UNITY_INT32 n_int = 0, n;
|
||||||
int exponent = 0;
|
int exponent = 0;
|
||||||
int decimals, digits;
|
int decimals, digits;
|
||||||
char buf[16];
|
char buf[16] = {0};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scale up or down by powers of 10. To minimize rounding error,
|
* Scale up or down by powers of 10. To minimize rounding error,
|
||||||
@@ -447,6 +460,7 @@ void UnityConcludeTest(void)
|
|||||||
|
|
||||||
Unity.CurrentTestFailed = 0;
|
Unity.CurrentTestFailed = 0;
|
||||||
Unity.CurrentTestIgnored = 0;
|
Unity.CurrentTestIgnored = 0;
|
||||||
|
UNITY_EXEC_TIME_RESET();
|
||||||
UNITY_PRINT_EOL();
|
UNITY_PRINT_EOL();
|
||||||
UNITY_FLUSH_CALL();
|
UNITY_FLUSH_CALL();
|
||||||
}
|
}
|
||||||
@@ -534,6 +548,7 @@ static void UnityPrintExpectedAndActualStringsLen(const char* expected,
|
|||||||
* Assertion & Control Helpers
|
* Assertion & Control Helpers
|
||||||
*-----------------------------------------------*/
|
*-----------------------------------------------*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected,
|
static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected,
|
||||||
UNITY_INTERNAL_PTR actual,
|
UNITY_INTERNAL_PTR actual,
|
||||||
const UNITY_LINE_TYPE lineNumber,
|
const UNITY_LINE_TYPE lineNumber,
|
||||||
@@ -566,6 +581,7 @@ static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected,
|
|||||||
* Assertion Functions
|
* Assertion Functions
|
||||||
*-----------------------------------------------*/
|
*-----------------------------------------------*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityAssertBits(const UNITY_INT mask,
|
void UnityAssertBits(const UNITY_INT mask,
|
||||||
const UNITY_INT expected,
|
const UNITY_INT expected,
|
||||||
const UNITY_INT actual,
|
const UNITY_INT actual,
|
||||||
@@ -672,11 +688,17 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
if (expected == actual)
|
||||||
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
{
|
||||||
UNITY_FAIL_AND_BAIL;
|
return; /* Both are NULL or same pointer */
|
||||||
|
}
|
||||||
|
|
||||||
while (elements--)
|
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||||
|
{
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((elements > 0) && elements--)
|
||||||
{
|
{
|
||||||
UNITY_INT expect_val;
|
UNITY_INT expect_val;
|
||||||
UNITY_INT actual_val;
|
UNITY_INT actual_val;
|
||||||
@@ -733,13 +755,13 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
|||||||
/*-----------------------------------------------*/
|
/*-----------------------------------------------*/
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT
|
#ifndef UNITY_EXCLUDE_FLOAT
|
||||||
/* Wrap this define in a function with variable types as float or double */
|
/* Wrap this define in a function with variable types as float or double */
|
||||||
#define UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff) \
|
#define UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff) \
|
||||||
if (isinf(expected) && isinf(actual) && ((expected < 0) == (actual < 0))) return 1; \
|
if (isinf(expected) && isinf(actual) && (((expected) < 0) == ((actual) < 0))) return 1; \
|
||||||
if (UNITY_NAN_CHECK) return 1; \
|
if (UNITY_NAN_CHECK) return 1; \
|
||||||
diff = actual - expected; \
|
(diff) = (actual) - (expected); \
|
||||||
if (diff < 0) diff = -diff; \
|
if ((diff) < 0) (diff) = -(diff); \
|
||||||
if (delta < 0) delta = -delta; \
|
if ((delta) < 0) (delta) = -(delta); \
|
||||||
return !(isnan(diff) || isinf(diff) || (diff > delta))
|
return !(isnan(diff) || isinf(diff) || ((diff) > (delta)))
|
||||||
/* This first part of this condition will catch any NaN or Infinite values */
|
/* This first part of this condition will catch any NaN or Infinite values */
|
||||||
#ifndef UNITY_NAN_NOT_EQUAL_NAN
|
#ifndef UNITY_NAN_NOT_EQUAL_NAN
|
||||||
#define UNITY_NAN_CHECK isnan(expected) && isnan(actual)
|
#define UNITY_NAN_CHECK isnan(expected) && isnan(actual)
|
||||||
@@ -759,12 +781,14 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
|||||||
UnityPrint(UnityStrDelta)
|
UnityPrint(UnityStrDelta)
|
||||||
#endif /* UNITY_EXCLUDE_FLOAT_PRINT */
|
#endif /* UNITY_EXCLUDE_FLOAT_PRINT */
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
static int UnityFloatsWithin(UNITY_FLOAT delta, UNITY_FLOAT expected, UNITY_FLOAT actual)
|
static int UnityFloatsWithin(UNITY_FLOAT delta, UNITY_FLOAT expected, UNITY_FLOAT actual)
|
||||||
{
|
{
|
||||||
UNITY_FLOAT diff;
|
UNITY_FLOAT diff;
|
||||||
UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff);
|
UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected,
|
void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected,
|
||||||
UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual,
|
UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual,
|
||||||
const UNITY_UINT32 num_elements,
|
const UNITY_UINT32 num_elements,
|
||||||
@@ -783,9 +807,15 @@ void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
if (expected == actual)
|
||||||
|
{
|
||||||
|
return; /* Both are NULL or same pointer */
|
||||||
|
}
|
||||||
|
|
||||||
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||||
|
{
|
||||||
UNITY_FAIL_AND_BAIL;
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
}
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@@ -870,14 +900,18 @@ void UnityAssertFloatSpecial(const UNITY_FLOAT actual,
|
|||||||
UnityTestResultsFailBegin(lineNumber);
|
UnityTestResultsFailBegin(lineNumber);
|
||||||
UnityPrint(UnityStrExpected);
|
UnityPrint(UnityStrExpected);
|
||||||
if (!should_be_trait)
|
if (!should_be_trait)
|
||||||
|
{
|
||||||
UnityPrint(UnityStrNot);
|
UnityPrint(UnityStrNot);
|
||||||
|
}
|
||||||
UnityPrint(trait_names[trait_index]);
|
UnityPrint(trait_names[trait_index]);
|
||||||
UnityPrint(UnityStrWas);
|
UnityPrint(UnityStrWas);
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
||||||
UnityPrintFloat((UNITY_DOUBLE)actual);
|
UnityPrintFloat((UNITY_DOUBLE)actual);
|
||||||
#else
|
#else
|
||||||
if (should_be_trait)
|
if (should_be_trait)
|
||||||
|
{
|
||||||
UnityPrint(UnityStrNot);
|
UnityPrint(UnityStrNot);
|
||||||
|
}
|
||||||
UnityPrint(trait_names[trait_index]);
|
UnityPrint(trait_names[trait_index]);
|
||||||
#endif
|
#endif
|
||||||
UnityAddMsgIfSpecified(msg);
|
UnityAddMsgIfSpecified(msg);
|
||||||
@@ -895,6 +929,7 @@ static int UnityDoublesWithin(UNITY_DOUBLE delta, UNITY_DOUBLE expected, UNITY_D
|
|||||||
UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff);
|
UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected,
|
void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected,
|
||||||
UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual,
|
UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual,
|
||||||
const UNITY_UINT32 num_elements,
|
const UNITY_UINT32 num_elements,
|
||||||
@@ -913,9 +948,15 @@ void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expecte
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
if (expected == actual)
|
||||||
|
{
|
||||||
|
return; /* Both are NULL or same pointer */
|
||||||
|
}
|
||||||
|
|
||||||
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||||
|
{
|
||||||
UNITY_FAIL_AND_BAIL;
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
}
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@@ -955,7 +996,6 @@ void UnityAssertDoublesWithin(const UNITY_DOUBLE delta,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------*/
|
/*-----------------------------------------------*/
|
||||||
|
|
||||||
void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual,
|
void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual,
|
||||||
const char* msg,
|
const char* msg,
|
||||||
const UNITY_LINE_TYPE lineNumber,
|
const UNITY_LINE_TYPE lineNumber,
|
||||||
@@ -1000,14 +1040,18 @@ void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual,
|
|||||||
UnityTestResultsFailBegin(lineNumber);
|
UnityTestResultsFailBegin(lineNumber);
|
||||||
UnityPrint(UnityStrExpected);
|
UnityPrint(UnityStrExpected);
|
||||||
if (!should_be_trait)
|
if (!should_be_trait)
|
||||||
|
{
|
||||||
UnityPrint(UnityStrNot);
|
UnityPrint(UnityStrNot);
|
||||||
|
}
|
||||||
UnityPrint(trait_names[trait_index]);
|
UnityPrint(trait_names[trait_index]);
|
||||||
UnityPrint(UnityStrWas);
|
UnityPrint(UnityStrWas);
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
||||||
UnityPrintFloat(actual);
|
UnityPrintFloat(actual);
|
||||||
#else
|
#else
|
||||||
if (should_be_trait)
|
if (should_be_trait)
|
||||||
|
{
|
||||||
UnityPrint(UnityStrNot);
|
UnityPrint(UnityStrNot);
|
||||||
|
}
|
||||||
UnityPrint(trait_names[trait_index]);
|
UnityPrint(trait_names[trait_index]);
|
||||||
#endif
|
#endif
|
||||||
UnityAddMsgIfSpecified(msg);
|
UnityAddMsgIfSpecified(msg);
|
||||||
@@ -1030,16 +1074,24 @@ void UnityAssertNumbersWithin(const UNITY_UINT delta,
|
|||||||
if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
|
if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
|
||||||
{
|
{
|
||||||
if (actual > expected)
|
if (actual > expected)
|
||||||
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(actual - expected) > delta);
|
{
|
||||||
|
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(actual - expected) > delta);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(expected - actual) > delta);
|
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(expected - actual) > delta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((UNITY_UINT)actual > (UNITY_UINT)expected)
|
if ((UNITY_UINT)actual > (UNITY_UINT)expected)
|
||||||
|
{
|
||||||
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(actual - expected) > delta);
|
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(actual - expected) > delta);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(expected - actual) > delta);
|
Unity.CurrentTestFailed = (UNITY_UINT)((UNITY_UINT)(expected - actual) > delta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Unity.CurrentTestFailed)
|
if (Unity.CurrentTestFailed)
|
||||||
@@ -1235,9 +1287,15 @@ void UnityAssertEqualMemory(UNITY_INTERNAL_PTR expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
if (expected == actual)
|
||||||
|
{
|
||||||
|
return; /* Both are NULL or same pointer */
|
||||||
|
}
|
||||||
|
|
||||||
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||||
|
{
|
||||||
UNITY_FAIL_AND_BAIL;
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
}
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@@ -1314,6 +1372,7 @@ UNITY_INTERNAL_PTR UnityNumToPtr(const UNITY_INT num, const UNITY_UINT8 size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT
|
#ifndef UNITY_EXCLUDE_FLOAT
|
||||||
|
/*-----------------------------------------------*/
|
||||||
UNITY_INTERNAL_PTR UnityFloatToPtr(const float num)
|
UNITY_INTERNAL_PTR UnityFloatToPtr(const float num)
|
||||||
{
|
{
|
||||||
UnityQuickCompare.f = num;
|
UnityQuickCompare.f = num;
|
||||||
@@ -1322,6 +1381,7 @@ UNITY_INTERNAL_PTR UnityFloatToPtr(const float num)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_DOUBLE
|
#ifndef UNITY_EXCLUDE_DOUBLE
|
||||||
|
/*-----------------------------------------------*/
|
||||||
UNITY_INTERNAL_PTR UnityDoubleToPtr(const double num)
|
UNITY_INTERNAL_PTR UnityDoubleToPtr(const double num)
|
||||||
{
|
{
|
||||||
UnityQuickCompare.d = num;
|
UnityQuickCompare.d = num;
|
||||||
@@ -1333,6 +1393,7 @@ UNITY_INTERNAL_PTR UnityDoubleToPtr(const double num)
|
|||||||
* Control Functions
|
* Control Functions
|
||||||
*-----------------------------------------------*/
|
*-----------------------------------------------*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
void UnityFail(const char* msg, const UNITY_LINE_TYPE line)
|
void UnityFail(const char* msg, const UNITY_LINE_TYPE line)
|
||||||
{
|
{
|
||||||
RETURN_IF_FAIL_OR_IGNORE;
|
RETURN_IF_FAIL_OR_IGNORE;
|
||||||
@@ -1412,6 +1473,7 @@ void UnityBegin(const char* filename)
|
|||||||
Unity.TestIgnores = 0;
|
Unity.TestIgnores = 0;
|
||||||
Unity.CurrentTestFailed = 0;
|
Unity.CurrentTestFailed = 0;
|
||||||
Unity.CurrentTestIgnored = 0;
|
Unity.CurrentTestIgnored = 0;
|
||||||
|
UNITY_EXEC_TIME_RESET();
|
||||||
|
|
||||||
UNITY_CLR_DETAILS();
|
UNITY_CLR_DETAILS();
|
||||||
UNITY_OUTPUT_START();
|
UNITY_OUTPUT_START();
|
||||||
@@ -1456,6 +1518,7 @@ char* UnityOptionIncludeNamed = NULL;
|
|||||||
char* UnityOptionExcludeNamed = NULL;
|
char* UnityOptionExcludeNamed = NULL;
|
||||||
int UnityVerbosity = 1;
|
int UnityVerbosity = 1;
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
int UnityParseOptions(int argc, char** argv)
|
int UnityParseOptions(int argc, char** argv)
|
||||||
{
|
{
|
||||||
UnityOptionIncludeNamed = NULL;
|
UnityOptionIncludeNamed = NULL;
|
||||||
@@ -1472,9 +1535,13 @@ int UnityParseOptions(int argc, char** argv)
|
|||||||
case 'n': /* include tests with name including this string */
|
case 'n': /* include tests with name including this string */
|
||||||
case 'f': /* an alias for -n */
|
case 'f': /* an alias for -n */
|
||||||
if (argv[i][2] == '=')
|
if (argv[i][2] == '=')
|
||||||
|
{
|
||||||
UnityOptionIncludeNamed = &argv[i][3];
|
UnityOptionIncludeNamed = &argv[i][3];
|
||||||
|
}
|
||||||
else if (++i < argc)
|
else if (++i < argc)
|
||||||
|
{
|
||||||
UnityOptionIncludeNamed = argv[i];
|
UnityOptionIncludeNamed = argv[i];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UnityPrint("ERROR: No Test String to Include Matches For");
|
UnityPrint("ERROR: No Test String to Include Matches For");
|
||||||
@@ -1490,9 +1557,13 @@ int UnityParseOptions(int argc, char** argv)
|
|||||||
break;
|
break;
|
||||||
case 'x': /* exclude tests with name including this string */
|
case 'x': /* exclude tests with name including this string */
|
||||||
if (argv[i][2] == '=')
|
if (argv[i][2] == '=')
|
||||||
|
{
|
||||||
UnityOptionExcludeNamed = &argv[i][3];
|
UnityOptionExcludeNamed = &argv[i][3];
|
||||||
|
}
|
||||||
else if (++i < argc)
|
else if (++i < argc)
|
||||||
|
{
|
||||||
UnityOptionExcludeNamed = argv[i];
|
UnityOptionExcludeNamed = argv[i];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UnityPrint("ERROR: No Test String to Exclude Matches For");
|
UnityPrint("ERROR: No Test String to Exclude Matches For");
|
||||||
@@ -1512,6 +1583,7 @@ int UnityParseOptions(int argc, char** argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
int IsStringInBiggerString(const char* longstring, const char* shortstring)
|
int IsStringInBiggerString(const char* longstring, const char* shortstring)
|
||||||
{
|
{
|
||||||
const char* lptr = longstring;
|
const char* lptr = longstring;
|
||||||
@@ -1519,7 +1591,9 @@ int IsStringInBiggerString(const char* longstring, const char* shortstring)
|
|||||||
const char* lnext = lptr;
|
const char* lnext = lptr;
|
||||||
|
|
||||||
if (*sptr == '*')
|
if (*sptr == '*')
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
while (*lptr)
|
while (*lptr)
|
||||||
{
|
{
|
||||||
@@ -1550,9 +1624,11 @@ int IsStringInBiggerString(const char* longstring, const char* shortstring)
|
|||||||
lptr = lnext;
|
lptr = lnext;
|
||||||
sptr = shortstring;
|
sptr = shortstring;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
int UnityStringArgumentMatches(const char* str)
|
int UnityStringArgumentMatches(const char* str)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
@@ -1565,7 +1641,9 @@ int UnityStringArgumentMatches(const char* str)
|
|||||||
while (ptr1[0] != 0)
|
while (ptr1[0] != 0)
|
||||||
{
|
{
|
||||||
if ((ptr1[0] == '"') || (ptr1[0] == '\''))
|
if ((ptr1[0] == '"') || (ptr1[0] == '\''))
|
||||||
|
{
|
||||||
ptr1++;
|
ptr1++;
|
||||||
|
}
|
||||||
|
|
||||||
/* look for the start of the next partial */
|
/* look for the start of the next partial */
|
||||||
ptr2 = ptr1;
|
ptr2 = ptr1;
|
||||||
@@ -1574,26 +1652,37 @@ int UnityStringArgumentMatches(const char* str)
|
|||||||
{
|
{
|
||||||
ptr2++;
|
ptr2++;
|
||||||
if ((ptr2[0] == ':') && (ptr2[1] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ','))
|
if ((ptr2[0] == ':') && (ptr2[1] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ','))
|
||||||
|
{
|
||||||
ptrf = &ptr2[1];
|
ptrf = &ptr2[1];
|
||||||
|
}
|
||||||
} while ((ptr2[0] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ','));
|
} while ((ptr2[0] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ','));
|
||||||
|
|
||||||
while ((ptr2[0] != 0) && ((ptr2[0] == ':') || (ptr2[0] == '\'') || (ptr2[0] == '"') || (ptr2[0] == ',')))
|
while ((ptr2[0] != 0) && ((ptr2[0] == ':') || (ptr2[0] == '\'') || (ptr2[0] == '"') || (ptr2[0] == ',')))
|
||||||
|
{
|
||||||
ptr2++;
|
ptr2++;
|
||||||
|
}
|
||||||
|
|
||||||
/* done if complete filename match */
|
/* done if complete filename match */
|
||||||
retval = IsStringInBiggerString(Unity.TestFile, ptr1);
|
retval = IsStringInBiggerString(Unity.TestFile, ptr1);
|
||||||
if (retval == 1)
|
if (retval == 1)
|
||||||
|
{
|
||||||
return retval;
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
/* done if testname match after filename partial match */
|
/* done if testname match after filename partial match */
|
||||||
if ((retval == 2) && (ptrf != 0))
|
if ((retval == 2) && (ptrf != 0))
|
||||||
{
|
{
|
||||||
if (IsStringInBiggerString(Unity.CurrentTestName, ptrf))
|
if (IsStringInBiggerString(Unity.CurrentTestName, ptrf))
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* done if complete testname match */
|
/* done if complete testname match */
|
||||||
if (IsStringInBiggerString(Unity.CurrentTestName, ptr1) == 1)
|
if (IsStringInBiggerString(Unity.CurrentTestName, ptr1) == 1)
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
ptr1 = ptr2;
|
ptr1 = ptr2;
|
||||||
}
|
}
|
||||||
@@ -1602,6 +1691,7 @@ int UnityStringArgumentMatches(const char* str)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------*/
|
||||||
int UnityTestMatches(void)
|
int UnityTestMatches(void)
|
||||||
{
|
{
|
||||||
/* Check if this test name matches the included test pattern */
|
/* Check if this test name matches the included test pattern */
|
||||||
@@ -1611,14 +1701,19 @@ int UnityTestMatches(void)
|
|||||||
retval = UnityStringArgumentMatches(UnityOptionIncludeNamed);
|
retval = UnityStringArgumentMatches(UnityOptionIncludeNamed);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
retval = 1;
|
retval = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if this test name matches the excluded test pattern */
|
/* Check if this test name matches the excluded test pattern */
|
||||||
if (UnityOptionExcludeNamed)
|
if (UnityOptionExcludeNamed)
|
||||||
{
|
{
|
||||||
if (UnityStringArgumentMatches(UnityOptionExcludeNamed))
|
if (UnityStringArgumentMatches(UnityOptionExcludeNamed))
|
||||||
|
{
|
||||||
retval = 0;
|
retval = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -402,8 +402,8 @@ int suiteTearDown(int num_failures);
|
|||||||
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, (message))
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, (message))
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
/* Integer Ranges (of all sizes) */
|
/* Integer Ranges (of all sizes) */
|
||||||
#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
|||||||
+100
-42
@@ -19,6 +19,10 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXCLUDE_STDDEF_H
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Unity Attempts to Auto-Detect Integer Types
|
/* Unity Attempts to Auto-Detect Integer Types
|
||||||
* Attempt 1: UINT_MAX, ULONG_MAX in <limits.h>, or default to 32 bits
|
* Attempt 1: UINT_MAX, ULONG_MAX in <limits.h>, or default to 32 bits
|
||||||
* Attempt 2: UINTPTR_MAX in <stdint.h>, or default to same size as long
|
* Attempt 2: UINTPTR_MAX in <stdint.h>, or default to same size as long
|
||||||
@@ -32,6 +36,10 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXCLUDE_TIME_H
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-------------------------------------------------------
|
/*-------------------------------------------------------
|
||||||
* Guess Widths If Not Specified
|
* Guess Widths If Not Specified
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
@@ -241,30 +249,30 @@ typedef UNITY_FLOAT_TYPE UNITY_FLOAT;
|
|||||||
* Output Method: stdout (DEFAULT)
|
* Output Method: stdout (DEFAULT)
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
#ifndef UNITY_OUTPUT_CHAR
|
#ifndef UNITY_OUTPUT_CHAR
|
||||||
/* Default to using putchar, which is defined in stdio.h */
|
/* Default to using putchar, which is defined in stdio.h */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#define UNITY_OUTPUT_CHAR(a) (void)putchar(a)
|
#define UNITY_OUTPUT_CHAR(a) (void)putchar(a)
|
||||||
#else
|
#else
|
||||||
/* If defined as something else, make sure we declare it here so it's ready for use */
|
/* If defined as something else, make sure we declare it here so it's ready for use */
|
||||||
#ifdef UNITY_OUTPUT_CHAR_HEADER_DECLARATION
|
#ifdef UNITY_OUTPUT_CHAR_HEADER_DECLARATION
|
||||||
extern void UNITY_OUTPUT_CHAR_HEADER_DECLARATION;
|
extern void UNITY_OUTPUT_CHAR_HEADER_DECLARATION;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_OUTPUT_FLUSH
|
#ifndef UNITY_OUTPUT_FLUSH
|
||||||
#ifdef UNITY_USE_FLUSH_STDOUT
|
#ifdef UNITY_USE_FLUSH_STDOUT
|
||||||
/* We want to use the stdout flush utility */
|
/* We want to use the stdout flush utility */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#define UNITY_OUTPUT_FLUSH() (void)fflush(stdout)
|
#define UNITY_OUTPUT_FLUSH() (void)fflush(stdout)
|
||||||
|
#else
|
||||||
|
/* We've specified nothing, therefore flush should just be ignored */
|
||||||
|
#define UNITY_OUTPUT_FLUSH()
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
/* We've specified nothing, therefore flush should just be ignored */
|
/* If defined as something else, make sure we declare it here so it's ready for use */
|
||||||
#define UNITY_OUTPUT_FLUSH()
|
#ifdef UNITY_OUTPUT_FLUSH_HEADER_DECLARATION
|
||||||
#endif
|
extern void UNITY_OUTPUT_FLUSH_HEADER_DECLARATION;
|
||||||
#else
|
#endif
|
||||||
/* We've defined flush as something else, so make sure we declare it here so it's ready for use */
|
|
||||||
#ifdef UNITY_OUTPUT_FLUSH_HEADER_DECLARATION
|
|
||||||
extern void UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION;
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_OUTPUT_FLUSH
|
#ifndef UNITY_OUTPUT_FLUSH
|
||||||
@@ -285,6 +293,44 @@ extern void UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION;
|
|||||||
#define UNITY_OUTPUT_COMPLETE()
|
#define UNITY_OUTPUT_COMPLETE()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXEC_TIME_RESET
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
#define UNITY_EXEC_TIME_RESET()\
|
||||||
|
Unity.CurrentTestStartTime = 0;\
|
||||||
|
Unity.CurrentTestStopTime = 0;
|
||||||
|
#else
|
||||||
|
#define UNITY_EXEC_TIME_RESET()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXEC_TIME_START
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
#define UNITY_EXEC_TIME_START() Unity.CurrentTestStartTime = UNITY_CLOCK_MS();
|
||||||
|
#else
|
||||||
|
#define UNITY_EXEC_TIME_START()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXEC_TIME_STOP
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
#define UNITY_EXEC_TIME_STOP() Unity.CurrentTestStopTime = UNITY_CLOCK_MS();
|
||||||
|
#else
|
||||||
|
#define UNITY_EXEC_TIME_STOP()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_PRINT_EXEC_TIME
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
#define UNITY_PRINT_EXEC_TIME() \
|
||||||
|
UnityPrint(" (");\
|
||||||
|
UNITY_COUNTER_TYPE execTimeMs = (Unity.CurrentTestStopTime - Unity.CurrentTestStartTime);\
|
||||||
|
UnityPrintNumberUnsigned(execTimeMs);\
|
||||||
|
UnityPrint(" ms)");
|
||||||
|
#else
|
||||||
|
#define UNITY_PRINT_EXEC_TIME()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-------------------------------------------------------
|
/*-------------------------------------------------------
|
||||||
* Footprint
|
* Footprint
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
@@ -313,7 +359,6 @@ extern void UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION;
|
|||||||
# undef UNITY_WEAK_PRAGMA
|
# undef UNITY_WEAK_PRAGMA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------
|
/*-------------------------------------------------------
|
||||||
* Internal Structs Needed
|
* Internal Structs Needed
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
@@ -354,11 +399,13 @@ UNITY_DISPLAY_STYLE_UINT = sizeof(unsigned) + UNITY_DISPLAY_RANGE_UINT,
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
UNITY_WITHIN = 0,
|
||||||
UNITY_EQUAL_TO = 1,
|
UNITY_EQUAL_TO = 1,
|
||||||
UNITY_GREATER_THAN = 2,
|
UNITY_GREATER_THAN = 2,
|
||||||
UNITY_GREATER_OR_EQUAL = 2 + UNITY_EQUAL_TO,
|
UNITY_GREATER_OR_EQUAL = 2 + UNITY_EQUAL_TO,
|
||||||
UNITY_SMALLER_THAN = 4,
|
UNITY_SMALLER_THAN = 4,
|
||||||
UNITY_SMALLER_OR_EQUAL = 4 + UNITY_EQUAL_TO
|
UNITY_SMALLER_OR_EQUAL = 4 + UNITY_EQUAL_TO,
|
||||||
|
UNITY_UNKNOWN
|
||||||
} UNITY_COMPARISON_T;
|
} UNITY_COMPARISON_T;
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT
|
#ifndef UNITY_EXCLUDE_FLOAT
|
||||||
@@ -379,7 +426,8 @@ typedef enum UNITY_FLOAT_TRAIT
|
|||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
UNITY_ARRAY_TO_VAL = 0,
|
UNITY_ARRAY_TO_VAL = 0,
|
||||||
UNITY_ARRAY_TO_ARRAY
|
UNITY_ARRAY_TO_ARRAY,
|
||||||
|
UNITY_ARRAY_UNKNOWN
|
||||||
} UNITY_FLAGS_T;
|
} UNITY_FLAGS_T;
|
||||||
|
|
||||||
struct UNITY_STORAGE_T
|
struct UNITY_STORAGE_T
|
||||||
@@ -396,6 +444,10 @@ struct UNITY_STORAGE_T
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStartTime;
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStopTime;
|
||||||
|
#endif
|
||||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
#endif
|
#endif
|
||||||
@@ -422,8 +474,8 @@ void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int
|
|||||||
#define UNITY_SET_DETAILS(d1,d2)
|
#define UNITY_SET_DETAILS(d1,d2)
|
||||||
#else
|
#else
|
||||||
#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; }
|
#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; }
|
||||||
#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = 0; }
|
#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = 0; }
|
||||||
#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = d2; }
|
#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = (d2); }
|
||||||
|
|
||||||
#ifndef UNITY_DETAIL1_NAME
|
#ifndef UNITY_DETAIL1_NAME
|
||||||
#define UNITY_DETAIL1_NAME "Function"
|
#define UNITY_DETAIL1_NAME "Function"
|
||||||
@@ -442,9 +494,9 @@ void UnityPrint(const char* string);
|
|||||||
void UnityPrintLen(const char* string, const UNITY_UINT32 length);
|
void UnityPrintLen(const char* string, const UNITY_UINT32 length);
|
||||||
void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number);
|
void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number);
|
||||||
void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style);
|
void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style);
|
||||||
void UnityPrintNumber(const UNITY_INT number);
|
void UnityPrintNumber(const UNITY_INT number_to_print);
|
||||||
void UnityPrintNumberUnsigned(const UNITY_UINT number);
|
void UnityPrintNumberUnsigned(const UNITY_UINT number);
|
||||||
void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles);
|
void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print);
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
||||||
void UnityPrintFloat(const UNITY_DOUBLE input_number);
|
void UnityPrintFloat(const UNITY_DOUBLE input_number);
|
||||||
@@ -594,6 +646,12 @@ extern const char UnityStrErr64[];
|
|||||||
#define TEST_ABORT() return
|
#define TEST_ABORT() return
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXCLUDE_TIME_H
|
||||||
|
#define UNITY_CLOCK_MS() (UNITY_COUNTER_TYPE)((clock() * 1000) / CLOCKS_PER_SEC)
|
||||||
|
#else
|
||||||
|
#define UNITY_CLOCK_MS()
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
|
/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
|
||||||
#ifndef RUN_TEST
|
#ifndef RUN_TEST
|
||||||
#ifdef __STDC_VERSION__
|
#ifdef __STDC_VERSION__
|
||||||
@@ -748,18 +806,18 @@ int UnityTestMatches(void);
|
|||||||
#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY)
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY)
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) expected, sizeof(int)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) (expected), sizeof(int)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )expected, 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )expected, 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )expected, 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) expected, sizeof(unsigned int)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) (expected), sizeof(unsigned int)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT8 )expected, 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT16)expected, 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT16)(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT32)expected, 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT32)(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )expected, 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )expected, 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )expected, 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_PTR_TO_INT) expected, sizeof(int*)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_PTR_TO_INT) (expected), sizeof(int*)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL)
|
||||||
|
|
||||||
@@ -770,9 +828,9 @@ int UnityTestMatches(void);
|
|||||||
#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_ARRAY)
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_ARRAY)
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_ARRAY)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)expected, 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT64)expected, 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)expected, 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64)
|
#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64)
|
||||||
#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64)
|
#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64)
|
||||||
#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64)
|
#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64)
|
||||||
@@ -854,10 +912,10 @@ int UnityTestMatches(void);
|
|||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
|
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
|
#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
|
||||||
#else
|
#else
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((UNITY_DOUBLE)(delta), (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)line)
|
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((UNITY_DOUBLE)(delta), (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line))
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((UNITY_DOUBLE)(expected) * (UNITY_DOUBLE)UNITY_DOUBLE_PRECISION, (UNITY_DOUBLE)expected, (UNITY_DOUBLE)actual, (UNITY_LINE_TYPE)(line), message)
|
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((UNITY_DOUBLE)(expected) * (UNITY_DOUBLE)UNITY_DOUBLE_PRECISION, (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (UNITY_LINE_TYPE)(line), (message))
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((UNITY_DOUBLE*)(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_ARRAY_TO_ARRAY)
|
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((UNITY_DOUBLE*)(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY)
|
||||||
#define UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray(UnityDoubleToPtr(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_ARRAY_TO_VAL)
|
#define UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray(UnityDoubleToPtr(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL)
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF)
|
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF)
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF)
|
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF)
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN)
|
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN)
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ Style/HashSyntax:
|
|||||||
EnforcedStyle: no_mixed_keys
|
EnforcedStyle: no_mixed_keys
|
||||||
|
|
||||||
# This is disabled because it seems to get confused over nested hashes
|
# This is disabled because it seems to get confused over nested hashes
|
||||||
Style/AlignHash:
|
Layout/AlignHash:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
EnforcedHashRocketStyle: table
|
EnforcedHashRocketStyle: table
|
||||||
EnforcedColonStyle: table
|
EnforcedColonStyle: table
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ CFLAGS += -Wbad-function-cast -Wcast-qual -Wold-style-definition -Wshadow -Wstri
|
|||||||
CFLAGS += $(DEBUG)
|
CFLAGS += $(DEBUG)
|
||||||
DEFINES = -D UNITY_OUTPUT_CHAR=putcharSpy
|
DEFINES = -D UNITY_OUTPUT_CHAR=putcharSpy
|
||||||
DEFINES += -D UNITY_OUTPUT_CHAR_HEADER_DECLARATION=putcharSpy\(int\)
|
DEFINES += -D UNITY_OUTPUT_CHAR_HEADER_DECLARATION=putcharSpy\(int\)
|
||||||
|
DEFINES += -D UNITY_OUTPUT_FLUSH=flushSpy
|
||||||
|
DEFINES += -D UNITY_OUTPUT_FLUSH_HEADER_DECLARATION=flushSpy\(void\)
|
||||||
DEFINES += $(UNITY_SUPPORT_64) $(UNITY_INCLUDE_DOUBLE)
|
DEFINES += $(UNITY_SUPPORT_64) $(UNITY_INCLUDE_DOUBLE)
|
||||||
UNITY_SUPPORT_64 = -D UNITY_SUPPORT_64
|
UNITY_SUPPORT_64 = -D UNITY_SUPPORT_64
|
||||||
UNITY_INCLUDE_DOUBLE = -D UNITY_INCLUDE_DOUBLE
|
UNITY_INCLUDE_DOUBLE = -D UNITY_INCLUDE_DOUBLE
|
||||||
|
|||||||
+3
-4
@@ -4,17 +4,16 @@
|
|||||||
# [Released under MIT License. Please refer to license.txt for details]
|
# [Released under MIT License. Please refer to license.txt for details]
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
$verbose = false
|
$verbose = false
|
||||||
|
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require 'rake/clean'
|
require 'rake/clean'
|
||||||
require UNITY_ROOT + 'rakefile_helper'
|
require_relative 'rakefile_helper'
|
||||||
require 'rspec/core/rake_task'
|
require 'rspec/core/rake_task'
|
||||||
|
|
||||||
TEMP_DIRS = [
|
TEMP_DIRS = [
|
||||||
File.join(UNITY_ROOT, 'build'),
|
File.join(__dir__, 'build'),
|
||||||
File.join(UNITY_ROOT, 'sandbox')
|
File.join(__dir__, 'sandbox')
|
||||||
]
|
]
|
||||||
|
|
||||||
TEMP_DIRS.each do |dir|
|
TEMP_DIRS.each do |dir|
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require UNITY_ROOT + '../auto/unity_test_summary'
|
require_relative '../auto/unity_test_summary'
|
||||||
require UNITY_ROOT + '../auto/generate_test_runner'
|
require_relative '../auto/generate_test_runner'
|
||||||
require UNITY_ROOT + '../auto/colour_reporter'
|
require_relative '../auto/colour_reporter'
|
||||||
|
|
||||||
module RakefileHelpers
|
module RakefileHelpers
|
||||||
C_EXTENSION = '.c'.freeze
|
C_EXTENSION = '.c'.freeze
|
||||||
@@ -179,7 +179,7 @@ module RakefileHelpers
|
|||||||
|
|
||||||
def report_summary
|
def report_summary
|
||||||
summary = UnityTestSummary.new
|
summary = UnityTestSummary.new
|
||||||
summary.root = UNITY_ROOT
|
summary.root = __dir__
|
||||||
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
||||||
results_glob.tr!('\\', '/')
|
results_glob.tr!('\\', '/')
|
||||||
results = Dir[results_glob]
|
results = Dir[results_glob]
|
||||||
|
|||||||
Vendored
+4
-1
@@ -21,7 +21,10 @@
|
|||||||
|
|
||||||
/* Support for Meta Test Rig */
|
/* Support for Meta Test Rig */
|
||||||
#define TEST_CASE(a)
|
#define TEST_CASE(a)
|
||||||
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
|
||||||
|
/* Include Passthroughs for Linking Tests */
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
|
void flushSpy(void) {}
|
||||||
|
|
||||||
/* Global Variables Used During These Tests */
|
/* Global Variables Used During These Tests */
|
||||||
int CounterSetup = 0;
|
int CounterSetup = 0;
|
||||||
|
|||||||
+4
-1
@@ -13,7 +13,10 @@ TEST_FILE("some_file.c")
|
|||||||
|
|
||||||
/* Support for Meta Test Rig */
|
/* Support for Meta Test Rig */
|
||||||
#define TEST_CASE(a)
|
#define TEST_CASE(a)
|
||||||
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
|
||||||
|
/* Include Passthroughs for Linking Tests */
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
|
void flushSpy(void) {}
|
||||||
|
|
||||||
/* Global Variables Used During These Tests */
|
/* Global Variables Used During These Tests */
|
||||||
int CounterSetup = 0;
|
int CounterSetup = 0;
|
||||||
|
|||||||
+4
-1
@@ -22,7 +22,10 @@
|
|||||||
|
|
||||||
/* Support for Meta Test Rig */
|
/* Support for Meta Test Rig */
|
||||||
#define TEST_CASE(a)
|
#define TEST_CASE(a)
|
||||||
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
|
||||||
|
/* Include Passthroughs for Linking Tests */
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
|
void flushSpy(void) {}
|
||||||
|
|
||||||
/* Global Variables Used During These Tests */
|
/* Global Variables Used During These Tests */
|
||||||
int CounterSetup = 0;
|
int CounterSetup = 0;
|
||||||
|
|||||||
@@ -8,10 +8,13 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
|
|
||||||
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
/* Support for Meta Test Rig */
|
||||||
|
|
||||||
#define TEST_CASE(...)
|
#define TEST_CASE(...)
|
||||||
|
|
||||||
|
/* Include Passthroughs for Linking Tests */
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
|
void flushSpy(void) {}
|
||||||
|
|
||||||
#define EXPECT_ABORT_BEGIN \
|
#define EXPECT_ABORT_BEGIN \
|
||||||
if (TEST_PROTECT()) \
|
if (TEST_PROTECT()) \
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ void startPutcharSpy(void);
|
|||||||
void endPutcharSpy(void);
|
void endPutcharSpy(void);
|
||||||
char* getBufferPutcharSpy(void);
|
char* getBufferPutcharSpy(void);
|
||||||
|
|
||||||
|
void startFlushSpy(void);
|
||||||
|
void endFlushSpy(void);
|
||||||
|
int getFlushSpyCalls(void);
|
||||||
|
|
||||||
static int SetToOneToFailInTearDown;
|
static int SetToOneToFailInTearDown;
|
||||||
static int SetToOneMeanWeAlreadyCheckedThisGuy;
|
static int SetToOneMeanWeAlreadyCheckedThisGuy;
|
||||||
|
|
||||||
@@ -99,6 +103,10 @@ void testUnitySizeInitializationReminder(void)
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStartTime;
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStopTime;
|
||||||
|
#endif
|
||||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
#endif
|
#endif
|
||||||
@@ -115,6 +123,10 @@ void testUnitySizeInitializationReminder(void)
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifdef UNITY_INCLUDE_EXEC_TIME
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStartTime;
|
||||||
|
UNITY_COUNTER_TYPE CurrentTestStopTime;
|
||||||
|
#endif
|
||||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
#endif
|
#endif
|
||||||
@@ -3335,14 +3347,35 @@ void putcharSpy(int c)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is for counting the calls to the flushSpy */
|
||||||
|
static int flushSpyEnabled;
|
||||||
|
static int flushSpyCalls = 0;
|
||||||
|
|
||||||
|
void startFlushSpy(void) { flushSpyCalls = 0; flushSpyEnabled = 1; }
|
||||||
|
void endFlushSpy(void) { flushSpyCalls = 0; flushSpyEnabled = 0; }
|
||||||
|
int getFlushSpyCalls(void) { return flushSpyCalls; }
|
||||||
|
|
||||||
|
void flushSpy(void)
|
||||||
|
{
|
||||||
|
if (flushSpyEnabled){ flushSpyCalls++; }
|
||||||
|
}
|
||||||
|
|
||||||
void testFailureCountIncrementsAndIsReturnedAtEnd(void)
|
void testFailureCountIncrementsAndIsReturnedAtEnd(void)
|
||||||
{
|
{
|
||||||
UNITY_UINT savedFailures = Unity.TestFailures;
|
UNITY_UINT savedFailures = Unity.TestFailures;
|
||||||
Unity.CurrentTestFailed = 1;
|
Unity.CurrentTestFailed = 1;
|
||||||
startPutcharSpy(); // Suppress output
|
startPutcharSpy(); // Suppress output
|
||||||
|
startFlushSpy();
|
||||||
|
TEST_ASSERT_EQUAL(0, getFlushSpyCalls());
|
||||||
UnityConcludeTest();
|
UnityConcludeTest();
|
||||||
endPutcharSpy();
|
endPutcharSpy();
|
||||||
TEST_ASSERT_EQUAL(savedFailures + 1, Unity.TestFailures);
|
TEST_ASSERT_EQUAL(savedFailures + 1, Unity.TestFailures);
|
||||||
|
#if defined(UNITY_OUTPUT_FLUSH) && defined(UNITY_OUTPUT_FLUSH_HEADER_DECLARATION)
|
||||||
|
TEST_ASSERT_EQUAL(1, getFlushSpyCalls());
|
||||||
|
#else
|
||||||
|
TEST_ASSERT_EQUAL(0, getFlushSpyCalls());
|
||||||
|
#endif
|
||||||
|
endFlushSpy();
|
||||||
|
|
||||||
startPutcharSpy(); // Suppress output
|
startPutcharSpy(); // Suppress output
|
||||||
int failures = UnityEnd();
|
int failures = UnityEnd();
|
||||||
@@ -3412,6 +3445,7 @@ void testPrintNumbersUnsigned32(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES 64 BIT SUPPORT ==================
|
// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES 64 BIT SUPPORT ==================
|
||||||
|
|
||||||
void testPrintNumbersInt64(void)
|
void testPrintNumbersInt64(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user