Martin Kojtal / cpputest

Fork of cpputest by Rohit Grover

Committer:
rgrover1
Date:
Tue Jan 28 09:27:41 2014 +0000
Revision:
0:0b799af9d58e
CppUTest unit test framework.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:0b799af9d58e 1 /*
rgrover1 0:0b799af9d58e 2 * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde
rgrover1 0:0b799af9d58e 3 * All rights reserved.
rgrover1 0:0b799af9d58e 4 *
rgrover1 0:0b799af9d58e 5 * Redistribution and use in source and binary forms, with or without
rgrover1 0:0b799af9d58e 6 * modification, are permitted provided that the following conditions are met:
rgrover1 0:0b799af9d58e 7 * * Redistributions of source code must retain the above copyright
rgrover1 0:0b799af9d58e 8 * notice, this list of conditions and the following disclaimer.
rgrover1 0:0b799af9d58e 9 * * Redistributions in binary form must reproduce the above copyright
rgrover1 0:0b799af9d58e 10 * notice, this list of conditions and the following disclaimer in the
rgrover1 0:0b799af9d58e 11 * documentation and/or other materials provided with the distribution.
rgrover1 0:0b799af9d58e 12 * * Neither the name of the <organization> nor the
rgrover1 0:0b799af9d58e 13 * names of its contributors may be used to endorse or promote products
rgrover1 0:0b799af9d58e 14 * derived from this software without specific prior written permission.
rgrover1 0:0b799af9d58e 15 *
rgrover1 0:0b799af9d58e 16 * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY
rgrover1 0:0b799af9d58e 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
rgrover1 0:0b799af9d58e 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rgrover1 0:0b799af9d58e 19 * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
rgrover1 0:0b799af9d58e 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
rgrover1 0:0b799af9d58e 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
rgrover1 0:0b799af9d58e 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
rgrover1 0:0b799af9d58e 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
rgrover1 0:0b799af9d58e 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
rgrover1 0:0b799af9d58e 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rgrover1 0:0b799af9d58e 26 */
rgrover1 0:0b799af9d58e 27
rgrover1 0:0b799af9d58e 28 #include <stdlib.h>
rgrover1 0:0b799af9d58e 29 #include <setjmp.h>
rgrover1 0:0b799af9d58e 30 #include <ctype.h>
rgrover1 0:0b799af9d58e 31 #include "platform.h"
rgrover1 0:0b799af9d58e 32
rgrover1 0:0b799af9d58e 33 #include "mbed.h"
rgrover1 0:0b799af9d58e 34 #include "Serial.h"
rgrover1 0:0b799af9d58e 35 #include "error.h"
rgrover1 0:0b799af9d58e 36
rgrover1 0:0b799af9d58e 37 #include "CppUTest/TestHarness.h"
rgrover1 0:0b799af9d58e 38
rgrover1 0:0b799af9d58e 39 #include "CppUTest/TestRegistry.h"
rgrover1 0:0b799af9d58e 40 #include "CppUTest/PlatformSpecificFunctions.h"
rgrover1 0:0b799af9d58e 41
rgrover1 0:0b799af9d58e 42 static jmp_buf test_exit_jmp_buf[10];
rgrover1 0:0b799af9d58e 43 static int jmp_buf_index = 0;
rgrover1 0:0b799af9d58e 44
rgrover1 0:0b799af9d58e 45 int
rgrover1 0:0b799af9d58e 46 PlatformSpecificSetJmp(void (* function) (void* data), void* data)
rgrover1 0:0b799af9d58e 47 {
rgrover1 0:0b799af9d58e 48 if (0 == setjmp(test_exit_jmp_buf[jmp_buf_index])) {
rgrover1 0:0b799af9d58e 49 jmp_buf_index++;
rgrover1 0:0b799af9d58e 50 function(data);
rgrover1 0:0b799af9d58e 51 jmp_buf_index--;
rgrover1 0:0b799af9d58e 52 return (1);
rgrover1 0:0b799af9d58e 53 }
rgrover1 0:0b799af9d58e 54 return (0);
rgrover1 0:0b799af9d58e 55 }
rgrover1 0:0b799af9d58e 56
rgrover1 0:0b799af9d58e 57 void
rgrover1 0:0b799af9d58e 58 PlatformSpecificLongJmp()
rgrover1 0:0b799af9d58e 59 {
rgrover1 0:0b799af9d58e 60 jmp_buf_index--;
rgrover1 0:0b799af9d58e 61 longjmp(test_exit_jmp_buf[jmp_buf_index], 1);
rgrover1 0:0b799af9d58e 62 }
rgrover1 0:0b799af9d58e 63
rgrover1 0:0b799af9d58e 64 void
rgrover1 0:0b799af9d58e 65 PlatformSpecificRestoreJumpBuffer()
rgrover1 0:0b799af9d58e 66 {
rgrover1 0:0b799af9d58e 67 jmp_buf_index = 0;
rgrover1 0:0b799af9d58e 68 memset(test_exit_jmp_buf, 0, sizeof(test_exit_jmp_buf));
rgrover1 0:0b799af9d58e 69 }
rgrover1 0:0b799af9d58e 70
rgrover1 0:0b799af9d58e 71 void
rgrover1 0:0b799af9d58e 72 PlatformSpecificRunTestInASeperateProcess(UtestShell* shell,
rgrover1 0:0b799af9d58e 73 TestPlugin* plugin,
rgrover1 0:0b799af9d58e 74 TestResult* result)
rgrover1 0:0b799af9d58e 75 {
rgrover1 0:0b799af9d58e 76 (void) shell;
rgrover1 0:0b799af9d58e 77 (void) plugin;
rgrover1 0:0b799af9d58e 78 (void) result;
rgrover1 0:0b799af9d58e 79
rgrover1 0:0b799af9d58e 80 /* To be implemented */
rgrover1 0:0b799af9d58e 81 error("PlatformSpecificRunTestInASeperateProcess not implemented, but called");
rgrover1 0:0b799af9d58e 82 }
rgrover1 0:0b799af9d58e 83
rgrover1 0:0b799af9d58e 84 long
rgrover1 0:0b799af9d58e 85 GetPlatformSpecificTimeInMillis()
rgrover1 0:0b799af9d58e 86 {
rgrover1 0:0b799af9d58e 87 /* To be implemented */
rgrover1 0:0b799af9d58e 88 return (0);
rgrover1 0:0b799af9d58e 89 }
rgrover1 0:0b799af9d58e 90
rgrover1 0:0b799af9d58e 91 void
rgrover1 0:0b799af9d58e 92 SetPlatformSpecificTimeInMillisMethod(long (* platformSpecific) ())
rgrover1 0:0b799af9d58e 93 {
rgrover1 0:0b799af9d58e 94 (void) platformSpecific;
rgrover1 0:0b799af9d58e 95
rgrover1 0:0b799af9d58e 96 /* To be implemented */
rgrover1 0:0b799af9d58e 97 error("SetPlatformSpecificTimeInMillisMethod not implemented, but called");
rgrover1 0:0b799af9d58e 98 }
rgrover1 0:0b799af9d58e 99
rgrover1 0:0b799af9d58e 100 TestOutput::WorkingEnvironment
rgrover1 0:0b799af9d58e 101 PlatformSpecificGetWorkingEnvironment()
rgrover1 0:0b799af9d58e 102 {
rgrover1 0:0b799af9d58e 103 return (TestOutput::eclipse);
rgrover1 0:0b799af9d58e 104 }
rgrover1 0:0b799af9d58e 105
rgrover1 0:0b799af9d58e 106 ///////////// Time in String
rgrover1 0:0b799af9d58e 107
rgrover1 0:0b799af9d58e 108 const char*
rgrover1 0:0b799af9d58e 109 GetPlatformSpecificTimeString()
rgrover1 0:0b799af9d58e 110 {
rgrover1 0:0b799af9d58e 111 /* To be implemented */
rgrover1 0:0b799af9d58e 112 error("GetPlatformSpecificTimeString not implemented, but called");
rgrover1 0:0b799af9d58e 113
rgrover1 0:0b799af9d58e 114 return (NULL);
rgrover1 0:0b799af9d58e 115 }
rgrover1 0:0b799af9d58e 116
rgrover1 0:0b799af9d58e 117 void
rgrover1 0:0b799af9d58e 118 SetPlatformSpecificTimeStringMethod(const char* (* platformMethod) ())
rgrover1 0:0b799af9d58e 119 {
rgrover1 0:0b799af9d58e 120 (void) platformMethod;
rgrover1 0:0b799af9d58e 121
rgrover1 0:0b799af9d58e 122 /* To be implemented */
rgrover1 0:0b799af9d58e 123 error("SetPlatformSpecificTimeStringMethod not implemented, but called");
rgrover1 0:0b799af9d58e 124 }
rgrover1 0:0b799af9d58e 125
rgrover1 0:0b799af9d58e 126 int
rgrover1 0:0b799af9d58e 127 PlatformSpecificAtoI(const char* str)
rgrover1 0:0b799af9d58e 128 {
rgrover1 0:0b799af9d58e 129 return (atoi(str));
rgrover1 0:0b799af9d58e 130 }
rgrover1 0:0b799af9d58e 131
rgrover1 0:0b799af9d58e 132 size_t
rgrover1 0:0b799af9d58e 133 PlatformSpecificStrLen(const char* str)
rgrover1 0:0b799af9d58e 134 {
rgrover1 0:0b799af9d58e 135 return (strlen(str));
rgrover1 0:0b799af9d58e 136 }
rgrover1 0:0b799af9d58e 137
rgrover1 0:0b799af9d58e 138 char*
rgrover1 0:0b799af9d58e 139 PlatformSpecificStrCat(char* s1, const char* s2)
rgrover1 0:0b799af9d58e 140 {
rgrover1 0:0b799af9d58e 141 return (strcat(s1, s2));
rgrover1 0:0b799af9d58e 142 }
rgrover1 0:0b799af9d58e 143
rgrover1 0:0b799af9d58e 144 char*
rgrover1 0:0b799af9d58e 145 PlatformSpecificStrCpy(char* s1, const char* s2)
rgrover1 0:0b799af9d58e 146 {
rgrover1 0:0b799af9d58e 147 return (strcpy(s1, s2));
rgrover1 0:0b799af9d58e 148 }
rgrover1 0:0b799af9d58e 149
rgrover1 0:0b799af9d58e 150 char*
rgrover1 0:0b799af9d58e 151 PlatformSpecificStrNCpy(char* s1, const char* s2, size_t size)
rgrover1 0:0b799af9d58e 152 {
rgrover1 0:0b799af9d58e 153 return (strncpy(s1, s2, size));
rgrover1 0:0b799af9d58e 154 }
rgrover1 0:0b799af9d58e 155
rgrover1 0:0b799af9d58e 156 int
rgrover1 0:0b799af9d58e 157 PlatformSpecificStrCmp(const char* s1, const char* s2)
rgrover1 0:0b799af9d58e 158 {
rgrover1 0:0b799af9d58e 159 return (strcmp(s1, s2));
rgrover1 0:0b799af9d58e 160 }
rgrover1 0:0b799af9d58e 161
rgrover1 0:0b799af9d58e 162 int
rgrover1 0:0b799af9d58e 163 PlatformSpecificStrNCmp(const char* s1, const char* s2, size_t size)
rgrover1 0:0b799af9d58e 164 {
rgrover1 0:0b799af9d58e 165 return (strncmp(s1, s2, size));
rgrover1 0:0b799af9d58e 166 }
rgrover1 0:0b799af9d58e 167
rgrover1 0:0b799af9d58e 168 char*
rgrover1 0:0b799af9d58e 169 PlatformSpecificStrStr(const char* s1, const char* s2)
rgrover1 0:0b799af9d58e 170 {
rgrover1 0:0b799af9d58e 171 return ((char*) strstr(s1, s2));
rgrover1 0:0b799af9d58e 172 }
rgrover1 0:0b799af9d58e 173
rgrover1 0:0b799af9d58e 174 int
rgrover1 0:0b799af9d58e 175 PlatformSpecificVSNprintf(char* str,
rgrover1 0:0b799af9d58e 176 size_t size,
rgrover1 0:0b799af9d58e 177 const char* format,
rgrover1 0:0b799af9d58e 178 va_list args)
rgrover1 0:0b799af9d58e 179 {
rgrover1 0:0b799af9d58e 180 return (vsnprintf( str, size, format, args));
rgrover1 0:0b799af9d58e 181 }
rgrover1 0:0b799af9d58e 182
rgrover1 0:0b799af9d58e 183 char
rgrover1 0:0b799af9d58e 184 PlatformSpecificToLower(char c)
rgrover1 0:0b799af9d58e 185 {
rgrover1 0:0b799af9d58e 186 return ((char) tolower((char) c));
rgrover1 0:0b799af9d58e 187 }
rgrover1 0:0b799af9d58e 188
rgrover1 0:0b799af9d58e 189 PlatformSpecificFile
rgrover1 0:0b799af9d58e 190 PlatformSpecificFOpen(const char* filename, const char* flag)
rgrover1 0:0b799af9d58e 191 {
rgrover1 0:0b799af9d58e 192 (void) filename;
rgrover1 0:0b799af9d58e 193 (void) flag;
rgrover1 0:0b799af9d58e 194
rgrover1 0:0b799af9d58e 195 /* To be implemented */
rgrover1 0:0b799af9d58e 196 error("PlatformSpecificFOpen not implemented, but called");
rgrover1 0:0b799af9d58e 197
rgrover1 0:0b799af9d58e 198 return (NULL);
rgrover1 0:0b799af9d58e 199 }
rgrover1 0:0b799af9d58e 200
rgrover1 0:0b799af9d58e 201 void
rgrover1 0:0b799af9d58e 202 PlatformSpecificFPuts(const char* str, PlatformSpecificFile file)
rgrover1 0:0b799af9d58e 203 {
rgrover1 0:0b799af9d58e 204 (void) str;
rgrover1 0:0b799af9d58e 205 (void) file;
rgrover1 0:0b799af9d58e 206
rgrover1 0:0b799af9d58e 207 /* To be implemented */
rgrover1 0:0b799af9d58e 208 error("PlatformSpecificFPuts not implemented, but called");
rgrover1 0:0b799af9d58e 209 }
rgrover1 0:0b799af9d58e 210
rgrover1 0:0b799af9d58e 211 void
rgrover1 0:0b799af9d58e 212 PlatformSpecificFClose(PlatformSpecificFile file)
rgrover1 0:0b799af9d58e 213 {
rgrover1 0:0b799af9d58e 214 (void) file;
rgrover1 0:0b799af9d58e 215
rgrover1 0:0b799af9d58e 216 /* To be implemented */
rgrover1 0:0b799af9d58e 217 error("PlatformSpecificFClose not implemented, but called");
rgrover1 0:0b799af9d58e 218 }
rgrover1 0:0b799af9d58e 219
rgrover1 0:0b799af9d58e 220 void
rgrover1 0:0b799af9d58e 221 PlatformSpecificFlush()
rgrover1 0:0b799af9d58e 222 {
rgrover1 0:0b799af9d58e 223 }
rgrover1 0:0b799af9d58e 224
rgrover1 0:0b799af9d58e 225 int
rgrover1 0:0b799af9d58e 226 PlatformSpecificPutchar(int c)
rgrover1 0:0b799af9d58e 227 {
rgrover1 0:0b799af9d58e 228 /* Please modify this block for test results to be reported as
rgrover1 0:0b799af9d58e 229 * console output. The following is a sample implementation using a
rgrover1 0:0b799af9d58e 230 * Serial object connected to the console. */
rgrover1 0:0b799af9d58e 231 #define NEED_TEST_REPORT_AS_CONSOLE_OUTPUT 1
rgrover1 0:0b799af9d58e 232 #if NEED_TEST_REPORT_AS_CONSOLE_OUTPUT
rgrover1 0:0b799af9d58e 233 extern Serial console;
rgrover1 0:0b799af9d58e 234
rgrover1 0:0b799af9d58e 235 #define NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE 1
rgrover1 0:0b799af9d58e 236 #if NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE
rgrover1 0:0b799af9d58e 237 /* CppUTest emits \n line terminators in its reports; some terminals
rgrover1 0:0b799af9d58e 238 * need the linefeed (\r) in addition. */
rgrover1 0:0b799af9d58e 239 if (c == '\n') {
rgrover1 0:0b799af9d58e 240 console.putc('\r');
rgrover1 0:0b799af9d58e 241 }
rgrover1 0:0b799af9d58e 242 #endif /* #if NEED_LINE_FEED_IN_ADDITION_TO_NEWLINE */
rgrover1 0:0b799af9d58e 243
rgrover1 0:0b799af9d58e 244 return (console.putc(c));
rgrover1 0:0b799af9d58e 245 #else /* NEED_TEST_REPORT_AS_CONSOLE_OUTPUT */
rgrover1 0:0b799af9d58e 246 return (0);
rgrover1 0:0b799af9d58e 247 #endif /* NEED_TEST_REPORT_AS_CONSOLE_OUTPUT */
rgrover1 0:0b799af9d58e 248 }
rgrover1 0:0b799af9d58e 249
rgrover1 0:0b799af9d58e 250 void*
rgrover1 0:0b799af9d58e 251 PlatformSpecificMalloc(size_t size)
rgrover1 0:0b799af9d58e 252 {
rgrover1 0:0b799af9d58e 253 return (malloc(size));
rgrover1 0:0b799af9d58e 254 }
rgrover1 0:0b799af9d58e 255
rgrover1 0:0b799af9d58e 256 void*
rgrover1 0:0b799af9d58e 257 PlatformSpecificRealloc (void* memory, size_t size)
rgrover1 0:0b799af9d58e 258 {
rgrover1 0:0b799af9d58e 259 (void) memory;
rgrover1 0:0b799af9d58e 260 (void) size;
rgrover1 0:0b799af9d58e 261
rgrover1 0:0b799af9d58e 262 /* To be implemented */
rgrover1 0:0b799af9d58e 263 error("PlatformSpecificRealloc not implemented, but called");
rgrover1 0:0b799af9d58e 264 return (NULL);
rgrover1 0:0b799af9d58e 265 }
rgrover1 0:0b799af9d58e 266
rgrover1 0:0b799af9d58e 267 void
rgrover1 0:0b799af9d58e 268 PlatformSpecificFree(void* memory)
rgrover1 0:0b799af9d58e 269 {
rgrover1 0:0b799af9d58e 270 free(memory);
rgrover1 0:0b799af9d58e 271 }
rgrover1 0:0b799af9d58e 272
rgrover1 0:0b799af9d58e 273 void*
rgrover1 0:0b799af9d58e 274 PlatformSpecificMemCpy(void* s1, const void* s2, size_t size)
rgrover1 0:0b799af9d58e 275 {
rgrover1 0:0b799af9d58e 276 (void) size;
rgrover1 0:0b799af9d58e 277 (void) s1;
rgrover1 0:0b799af9d58e 278 (void) s2;
rgrover1 0:0b799af9d58e 279
rgrover1 0:0b799af9d58e 280 /* To be implemented */
rgrover1 0:0b799af9d58e 281 error("PlatformSpecificMemCpy not implemented, but called");
rgrover1 0:0b799af9d58e 282
rgrover1 0:0b799af9d58e 283 return (NULL);
rgrover1 0:0b799af9d58e 284 }
rgrover1 0:0b799af9d58e 285
rgrover1 0:0b799af9d58e 286 void*
rgrover1 0:0b799af9d58e 287 PlatformSpecificMemset(void* mem, int c, size_t size)
rgrover1 0:0b799af9d58e 288 {
rgrover1 0:0b799af9d58e 289 return (memset(mem, c, size));
rgrover1 0:0b799af9d58e 290 }
rgrover1 0:0b799af9d58e 291
rgrover1 0:0b799af9d58e 292 double
rgrover1 0:0b799af9d58e 293 PlatformSpecificFabs(double d)
rgrover1 0:0b799af9d58e 294 {
rgrover1 0:0b799af9d58e 295 (void) d;
rgrover1 0:0b799af9d58e 296
rgrover1 0:0b799af9d58e 297 /* To be implemented */
rgrover1 0:0b799af9d58e 298 error("PlatformSpecificFabs not implemented, but called");
rgrover1 0:0b799af9d58e 299
rgrover1 0:0b799af9d58e 300 return (0.0);
rgrover1 0:0b799af9d58e 301 }
rgrover1 0:0b799af9d58e 302
rgrover1 0:0b799af9d58e 303 int
rgrover1 0:0b799af9d58e 304 PlatformSpecificIsNan(double d)
rgrover1 0:0b799af9d58e 305 {
rgrover1 0:0b799af9d58e 306 (void) d;
rgrover1 0:0b799af9d58e 307
rgrover1 0:0b799af9d58e 308 /* To be implemented */
rgrover1 0:0b799af9d58e 309 error("PlatformSpecificIsNan not implemented, but called");
rgrover1 0:0b799af9d58e 310
rgrover1 0:0b799af9d58e 311 return (0);
rgrover1 0:0b799af9d58e 312 }