19888Sandreas@sandberg.pp.se/* 29888Sandreas@sandberg.pp.se * Copyright (c) 2013, Andreas Sandberg 39888Sandreas@sandberg.pp.se * All rights reserved. 49888Sandreas@sandberg.pp.se * 59888Sandreas@sandberg.pp.se * Redistribution and use in source and binary forms, with or without 69888Sandreas@sandberg.pp.se * modification, are permitted provided that the following conditions 79888Sandreas@sandberg.pp.se * are met: 89888Sandreas@sandberg.pp.se * 99888Sandreas@sandberg.pp.se * 1. Redistributions of source code must retain the above copyright 109888Sandreas@sandberg.pp.se * notice, this list of conditions and the following disclaimer. 119888Sandreas@sandberg.pp.se * 2. Redistributions in binary form must reproduce the above 129888Sandreas@sandberg.pp.se * copyright notice, this list of conditions and the following 139888Sandreas@sandberg.pp.se * disclaimer in the documentation and/or other materials provided 149888Sandreas@sandberg.pp.se * with the distribution. 159888Sandreas@sandberg.pp.se * 169888Sandreas@sandberg.pp.se * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179888Sandreas@sandberg.pp.se * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189888Sandreas@sandberg.pp.se * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 199888Sandreas@sandberg.pp.se * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 209888Sandreas@sandberg.pp.se * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 219888Sandreas@sandberg.pp.se * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 229888Sandreas@sandberg.pp.se * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 239888Sandreas@sandberg.pp.se * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 249888Sandreas@sandberg.pp.se * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 259888Sandreas@sandberg.pp.se * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 269888Sandreas@sandberg.pp.se * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 279888Sandreas@sandberg.pp.se * OF THE POSSIBILITY OF SUCH DAMAGE. 289888Sandreas@sandberg.pp.se */ 299888Sandreas@sandberg.pp.se 309888Sandreas@sandberg.pp.se#include "test_helper.h" 319888Sandreas@sandberg.pp.se 329888Sandreas@sandberg.pp.se#include <assert.h> 339888Sandreas@sandberg.pp.se#include <stdarg.h> 349888Sandreas@sandberg.pp.se#include <stdlib.h> 359888Sandreas@sandberg.pp.se 369888Sandreas@sandberg.pp.seunsigned test_current = 0; 379888Sandreas@sandberg.pp.seunsigned test_count = 0; 389888Sandreas@sandberg.pp.seunsigned test_fail_count = 0; 399888Sandreas@sandberg.pp.se 409888Sandreas@sandberg.pp.sevoid 419888Sandreas@sandberg.pp.setest_init(unsigned no_tests) 429888Sandreas@sandberg.pp.se{ 439888Sandreas@sandberg.pp.se assert(test_count == 0 && test_current == 0); 449888Sandreas@sandberg.pp.se 459888Sandreas@sandberg.pp.se test_count = no_tests; 469888Sandreas@sandberg.pp.se test_current = 1; 479888Sandreas@sandberg.pp.se test_fail_count = 0; 489888Sandreas@sandberg.pp.se 499888Sandreas@sandberg.pp.se printf("1..%u\n", no_tests); 509888Sandreas@sandberg.pp.se} 519888Sandreas@sandberg.pp.se 529888Sandreas@sandberg.pp.sevoid 539888Sandreas@sandberg.pp.setest_exit() 549888Sandreas@sandberg.pp.se{ 559888Sandreas@sandberg.pp.se if (test_fail_count) 569888Sandreas@sandberg.pp.se exit(EXIT_FAILURE); 579888Sandreas@sandberg.pp.se else 589888Sandreas@sandberg.pp.se exit(EXIT_SUCCESS); 599888Sandreas@sandberg.pp.se} 609888Sandreas@sandberg.pp.se 619888Sandreas@sandberg.pp.sevoid 629888Sandreas@sandberg.pp.setest_bail(const char *fmt, ...) 639888Sandreas@sandberg.pp.se{ 649888Sandreas@sandberg.pp.se va_list ap; 659888Sandreas@sandberg.pp.se va_start(ap, fmt); 669888Sandreas@sandberg.pp.se 679888Sandreas@sandberg.pp.se printf("Bail out! "); 689888Sandreas@sandberg.pp.se vprintf(fmt, ap); 699888Sandreas@sandberg.pp.se printf("\n"); 709888Sandreas@sandberg.pp.se 719888Sandreas@sandberg.pp.se va_end(ap); 729888Sandreas@sandberg.pp.se 739888Sandreas@sandberg.pp.se exit(EXIT_FAILURE); 749888Sandreas@sandberg.pp.se} 759888Sandreas@sandberg.pp.se 769888Sandreas@sandberg.pp.sevoid 779888Sandreas@sandberg.pp.setest_diag(const char *fmt, ...) 789888Sandreas@sandberg.pp.se{ 799888Sandreas@sandberg.pp.se va_list ap; 809888Sandreas@sandberg.pp.se va_start(ap, fmt); 819888Sandreas@sandberg.pp.se 829888Sandreas@sandberg.pp.se printf("# "); 839888Sandreas@sandberg.pp.se vprintf(fmt, ap); 849888Sandreas@sandberg.pp.se printf("\n"); 859888Sandreas@sandberg.pp.se 869888Sandreas@sandberg.pp.se va_end(ap); 879888Sandreas@sandberg.pp.se} 889888Sandreas@sandberg.pp.se 899888Sandreas@sandberg.pp.sestatic void 909888Sandreas@sandberg.pp.setest_vstatus(const char *status, const char *test, 919888Sandreas@sandberg.pp.se const char *directive, 929888Sandreas@sandberg.pp.se const char *fmt_why, va_list ap) 939888Sandreas@sandberg.pp.se{ 949888Sandreas@sandberg.pp.se printf("%s %i", status, test_current); 959888Sandreas@sandberg.pp.se 969888Sandreas@sandberg.pp.se if (test && test[0] != '\0') 979888Sandreas@sandberg.pp.se printf(" - %s", test); 989888Sandreas@sandberg.pp.se 999888Sandreas@sandberg.pp.se if (directive && directive[0] != '\0') { 1009888Sandreas@sandberg.pp.se printf(" # %s ", directive); 1019888Sandreas@sandberg.pp.se if (fmt_why && fmt_why[0] != '\0') 1029888Sandreas@sandberg.pp.se vprintf(fmt_why, ap); 1039888Sandreas@sandberg.pp.se } 1049888Sandreas@sandberg.pp.se printf("\n"); 1059888Sandreas@sandberg.pp.se 1069888Sandreas@sandberg.pp.se ++test_current; 1079888Sandreas@sandberg.pp.se} 1089888Sandreas@sandberg.pp.se 1099888Sandreas@sandberg.pp.sestatic void __attribute__((format (printf, 4, 5))) 1109888Sandreas@sandberg.pp.setest_status(const char *status, const char *test, 1119888Sandreas@sandberg.pp.se const char *directive, 1129888Sandreas@sandberg.pp.se const char *fmt_why, ...) 1139888Sandreas@sandberg.pp.se{ 1149888Sandreas@sandberg.pp.se va_list ap; 1159888Sandreas@sandberg.pp.se va_start(ap, fmt_why); 1169888Sandreas@sandberg.pp.se 1179888Sandreas@sandberg.pp.se test_vstatus(status, test, directive, fmt_why, ap); 1189888Sandreas@sandberg.pp.se 1199888Sandreas@sandberg.pp.se va_end(ap); 1209888Sandreas@sandberg.pp.se} 1219888Sandreas@sandberg.pp.se 1229888Sandreas@sandberg.pp.sevoid 1239888Sandreas@sandberg.pp.setest_ok(const char *test) 1249888Sandreas@sandberg.pp.se{ 1259888Sandreas@sandberg.pp.se test_status("ok", test, NULL, NULL); 1269888Sandreas@sandberg.pp.se} 1279888Sandreas@sandberg.pp.se 1289888Sandreas@sandberg.pp.sevoid 1299888Sandreas@sandberg.pp.setest_fail(const char *test) 1309888Sandreas@sandberg.pp.se{ 1319888Sandreas@sandberg.pp.se test_status("not ok", test, NULL, NULL); 1329888Sandreas@sandberg.pp.se ++test_fail_count; 1339888Sandreas@sandberg.pp.se} 1349888Sandreas@sandberg.pp.se 1359888Sandreas@sandberg.pp.sevoid 1369888Sandreas@sandberg.pp.setest_skip(const char *test, const char *fmt_why, ...) 1379888Sandreas@sandberg.pp.se{ 1389888Sandreas@sandberg.pp.se va_list ap; 1399888Sandreas@sandberg.pp.se va_start(ap, fmt_why); 1409888Sandreas@sandberg.pp.se 1419888Sandreas@sandberg.pp.se test_vstatus("ok", test, "SKIP", fmt_why, ap); 1429888Sandreas@sandberg.pp.se 1439888Sandreas@sandberg.pp.se va_end(ap); 1449888Sandreas@sandberg.pp.se} 1459888Sandreas@sandberg.pp.se 1469888Sandreas@sandberg.pp.sevoid 1479888Sandreas@sandberg.pp.setest_todo(const char *test, const char *fmt_why, ...) 1489888Sandreas@sandberg.pp.se{ 1499888Sandreas@sandberg.pp.se va_list ap; 1509888Sandreas@sandberg.pp.se va_start(ap, fmt_why); 1519888Sandreas@sandberg.pp.se 1529888Sandreas@sandberg.pp.se test_vstatus("not ok", test, "TODO", fmt_why, ap); 1539888Sandreas@sandberg.pp.se 1549888Sandreas@sandberg.pp.se va_end(ap); 1559888Sandreas@sandberg.pp.se 1569888Sandreas@sandberg.pp.se ++test_fail_count; 1579888Sandreas@sandberg.pp.se} 158