120 lines
3.8 KiB
C
120 lines
3.8 KiB
C
/*
|
|
* Copyright 2008 Arsen Chaloyan
|
|
*
|
|
* Licensed 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 "apt_pool.h"
|
|
#include "apt_obj_list.h"
|
|
#include "apt_test_suite.h"
|
|
#include "apt_log.h"
|
|
|
|
struct apt_test_framework_t{
|
|
apr_pool_t *pool;
|
|
apt_obj_list_t *suites;
|
|
};
|
|
|
|
APT_DECLARE(apt_test_suite_t*) apt_test_suite_create(apr_pool_t *pool, const char *name,
|
|
void *obj, apt_test_f tester)
|
|
{
|
|
apt_test_suite_t *suite = apr_palloc(pool,sizeof(apt_test_suite_t));
|
|
suite->pool = pool;
|
|
apt_string_assign(&suite->name,name,pool);
|
|
suite->obj = obj;
|
|
suite->tester = tester;
|
|
return suite;
|
|
}
|
|
|
|
APT_DECLARE(apt_test_framework_t*) apt_test_framework_create()
|
|
{
|
|
apt_test_framework_t *framework;
|
|
apr_pool_t* pool = apt_pool_create();
|
|
framework = apr_palloc(pool,sizeof(apt_test_framework_t));
|
|
framework->pool = pool;
|
|
framework->suites = apt_list_create(pool);
|
|
|
|
apt_log_instance_create(APT_LOG_OUTPUT_CONSOLE,APT_PRIO_INFO,pool);
|
|
apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Create Test Framework");
|
|
return framework;
|
|
}
|
|
|
|
APT_DECLARE(void) apt_test_framework_destroy(apt_test_framework_t *framework)
|
|
{
|
|
apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Destroy Test Framework");
|
|
apt_log_instance_destroy();
|
|
apr_pool_destroy(framework->pool);
|
|
}
|
|
|
|
APT_DECLARE(apt_bool_t) apt_test_framework_suite_add(apt_test_framework_t *framework, apt_test_suite_t *suite)
|
|
{
|
|
apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Add Test Suite [%s]",suite->name);
|
|
return (apt_list_push_back(framework->suites,suite,suite->pool) ? TRUE : FALSE);
|
|
}
|
|
|
|
APT_DECLARE(apr_pool_t*) apt_test_framework_pool_get(apt_test_framework_t *framework)
|
|
{
|
|
return framework->pool;
|
|
}
|
|
|
|
static apt_bool_t apt_test_framework_suite_run(apt_test_framework_t *framework, apt_test_suite_t *suite,
|
|
int argc, const char * const *argv)
|
|
{
|
|
apt_bool_t status = FALSE;
|
|
apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"----- Run Test Suite [%s] -----",suite->name);
|
|
if(suite->tester) {
|
|
status = suite->tester(suite,argc,argv);
|
|
}
|
|
apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"---- Status [%s] ----\n",(status == TRUE) ? "OK" : "Failure");
|
|
return status;
|
|
}
|
|
|
|
APT_DECLARE(apt_bool_t) apt_test_framework_run(apt_test_framework_t *framework, int argc, const char * const *argv)
|
|
{
|
|
apt_test_suite_t *suite = NULL;
|
|
apt_list_elem_t *elem = apt_list_first_elem_get(framework->suites);
|
|
if(argc == 1) {
|
|
apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Run All Test Suites");
|
|
/* walk through the list of test suites and run all of them */
|
|
while(elem) {
|
|
suite = apt_list_elem_object_get(elem);
|
|
if(suite) {
|
|
/* run test suite with the default arguments */
|
|
apt_test_framework_suite_run(framework,suite,0,NULL);
|
|
}
|
|
elem = apt_list_next_elem_get(framework->suites,elem);
|
|
}
|
|
}
|
|
else {
|
|
/* walk through the list of test suites find appropriate one and run it */
|
|
apt_bool_t found = FALSE;
|
|
apt_str_t name;
|
|
apt_string_set(&name,argv[1]);
|
|
while(elem) {
|
|
suite = apt_list_elem_object_get(elem);
|
|
if(suite && apt_string_compare(&suite->name,&name) == TRUE) {
|
|
found = TRUE;
|
|
break;
|
|
}
|
|
elem = apt_list_next_elem_get(framework->suites,elem);
|
|
}
|
|
if(found == TRUE) {
|
|
/* run test suite with remaining arguments */
|
|
apt_test_framework_suite_run(framework,suite,argc-2,&argv[2]);
|
|
}
|
|
else {
|
|
apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"No Such Test Suite [%s] to Run", argv[1]);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|