summaryrefslogtreecommitdiff
path: root/srclib/libapreq/t/at.c
diff options
context:
space:
mode:
Diffstat (limited to 'srclib/libapreq/t/at.c')
-rw-r--r--srclib/libapreq/t/at.c394
1 files changed, 0 insertions, 394 deletions
diff --git a/srclib/libapreq/t/at.c b/srclib/libapreq/t/at.c
deleted file mode 100644
index 19e59cbb93..0000000000
--- a/srclib/libapreq/t/at.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
-** Licensed to the Apache Software Foundation (ASF) under one or more
-** contributor license agreements. See the NOTICE file distributed with
-** this work for additional information regarding copyright ownership.
-** The ASF licenses this file to You under the Apache License, Version 2.0
-** (the "License"); you may not use this file except in compliance with
-** the License. You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#include "at.h"
-#include <errno.h>
-#include <ctype.h>
-
-#define AT_SUCCESS 0
-#define AT_EGENERAL 14
-#define min(a, b) ((a < b) ? a : b)
-
-int at_begin(at_t *t, int total)
-{
- char buf[32];
- at_snprintf(buf, 32, "1..%d", total);
- return at_report(t, buf);
-}
-
-static int test_cleanup(void *data)
-{
- at_t *t = data;
- if (t->current < t->plan)
- return at_report(t, "Bail out!");
- else
- return at_report(t, "END");
-}
-
-void at_end(at_t *t)
-{
- test_cleanup(t);
- free(t);
-}
-
-int at_comment(at_t *t, const char *fmt, va_list vp)
-{
- int s;
- char buf[256], *b = buf + 2;
- char *end;
- int rv;
- rv = at_vsnprintf(b, 250, fmt, vp);
-
- if (rv <= 0)
- return EINVAL;
-
-
- end = b + min(rv, 250);
-
- buf[0] = '#';
- buf[1] = ' ';
-
- if (rv >= 250) {
- end[-1] = '.';
- *end++ = '.';
- *end++ = '.';
- *end++ = '\n';
- *end = 0;
- }
- else if (end[-1] != '\n') {
- *end++ = '\n';
- *end = 0;
- }
-
- b = buf;
- while (1) {
- char *eol;
-
- eol = strchr(b + 2, '\n');
- *eol = 0;
- s = at_report(t, b);
- if (s != AT_SUCCESS || eol == end - 1)
- break;
-
- b = eol - 1;
- b[0] = '#';
- b[1] = ' ';
- }
-
- return s;
-}
-
-void at_ok(at_t *t, int is_ok, const char *label, const char *file, int line)
-{
- char format[] = "not ok %d - %s # %s (%s:%d) test %d in %s";
- char *end = format + 10;
- char *fmt = is_ok ? format + 4 : format;
- char buf[256];
- const char *comment = NULL;
- int rv, is_fatal = 0, is_skip = 0, is_todo = 0;
-
- t->current++;
-
- if (*t->fatal == t->current) {
- t->fatal++;
- is_fatal = 1;
- }
-
- if (*t->skip == t->current) {
- t->skip++;
- is_skip = 1;
- }
-
- if (*t->todo == t->current) {
- t->todo++;
- is_todo = 1;
- }
-
- if (AT_FLAG_TODO(t->flags))
- is_todo = 1;
-
- if (AT_FLAG_CONCISE(t->flags))
- format[9] = '\0';
- else if (is_ok && ! is_todo && !AT_FLAG_TRACE(t->flags))
- format[14] = '\0';
- else if (is_fatal && ! is_ok)
- comment = "fatal";
- else
- comment = is_todo ? "todo" : is_skip ? "skip" : "at";
-
- rv = at_snprintf(buf, 256, fmt, t->current + t->prior,
- label, comment, file, line, t->current, t->name);
-
- if (rv <= 0)
- exit(-1);
-
- end = buf + min(rv, 250);
-
- if (rv >= 250) {
- *end++ = '.';
- *end++ = '.';
- *end++ = '.';
- *end = '\0';
- }
-
- if (memchr(buf, '\n', rv) != NULL || at_report(t, buf) != AT_SUCCESS)
- exit(-1);
-
- if (!is_ok && is_fatal) {
- while (t->current++ < t->plan) {
- at_snprintf(buf, 256, "not ok %d # skipped: aborting test %s",
- t->prior + t->current, t->name);
- at_report(t, buf);
- }
- longjmp(*t->abort, 0);
- }
-}
-
-struct at_report_file {
- at_report_t module;
- FILE *file;
-};
-
-static int at_report_file_write(at_report_t *ctx, const char *msg)
-{
- struct at_report_file *r = (struct at_report_file *)ctx;
- FILE *f = r->file;
- size_t len = strlen(msg);
- size_t bytes_written;
- int status;
-
- bytes_written = fwrite(msg, sizeof(char), len, f);
- if (bytes_written != len)
- return errno;
-
- status = putc('\n', f);
- if (status == EOF)
- return errno;
-
- return fflush(f);
-}
-
-at_report_t *at_report_file_make(FILE *f)
-{
- struct at_report_file *r = malloc(sizeof *r);
- r->module.func = at_report_file_write;
- r->file = f;
- return &r->module;
-}
-
-void at_report_file_cleanup(at_report_t *r)
-{
- free(r);
-}
-
-struct at_report_local {
- at_report_t module;
- at_t *t;
- at_report_t *saved_report;
- const int *saved_fatal;
- const int *saved_skip;
- const int *saved_todo;
- int dummy_fatal;
- char *file;
- int line;
- int passed;
-};
-
-static int report_local_cleanup(void *data)
-{
- struct at_report_local *q = data;
- dAT = q->t;
- char label[32];
-
- at_snprintf(label, 32, "collected %d passing tests", q->passed);
-
- AT->report = q->saved_report;
- AT->fatal = q->saved_fatal;
- AT->skip = q->saved_skip;
- AT->todo = q->saved_todo;
-
- at_ok(q->t, 1, label, q->file, q->line);
-
- free(q->file);
- free(q);
-
- return AT_SUCCESS;
-}
-
-void at_report_delocalize(at_t *AT) {
- report_local_cleanup(AT->report);
-}
-
-static int at_report_local_write(at_report_t *ctx, const char *msg)
-{
- char buf[256];
- struct at_report_local *q = (struct at_report_local *)ctx;
- dAT = q->t;
-
- if (strncmp(msg, "not ok", 6) == 0) {
- q->saved_report->func(q->saved_report, msg);
- report_local_cleanup(q);
- while (AT->current++ < AT->plan) {
- at_snprintf(buf, 256, "not ok %d # skipped: aborting test %s",
- AT->prior + AT->current, AT->name);
- at_report(AT, buf);
- }
- longjmp(*AT->abort, 0);
- }
- else if (strncmp(msg, "ok", 2) == 0) {
- AT->current--;
- q->passed++;
- }
- return AT_SUCCESS;
-}
-
-void at_report_local(at_t *AT, const char *file, int line)
-{
- struct at_report_local *q = malloc(sizeof *q);
- size_t len;
-
- q->module.func = at_report_local_write;
- q->t = AT;
- q->saved_report = AT->report;
- q->saved_fatal = AT->fatal;
- q->saved_skip = AT->skip;
- q->saved_todo = AT->todo;
- q->dummy_fatal = 0;
- q->line = line;
- q->passed = 0;
-
- len = strlen(file) + 1;
- q->file = (char*)malloc(len);
- memcpy(q->file, file, len);
-
- AT->fatal = AT->skip = AT->todo = &q->dummy_fatal;
- AT->report = &q->module;
-
- if (*q->saved_fatal == AT->current + 1)
- q->saved_fatal++;
-
-}
-
-at_t *at_create(unsigned char flags, at_report_t *report)
-{
- at_t *t = calloc(sizeof *t, 1);
- t->flags = flags;
- t->report = report;
- return t;
-}
-
-static int* at_list(const char *spec)
-{
- int prev, current = 0, count = 0, idx = 0, *elts;
- const char *start = spec;
-
- do {
- while (*spec && !isdigit((unsigned char)*spec))
- ++spec;
- prev = current;
- current = (int)strtol(spec, (char **)(void *)&spec, 10);
- ++count;
-
- } while (prev <= current);
-
- elts = malloc(++count * sizeof *elts);
- spec = start;
- current = 0;
-
- do {
- while (*spec && !isdigit((unsigned char)*spec))
- ++spec;
- prev = current;
- current = (int)strtol(spec, (char **)(void *)&spec, 10);
- elts[idx++] = current;
-
- } while (prev <= current);
-
- elts[idx] = 0; /* sentinel */
-
- return elts;
-}
-
-#define at_free_lists do { if (flist) free((void *)flist); \
- if (slist) free((void *)slist); \
- if (tlist) free((void *)tlist); } while (0)
-
-int at_run(at_t *AT, const at_test_t *test)
-{
- int dummy = 0;
- const int *flist = NULL, *slist = NULL, *tlist = NULL;
- jmp_buf j;
-
- AT->current = 0;
- AT->prior += AT->plan;
- AT->name = test->name;
- AT->plan = test->plan;
-
- if (test->fatals)
- flist = AT->fatal = at_list(test->fatals);
- else
- AT->fatal = &dummy;
-
- if (test->skips)
- slist = AT->skip = at_list(test->skips);
- else
- AT->skip = &dummy;
-
- if (test->todos)
- tlist = AT->todo = at_list(test->todos);
- else
- AT->todo = &dummy;
-
- AT->abort = &j;
- if (setjmp(j) == 0) {
- test->func(AT, test->ctx);
- at_free_lists;
- return AT_SUCCESS;
- }
- at_free_lists;
- AT->abort = NULL;
- return AT_EGENERAL;
-}
-
-int at_snprintf(char *buf, int size, const char *format, ...)
-{
- va_list args;
- int status;
- va_start(args, format);
- status = at_vsnprintf(buf, size, format, args);
- va_end(args);
- return status;
-}
-
-int at_vsnprintf(char *buf, int size, const char *format, va_list args)
-{
-#ifdef _MSC_VER
- int status = _vsnprintf(buf, size, format, args);
- /* Make Microsoft's _vsnprintf behave like C99 vsnprintf on overflow:
- * NULL-terminate, and return the number of chars printed minus one. */
- if (status < 0) {
- if (errno != EINVAL) {
- status = size - 1;
- buf[status] = '\0';
- }
- }
- return status;
-#else
- return vsnprintf(buf, size, format, args);
-#endif /* _MSC_VER */
-}
-