mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-08-25 04:29:58 +00:00
Updated method of testing generate_test_runner script to be a FUNCTIONAL test instead of a perfect code match. Backfilled most tests and added some coverage not previously present. Still need to test new command line args and a few cmock details.
This commit is contained in:
@@ -22,15 +22,16 @@ class UnityTestRunnerGenerator
|
|||||||
|
|
||||||
def self.default_options
|
def self.default_options
|
||||||
{
|
{
|
||||||
:includes => [],
|
:includes => [],
|
||||||
:plugins => [],
|
:plugins => [],
|
||||||
:framework => :unity,
|
:framework => :unity,
|
||||||
:test_prefix => "test|spec|should",
|
:test_prefix => "test|spec|should",
|
||||||
:setup_name => "setUp",
|
:setup_name => "setUp",
|
||||||
:teardown_name => "tearDown",
|
:teardown_name => "tearDown",
|
||||||
:main_name => "main", #set to nil to automatically generate each time
|
:main_name => "main", #set to :auto to automatically generate each time
|
||||||
:cmdline_args => false,
|
:main_export_decl => "",
|
||||||
|
:cmdline_args => false,
|
||||||
|
:use_param_tests => false,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -235,7 +236,7 @@ class UnityTestRunnerGenerator
|
|||||||
def create_suite_setup_and_teardown(output)
|
def create_suite_setup_and_teardown(output)
|
||||||
unless (@options[:suite_setup].nil?)
|
unless (@options[:suite_setup].nil?)
|
||||||
output.puts("\n/*=======Suite Setup=====*/")
|
output.puts("\n/*=======Suite Setup=====*/")
|
||||||
output.puts("static int suite_setup(void)")
|
output.puts("static void suite_setup(void)")
|
||||||
output.puts("{")
|
output.puts("{")
|
||||||
output.puts(@options[:suite_setup])
|
output.puts(@options[:suite_setup])
|
||||||
output.puts("}")
|
output.puts("}")
|
||||||
@@ -297,14 +298,38 @@ class UnityTestRunnerGenerator
|
|||||||
|
|
||||||
def create_main(output, filename, tests, used_mocks)
|
def create_main(output, filename, tests, used_mocks)
|
||||||
output.puts("\n\n/*=======MAIN=====*/")
|
output.puts("\n\n/*=======MAIN=====*/")
|
||||||
main_name = @options[:main_name].nil? ? "main_#{filename.gsub('.c','')}" : "#{@options[:main_name]}"
|
main_name = (@options[:main_name].to_sym == :auto) ? "main_#{filename.gsub('.c','')}" : "#{@options[:main_name]}"
|
||||||
if (main_name != "main")
|
if (main_name != "main")
|
||||||
output.puts("int #{main_name}(void);")
|
output.puts("#{@options[:main_export_decl]} int #{main_name}(void);")
|
||||||
end
|
end
|
||||||
if (@options[:cmdline_args])
|
if (@options[:cmdline_args])
|
||||||
output.puts("int #{main_name}(int argc, char** argv)")
|
output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)")
|
||||||
output.puts("{")
|
output.puts("{")
|
||||||
output.puts(" UnityParseOptions(argc, argv);")
|
output.puts(" int parse_status = UnityParseOptions(argc, argv);")
|
||||||
|
output.puts(" if (parse_status != 0)")
|
||||||
|
output.puts(" {")
|
||||||
|
output.puts(" if (parse_status < 0)")
|
||||||
|
output.puts(" {")
|
||||||
|
output.puts(" UnityPrint(\"#{filename.gsub('.c','')}.\");")
|
||||||
|
output.puts(" UNITY_PRINT_EOL();")
|
||||||
|
if (@options[:use_param_tests])
|
||||||
|
tests.each do |test|
|
||||||
|
if ((test[:args].nil?) or (test[:args].empty?))
|
||||||
|
output.puts(" UnityPrint(\" #{test[:test]}(RUN_TEST_NO_ARGS)\");")
|
||||||
|
output.puts(" UNITY_PRINT_EOL();")
|
||||||
|
else
|
||||||
|
test[:args].each do |args|
|
||||||
|
output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");")
|
||||||
|
output.puts(" UNITY_PRINT_EOL();")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
tests.each { |test| output.puts(" UnityPrint(\" #{test[:test]}\");\n UNITY_PRINT_EOL();")}
|
||||||
|
end
|
||||||
|
output.puts(" }")
|
||||||
|
output.puts(" return 0;")
|
||||||
|
output.puts(" }")
|
||||||
else
|
else
|
||||||
output.puts("int #{main_name}(void)")
|
output.puts("int #{main_name}(void)")
|
||||||
output.puts("{")
|
output.puts("{")
|
||||||
|
|||||||
+1
-1
@@ -1321,7 +1321,7 @@ int UnityParseOptions(int argc, char** argv)
|
|||||||
switch(argv[i][1])
|
switch(argv[i][1])
|
||||||
{
|
{
|
||||||
case 'l': /* list tests */
|
case 'l': /* list tests */
|
||||||
break;
|
return -1;
|
||||||
case 'n': /* include tests with name including this string */
|
case 'n': /* include tests with name including this string */
|
||||||
i++;
|
i++;
|
||||||
if (i < argc)
|
if (i < argc)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
|
UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
|
||||||
|
$verbose = false
|
||||||
|
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require 'rake/clean'
|
require 'rake/clean'
|
||||||
@@ -58,3 +59,7 @@ end
|
|||||||
task :no_color do
|
task :no_color do
|
||||||
$colour_output = false
|
$colour_output = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
task :verbose do
|
||||||
|
$verbose = true
|
||||||
|
end
|
||||||
|
|||||||
@@ -92,12 +92,12 @@ module RakefileHelpers
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_compiler_fields
|
def build_compiler_fields(inject_defines)
|
||||||
command = tackit($cfg['compiler']['path'])
|
command = tackit($cfg['compiler']['path'])
|
||||||
if $cfg['compiler']['defines']['items'].nil?
|
if $cfg['compiler']['defines']['items'].nil?
|
||||||
defines = ''
|
defines = ''
|
||||||
else
|
else
|
||||||
defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'])
|
defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'] + inject_defines)
|
||||||
end
|
end
|
||||||
options = squash('', $cfg['compiler']['options'])
|
options = squash('', $cfg['compiler']['options'])
|
||||||
includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
|
includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
|
||||||
@@ -106,7 +106,8 @@ module RakefileHelpers
|
|||||||
end
|
end
|
||||||
|
|
||||||
def compile(file, defines=[])
|
def compile(file, defines=[])
|
||||||
compiler = build_compiler_fields
|
compiler = build_compiler_fields(defines)
|
||||||
|
defines =
|
||||||
cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " +
|
cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " +
|
||||||
"#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
|
"#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
|
||||||
obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
|
obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
|
||||||
@@ -160,11 +161,11 @@ module RakefileHelpers
|
|||||||
return {:command => command, :pre_support => pre_support, :post_support => post_support}
|
return {:command => command, :pre_support => pre_support, :post_support => post_support}
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute(command_string, verbose=true)
|
def execute(command_string, ok_to_fail=false)
|
||||||
report command_string
|
report command_string if $verbose
|
||||||
output = `#{command_string}`.chomp
|
output = `#{command_string}`.chomp
|
||||||
report(output) if (verbose && !output.nil? && (output.length > 0))
|
report(output) if ($verbose && !output.nil? && (output.length > 0))
|
||||||
if $?.exitstatus != 0
|
if (($?.exitstatus != 0) && !ok_to_fail)
|
||||||
raise "Command failed. (Returned #{$?.exitstatus})"
|
raise "Command failed. (Returned #{$?.exitstatus})"
|
||||||
end
|
end
|
||||||
return output
|
return output
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ compiler:
|
|||||||
items:
|
items:
|
||||||
- 'src/'
|
- 'src/'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
defines:
|
defines:
|
||||||
prefix: '-D'
|
prefix: '-D'
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ compiler:
|
|||||||
- [*tools_root, 'arm\inc\']
|
- [*tools_root, 'arm\inc\']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
defines:
|
defines:
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ compiler:
|
|||||||
- [*tools_root, 'arm\inc\']
|
- [*tools_root, 'arm\inc\']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
- 'iar\iar_v5\incIAR\'
|
- 'iar\iar_v5\incIAR\'
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ compiler:
|
|||||||
- [*tools_root, 'arm\inc\']
|
- [*tools_root, 'arm\inc\']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
- 'iar\iar_v5\incIAR\'
|
- 'iar\iar_v5\incIAR\'
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ compiler:
|
|||||||
- [*tools_root, 'arm\inc\']
|
- [*tools_root, 'arm\inc\']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
- 'iar\iar_v5\incIAR\'
|
- 'iar\iar_v5\incIAR\'
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ compiler:
|
|||||||
- [*tools_root, 'arm\inc\']
|
- [*tools_root, 'arm\inc\']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
- 'iar\iar_v5\incIAR\'
|
- 'iar\iar_v5\incIAR\'
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ compiler:
|
|||||||
- [*core_lib, 'dlib']
|
- [*core_lib, 'dlib']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '../src/'
|
- '../src/'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src'
|
- 'vendor\unity\src'
|
||||||
defines:
|
defines:
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ compiler:
|
|||||||
- [*tools_root, 'sh\inc\c']
|
- [*tools_root, 'sh\inc\c']
|
||||||
- 'src\'
|
- 'src\'
|
||||||
- '..\src\'
|
- '..\src\'
|
||||||
|
- 'testdata/'
|
||||||
- *unit_tests_path
|
- *unit_tests_path
|
||||||
- 'vendor\unity\src\'
|
- 'vendor\unity\src\'
|
||||||
defines:
|
defines:
|
||||||
|
|||||||
Vendored
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef CEXCEPTION_H
|
||||||
|
#define CEXCEPTION_H
|
||||||
|
|
||||||
|
#define CEXCEPTION_BEING_USED 1
|
||||||
|
|
||||||
|
#endif //CEXCEPTION_H
|
||||||
Vendored
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef DEF_H
|
||||||
|
#define DEF_H
|
||||||
|
|
||||||
|
#define EXTERN_DECL
|
||||||
|
|
||||||
|
extern int CounterSuiteSetup;
|
||||||
|
|
||||||
|
#endif //DEF_H
|
||||||
Vendored
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#ifndef CMOCK_H
|
||||||
|
#define CMOCK_H
|
||||||
|
|
||||||
|
int CMockMemFreeFinalCounter = 0;
|
||||||
|
int mockMock_Init_Counter = 0;
|
||||||
|
int mockMock_Verify_Counter = 0;
|
||||||
|
int mockMock_Destroy_Counter = 0;
|
||||||
|
|
||||||
|
void CMock_Guts_MemFreeFinal(void) { CMockMemFreeFinalCounter++; }
|
||||||
|
void mockMock_Init(void) { mockMock_Init_Counter++; }
|
||||||
|
void mockMock_Verify(void) { mockMock_Verify_Counter++; }
|
||||||
|
void mockMock_Destroy(void) { mockMock_Destroy_Counter++; }
|
||||||
|
|
||||||
|
#endif //CMOCK_H
|
||||||
Vendored
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#ifndef MOCK_MOCK_H
|
||||||
|
#define MOCK_MOCK_H
|
||||||
|
|
||||||
|
extern int mockMock_Init_Counter;
|
||||||
|
extern int mockMock_Verify_Counter;
|
||||||
|
extern int mockMock_Destroy_Counter;
|
||||||
|
extern int CMockMemFreeFinalCounter;
|
||||||
|
|
||||||
|
void mockMock_Init(void);
|
||||||
|
void mockMock_Verify(void);
|
||||||
|
void mockMock_Destroy(void);
|
||||||
|
|
||||||
|
#endif //MOCK_MOCK_H
|
||||||
Vendored
-51
@@ -1,51 +0,0 @@
|
|||||||
// This is just a sample test file to be used to test the generator script
|
|
||||||
#ifndef TEST_SAMPLE_H
|
|
||||||
#define TEST_SAMPLE_H
|
|
||||||
|
|
||||||
#include <setjmp.h>
|
|
||||||
#include "unity.h"
|
|
||||||
#include "funky.h"
|
|
||||||
#include "Mockstanky.h"
|
|
||||||
|
|
||||||
void setUp(void)
|
|
||||||
{
|
|
||||||
CustomSetupStuff();
|
|
||||||
}
|
|
||||||
|
|
||||||
void tearDown(void)
|
|
||||||
{
|
|
||||||
CustomTeardownStuff
|
|
||||||
}
|
|
||||||
|
|
||||||
//Yup, nice comment
|
|
||||||
void test_TheFirstThingToTest(void)
|
|
||||||
{
|
|
||||||
TEST_ASSERT(1);
|
|
||||||
|
|
||||||
TEST_ASSERT_TRUE(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void test_ShouldBeIgnored(void)
|
|
||||||
{
|
|
||||||
DoesStuff();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
//void test_ShouldAlsoNotBeTested(void)
|
|
||||||
//{
|
|
||||||
// Call_An_Expect();
|
|
||||||
//
|
|
||||||
// CallAFunction();
|
|
||||||
// test_CallAFunctionThatLooksLikeATest();
|
|
||||||
//}
|
|
||||||
|
|
||||||
void test_TheSecondThingToTest(void)
|
|
||||||
{
|
|
||||||
Call_An_Expect();
|
|
||||||
|
|
||||||
CallAFunction();
|
|
||||||
test_CallAFunctionThatLooksLikeATest();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //TEST_SAMPLE_H
|
|
||||||
Vendored
-9
@@ -1,9 +0,0 @@
|
|||||||
:unity:
|
|
||||||
:includes:
|
|
||||||
- two.h
|
|
||||||
- three.h
|
|
||||||
- <four.h>
|
|
||||||
:plugins:
|
|
||||||
- :cexception
|
|
||||||
:suite_setup: |
|
|
||||||
a_yaml_setup();
|
|
||||||
Vendored
+183
@@ -0,0 +1,183 @@
|
|||||||
|
/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "unity.h"
|
||||||
|
#include "Defs.h"
|
||||||
|
|
||||||
|
#ifdef USE_CEXCEPTION
|
||||||
|
#include "CException.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Notes about prefixes:
|
||||||
|
test - normal default prefix. these are "always run" tests for this procedure
|
||||||
|
spec - normal default prefix. required to run default setup/teardown calls.
|
||||||
|
should - normal default prefix.
|
||||||
|
qwiktest - custom prefix for when tests skip all setup/teardown calls.
|
||||||
|
custtest - custom prefix for when tests use custom setup/teardown calls.
|
||||||
|
paratest - custom prefix for when we want to verify parameterized tests.
|
||||||
|
extest - custom prefix only used during cexception
|
||||||
|
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Support for Meta Test Rig */
|
||||||
|
#define TEST_CASE(a)
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
||||||
|
|
||||||
|
/* Global Variables Used During These Tests */
|
||||||
|
int CounterSetup = 0;
|
||||||
|
int CounterTeardown = 0;
|
||||||
|
int CounterSuiteSetup = 0;
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
CounterSetup = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
CounterTeardown = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void custom_setup(void)
|
||||||
|
{
|
||||||
|
CounterSetup = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void custom_teardown(void)
|
||||||
|
{
|
||||||
|
CounterTeardown = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void test_OldSchoolCommentsShouldBeIgnored(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysPasses(void)
|
||||||
|
{
|
||||||
|
TEST_PASS();
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysFails(void)
|
||||||
|
{
|
||||||
|
TEST_FAIL_MESSAGE("This Test Should Fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysIgnored(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE_MESSAGE("This Test Should Be Ignored");
|
||||||
|
}
|
||||||
|
|
||||||
|
void qwiktest_ThisTestPassesWhenNoSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void qwiktest_ThisTestPassesWhenNoTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void custtest_ThisTestPassesWhenCustomSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void custtest_ThisTestPassesWhenCustomTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
//void test_NewStyleCommentsShouldBeIgnored(void)
|
||||||
|
//{
|
||||||
|
// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored");
|
||||||
|
//}
|
||||||
|
|
||||||
|
void test_NotBeConfusedByLongComplicatedStrings(void)
|
||||||
|
{
|
||||||
|
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_StillNotBeConfusedByLongComplicatedStrings(void)
|
||||||
|
{
|
||||||
|
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same");
|
||||||
|
}
|
||||||
|
|
||||||
|
void should_RunTestsStartingWithShouldByDefault(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(25)
|
||||||
|
TEST_CASE(125)
|
||||||
|
TEST_CASE(5)
|
||||||
|
void paratest_ShouldHandleParameterizedTests(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(7)
|
||||||
|
void paratest_ShouldHandleParameterizedTests2(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes");
|
||||||
|
}
|
||||||
|
|
||||||
|
void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void)
|
||||||
|
{
|
||||||
|
TEST_PASS();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(17)
|
||||||
|
void paratest_ShouldHandleParameterizedTestsThatFail(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_CEXCEPTION
|
||||||
|
void extest_ShouldHandleCExceptionInTest(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_ANOTHER_MAIN
|
||||||
|
int custom_main(void);
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
return custom_main();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
+192
@@ -0,0 +1,192 @@
|
|||||||
|
/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "unity.h"
|
||||||
|
#include "Defs.h"
|
||||||
|
#include "mockMock.h"
|
||||||
|
|
||||||
|
#ifdef USE_CEXCEPTION
|
||||||
|
#include "CException.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Notes about prefixes:
|
||||||
|
test - normal default prefix. these are "always run" tests for this procedure
|
||||||
|
spec - normal default prefix. required to run default setup/teardown calls.
|
||||||
|
should - normal default prefix.
|
||||||
|
qwiktest - custom prefix for when tests skip all setup/teardown calls.
|
||||||
|
custtest - custom prefix for when tests use custom setup/teardown calls.
|
||||||
|
paratest - custom prefix for when we want to verify parameterized tests.
|
||||||
|
extest - custom prefix only used during cexception
|
||||||
|
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Support for Meta Test Rig */
|
||||||
|
#define TEST_CASE(a)
|
||||||
|
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
|
||||||
|
|
||||||
|
/* Global Variables Used During These Tests */
|
||||||
|
int CounterSetup = 0;
|
||||||
|
int CounterTeardown = 0;
|
||||||
|
int CounterSuiteSetup = 0;
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
CounterSetup = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
CounterTeardown = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void custom_setup(void)
|
||||||
|
{
|
||||||
|
CounterSetup = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void custom_teardown(void)
|
||||||
|
{
|
||||||
|
CounterTeardown = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void test_OldSchoolCommentsShouldBeIgnored(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysPasses(void)
|
||||||
|
{
|
||||||
|
TEST_PASS();
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysFails(void)
|
||||||
|
{
|
||||||
|
TEST_FAIL_MESSAGE("This Test Should Fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ThisTestAlwaysIgnored(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE_MESSAGE("This Test Should Be Ignored");
|
||||||
|
}
|
||||||
|
|
||||||
|
void qwiktest_ThisTestPassesWhenNoSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void qwiktest_ThisTestPassesWhenNoTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spec_ThisTestPassesWhenNormalTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void custtest_ThisTestPassesWhenCustomSetupRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void custtest_ThisTestPassesWhenCustomTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
//void test_NewStyleCommentsShouldBeIgnored(void)
|
||||||
|
//{
|
||||||
|
// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored");
|
||||||
|
//}
|
||||||
|
|
||||||
|
void test_NotBeConfusedByLongComplicatedStrings(void)
|
||||||
|
{
|
||||||
|
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_StillNotBeConfusedByLongComplicatedStrings(void)
|
||||||
|
{
|
||||||
|
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same");
|
||||||
|
}
|
||||||
|
|
||||||
|
void should_RunTestsStartingWithShouldByDefault(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(25)
|
||||||
|
TEST_CASE(125)
|
||||||
|
TEST_CASE(5)
|
||||||
|
void paratest_ShouldHandleParameterizedTests(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(7)
|
||||||
|
void paratest_ShouldHandleParameterizedTests2(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes");
|
||||||
|
}
|
||||||
|
|
||||||
|
void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void)
|
||||||
|
{
|
||||||
|
TEST_PASS();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(17)
|
||||||
|
void paratest_ShouldHandleParameterizedTestsThatFail(int Num)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_CEXCEPTION
|
||||||
|
void extest_ShouldHandleCExceptionInTest(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_ANOTHER_MAIN
|
||||||
|
int custom_main(void);
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
return custom_main();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void)
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ShouldCallMockInitAndVerifyFunctionsForEachTest(void)
|
||||||
|
{
|
||||||
|
int passes = (int)(Unity.NumberOfTests - Unity.TestFailures - Unity.TestIgnores);
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests, mockMock_Init_Counter, "Mock Init Should Be Called Once Per Test Started");
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(passes, mockMock_Verify_Counter, "Mock Verify Should Be Called Once Per Test Passed");
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests - 1, mockMock_Destroy_Counter, "Mock Destroy Should Be Called Once Per Test Completed");
|
||||||
|
TEST_ASSERT_EQUAL_MESSAGE(0, CMockMemFreeFinalCounter, "Mock MemFreeFinal Should Not Be Called Until End");
|
||||||
|
}
|
||||||
|
|
||||||
Vendored
-68
@@ -1,68 +0,0 @@
|
|||||||
// This is just a sample test file to be used to test the generator script
|
|
||||||
#ifndef TEST_SAMPLE_H
|
|
||||||
#define TEST_SAMPLE_H
|
|
||||||
|
|
||||||
#include <setjmp.h>
|
|
||||||
#include "unity.h"
|
|
||||||
#include "funky.h"
|
|
||||||
#include "stanky.h"
|
|
||||||
|
|
||||||
void setUp(void)
|
|
||||||
{
|
|
||||||
CustomSetupStuff();
|
|
||||||
}
|
|
||||||
|
|
||||||
void tearDown(void)
|
|
||||||
{
|
|
||||||
CustomTeardownStuff
|
|
||||||
}
|
|
||||||
|
|
||||||
//Yup, nice comment
|
|
||||||
void test_TheFirstThingToTest(void)
|
|
||||||
{
|
|
||||||
TEST_ASSERT(1);
|
|
||||||
|
|
||||||
TEST_ASSERT_TRUE(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void test_ShouldBeIgnored(void)
|
|
||||||
{
|
|
||||||
DoesStuff();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
//void test_ShouldAlsoNotBeTested(void)
|
|
||||||
//{
|
|
||||||
// Call_An_Expect();
|
|
||||||
//
|
|
||||||
// CallAFunction();
|
|
||||||
// test_CallAFunctionThatLooksLikeATest();
|
|
||||||
//}
|
|
||||||
|
|
||||||
void test_TheSecondThingToTest(void)
|
|
||||||
{
|
|
||||||
uint8_t* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
|
||||||
|
|
||||||
Call_An_Expect();
|
|
||||||
|
|
||||||
CallAFunction();
|
|
||||||
test_CallAFunctionThatLooksLikeATest();
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_TheThirdThingToTest(void)
|
|
||||||
{
|
|
||||||
CallAFunction();
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_TheFourthThingToTest(void)
|
|
||||||
{
|
|
||||||
uint8_t* anotherString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
|
|
||||||
|
|
||||||
Call_An_Expect();
|
|
||||||
|
|
||||||
CallAFunction();
|
|
||||||
test_CallAFunctionThatLooksLikeATest();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //TEST_SAMPLE_H
|
|
||||||
@@ -6,96 +6,720 @@
|
|||||||
|
|
||||||
require '../auto/generate_test_runner.rb'
|
require '../auto/generate_test_runner.rb'
|
||||||
|
|
||||||
TEST_FILE = 'testdata/testsample.c'
|
$generate_test_runner_tests = 0
|
||||||
TEST_MOCK = 'testdata/mocksample.c'
|
|
||||||
OUT_FILE = 'build/testsample_'
|
|
||||||
EXP_FILE = 'expectdata/testsample_'
|
|
||||||
|
|
||||||
$generate_test_runner_failures = 0
|
$generate_test_runner_failures = 0
|
||||||
|
|
||||||
def verify_output_equal(subtest)
|
OUT_FILE = 'build/testsample_'
|
||||||
expected = File.read(EXP_FILE + subtest + '.c').gsub(/\r\n/,"\n")
|
|
||||||
actual = File.read(OUT_FILE + subtest + '.c').gsub(/\r\n/,"\n")
|
RUNNER_TESTS = [
|
||||||
if (expected != actual)
|
{ :name => 'DefaultsThroughOptions',
|
||||||
report(" #{subtest}:FAIL")
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
$generate_test_runner_failures += 1
|
:testdefines => ['TEST'],
|
||||||
|
:options => nil, #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'DefaultsThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "", #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'DefaultsThroughYAMLFile',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "", #defaults
|
||||||
|
:yaml => {}, #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustTest',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "test",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustShould',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "should",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'should_RunTestsStartingWithShouldByDefault' ],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustSpec',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "spec",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'InjectIncludes',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughOptions',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "paratest",
|
||||||
|
:use_param_tests => true,
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"paratest\" --use_param_tests=1",
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughCommandLineAndYaml',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "--use_param_tests=1",
|
||||||
|
:yaml => {
|
||||||
|
:test_prefix => "paratest"
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportCExceptionWhenRequested',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST', 'USE_CEXCEPTION'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "extest",
|
||||||
|
:cexception => 1,
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'extest_ShouldHandleCExceptionInTest' ],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughOptions',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "custtest|test",
|
||||||
|
:setup_name => "custom_setup",
|
||||||
|
:teardown_name => "custom_teardown",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"custtest|test\" --setup_name=\"custom_setup\" --teardown_name=\"custom_teardown\"",
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughYaml',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"custtest|test\"",
|
||||||
|
:yaml => {
|
||||||
|
:setup_name => "custom_setup",
|
||||||
|
:teardown_name => "custom_teardown",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'UseACustomMainFunction',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST', "USE_ANOTHER_MAIN"],
|
||||||
|
:options => {
|
||||||
|
:main_name => "custom_main",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportCustomSuiteSetupAndTeardown',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "suitetest|test",
|
||||||
|
:suite_setup => " CounterSuiteSetup = 1;",
|
||||||
|
:suite_teardown => " return num_failures;",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportMainExternDeclaration',
|
||||||
|
:testfile => 'testdata/testRunnerGenerator.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
:options => {
|
||||||
|
:main_export_decl => "EXTERN_DECL",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
#### WITH MOCKS ##########################################
|
||||||
|
|
||||||
|
{ :name => 'DefaultsThroughOptions',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => nil, #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'DefaultsThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "", #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'DefaultsThroughYAMLFile',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "", #defaults
|
||||||
|
:yaml => {}, #defaults
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustTest',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "test",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustShould',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "should",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'should_RunTestsStartingWithShouldByDefault' ],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ShorterFilterOfJustSpec',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "spec",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'InjectIncludes',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughOptions',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "paratest",
|
||||||
|
:use_param_tests => true,
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"paratest\" --use_param_tests=1",
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'ParameterizedThroughCommandLineAndYaml',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => "--use_param_tests=1",
|
||||||
|
:yaml => {
|
||||||
|
:test_prefix => "paratest"
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(125\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests\(5\)',
|
||||||
|
'paratest_ShouldHandleParameterizedTests2\(7\)',
|
||||||
|
'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportCExceptionWhenRequested',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST', 'USE_CEXCEPTION'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "extest",
|
||||||
|
:cexception => 1,
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'extest_ShouldHandleCExceptionInTest' ],
|
||||||
|
:to_fail => [ ],
|
||||||
|
:to_ignore => [ ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughOptions',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "custtest|test",
|
||||||
|
:setup_name => "custom_setup",
|
||||||
|
:teardown_name => "custom_teardown",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughCommandLine',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"custtest|test\" --setup_name=\"custom_setup\" --teardown_name=\"custom_teardown\"",
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'CustomSetupAndTeardownThroughYaml',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:cmdline => " --test_prefix=\"custtest|test\"",
|
||||||
|
:yaml => {
|
||||||
|
:setup_name => "custom_setup",
|
||||||
|
:teardown_name => "custom_teardown",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'custtest_ThisTestPassesWhenCustomSetupRan',
|
||||||
|
'custtest_ThisTestPassesWhenCustomTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'UseACustomMainFunction',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST', "USE_ANOTHER_MAIN"],
|
||||||
|
:options => {
|
||||||
|
:main_name => "custom_main",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportCustomSuiteSetupAndTeardown',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
:options => {
|
||||||
|
:test_prefix => "suitetest|test",
|
||||||
|
:suite_setup => " CounterSuiteSetup = 1;",
|
||||||
|
:suite_teardown => " return num_failures;",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{ :name => 'SupportMainExternDeclaration',
|
||||||
|
:testfile => 'testdata/testRunnerGeneratorWithMocks.c',
|
||||||
|
:testdefines => ['TEST'],
|
||||||
|
:includes => ['Defs.h'],
|
||||||
|
:options => {
|
||||||
|
:main_export_decl => "EXTERN_DECL",
|
||||||
|
},
|
||||||
|
:expected => {
|
||||||
|
:to_pass => [ 'test_ThisTestAlwaysPasses',
|
||||||
|
'spec_ThisTestPassesWhenNormalSetupRan',
|
||||||
|
'spec_ThisTestPassesWhenNormalTeardownRan',
|
||||||
|
'test_NotBeConfusedByLongComplicatedStrings',
|
||||||
|
'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings',
|
||||||
|
'test_StillNotBeConfusedByLongComplicatedStrings',
|
||||||
|
'should_RunTestsStartingWithShouldByDefault',
|
||||||
|
'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan',
|
||||||
|
'test_ShouldCallMockInitAndVerifyFunctionsForEachTest',
|
||||||
|
],
|
||||||
|
:to_fail => [ 'test_ThisTestAlwaysFails' ],
|
||||||
|
:to_ignore => [ 'test_ThisTestAlwaysIgnored' ],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
def runner_test(test, runner, expected, test_defines)
|
||||||
|
# Tack on TEST define for compiling unit tests
|
||||||
|
load_configuration($cfg_file)
|
||||||
|
|
||||||
|
#compile objects
|
||||||
|
obj_list = [
|
||||||
|
compile(runner, test_defines),
|
||||||
|
compile(test, test_defines),
|
||||||
|
compile('../src/unity.c', test_defines),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Link the test executable
|
||||||
|
test_base = File.basename(test, C_EXTENSION)
|
||||||
|
link_it(test_base, obj_list)
|
||||||
|
|
||||||
|
# Execute unit test and generate results file
|
||||||
|
simulator = build_simulator_fields
|
||||||
|
executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
|
||||||
|
if simulator.nil?
|
||||||
|
cmd_str = executable
|
||||||
else
|
else
|
||||||
report(" #{subtest}:PASS")
|
cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
|
||||||
end
|
end
|
||||||
|
output = execute(cmd_str, true)
|
||||||
|
|
||||||
|
#compare to the expected pass/fail
|
||||||
|
allgood = expected[:to_pass].inject(true) {|s,v| s && (/#{v}:PASS/ =~ output) }
|
||||||
|
allgood = expected[:to_fail].inject(allgood) {|s,v| s && (/#{v}:FAIL/ =~ output) }
|
||||||
|
allgood = expected[:to_ignore].inject(allgood) {|s,v| s && (/#{v}:IGNORE/ =~ output) }
|
||||||
|
report output if (!allgood && !$verbose) #report failures if not already reporting everything
|
||||||
|
return allgood
|
||||||
end
|
end
|
||||||
|
|
||||||
should "GenerateARunnerByCreatingRunnerWithOptions" do
|
RUNNER_TESTS.each do |testset|
|
||||||
sets = { 'def' => nil,
|
testset_name = "Runner_#{testset[:testfile]}_#{testset[:name]}"
|
||||||
'new1' => { :plugins => [:cexception], :includes => ['one.h', 'two.h'], :enforce_strict_ordering => true },
|
should testset_name do
|
||||||
'new2' => { :plugins => [:ignore], :suite_setup => "a_custom_setup();", :suite_teardown => "a_custom_teardown();" }
|
runner_name = OUT_FILE + testset[:name] + '_runner.c'
|
||||||
}
|
|
||||||
|
|
||||||
sets.each_pair do |subtest, options|
|
#create a yaml file first if required
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
|
yaml_option = ""
|
||||||
verify_output_equal(subtest)
|
if (testset[:yaml])
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
|
File.open("build/runner_options.yml",'w') {|f| f << { :unity => testset[:yaml] }.to_yaml }
|
||||||
verify_output_equal('mock_' + subtest)
|
yaml_option = "build/runner_options.yml"
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
should "GenerateARunnerAlongWithAHeaderIfSpecified" do
|
#run script via command line or through hash function call, as requested
|
||||||
sets = { 'head1' => { :header_file => "#{OUT_FILE}head1.h" } }
|
if (testset[:cmdline])
|
||||||
sets.each_pair do |subtest, options|
|
cmdstr = "ruby ../auto/generate_test_runner.rb #{yaml_option} #{testset[:cmdline]} \"#{testset[:testfile]}\" \"#{runner_name}\""
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
|
`#{cmdstr}`
|
||||||
verify_output_equal(subtest)
|
else
|
||||||
end
|
UnityTestRunnerGenerator.new(testset[:options]).run(testset[:testfile], runner_name)
|
||||||
|
end
|
||||||
|
|
||||||
sets = { 'head1' => { :header_file => "#{OUT_FILE}mock_head1.h" } }
|
#test the script against the specified test file and check results
|
||||||
sets.each_pair do |subtest, options|
|
if (runner_test(testset[:testfile], runner_name, testset[:expected], testset[:testdefines]))
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
|
report "#{testset_name}:PASS"
|
||||||
verify_output_equal('mock_' + subtest)
|
else
|
||||||
end
|
report "#{testset_name}:FAIL"
|
||||||
end
|
$generate_test_runner_failures += 1
|
||||||
|
end
|
||||||
should "GenerateARunnerByRunningRunnerWithOptions" do
|
$generate_test_runner_tests += 1
|
||||||
sets = { 'run1' => { :plugins => [:cexception], :includes => ['one.h', 'two.h'], :enforce_strict_ordering => true },
|
|
||||||
'run2' => { :plugins => [:ignore], :suite_setup => "a_custom_setup();", :suite_teardown => "a_custom_teardown();" }
|
|
||||||
}
|
|
||||||
|
|
||||||
sets.each_pair do |subtest, options|
|
|
||||||
UnityTestRunnerGenerator.new.run(TEST_FILE, OUT_FILE + subtest + '.c', options)
|
|
||||||
verify_output_equal(subtest)
|
|
||||||
UnityTestRunnerGenerator.new.run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c', options)
|
|
||||||
verify_output_equal('mock_' + subtest)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
should "GenerateARunnerByPullingYamlOptions" do
|
|
||||||
subtest = 'yaml'
|
|
||||||
cmdstr = "ruby ../auto/generate_test_runner.rb testdata/sample.yml \"#{TEST_FILE}\" \"#{OUT_FILE + subtest + '.c'}\""
|
|
||||||
`#{cmdstr}`
|
|
||||||
verify_output_equal(subtest)
|
|
||||||
|
|
||||||
cmdstr = "ruby ../auto/generate_test_runner.rb testdata/sample.yml \"#{TEST_MOCK}\" \"#{OUT_FILE + 'mock_' + subtest + '.c'}\""
|
|
||||||
`#{cmdstr}`
|
|
||||||
verify_output_equal('mock_' + subtest)
|
|
||||||
end
|
|
||||||
|
|
||||||
should "GenerateARunnerByPullingCommandlineOptions" do
|
|
||||||
subtest = 'cmd'
|
|
||||||
cmdstr = "ruby ../auto/generate_test_runner.rb -cexception \"#{TEST_FILE}\" \"#{OUT_FILE + subtest + '.c'}\""
|
|
||||||
`#{cmdstr}`
|
|
||||||
verify_output_equal(subtest)
|
|
||||||
|
|
||||||
cmdstr = "ruby ../auto/generate_test_runner.rb -cexception \"#{TEST_MOCK}\" \"#{OUT_FILE + 'mock_' + subtest + '.c'}\""
|
|
||||||
`#{cmdstr}`
|
|
||||||
verify_output_equal('mock_' + subtest)
|
|
||||||
end
|
|
||||||
|
|
||||||
should "GenerateARunnerThatUsesParameterizedTests" do
|
|
||||||
sets = { 'param' => { :plugins => [:ignore], :use_param_tests => true }
|
|
||||||
}
|
|
||||||
|
|
||||||
sets.each_pair do |subtest, options|
|
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
|
|
||||||
verify_output_equal(subtest)
|
|
||||||
UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
|
|
||||||
verify_output_equal('mock_' + subtest)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user