mirror of
https://github.com/reactos/ccache.git
synced 2024-10-07 00:53:23 +00:00
Add CHECK macros for ARGS
This commit is contained in:
parent
0fa05736bb
commit
033d21e329
38
args.c
38
args.c
@ -123,3 +123,41 @@ void args_strip(ARGS *args, const char *prefix)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Format args to a space-separated string. Does not quote spaces. Caller
|
||||
* frees.
|
||||
*/
|
||||
char *args_to_string(ARGS *args)
|
||||
{
|
||||
char *result;
|
||||
char **p;
|
||||
unsigned size = 0;
|
||||
int pos;
|
||||
for (p = args->argv; *p; p++) {
|
||||
size += strlen(*p) + 1;
|
||||
}
|
||||
result = x_malloc(size);
|
||||
pos = 0;
|
||||
for (p = args->argv; *p; p++) {
|
||||
pos += sprintf(&result[pos], "%s ", *p);
|
||||
}
|
||||
result[pos - 1] = '\0';
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Returns 1 if args1 equals args2, else 0. */
|
||||
int args_equal(ARGS *args1, ARGS *args2)
|
||||
{
|
||||
int i;
|
||||
if (args1->argc != args2->argc) {
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < args1->argc; i++) {
|
||||
if (strcmp(args1->argv[i], args2->argv[i]) != 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
2
ccache.h
2
ccache.h
@ -165,6 +165,8 @@ void args_add_prefix(ARGS *args, const char *s);
|
||||
void args_pop(ARGS *args, int n);
|
||||
void args_strip(ARGS *args, const char *prefix);
|
||||
void args_remove_first(ARGS *args);
|
||||
char *args_to_string(ARGS *args);
|
||||
int args_equal(ARGS *args1, ARGS *args2);
|
||||
|
||||
int
|
||||
cc_process_args(ARGS *orig_args,
|
||||
|
@ -214,3 +214,31 @@ cct_check_str_eq(const char *file, int line, const char *expression,
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
cct_check_args_eq(const char *file, int line, const char *expression,
|
||||
ARGS *expected, ARGS *actual, int free1, int free2)
|
||||
{
|
||||
int result;
|
||||
|
||||
if (expected && actual && args_equal(actual, expected)) {
|
||||
cct_check_passed();
|
||||
result = 1;
|
||||
} else {
|
||||
char *exp_str, *act_str;
|
||||
exp_str = expected ? args_to_string(expected) : x_strdup("(null)");
|
||||
act_str = actual ? args_to_string(actual) : x_strdup("(null)");
|
||||
cct_check_failed(file, line, expression, exp_str, act_str);
|
||||
free(exp_str);
|
||||
free(act_str);
|
||||
result = 0;
|
||||
}
|
||||
|
||||
if (free1) {
|
||||
args_free(expected);
|
||||
}
|
||||
if (free2) {
|
||||
args_free(actual);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
#ifndef TEST_FRAMEWORK_H
|
||||
#define TEST_FRAMEWORK_H
|
||||
|
||||
#include "ccache.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@ -96,6 +97,19 @@
|
||||
#define CHECK_STR_EQ_FREE12(expected, actual) \
|
||||
CHECK_POINTER_EQ_BASE(str, expected, actual, 1, 1)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define CHECK_ARGS_EQ(expected, actual) \
|
||||
CHECK_POINTER_EQ_BASE(args, expected, actual, 0, 0)
|
||||
|
||||
#define CHECK_ARGS_EQ_FREE1(expected, actual) \
|
||||
CHECK_POINTER_EQ_BASE(args, expected, actual, 1, 0)
|
||||
|
||||
#define CHECK_ARGS_EQ_FREE2(expected, actual) \
|
||||
CHECK_POINTER_EQ_BASE(args, expected, actual, 0, 1)
|
||||
|
||||
#define CHECK_ARGS_EQ_FREE12(expected, actual) \
|
||||
CHECK_POINTER_EQ_BASE(args, expected, actual, 1, 1)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@ -115,5 +129,7 @@ int cct_check_uns_eq(const char *file, int line, const char *expression,
|
||||
unsigned expected, unsigned actual);
|
||||
int cct_check_str_eq(const char *file, int line, const char *expression,
|
||||
char *expected, char *actual, int free1, int free2);
|
||||
int cct_check_args_eq(const char *file, int line, const char *expression,
|
||||
ARGS *expected, ARGS *actual, int free1, int free2);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user