/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* .
*/
#include
#include
#include "test_apr.h"
/* Top-level pool which can be used by tests. */
apr_pool_t *p;
void apr_assert_success(CuTest* tc, const char* context, apr_status_t rv)
{
if (rv == APR_ENOTIMPL) {
CuNotImpl(tc, context);
}
if (rv != APR_SUCCESS) {
char buf[STRING_MAX], ebuf[128];
sprintf(buf, "%s (%d): %s\n", context, rv,
apr_strerror(rv, ebuf, sizeof ebuf));
CuFail(tc, buf);
}
}
static const struct testlist {
const char *testname;
CuSuite *(*func)(void);
} tests[] = {
{"teststr", teststr},
{"testtime", testtime},
{"testvsn", testvsn},
{"testipsub", testipsub},
{"testmmap", testmmap},
{"testud", testud},
{"testtable", testtable},
{"testhash", testhash},
{"testsleep", testsleep},
{"testpool", testpool},
{"testfmt", testfmt},
{"testfile", testfile},
{"testfileinfo", testfileinfo},
{"testpipe", testpipe},
{"testdup", testdup},
{"testdir", testdir},
{"testrand", testrand},
{"testdso", testdso},
{"testoc", testoc},
{"testsockets", testsockets},
{"testsockopt", testsockopt},
{"testproc", testproc},
{"testpoll", testpoll},
{"testlock", testlock},
{"testthread", testthread},
{"testargs", testgetopt},
{"testnames", testnames},
{"testuser", testuser},
{"testpath", testpath},
{"testenv", testenv},
{"LastTest", NULL}
};
int main(int argc, char *argv[])
{
CuSuiteList *alltests = NULL;
CuString *output = CuStringNew();
int i;
int exclude = 0;
int list_provided = 0;
apr_initialize();
atexit(apr_terminate);
CuInit(argc, argv);
apr_pool_create(&p, NULL);
/* see if we're in exclude mode, see if list of testcases provided */
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-v")) {
continue;
}
if (!strcmp(argv[i], "-x")) {
exclude = 1;
continue;
}
if (!strcmp(argv[i], "-l")) {
for (i = 0; tests[i].func != NULL; i++) {
printf("%s\n", tests[i].testname);
}
exit(0);
}
if (argv[i][0] == '-') {
fprintf(stderr, "invalid option: `%s'\n", argv[i]);
exit(1);
}
list_provided = 1;
}
if (!list_provided) {
/* add everything */
alltests = CuSuiteListNew("All APR Tests");
for (i = 0; tests[i].func != NULL; i++) {
CuSuiteListAdd(alltests, tests[i].func());
}
}
else if (exclude) {
/* add everything but the tests listed */
alltests = CuSuiteListNew("Partial APR Tests");
for (i = 0; tests[i].func != NULL; i++) {
int this_test_excluded = 0;
int j;
for (j = 1; j < argc && !this_test_excluded; j++) {
if (!strcmp(argv[j], tests[i].testname)) {
this_test_excluded = 1;
}
}
if (!this_test_excluded) {
CuSuiteListAdd(alltests, tests[i].func());
}
}
}
else {
/* add only the tests listed */
alltests = CuSuiteListNew("Partial APR Tests");
for (i = 1; i < argc; i++) {
int j;
int found = 0;
if (argv[i][0] == '-') {
continue;
}
for (j = 0; tests[j].func != NULL; j++) {
if (!strcmp(argv[i], tests[j].testname)) {
CuSuiteListAdd(alltests, tests[j].func());
found = 1;
}
}
if (!found) {
fprintf(stderr, "invalid test name: `%s'\n", argv[i]);
exit(1);
}
}
}
CuSuiteListRunWithSummary(alltests);
i = CuSuiteListDetails(alltests, output);
printf("%s\n", output->buffer);
return i > 0 ? 1 : 0;
}