aboutsummaryrefslogtreecommitdiffstats
path: root/libical/src/test/regression-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libical/src/test/regression-utils.c')
-rw-r--r--libical/src/test/regression-utils.c169
1 files changed, 169 insertions, 0 deletions
diff --git a/libical/src/test/regression-utils.c b/libical/src/test/regression-utils.c
new file mode 100644
index 0000000000..edc1eddba3
--- /dev/null
+++ b/libical/src/test/regression-utils.c
@@ -0,0 +1,169 @@
+#include "ical.h"
+
+#include <stdlib.h> /* abort() */
+#include <string.h> /* strcmp() */
+
+static char ictt_str[1024];
+int VERBOSE = 0;
+int QUIET = 0;
+
+const char* ical_timet_string(const time_t t)
+{
+ struct tm stm = *(gmtime(&t));
+
+ sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z",stm.tm_year+1900,
+ stm.tm_mon+1,stm.tm_mday,stm.tm_hour,stm.tm_min,stm.tm_sec);
+
+ return ictt_str;
+
+}
+
+const char* ictt_as_string(struct icaltimetype t)
+{
+ const char *zone = icaltimezone_get_tzid((icaltimezone *)t.zone);
+
+ if (icaltime_is_utc(t))
+ sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z UTC",
+ t.year,t.month,t.day, t.hour,t.minute,t.second);
+ else
+ sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d %s",
+ t.year,t.month,t.day, t.hour,t.minute,t.second,
+ zone == NULL? "(floating)": zone);
+
+ return ictt_str;
+}
+
+char* icaltime_as_ctime(struct icaltimetype t)
+{
+ time_t tt;
+
+ tt = icaltime_as_timet(t);
+ sprintf(ictt_str,"%s",ctime(&tt));
+
+ return ictt_str;
+}
+
+
+/** This variable is used to control whether we core dump on errors **/
+static int die_on_errors = 0;
+static int testnumber = 0;
+static int failed = 0;
+static int current_set = 0;
+
+static struct {int set; int test;} failed_tests[1024];
+
+void die_on_errors_set(int val) {
+ die_on_errors = 1;
+}
+
+void _ok(char* test_name, int success, char *file, int linenum, char *test) {
+ testnumber++;
+
+ if (!QUIET || (QUIET && !success))
+ printf("%sok %d - %s\n", (success)?"" : "not ", testnumber, test_name);
+ if (!success) {
+ failed_tests[failed].set = current_set;
+ failed_tests[failed].test = testnumber;
+ failed++;
+
+ printf("# test failed: \"%s\"\n", test);
+ printf("# at: %s:%-d\n", file, linenum);
+ }
+
+ if (die_on_errors == 1 && !success) {
+ abort();
+ }
+}
+
+void _is(char* test_name, const char* str1, const char* str2, char *file, int linenum) {
+ int diff;
+
+ if (str1 == NULL || str2 == NULL) {
+ diff = 1;
+ } else {
+ diff = strcmp(str1, str2);
+ }
+
+ if (!test_name) test_name = "()";
+
+ _ok(test_name, (diff==0), file, linenum, "");
+
+ if (diff) {
+ printf("# got: %s\n", str1 ? str1 : "(null)");
+ printf("# expected: %s\n", str2 ? str2 : "(null)");
+ }
+}
+
+void _int_is(char* test_name, int i1, int i2, char *file, int linenum) {
+ _ok(test_name, (i1==i2), file, linenum, "");
+
+ if (i1!=i2) {
+ printf("# got: %d\n", i1);
+ printf("# expected: %d\n", i2);
+ }
+}
+
+
+void verbose(int newval) {
+ VERBOSE = newval;
+}
+
+void test_start(int numtests) {
+ if (numtests) {
+ if (!QUIET)
+ printf("1..%-d\n", numtests);
+ } else {
+ if (!QUIET)
+ printf("1..\n");
+ }
+}
+
+void test_header(char *header, int set) {
+ if (!QUIET)
+ printf("########## %-40s (%d) ##########\n", header, set);
+ current_set = set;
+}
+
+void test_end(void) {
+ int pct;
+
+ if (failed) {
+ int i, oldset = 0;
+
+ pct = ((testnumber - failed)*100)/testnumber;
+ printf("\n Failed %d/%d tests, %2d%% okay\n", failed, testnumber, pct);
+ printf("\n Failed tests:\n ");
+ for (i = 0; i < failed; i++) {
+ int this_set = failed_tests[i].set;
+ char *prefix = "";
+ if (this_set != oldset) {
+ prefix = "\n ";
+ oldset = this_set;
+ }
+
+ printf("%s%d/%d ", prefix, this_set, failed_tests[i].test);
+ }
+ printf("\n");
+
+ } else {
+ printf("\n All Tests Successful.\n");
+ }
+}
+
+
+void test_run(char *test_name,
+ void (*test_fcn)(void),
+ int do_test, int headeronly)
+{
+ static int test_set = 1;
+
+ if (headeronly || do_test == 0 || do_test == test_set)
+ test_header(test_name, test_set);
+
+ if (!headeronly && (do_test==0 || do_test == test_set)) {
+ (*test_fcn)();
+ if (!QUIET)
+ printf("\n");
+ }
+ test_set++;
+}