diff --git a/extras/fixture/test/Makefile b/extras/fixture/test/Makefile index 6e096ae..4a4bbd8 100644 --- a/extras/fixture/test/Makefile +++ b/extras/fixture/test/Makefile @@ -1,4 +1,7 @@ CC = gcc +ifeq ($(shell uname -s), Darwin) +CC = clang +endif #DEBUG = -O0 -g CFLAGS += -std=c99 CFLAGS += -pedantic @@ -15,21 +18,22 @@ SRC = ../src/unity_fixture.c \ main/AllTests.c INC_DIR = -I../src -I../../../src/ +BUILD_DIR = ../build TARGET = ../build/fixture_tests.exe all: default noStdlibMalloc 32bits -default: ../build/ - $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) +default: $(BUILD_DIR) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_SUPPORT_64 @ echo "default build" ./$(TARGET) -32bits: ../build/ +32bits: $(BUILD_DIR) $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32 @ echo "32bits build" ./$(TARGET) -noStdlibMalloc: ../build/ +noStdlibMalloc: $(BUILD_DIR) $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC @ echo "build with noStdlibMalloc" ./$(TARGET) @@ -40,13 +44,22 @@ clang89: ../build/ -D UNITY_EXCLUDE_STDLIB_MALLOC -std=c89 -Wno-comment ; ./$(TARGET) clangEverything: - clang $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m64 -Weverything + clang $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -Weverything -../build : - mkdir -p ../build +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) clean: - rm -f $(TARGET) + rm -f $(TARGET) $(BUILD_DIR)/*.gc* + +coverage: $(BUILD_DIR) + cd $(BUILD_DIR) && \ + $(CC) $(DEFINES) $(foreach i, $(SRC), ../test/$(i)) $(INC_DIR) -o $(TARGET) -fprofile-arcs -ftest-coverage + rm -f $(BUILD_DIR)/*.gcda + ./$(TARGET) > /dev/null ; ./$(TARGET) -v > /dev/null + cd $(BUILD_DIR) && \ + gcov unity_fixture.c | head -3 + grep '###' $(BUILD_DIR)/unity_fixture.c.gcov -C2 || true # Show uncovered lines # These extended flags DO get included before any target build runs CFLAGS += -Wbad-function-cast @@ -62,5 +75,6 @@ CFLAGS += -Wstrict-prototypes CFLAGS += -Wswitch-default CFLAGS += -Wundef CFLAGS += -Wno-error=undef # Warning only, this should not stop the build +CFLAGS += -Wunreachable-code CFLAGS += -Wunused CFLAGS += -fstrict-aliasing diff --git a/extras/fixture/test/unity_fixture_Test.c b/extras/fixture/test/unity_fixture_Test.c index 2524946..3fee98f 100644 --- a/extras/fixture/test/unity_fixture_Test.c +++ b/extras/fixture/test/unity_fixture_Test.c @@ -136,6 +136,22 @@ TEST(UnityFixture, FreeNULLSafety) free(NULL); } +TEST(UnityFixture, ConcludeTestIncrementsFailCount) +{ + _U_UINT savedFails = Unity.TestFailures; + _U_UINT savedIgnores = Unity.TestIgnores; + UnityOutputCharSpy_Enable(1); + Unity.CurrentTestFailed = 1; + UnityConcludeFixtureTest(); // Resets TestFailed for this test to pass + Unity.CurrentTestIgnored = 1; + UnityConcludeFixtureTest(); // Resets TestIgnored + UnityOutputCharSpy_Enable(0); + TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures); + TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores); + Unity.TestFailures = savedFails; + Unity.TestIgnores = savedIgnores; +} + //------------------------------------------------------------ TEST_GROUP(UnityCommandOptions); @@ -276,6 +292,21 @@ TEST(UnityCommandOptions, UnknownCommandIsIgnored) TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount); } +TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails) +{ + TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand)); + TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand)); + TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL)); +} + +TEST(UnityCommandOptions, GroupFilterReallyFilters) +{ + _U_UINT saved = Unity.NumberOfTests; + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand)); + UnityIgnoreTest(NULL, "non-matching", NULL); + TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests); +} + IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored) { TEST_FAIL_MESSAGE("This test should not run!"); diff --git a/extras/fixture/test/unity_fixture_TestRunner.c b/extras/fixture/test/unity_fixture_TestRunner.c index e0b5684..c1a78c1 100644 --- a/extras/fixture/test/unity_fixture_TestRunner.c +++ b/extras/fixture/test/unity_fixture_TestRunner.c @@ -19,6 +19,7 @@ TEST_GROUP_RUNNER(UnityFixture) RUN_TEST_CASE(UnityFixture, CallocFillsWithZero); RUN_TEST_CASE(UnityFixture, PointerSet); RUN_TEST_CASE(UnityFixture, FreeNULLSafety); + RUN_TEST_CASE(UnityFixture, ConcludeTestIncrementsFailCount); } TEST_GROUP_RUNNER(UnityCommandOptions) @@ -32,6 +33,8 @@ TEST_GROUP_RUNNER(UnityCommandOptions) RUN_TEST_CASE(UnityCommandOptions, MultipleOptions); RUN_TEST_CASE(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified); RUN_TEST_CASE(UnityCommandOptions, UnknownCommandIsIgnored); + RUN_TEST_CASE(UnityCommandOptions, GroupOrNameFilterWithoutStringFails); + RUN_TEST_CASE(UnityCommandOptions, GroupFilterReallyFilters); RUN_TEST_CASE(UnityCommandOptions, TestShouldBeIgnored); } diff --git a/extras/fixture/test/unity_output_Spy.c b/extras/fixture/test/unity_output_Spy.c index 86d5a1c..5aa48f1 100644 --- a/extras/fixture/test/unity_output_Spy.c +++ b/extras/fixture/test/unity_output_Spy.c @@ -19,7 +19,7 @@ static int spy_enable; void UnityOutputCharSpy_Create(int s) { - size = s; + size = (s > 0) ? s : 0; count = 0; spy_enable = 0; buffer = malloc((size_t)size);