Optional tests directory path argument in tests.c

pull/137/head
Krzysztof Gabis 5 years ago
parent 186680a511
commit 70dc239f8f
  1. 99
      tests.c

@ -28,6 +28,7 @@
#include "parson.h" #include "parson.h"
#include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -58,20 +59,30 @@ void print_commits_info(const char *username, const char *repo);
void persistence_example(void); void persistence_example(void);
void serialization_example(void); void serialization_example(void);
static int malloc_count; static const char *tests_path = "tests";
static int malloc_count = 0;
static void *counted_malloc(size_t size); static void *counted_malloc(size_t size);
static void counted_free(void *ptr); static void counted_free(void *ptr);
static char * read_file(const char * filename); static char * read_file(const char * filename);
const char* get_file_path(const char *filename);
static int tests_passed; static int tests_passed;
static int tests_failed; static int tests_failed;
int main() { int main(int argc, char *argv[]) {
/* Example functions from readme file: */ /* Example functions from readme file: */
/* print_commits_info("torvalds", "linux"); */ /* print_commits_info("torvalds", "linux"); */
/* serialization_example(); */ /* serialization_example(); */
/* persistence_example(); */ /* persistence_example(); */
if (argc == 2) {
tests_path = argv[1];
} else {
tests_path = "tests";
}
json_set_allocation_functions(counted_malloc, counted_free); json_set_allocation_functions(counted_malloc, counted_free);
test_suite_1(); test_suite_1();
test_suite_2_no_comments(); test_suite_2_no_comments();
@ -94,28 +105,28 @@ int main() {
void test_suite_1(void) { void test_suite_1(void) {
JSON_Value *val; JSON_Value *val;
TEST((val = json_parse_file("tests/test_1_1.txt")) != NULL); TEST((val = json_parse_file(get_file_path("test_1_1.txt"))) != NULL);
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
TEST((val = json_parse_file("tests/test_1_2.txt")) == NULL); /* Over 2048 levels of nesting */ TEST((val = json_parse_file(get_file_path("test_1_2.txt"))) == NULL); /* Over 2048 levels of nesting */
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
TEST((val = json_parse_file("tests/test_1_3.txt")) != NULL); TEST((val = json_parse_file(get_file_path("test_1_3.txt"))) != NULL);
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_1.txt")) != NULL); TEST((val = json_parse_file_with_comments(get_file_path("test_1_1.txt"))) != NULL);
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_2.txt")) == NULL); /* Over 2048 levels of nesting */ TEST((val = json_parse_file_with_comments(get_file_path("test_1_2.txt"))) == NULL); /* Over 2048 levels of nesting */
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
TEST((val = json_parse_file_with_comments("tests/test_1_3.txt")) != NULL); TEST((val = json_parse_file_with_comments(get_file_path("test_1_3.txt"))) != NULL);
TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string(val)), val));
TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val)); TEST(json_value_equals(json_parse_string(json_serialize_to_string_pretty(val)), val));
if (val) { json_value_free(val); } if (val) { json_value_free(val); }
@ -227,9 +238,9 @@ void test_suite_2(JSON_Value *root_value) {
} }
void test_suite_2_no_comments(void) { void test_suite_2_no_comments(void) {
const char *filename = "tests/test_2.txt"; const char *filename = "test_2.txt";
JSON_Value *root_value = NULL; JSON_Value *root_value = NULL;
root_value = json_parse_file(filename); root_value = json_parse_file(get_file_path(filename));
test_suite_2(root_value); test_suite_2(root_value);
TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string(root_value)))); TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string(root_value))));
TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string_pretty(root_value)))); TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string_pretty(root_value))));
@ -237,9 +248,9 @@ void test_suite_2_no_comments(void) {
} }
void test_suite_2_with_comments(void) { void test_suite_2_with_comments(void) {
const char *filename = "tests/test_2_comments.txt"; const char *filename = "test_2_comments.txt";
JSON_Value *root_value = NULL; JSON_Value *root_value = NULL;
root_value = json_parse_file_with_comments(filename); root_value = json_parse_file_with_comments(get_file_path(filename));
test_suite_2(root_value); test_suite_2(root_value);
TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string(root_value)))); TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string(root_value))));
TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string_pretty(root_value)))); TEST(json_value_equals(root_value, json_parse_string(json_serialize_to_string_pretty(root_value))));
@ -312,10 +323,10 @@ void test_suite_3(void) {
} }
void test_suite_4() { void test_suite_4() {
const char *filename = "tests/test_2.txt"; const char *filename = "test_2.txt";
JSON_Value *a = NULL, *a_copy = NULL; JSON_Value *a = NULL, *a_copy = NULL;
printf("Testing %s:\n", filename); printf("Testing %s:\n", filename);
a = json_parse_file(filename); a = json_parse_file(get_file_path(filename));
TEST(json_value_equals(a, a)); /* test equality test */ TEST(json_value_equals(a, a)); /* test equality test */
a_copy = json_value_deep_copy(a); a_copy = json_value_deep_copy(a);
TEST(a_copy != NULL); TEST(a_copy != NULL);
@ -325,7 +336,7 @@ void test_suite_4() {
void test_suite_5(void) { void test_suite_5(void) {
double zero = 0.0; /* msvc is silly (workaround for error C2124) */ double zero = 0.0; /* msvc is silly (workaround for error C2124) */
JSON_Value *val_from_file = json_parse_file("tests/test_5.txt"); JSON_Value *val_from_file = json_parse_file(get_file_path("test_5.txt"));
JSON_Value *val = NULL, *val_parent; JSON_Value *val = NULL, *val_parent;
JSON_Object *obj = NULL; JSON_Object *obj = NULL;
@ -452,11 +463,11 @@ void test_suite_5(void) {
} }
void test_suite_6(void) { void test_suite_6(void) {
const char *filename = "tests/test_2.txt"; const char *filename = "test_2.txt";
JSON_Value *a = NULL; JSON_Value *a = NULL;
JSON_Value *b = NULL; JSON_Value *b = NULL;
a = json_parse_file(filename); a = json_parse_file(get_file_path(filename));
b = json_parse_file(filename); b = json_parse_file(get_file_path(filename));
TEST(json_value_equals(a, b)); TEST(json_value_equals(a, b));
json_object_set_string(json_object(a), "string", "eki"); json_object_set_string(json_object(a), "string", "eki");
TEST(!json_value_equals(a, b)); TEST(!json_value_equals(a, b));
@ -467,7 +478,7 @@ void test_suite_6(void) {
} }
void test_suite_7(void) { void test_suite_7(void) {
JSON_Value *val_from_file = json_parse_file("tests/test_5.txt"); JSON_Value *val_from_file = json_parse_file(get_file_path("test_5.txt"));
JSON_Value *schema = json_value_init_object(); JSON_Value *schema = json_value_init_object();
JSON_Object *schema_obj = json_value_get_object(schema); JSON_Object *schema_obj = json_value_get_object(schema);
JSON_Array *interests_arr = NULL; JSON_Array *interests_arr = NULL;
@ -484,15 +495,15 @@ void test_suite_7(void) {
} }
void test_suite_8(void) { void test_suite_8(void) {
const char *filename = "tests/test_2.txt"; const char *filename = "test_2.txt";
const char *temp_filename = "tests/test_2_serialized.txt"; const char *temp_filename = "test_2_serialized.txt";
JSON_Value *a = NULL; JSON_Value *a = NULL;
JSON_Value *b = NULL; JSON_Value *b = NULL;
char *buf = NULL; char *buf = NULL;
size_t serialization_size = 0; size_t serialization_size = 0;
a = json_parse_file(filename); a = json_parse_file(get_file_path(filename));
TEST(json_serialize_to_file(a, temp_filename) == JSONSuccess); TEST(json_serialize_to_file(a, get_file_path(temp_filename)) == JSONSuccess);
b = json_parse_file(temp_filename); b = json_parse_file(get_file_path(temp_filename));
TEST(json_value_equals(a, b)); TEST(json_value_equals(a, b));
remove(temp_filename); remove(temp_filename);
serialization_size = json_serialization_size(a); serialization_size = json_serialization_size(a);
@ -501,23 +512,23 @@ void test_suite_8(void) {
} }
void test_suite_9(void) { void test_suite_9(void) {
const char *filename = "tests/test_2_pretty.txt"; const char *filename = "test_2_pretty.txt";
const char *temp_filename = "tests/test_2_serialized_pretty.txt"; const char *temp_filename = "test_2_serialized_pretty.txt";
char *file_contents = NULL; char *file_contents = NULL;
char *serialized = NULL; char *serialized = NULL;
JSON_Value *a = NULL; JSON_Value *a = NULL;
JSON_Value *b = NULL; JSON_Value *b = NULL;
size_t serialization_size = 0; size_t serialization_size = 0;
a = json_parse_file(filename); a = json_parse_file(get_file_path(filename));
TEST(json_serialize_to_file_pretty(a, temp_filename) == JSONSuccess); TEST(json_serialize_to_file_pretty(a, get_file_path(temp_filename)) == JSONSuccess);
b = json_parse_file(temp_filename); b = json_parse_file(get_file_path(temp_filename));
TEST(json_value_equals(a, b)); TEST(json_value_equals(a, b));
remove(temp_filename); remove(temp_filename);
serialization_size = json_serialization_size_pretty(a); serialization_size = json_serialization_size_pretty(a);
serialized = json_serialize_to_string_pretty(a); serialized = json_serialize_to_string_pretty(a);
TEST((strlen(serialized)+1) == serialization_size); TEST((strlen(serialized)+1) == serialization_size);
file_contents = read_file(filename); file_contents = read_file(get_file_path(filename));
TEST(STREQ(file_contents, serialized)); TEST(STREQ(file_contents, serialized));
} }
@ -528,18 +539,18 @@ void test_suite_10(void) {
malloc_count = 0; malloc_count = 0;
val = json_parse_file("tests/test_1_1.txt"); val = json_parse_file(get_file_path("test_1_1.txt"));
json_value_free(val); json_value_free(val);
val = json_parse_file("tests/test_1_3.txt"); val = json_parse_file(get_file_path("test_1_3.txt"));
json_value_free(val); json_value_free(val);
val = json_parse_file("tests/test_2.txt"); val = json_parse_file(get_file_path("test_2.txt"));
serialized = json_serialize_to_string_pretty(val); serialized = json_serialize_to_string_pretty(val);
json_free_serialized_string(serialized); json_free_serialized_string(serialized);
json_value_free(val); json_value_free(val);
val = json_parse_file("tests/test_2_pretty.txt"); val = json_parse_file(get_file_path("test_2_pretty.txt"));
json_value_free(val); json_value_free(val);
TEST(malloc_count == 0); TEST(malloc_count == 0);
@ -592,7 +603,7 @@ void print_commits_info(const char *username, const char *repo) {
system(curl_command); system(curl_command);
/* parsing json and validating output */ /* parsing json and validating output */
root_value = json_parse_file(output_filename); root_value = json_parse_file(get_file_path(output_filename));
if (json_value_get_type(root_value) != JSONArray) { if (json_value_get_type(root_value) != JSONArray) {
system(cleanup_command); system(cleanup_command);
return; return;
@ -616,7 +627,7 @@ void print_commits_info(const char *username, const char *repo) {
void persistence_example(void) { void persistence_example(void) {
JSON_Value *schema = json_parse_string("{\"name\":\"\"}"); JSON_Value *schema = json_parse_string("{\"name\":\"\"}");
JSON_Value *user_data = json_parse_file("user_data.json"); JSON_Value *user_data = json_parse_file(get_file_path("user_data.json"));
char buf[256]; char buf[256];
const char *name = NULL; const char *name = NULL;
if (user_data == NULL || json_validate(schema, user_data) != JSONSuccess) { if (user_data == NULL || json_validate(schema, user_data) != JSONSuccess) {
@ -648,19 +659,22 @@ void serialization_example(void) {
json_value_free(root_value); json_value_free(root_value);
} }
static char * read_file(const char * filename) { static char * read_file(const char * file_path) {
FILE *fp = fopen(filename, "r"); FILE *fp = NULL;
size_t size_to_read = 0; size_t size_to_read = 0;
size_t size_read = 0; size_t size_read = 0;
long pos; long pos;
char *file_contents; char *file_contents;
fp = fopen(file_path, "r");
if (!fp) { if (!fp) {
assert(0);
return NULL; return NULL;
} }
fseek(fp, 0L, SEEK_END); fseek(fp, 0L, SEEK_END);
pos = ftell(fp); pos = ftell(fp);
if (pos < 0) { if (pos < 0) {
fclose(fp); fclose(fp);
assert(0);
return NULL; return NULL;
} }
size_to_read = pos; size_to_read = pos;
@ -668,12 +682,14 @@ static char * read_file(const char * filename) {
file_contents = (char*)malloc(sizeof(char) * (size_to_read + 1)); file_contents = (char*)malloc(sizeof(char) * (size_to_read + 1));
if (!file_contents) { if (!file_contents) {
fclose(fp); fclose(fp);
assert(0);
return NULL; return NULL;
} }
size_read = fread(file_contents, 1, size_to_read, fp); size_read = fread(file_contents, 1, size_to_read, fp);
if (size_read == 0 || ferror(fp)) { if (size_read == 0 || ferror(fp)) {
fclose(fp); fclose(fp);
free(file_contents); free(file_contents);
assert(0);
return NULL; return NULL;
} }
fclose(fp); fclose(fp);
@ -681,6 +697,13 @@ static char * read_file(const char * filename) {
return file_contents; return file_contents;
} }
const char* get_file_path(const char *filename) {
static char path_buf[2048] = { 0 };
memset(path_buf, 0, sizeof(path_buf));
sprintf(path_buf, "%s/%s", tests_path, filename);
return path_buf;
}
static void *counted_malloc(size_t size) { static void *counted_malloc(size_t size) {
void *res = malloc(size); void *res = malloc(size);
if (res != NULL) { if (res != NULL) {

Loading…
Cancel
Save