1/* Copyright (c) 2010 James Grenning and Contributed to Unity Project 2 * ========================================== 3 * Unity Project - A Test Framework for C 4 * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams 5 * [Released under MIT License. Please refer to license.txt for details] 6 * ========================================== */ 7 8#include "unity_fixture.h" 9#include <stdlib.h> 10#include <string.h> 11 12TEST_GROUP(UnityFixture); 13 14TEST_SETUP(UnityFixture) 15{ 16} 17 18TEST_TEAR_DOWN(UnityFixture) 19{ 20} 21 22static int* pointer1 = 0; 23static int* pointer2 = (int*)2; 24static int* pointer3 = (int*)3; 25static int int1; 26static int int2; 27static int int3; 28static int int4; 29 30TEST(UnityFixture, PointerSetting) 31{ 32 TEST_ASSERT_POINTERS_EQUAL(pointer1, 0); 33 UT_PTR_SET(pointer1, &int1); 34 UT_PTR_SET(pointer2, &int2); 35 UT_PTR_SET(pointer3, &int3); 36 TEST_ASSERT_POINTERS_EQUAL(pointer1, &int1); 37 TEST_ASSERT_POINTERS_EQUAL(pointer2, &int2); 38 TEST_ASSERT_POINTERS_EQUAL(pointer3, &int3); 39 UT_PTR_SET(pointer1, &int4); 40 UnityPointer_UndoAllSets(); 41 TEST_ASSERT_POINTERS_EQUAL(pointer1, 0); 42 TEST_ASSERT_POINTERS_EQUAL(pointer2, (int*)2); 43 TEST_ASSERT_POINTERS_EQUAL(pointer3, (int*)3); 44} 45 46static char *p1; 47static char *p2; 48 49TEST(UnityFixture, PointerSet) 50{ 51 char c1; 52 char c2; 53 char newC1; 54 char newC2; 55 p1 = &c1; 56 p2 = &c2; 57 58 UnityPointer_Init(); 59 UT_PTR_SET(p1, &newC1); 60 UT_PTR_SET(p2, &newC2); 61 TEST_ASSERT_POINTERS_EQUAL(&newC1, p1); 62 TEST_ASSERT_POINTERS_EQUAL(&newC2, p2); 63 UnityPointer_UndoAllSets(); 64 TEST_ASSERT_POINTERS_EQUAL(&c1, p1); 65 TEST_ASSERT_POINTERS_EQUAL(&c2, p2); 66} 67 68TEST(UnityFixture, FreeNULLSafety) 69{ 70 free(NULL); 71} 72 73TEST(UnityFixture, ConcludeTestIncrementsFailCount) 74{ 75 UNITY_UINT savedFails = Unity.TestFailures; 76 UNITY_UINT savedIgnores = Unity.TestIgnores; 77 Unity.CurrentTestFailed = 1; 78 UnityConcludeFixtureTest(); /* Resets TestFailed for this test to pass */ 79 Unity.CurrentTestIgnored = 1; 80 UnityConcludeFixtureTest(); /* Resets TestIgnored */ 81 TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures); 82 TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores); 83 Unity.TestFailures = savedFails; 84 Unity.TestIgnores = savedIgnores; 85} 86 87/*------------------------------------------------------------ */ 88 89TEST_GROUP(UnityCommandOptions); 90 91static int savedVerbose; 92static unsigned int savedRepeat; 93static const char* savedName; 94static const char* savedGroup; 95 96TEST_SETUP(UnityCommandOptions) 97{ 98 savedVerbose = UnityFixture.Verbose; 99 savedRepeat = UnityFixture.RepeatCount; 100 savedName = UnityFixture.NameFilter; 101 savedGroup = UnityFixture.GroupFilter; 102} 103 104TEST_TEAR_DOWN(UnityCommandOptions) 105{ 106 UnityFixture.Verbose = savedVerbose; 107 UnityFixture.RepeatCount= savedRepeat; 108 UnityFixture.NameFilter = savedName; 109 UnityFixture.GroupFilter = savedGroup; 110} 111 112 113static const char* noOptions[] = { 114 "testrunner.exe" 115}; 116 117TEST(UnityCommandOptions, DefaultOptions) 118{ 119 UnityGetCommandLineOptions(1, noOptions); 120 TEST_ASSERT_EQUAL(0, UnityFixture.Verbose); 121 TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.GroupFilter); 122 TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.NameFilter); 123 TEST_ASSERT_EQUAL(1, UnityFixture.RepeatCount); 124} 125 126static const char* verbose[] = { 127 "testrunner.exe", 128 "-v" 129}; 130 131TEST(UnityCommandOptions, OptionVerbose) 132{ 133 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, verbose)); 134 TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); 135} 136 137static const char* group[] = { 138 "testrunner.exe", 139 "-g", "groupname" 140}; 141 142TEST(UnityCommandOptions, OptionSelectTestByGroup) 143{ 144 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, group)); 145 STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); 146} 147 148static const char* name[] = { 149 "testrunner.exe", 150 "-n", "testname" 151}; 152 153TEST(UnityCommandOptions, OptionSelectTestByName) 154{ 155 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, name)); 156 STRCMP_EQUAL("testname", UnityFixture.NameFilter); 157} 158 159static const char* repeat[] = { 160 "testrunner.exe", 161 "-r", "99" 162}; 163 164TEST(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount) 165{ 166 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, repeat)); 167 TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount); 168} 169 170TEST(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount) 171{ 172 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, repeat)); 173 TEST_ASSERT_EQUAL(99, UnityFixture.RepeatCount); 174} 175 176static const char* multiple[] = { 177 "testrunner.exe", 178 "-v", 179 "-g", "groupname", 180 "-n", "testname", 181 "-r", "98" 182}; 183 184TEST(UnityCommandOptions, MultipleOptions) 185{ 186 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(8, multiple)); 187 TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); 188 STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); 189 STRCMP_EQUAL("testname", UnityFixture.NameFilter); 190 TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount); 191} 192 193static const char* dashRNotLast[] = { 194 "testrunner.exe", 195 "-v", 196 "-g", "gggg", 197 "-r", 198 "-n", "tttt", 199}; 200 201TEST(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified) 202{ 203 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(7, dashRNotLast)); 204 TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); 205 STRCMP_EQUAL("gggg", UnityFixture.GroupFilter); 206 STRCMP_EQUAL("tttt", UnityFixture.NameFilter); 207 TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount); 208} 209 210static const char* unknownCommand[] = { 211 "testrunner.exe", 212 "-v", 213 "-g", "groupname", 214 "-n", "testname", 215 "-r", "98", 216 "-z" 217}; 218TEST(UnityCommandOptions, UnknownCommandIsIgnored) 219{ 220 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(9, unknownCommand)); 221 TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); 222 STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); 223 STRCMP_EQUAL("testname", UnityFixture.NameFilter); 224 TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount); 225} 226 227TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails) 228{ 229 TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand)); 230 TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand)); 231 TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL)); 232} 233 234TEST(UnityCommandOptions, GroupFilterReallyFilters) 235{ 236 UNITY_UINT saved = Unity.NumberOfTests; 237 TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand)); 238 UnityIgnoreTest(NULL, "non-matching", NULL); 239 TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests); 240} 241 242IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored) 243{ 244 TEST_FAIL_MESSAGE("This test should not run!"); 245} 246