test test_context() on a state with no initial context
This commit is contained in:
parent
bea9a3e34a
commit
ebf398fd33
|
@ -26,7 +26,7 @@
|
|||
#include "util.h"
|
||||
#include "test-context.h"
|
||||
|
||||
// Local Types
|
||||
// Internal Types
|
||||
|
||||
typedef struct ContextData ContextData;
|
||||
|
||||
|
@ -37,21 +37,20 @@ struct ContextData
|
|||
const char *initial_full_context;
|
||||
int initial_depth;
|
||||
const char *new_context;
|
||||
const char *expected_sub_full_context;
|
||||
int expected_sub_depth;
|
||||
const char *sub_context;
|
||||
const char *sub_full_context;
|
||||
int sub_depth;
|
||||
const char *expected_sub_full_context;
|
||||
int expected_sub_depth;
|
||||
};
|
||||
|
||||
// Local Prototypes
|
||||
// Internal Prototypes
|
||||
|
||||
static void no_prior_context(TestState *);
|
||||
static void test_context_common(TestState *, ContextData *);
|
||||
static void init_ContextData(ContextData *);
|
||||
static void run_test_context(ContextData *);
|
||||
static void get_context(TestState *);
|
||||
static void check_results(TestState *, ContextData *);
|
||||
static void check_sub_context(TestState *);
|
||||
static void clean_up(ContextData *);
|
||||
|
||||
// Public Functions
|
||||
|
@ -62,42 +61,64 @@ test_test_context(TestState *s)
|
|||
test_context(s, "no prior context", no_prior_context);
|
||||
}
|
||||
|
||||
// Local Functions
|
||||
// Internal Functions
|
||||
|
||||
static void
|
||||
no_prior_context(TestState *s)
|
||||
{
|
||||
// set initial state
|
||||
ContextData cd;
|
||||
|
||||
// set initial state
|
||||
cd.new_context = "my test";
|
||||
cd.initial_context = 0;
|
||||
cd.initial_full_context = 0;
|
||||
cd.initial_depth = 0;
|
||||
init_ContextData(&cd);
|
||||
|
||||
run_test_context(&cd);
|
||||
// set expectations
|
||||
cd.expected_sub_full_context = "my test";
|
||||
cd.expected_sub_depth = 1;
|
||||
check_results(s, &cd);
|
||||
clean_up(&cd);
|
||||
|
||||
test_context_common(s, &cd);
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_common(
|
||||
TestState *s,
|
||||
ContextData *cd
|
||||
)
|
||||
{
|
||||
init_ContextData(cd);
|
||||
test_context(&cd->state, cd->new_context, get_context);
|
||||
check_results(s, cd);
|
||||
clean_up(cd);
|
||||
}
|
||||
|
||||
static void
|
||||
init_ContextData(ContextData *cd)
|
||||
{
|
||||
mk_sample_state(&cd->state);
|
||||
cd->state.context = cd->initial_context;
|
||||
cd->state.full_context = cd->initial_full_context;
|
||||
cd->state.depth = cd->initial_depth;
|
||||
cd->state.ptr = cd;
|
||||
|
||||
// initial context
|
||||
if (cd->initial_context)
|
||||
{
|
||||
cd->state.context =
|
||||
malloc(strlen(cd->initial_context) + 1);
|
||||
strcpy(cd->state.context, cd->initial_context);
|
||||
}
|
||||
|
||||
static void
|
||||
run_test_context(ContextData *cd)
|
||||
// initial full_context
|
||||
if (cd->initial_full_context)
|
||||
{
|
||||
void *old_ptr = cd->state.ptr;
|
||||
cd->state.ptr = cd;
|
||||
test_context(&cd->state, cd->new_context, get_context);
|
||||
cd->state.ptr = old_ptr;
|
||||
cd->state.full_context =
|
||||
malloc(strlen(cd->initial_full_context) + 1);
|
||||
strcpy(
|
||||
cd->state.full_context,
|
||||
cd->initial_full_context
|
||||
);
|
||||
}
|
||||
|
||||
cd->state.depth = cd->initial_depth;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -128,23 +149,67 @@ get_context(TestState *s)
|
|||
}
|
||||
|
||||
static void
|
||||
check_results(TestState *s, ContextData *cd)
|
||||
check_results(
|
||||
TestState *s,
|
||||
ContextData *cd
|
||||
)
|
||||
{
|
||||
void *old_ptr = s->ptr;
|
||||
s->ptr = cd;
|
||||
test_context(s, "sub context", check_sub_context);
|
||||
s->ptr = old_ptr;
|
||||
}
|
||||
// sub context
|
||||
chk_str_eq(
|
||||
s,
|
||||
"sub context",
|
||||
cd->sub_context,
|
||||
cd->new_context
|
||||
);
|
||||
|
||||
static void
|
||||
check_sub_context(TestState *s)
|
||||
{
|
||||
ContextData *cd = s->ptr;
|
||||
// sub full_context
|
||||
chk_str_eq(
|
||||
s,
|
||||
"sub full_context",
|
||||
cd->sub_full_context,
|
||||
cd->expected_sub_full_context
|
||||
);
|
||||
|
||||
// sub depth
|
||||
chk_int_eq(
|
||||
s,
|
||||
"sub depth",
|
||||
cd->sub_depth,
|
||||
cd->expected_sub_depth
|
||||
);
|
||||
|
||||
// final context
|
||||
chk_str_eq(
|
||||
s,
|
||||
"final context",
|
||||
cd->state.context,
|
||||
cd->initial_context
|
||||
);
|
||||
|
||||
// final full_context
|
||||
chk_str_eq(
|
||||
s,
|
||||
"final full_context",
|
||||
cd->state.full_context,
|
||||
cd->initial_full_context
|
||||
);
|
||||
|
||||
// final depth
|
||||
chk_int_eq(
|
||||
s,
|
||||
"final depth",
|
||||
cd->state.depth,
|
||||
cd->initial_depth
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
clean_up(ContextData *cd)
|
||||
{
|
||||
free(cd->state.context);
|
||||
free(cd->state.full_context);
|
||||
free(cd->sub_context);
|
||||
free(cd->sub_full_context);
|
||||
}
|
||||
|
||||
//jl
|
||||
|
|
Loading…
Reference in New Issue
Block a user