Martin Kojtal / cpputest

Fork of cpputest by Rohit Grover

Committer:
Rohit Grover
Date:
Tue Jun 17 15:52:54 2014 +0100
Revision:
1:4769360130ed
Child:
3:9e8c8907d9ee
updating to the latest version of cppUtest; tested against nordic's m-kit

Who changed what in which revision?

UserRevisionLine numberNew 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 <cstdlib>
Rohit Grover 1:4769360130ed 29 #include "CppUTest/TestHarness.h"
Rohit Grover 1:4769360130ed 30 #undef malloc
Rohit Grover 1:4769360130ed 31 #undef free
Rohit Grover 1:4769360130ed 32 #undef calloc
Rohit Grover 1:4769360130ed 33 #undef realloc
Rohit Grover 1:4769360130ed 34
Rohit Grover 1:4769360130ed 35 #define far // eliminate "meaningless type qualifier" warning
Rohit Grover 1:4769360130ed 36 #include "CppUTest/TestRegistry.h"
Rohit Grover 1:4769360130ed 37 #include <time.h>
Rohit Grover 1:4769360130ed 38 #include <stdio.h>
Rohit Grover 1:4769360130ed 39 #include <stdarg.h>
Rohit Grover 1:4769360130ed 40 #include <setjmp.h>
Rohit Grover 1:4769360130ed 41 #include <string.h>
Rohit Grover 1:4769360130ed 42 #include <math.h>
Rohit Grover 1:4769360130ed 43 #include <ctype.h>
Rohit Grover 1:4769360130ed 44
Rohit Grover 1:4769360130ed 45 #include "CppUTest/PlatformSpecificFunctions.h"
Rohit Grover 1:4769360130ed 46
Rohit Grover 1:4769360130ed 47 static jmp_buf test_exit_jmp_buf[2];
Rohit Grover 1:4769360130ed 48 static int jmp_buf_index = 0;
Rohit Grover 1:4769360130ed 49
Rohit Grover 1:4769360130ed 50 /* The ARMCC compiler will compile this function with C++ linkage, unless
Rohit Grover 1:4769360130ed 51 * we specifically tell it to use C linkage again, in the function definiton.
Rohit Grover 1:4769360130ed 52 */
Rohit Grover 1:4769360130ed 53 extern "C" int PlatformSpecificSetJmp(void (*function) (void* data), void* data)
Rohit Grover 1:4769360130ed 54 {
Rohit Grover 1:4769360130ed 55 if (0 == setjmp(test_exit_jmp_buf[jmp_buf_index])) {
Rohit Grover 1:4769360130ed 56 jmp_buf_index++;
Rohit Grover 1:4769360130ed 57 function(data);
Rohit Grover 1:4769360130ed 58 jmp_buf_index--;
Rohit Grover 1:4769360130ed 59 return 1;
Rohit Grover 1:4769360130ed 60 }
Rohit Grover 1:4769360130ed 61 return 0;
Rohit Grover 1:4769360130ed 62 }
Rohit Grover 1:4769360130ed 63
Rohit Grover 1:4769360130ed 64 void PlatformSpecificLongJmp()
Rohit Grover 1:4769360130ed 65 {
Rohit Grover 1:4769360130ed 66 jmp_buf_index--;
Rohit Grover 1:4769360130ed 67 longjmp(test_exit_jmp_buf[jmp_buf_index], 1);
Rohit Grover 1:4769360130ed 68 }
Rohit Grover 1:4769360130ed 69
Rohit Grover 1:4769360130ed 70 void PlatformSpecificRestoreJumpBuffer()
Rohit Grover 1:4769360130ed 71 {
Rohit Grover 1:4769360130ed 72 jmp_buf_index--;
Rohit Grover 1:4769360130ed 73 }
Rohit Grover 1:4769360130ed 74
Rohit Grover 1:4769360130ed 75 void PlatformSpecificRunTestInASeperateProcess(UtestShell* shell, TestPlugin* plugin, TestResult* result)
Rohit Grover 1:4769360130ed 76 {
Rohit Grover 1:4769360130ed 77 printf("-p isn' implemented for armcc. Running inside the process\b");
Rohit Grover 1:4769360130ed 78 shell->runOneTest(plugin, *result);
Rohit Grover 1:4769360130ed 79 }
Rohit Grover 1:4769360130ed 80
Rohit Grover 1:4769360130ed 81 TestOutput::WorkingEnvironment PlatformSpecificGetWorkingEnvironment()
Rohit Grover 1:4769360130ed 82 {
Rohit Grover 1:4769360130ed 83 return TestOutput::eclipse;
Rohit Grover 1:4769360130ed 84 }
Rohit Grover 1:4769360130ed 85
Rohit Grover 1:4769360130ed 86 ///////////// Time in millis
Rohit Grover 1:4769360130ed 87 /*
Rohit Grover 1:4769360130ed 88 * In Keil MDK-ARM, clock() default implementation used semihosting.
Rohit Grover 1:4769360130ed 89 * Resolutions is user adjustable (1 ms for now)
Rohit Grover 1:4769360130ed 90 */
Rohit Grover 1:4769360130ed 91 static long TimeInMillisImplementation()
Rohit Grover 1:4769360130ed 92 {
Rohit Grover 1:4769360130ed 93 clock_t t = clock();
Rohit Grover 1:4769360130ed 94 return t;
Rohit Grover 1:4769360130ed 95 }
Rohit Grover 1:4769360130ed 96
Rohit Grover 1:4769360130ed 97 static long (*timeInMillisFp) () = TimeInMillisImplementation;
Rohit Grover 1:4769360130ed 98
Rohit Grover 1:4769360130ed 99 long GetPlatformSpecificTimeInMillis()
Rohit Grover 1:4769360130ed 100 {
Rohit Grover 1:4769360130ed 101 return timeInMillisFp();
Rohit Grover 1:4769360130ed 102 }
Rohit Grover 1:4769360130ed 103
Rohit Grover 1:4769360130ed 104 /* The ARMCC compiler will compile this function with C++ linkage, unless
Rohit Grover 1:4769360130ed 105 * we specifically tell it to use C linkage again, in the function definiton.
Rohit Grover 1:4769360130ed 106 */
Rohit Grover 1:4769360130ed 107 extern "C" void SetPlatformSpecificTimeInMillisMethod(long (*platformSpecific) ())
Rohit Grover 1:4769360130ed 108 {
Rohit Grover 1:4769360130ed 109 timeInMillisFp = (platformSpecific == 0) ? TimeInMillisImplementation : platformSpecific;
Rohit Grover 1:4769360130ed 110 }
Rohit Grover 1:4769360130ed 111
Rohit Grover 1:4769360130ed 112 ///////////// Time in String
Rohit Grover 1:4769360130ed 113
Rohit Grover 1:4769360130ed 114 static const char* TimeStringImplementation()
Rohit Grover 1:4769360130ed 115 {
Rohit Grover 1:4769360130ed 116 time_t tm = time(NULL);
Rohit Grover 1:4769360130ed 117 return ctime(&tm);
Rohit Grover 1:4769360130ed 118 }
Rohit Grover 1:4769360130ed 119
Rohit Grover 1:4769360130ed 120 static const char* (*timeStringFp) () = TimeStringImplementation;
Rohit Grover 1:4769360130ed 121
Rohit Grover 1:4769360130ed 122 const char* GetPlatformSpecificTimeString()
Rohit Grover 1:4769360130ed 123 {
Rohit Grover 1:4769360130ed 124 return timeStringFp();
Rohit Grover 1:4769360130ed 125 }
Rohit Grover 1:4769360130ed 126
Rohit Grover 1:4769360130ed 127 /* The ARMCC compiler will compile this function with C++ linkage, unless
Rohit Grover 1:4769360130ed 128 * we specifically tell it to use C linkage again, in the function definiton.
Rohit Grover 1:4769360130ed 129 */
Rohit Grover 1:4769360130ed 130 extern "C" void SetPlatformSpecificTimeStringMethod(const char* (*platformMethod) ())
Rohit Grover 1:4769360130ed 131 {
Rohit Grover 1:4769360130ed 132 timeStringFp = (platformMethod == 0) ? TimeStringImplementation : platformMethod;
Rohit Grover 1:4769360130ed 133 }
Rohit Grover 1:4769360130ed 134
Rohit Grover 1:4769360130ed 135 int PlatformSpecificAtoI(const char* str)
Rohit Grover 1:4769360130ed 136 {
Rohit Grover 1:4769360130ed 137 return atoi(str);
Rohit Grover 1:4769360130ed 138 }
Rohit Grover 1:4769360130ed 139
Rohit Grover 1:4769360130ed 140 size_t PlatformSpecificStrLen(const char* str)
Rohit Grover 1:4769360130ed 141 {
Rohit Grover 1:4769360130ed 142 return strlen(str);
Rohit Grover 1:4769360130ed 143 }
Rohit Grover 1:4769360130ed 144
Rohit Grover 1:4769360130ed 145 int PlatformSpecificStrCmp(const char* s1, const char* s2)
Rohit Grover 1:4769360130ed 146 {
Rohit Grover 1:4769360130ed 147 return strcmp(s1, s2);
Rohit Grover 1:4769360130ed 148 }
Rohit Grover 1:4769360130ed 149
Rohit Grover 1:4769360130ed 150 int PlatformSpecificStrNCmp(const char* s1, const char* s2, size_t size)
Rohit Grover 1:4769360130ed 151 {
Rohit Grover 1:4769360130ed 152 return strncmp(s1, s2, size);
Rohit Grover 1:4769360130ed 153 }
Rohit Grover 1:4769360130ed 154
Rohit Grover 1:4769360130ed 155 char* PlatformSpecificStrStr(const char* s1, const char* s2)
Rohit Grover 1:4769360130ed 156 {
Rohit Grover 1:4769360130ed 157 return strstr((char*)s1, (char*)s2);
Rohit Grover 1:4769360130ed 158 }
Rohit Grover 1:4769360130ed 159
Rohit Grover 1:4769360130ed 160 /* The ARMCC compiler will compile this function with C++ linkage, unless
Rohit Grover 1:4769360130ed 161 * we specifically tell it to use C linkage again, in the function definiton.
Rohit Grover 1:4769360130ed 162 */
Rohit Grover 1:4769360130ed 163 // extern "C" int PlatformSpecificVSNprintf(char *str, size_t size, const char* format, va_list args)
Rohit Grover 1:4769360130ed 164 int PlatformSpecificVSNprintf(char *str, size_t size, const char* format, va_list args)
Rohit Grover 1:4769360130ed 165 {
Rohit Grover 1:4769360130ed 166 return vsnprintf( str, size, format, args);
Rohit Grover 1:4769360130ed 167 }
Rohit Grover 1:4769360130ed 168
Rohit Grover 1:4769360130ed 169 char PlatformSpecificToLower(char c)
Rohit Grover 1:4769360130ed 170 {
Rohit Grover 1:4769360130ed 171 return tolower(c);
Rohit Grover 1:4769360130ed 172 }
Rohit Grover 1:4769360130ed 173
Rohit Grover 1:4769360130ed 174 PlatformSpecificFile PlatformSpecificFOpen(const char* filename, const char* flag)
Rohit Grover 1:4769360130ed 175 {
Rohit Grover 1:4769360130ed 176 return fopen(filename, flag);
Rohit Grover 1:4769360130ed 177 }
Rohit Grover 1:4769360130ed 178
Rohit Grover 1:4769360130ed 179
Rohit Grover 1:4769360130ed 180 void PlatformSpecificFPuts(const char* str, PlatformSpecificFile file)
Rohit Grover 1:4769360130ed 181 {
Rohit Grover 1:4769360130ed 182 fputs(str, (FILE*)file);
Rohit Grover 1:4769360130ed 183 }
Rohit Grover 1:4769360130ed 184
Rohit Grover 1:4769360130ed 185 void PlatformSpecificFClose(PlatformSpecificFile file)
Rohit Grover 1:4769360130ed 186 {
Rohit Grover 1:4769360130ed 187 fclose((FILE*)file);
Rohit Grover 1:4769360130ed 188 }
Rohit Grover 1:4769360130ed 189
Rohit Grover 1:4769360130ed 190 void PlatformSpecificFlush()
Rohit Grover 1:4769360130ed 191 {
Rohit Grover 1:4769360130ed 192 fflush(stdout);
Rohit Grover 1:4769360130ed 193 }
Rohit Grover 1:4769360130ed 194
Rohit Grover 1:4769360130ed 195 #include "Serial.h"
Rohit Grover 1:4769360130ed 196 using namespace mbed;
Rohit Grover 1:4769360130ed 197
Rohit Grover 1:4769360130ed 198 int PlatformSpecificPutchar(int c)
Rohit Grover 1:4769360130ed 199 {
Rohit Grover 1:4769360130ed 200 /* Please modify this block for test results to be reported as
Rohit Grover 1:4769360130ed 201 * console output. The following is a sample implementation using a
Rohit Grover 1:4769360130ed 202 * Serial object connected to the console. */
Rohit Grover 1:4769360130ed 203 #define NEED_TEST_REPORT_AS_CONSOLE_OUTPUT 1
Rohit Grover 1:4769360130ed 204 #if NEED_TEST_REPORT_AS_CONSOLE_OUTPUT
Rohit Grover 1:4769360130ed 205 extern Serial console;
Rohit Grover 1:4769360130ed 206
Rohit Grover 1:4769360130ed 207 #define NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE 1
Rohit Grover 1:4769360130ed 208 #if NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE
Rohit Grover 1:4769360130ed 209 /* CppUTest emits \n line terminators in its reports; some terminals
Rohit Grover 1:4769360130ed 210 * need the linefeed (\r) in addition. */
Rohit Grover 1:4769360130ed 211 if (c == '\n') {
Rohit Grover 1:4769360130ed 212 console.putc('\r');
Rohit Grover 1:4769360130ed 213 }
Rohit Grover 1:4769360130ed 214 #endif /* #if NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE */
Rohit Grover 1:4769360130ed 215
Rohit Grover 1:4769360130ed 216 return (console.putc(c));
Rohit Grover 1:4769360130ed 217 #else /* NEED_TEST_REPORT_AS_CONSOLE_OUTPUT */
Rohit Grover 1:4769360130ed 218 return (0);
Rohit Grover 1:4769360130ed 219 #endif /* NEED_TEST_REPORT_AS_CONSOLE_OUTPUT */
Rohit Grover 1:4769360130ed 220 }
Rohit Grover 1:4769360130ed 221
Rohit Grover 1:4769360130ed 222 void* PlatformSpecificMalloc(size_t size)
Rohit Grover 1:4769360130ed 223 {
Rohit Grover 1:4769360130ed 224 return malloc(size);
Rohit Grover 1:4769360130ed 225 }
Rohit Grover 1:4769360130ed 226
Rohit Grover 1:4769360130ed 227 void* PlatformSpecificRealloc (void* memory, size_t size)
Rohit Grover 1:4769360130ed 228 {
Rohit Grover 1:4769360130ed 229 return realloc(memory, size);
Rohit Grover 1:4769360130ed 230 }
Rohit Grover 1:4769360130ed 231
Rohit Grover 1:4769360130ed 232 void PlatformSpecificFree(void* memory)
Rohit Grover 1:4769360130ed 233 {
Rohit Grover 1:4769360130ed 234 free(memory);
Rohit Grover 1:4769360130ed 235 }
Rohit Grover 1:4769360130ed 236
Rohit Grover 1:4769360130ed 237 void* PlatformSpecificMemCpy(void* s1, const void* s2, size_t size)
Rohit Grover 1:4769360130ed 238 {
Rohit Grover 1:4769360130ed 239 return memcpy(s1, s2, size);
Rohit Grover 1:4769360130ed 240 }
Rohit Grover 1:4769360130ed 241
Rohit Grover 1:4769360130ed 242 void* PlatformSpecificMemset(void* mem, int c, size_t size)
Rohit Grover 1:4769360130ed 243 {
Rohit Grover 1:4769360130ed 244 return memset(mem, c, size);
Rohit Grover 1:4769360130ed 245 }
Rohit Grover 1:4769360130ed 246
Rohit Grover 1:4769360130ed 247 double PlatformSpecificFabs(double d)
Rohit Grover 1:4769360130ed 248 {
Rohit Grover 1:4769360130ed 249 return fabs(d);
Rohit Grover 1:4769360130ed 250 }
Rohit Grover 1:4769360130ed 251
Rohit Grover 1:4769360130ed 252 int PlatformSpecificIsNan(double d)
Rohit Grover 1:4769360130ed 253 {
Rohit Grover 1:4769360130ed 254 return isnan(d);
Rohit Grover 1:4769360130ed 255 }