fork
Fork of cpputest by
src/CppUTest/TestHarness_c.cpp@3:9e8c8907d9ee, 2015-05-13 (annotated)
- Committer:
- Kojto
- Date:
- Wed May 13 13:20:35 2015 +0000
- Revision:
- 3:9e8c8907d9ee
- Parent:
- 1:4769360130ed
Rename console to mbed_cpputest_console (as in mbed testrunner)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rohit Grover |
1:4769360130ed | 1 | /* |
Rohit Grover |
1:4769360130ed | 2 | * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde |
Rohit Grover |
1:4769360130ed | 3 | * All rights reserved. |
Rohit Grover |
1:4769360130ed | 4 | * |
Rohit Grover |
1:4769360130ed | 5 | * Redistribution and use in source and binary forms, with or without |
Rohit Grover |
1:4769360130ed | 6 | * modification, are permitted provided that the following conditions are met: |
Rohit Grover |
1:4769360130ed | 7 | * * Redistributions of source code must retain the above copyright |
Rohit Grover |
1:4769360130ed | 8 | * notice, this list of conditions and the following disclaimer. |
Rohit Grover |
1:4769360130ed | 9 | * * Redistributions in binary form must reproduce the above copyright |
Rohit Grover |
1:4769360130ed | 10 | * notice, this list of conditions and the following disclaimer in the |
Rohit Grover |
1:4769360130ed | 11 | * documentation and/or other materials provided with the distribution. |
Rohit Grover |
1:4769360130ed | 12 | * * Neither the name of the <organization> nor the |
Rohit Grover |
1:4769360130ed | 13 | * names of its contributors may be used to endorse or promote products |
Rohit Grover |
1:4769360130ed | 14 | * derived from this software without specific prior written permission. |
Rohit Grover |
1:4769360130ed | 15 | * |
Rohit Grover |
1:4769360130ed | 16 | * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY |
Rohit Grover |
1:4769360130ed | 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
Rohit Grover |
1:4769360130ed | 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Rohit Grover |
1:4769360130ed | 19 | * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
Rohit Grover |
1:4769360130ed | 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
Rohit Grover |
1:4769360130ed | 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
Rohit Grover |
1:4769360130ed | 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
Rohit Grover |
1:4769360130ed | 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
Rohit Grover |
1:4769360130ed | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
Rohit Grover |
1:4769360130ed | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Rohit Grover |
1:4769360130ed | 26 | */ |
Rohit Grover |
1:4769360130ed | 27 | |
Rohit Grover |
1:4769360130ed | 28 | #include "CppUTest/TestHarness.h" |
Rohit Grover |
1:4769360130ed | 29 | #include "CppUTest/MemoryLeakDetector.h" |
Rohit Grover |
1:4769360130ed | 30 | #include "CppUTest/TestMemoryAllocator.h" |
Rohit Grover |
1:4769360130ed | 31 | #include "CppUTest/PlatformSpecificFunctions.h" |
Rohit Grover |
1:4769360130ed | 32 | #include "CppUTest/TestHarness_c.h" |
Rohit Grover |
1:4769360130ed | 33 | |
Rohit Grover |
1:4769360130ed | 34 | extern "C" |
Rohit Grover |
1:4769360130ed | 35 | { |
Rohit Grover |
1:4769360130ed | 36 | |
Rohit Grover |
1:4769360130ed | 37 | |
Rohit Grover |
1:4769360130ed | 38 | void CHECK_EQUAL_C_INT_LOCATION(int expected, int actual, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 39 | { |
Rohit Grover |
1:4769360130ed | 40 | UtestShell::getCurrent()->assertLongsEqual((long)expected, (long)actual, fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 41 | } |
Rohit Grover |
1:4769360130ed | 42 | |
Rohit Grover |
1:4769360130ed | 43 | void CHECK_EQUAL_C_REAL_LOCATION(double expected, double actual, double threshold, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 44 | { |
Rohit Grover |
1:4769360130ed | 45 | UtestShell::getCurrent()->assertDoublesEqual(expected, actual, threshold, fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 46 | } |
Rohit Grover |
1:4769360130ed | 47 | |
Rohit Grover |
1:4769360130ed | 48 | void CHECK_EQUAL_C_CHAR_LOCATION(char expected, char actual, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 49 | { |
Rohit Grover |
1:4769360130ed | 50 | UtestShell::getCurrent()->assertEquals(((expected) != (actual)), StringFrom(expected).asCharString(), StringFrom(actual).asCharString(), fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 51 | } |
Rohit Grover |
1:4769360130ed | 52 | |
Rohit Grover |
1:4769360130ed | 53 | void CHECK_EQUAL_C_STRING_LOCATION(const char* expected, const char* actual, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 54 | { |
Rohit Grover |
1:4769360130ed | 55 | UtestShell::getCurrent()->assertCstrEqual(expected, actual, fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 56 | } |
Rohit Grover |
1:4769360130ed | 57 | |
Rohit Grover |
1:4769360130ed | 58 | void FAIL_TEXT_C_LOCATION(const char* text, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 59 | { |
Rohit Grover |
1:4769360130ed | 60 | UtestShell::getCurrent()->fail(text, fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 61 | } |
Rohit Grover |
1:4769360130ed | 62 | |
Rohit Grover |
1:4769360130ed | 63 | void FAIL_C_LOCATION(const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 64 | { |
Rohit Grover |
1:4769360130ed | 65 | UtestShell::getCurrent()->fail("", fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 66 | } |
Rohit Grover |
1:4769360130ed | 67 | |
Rohit Grover |
1:4769360130ed | 68 | void CHECK_C_LOCATION(int condition, const char* conditionString, const char* fileName, int lineNumber) |
Rohit Grover |
1:4769360130ed | 69 | { |
Rohit Grover |
1:4769360130ed | 70 | UtestShell::getCurrent()->assertTrue(condition != 0, "CHECK_C", conditionString, fileName, lineNumber, TestTerminatorWithoutExceptions()); |
Rohit Grover |
1:4769360130ed | 71 | } |
Rohit Grover |
1:4769360130ed | 72 | |
Rohit Grover |
1:4769360130ed | 73 | enum { NO_COUNTDOWN = -1, OUT_OF_MEMORRY = 0 }; |
Rohit Grover |
1:4769360130ed | 74 | static int malloc_out_of_memory_counter = NO_COUNTDOWN; |
Rohit Grover |
1:4769360130ed | 75 | static int malloc_count = 0; |
Rohit Grover |
1:4769360130ed | 76 | |
Rohit Grover |
1:4769360130ed | 77 | void cpputest_malloc_count_reset(void) |
Rohit Grover |
1:4769360130ed | 78 | { |
Rohit Grover |
1:4769360130ed | 79 | malloc_count = 0; |
Rohit Grover |
1:4769360130ed | 80 | } |
Rohit Grover |
1:4769360130ed | 81 | |
Rohit Grover |
1:4769360130ed | 82 | int cpputest_malloc_get_count() |
Rohit Grover |
1:4769360130ed | 83 | { |
Rohit Grover |
1:4769360130ed | 84 | return malloc_count; |
Rohit Grover |
1:4769360130ed | 85 | } |
Rohit Grover |
1:4769360130ed | 86 | |
Rohit Grover |
1:4769360130ed | 87 | void cpputest_malloc_set_out_of_memory() |
Rohit Grover |
1:4769360130ed | 88 | { |
Rohit Grover |
1:4769360130ed | 89 | setCurrentMallocAllocator(NullUnknownAllocator::defaultAllocator()); |
Rohit Grover |
1:4769360130ed | 90 | } |
Rohit Grover |
1:4769360130ed | 91 | |
Rohit Grover |
1:4769360130ed | 92 | void cpputest_malloc_set_not_out_of_memory() |
Rohit Grover |
1:4769360130ed | 93 | { |
Rohit Grover |
1:4769360130ed | 94 | malloc_out_of_memory_counter = NO_COUNTDOWN; |
Rohit Grover |
1:4769360130ed | 95 | setCurrentMallocAllocatorToDefault(); |
Rohit Grover |
1:4769360130ed | 96 | } |
Rohit Grover |
1:4769360130ed | 97 | |
Rohit Grover |
1:4769360130ed | 98 | void cpputest_malloc_set_out_of_memory_countdown(int count) |
Rohit Grover |
1:4769360130ed | 99 | { |
Rohit Grover |
1:4769360130ed | 100 | malloc_out_of_memory_counter = count; |
Rohit Grover |
1:4769360130ed | 101 | if (malloc_out_of_memory_counter == OUT_OF_MEMORRY) |
Rohit Grover |
1:4769360130ed | 102 | cpputest_malloc_set_out_of_memory(); |
Rohit Grover |
1:4769360130ed | 103 | } |
Rohit Grover |
1:4769360130ed | 104 | |
Rohit Grover |
1:4769360130ed | 105 | void* cpputest_malloc(size_t size) |
Rohit Grover |
1:4769360130ed | 106 | { |
Rohit Grover |
1:4769360130ed | 107 | return cpputest_malloc_location(size, "<unknown>", 0); |
Rohit Grover |
1:4769360130ed | 108 | } |
Rohit Grover |
1:4769360130ed | 109 | |
Rohit Grover |
1:4769360130ed | 110 | void* cpputest_calloc(size_t num, size_t size) |
Rohit Grover |
1:4769360130ed | 111 | { |
Rohit Grover |
1:4769360130ed | 112 | return cpputest_calloc_location(num, size, "<unknown>", 0); |
Rohit Grover |
1:4769360130ed | 113 | } |
Rohit Grover |
1:4769360130ed | 114 | |
Rohit Grover |
1:4769360130ed | 115 | void* cpputest_realloc(void* ptr, size_t size) |
Rohit Grover |
1:4769360130ed | 116 | { |
Rohit Grover |
1:4769360130ed | 117 | return cpputest_realloc_location(ptr, size, "<unknown>", 0); |
Rohit Grover |
1:4769360130ed | 118 | } |
Rohit Grover |
1:4769360130ed | 119 | |
Rohit Grover |
1:4769360130ed | 120 | void cpputest_free(void* buffer) |
Rohit Grover |
1:4769360130ed | 121 | { |
Rohit Grover |
1:4769360130ed | 122 | cpputest_free_location(buffer, "<unknown>", 0); |
Rohit Grover |
1:4769360130ed | 123 | } |
Rohit Grover |
1:4769360130ed | 124 | |
Rohit Grover |
1:4769360130ed | 125 | static void countdown() |
Rohit Grover |
1:4769360130ed | 126 | { |
Rohit Grover |
1:4769360130ed | 127 | if (malloc_out_of_memory_counter <= NO_COUNTDOWN) |
Rohit Grover |
1:4769360130ed | 128 | return; |
Rohit Grover |
1:4769360130ed | 129 | |
Rohit Grover |
1:4769360130ed | 130 | if (malloc_out_of_memory_counter == OUT_OF_MEMORRY) |
Rohit Grover |
1:4769360130ed | 131 | return; |
Rohit Grover |
1:4769360130ed | 132 | |
Rohit Grover |
1:4769360130ed | 133 | malloc_out_of_memory_counter--; |
Rohit Grover |
1:4769360130ed | 134 | |
Rohit Grover |
1:4769360130ed | 135 | if (malloc_out_of_memory_counter == OUT_OF_MEMORRY) |
Rohit Grover |
1:4769360130ed | 136 | cpputest_malloc_set_out_of_memory(); |
Rohit Grover |
1:4769360130ed | 137 | } |
Rohit Grover |
1:4769360130ed | 138 | |
Rohit Grover |
1:4769360130ed | 139 | void* cpputest_malloc_location(size_t size, const char* file, int line) |
Rohit Grover |
1:4769360130ed | 140 | { |
Rohit Grover |
1:4769360130ed | 141 | countdown(); |
Rohit Grover |
1:4769360130ed | 142 | malloc_count++; |
Rohit Grover |
1:4769360130ed | 143 | return cpputest_malloc_location_with_leak_detection(size, file, line); |
Rohit Grover |
1:4769360130ed | 144 | } |
Rohit Grover |
1:4769360130ed | 145 | |
Rohit Grover |
1:4769360130ed | 146 | void* cpputest_calloc_location(size_t num, size_t size, const char* file, int line) |
Rohit Grover |
1:4769360130ed | 147 | { |
Rohit Grover |
1:4769360130ed | 148 | void* mem = cpputest_malloc_location(num * size, file, line); |
rgrover1 | 0:0b799af9d58e | 149 | if (mem) |
Rohit Grover |
1:4769360130ed | 150 | PlatformSpecificMemset(mem, 0, num*size); |
Rohit Grover |
1:4769360130ed | 151 | return mem; |
Rohit Grover |
1:4769360130ed | 152 | } |
Rohit Grover |
1:4769360130ed | 153 | |
Rohit Grover |
1:4769360130ed | 154 | void* cpputest_realloc_location(void* memory, size_t size, const char* file, int line) |
Rohit Grover |
1:4769360130ed | 155 | { |
Rohit Grover |
1:4769360130ed | 156 | return cpputest_realloc_location_with_leak_detection(memory, size, file, line); |
Rohit Grover |
1:4769360130ed | 157 | } |
Rohit Grover |
1:4769360130ed | 158 | |
Rohit Grover |
1:4769360130ed | 159 | void cpputest_free_location(void* buffer, const char* file, int line) |
Rohit Grover |
1:4769360130ed | 160 | { |
Rohit Grover |
1:4769360130ed | 161 | cpputest_free_location_with_leak_detection(buffer, file, line); |
Rohit Grover |
1:4769360130ed | 162 | } |
Rohit Grover |
1:4769360130ed | 163 | |
Rohit Grover |
1:4769360130ed | 164 | } |