mirror of
https://github.com/kgabis/parson.git
synced 2024-11-24 06:05:29 +00:00
Optional tests directory path argument in tests.c
This commit is contained in:
parent
186680a511
commit
70dc239f8f
99
tests.c
99
tests.c
@ -28,6 +28,7 @@
|
||||
|
||||
#include "parson.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -58,20 +59,30 @@ void print_commits_info(const char *username, const char *repo);
|
||||
void persistence_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_free(void *ptr);
|
||||
|
||||
static char * read_file(const char * filename);
|
||||
const char* get_file_path(const char *filename);
|
||||
|
||||
static int tests_passed;
|
||||
static int tests_failed;
|
||||
|
||||
int main() {
|
||||
int main(int argc, char *argv[]) {
|
||||
/* Example functions from readme file: */
|
||||
/* print_commits_info("torvalds", "linux"); */
|
||||
/* serialization_example(); */
|
||||
/* persistence_example(); */
|
||||
|
||||
if (argc == 2) {
|
||||
tests_path = argv[1];
|
||||
} else {
|
||||
tests_path = "tests";
|
||||
}
|
||||
|
||||
json_set_allocation_functions(counted_malloc, counted_free);
|
||||
test_suite_1();
|
||||
test_suite_2_no_comments();
|
||||
@ -94,28 +105,28 @@ int main() {
|
||||
|
||||
void test_suite_1(void) {
|
||||
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_pretty(val)), 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); }
|
||||
|
||||
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_pretty(val)), 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_pretty(val)), 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); }
|
||||
|
||||
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_pretty(val)), 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) {
|
||||
const char *filename = "tests/test_2.txt";
|
||||
const char *filename = "test_2.txt";
|
||||
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(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))));
|
||||
@ -237,9 +248,9 @@ void test_suite_2_no_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;
|
||||
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(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))));
|
||||
@ -312,10 +323,10 @@ void test_suite_3(void) {
|
||||
}
|
||||
|
||||
void test_suite_4() {
|
||||
const char *filename = "tests/test_2.txt";
|
||||
const char *filename = "test_2.txt";
|
||||
JSON_Value *a = NULL, *a_copy = NULL;
|
||||
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 */
|
||||
a_copy = json_value_deep_copy(a);
|
||||
TEST(a_copy != NULL);
|
||||
@ -325,7 +336,7 @@ void test_suite_4() {
|
||||
void test_suite_5(void) {
|
||||
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_Object *obj = NULL;
|
||||
@ -452,11 +463,11 @@ void test_suite_5(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 *b = NULL;
|
||||
a = json_parse_file(filename);
|
||||
b = json_parse_file(filename);
|
||||
a = json_parse_file(get_file_path(filename));
|
||||
b = json_parse_file(get_file_path(filename));
|
||||
TEST(json_value_equals(a, b));
|
||||
json_object_set_string(json_object(a), "string", "eki");
|
||||
TEST(!json_value_equals(a, b));
|
||||
@ -467,7 +478,7 @@ void test_suite_6(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_Object *schema_obj = json_value_get_object(schema);
|
||||
JSON_Array *interests_arr = NULL;
|
||||
@ -484,15 +495,15 @@ void test_suite_7(void) {
|
||||
}
|
||||
|
||||
void test_suite_8(void) {
|
||||
const char *filename = "tests/test_2.txt";
|
||||
const char *temp_filename = "tests/test_2_serialized.txt";
|
||||
const char *filename = "test_2.txt";
|
||||
const char *temp_filename = "test_2_serialized.txt";
|
||||
JSON_Value *a = NULL;
|
||||
JSON_Value *b = NULL;
|
||||
char *buf = NULL;
|
||||
size_t serialization_size = 0;
|
||||
a = json_parse_file(filename);
|
||||
TEST(json_serialize_to_file(a, temp_filename) == JSONSuccess);
|
||||
b = json_parse_file(temp_filename);
|
||||
a = json_parse_file(get_file_path(filename));
|
||||
TEST(json_serialize_to_file(a, get_file_path(temp_filename)) == JSONSuccess);
|
||||
b = json_parse_file(get_file_path(temp_filename));
|
||||
TEST(json_value_equals(a, b));
|
||||
remove(temp_filename);
|
||||
serialization_size = json_serialization_size(a);
|
||||
@ -501,23 +512,23 @@ void test_suite_8(void) {
|
||||
}
|
||||
|
||||
void test_suite_9(void) {
|
||||
const char *filename = "tests/test_2_pretty.txt";
|
||||
const char *temp_filename = "tests/test_2_serialized_pretty.txt";
|
||||
const char *filename = "test_2_pretty.txt";
|
||||
const char *temp_filename = "test_2_serialized_pretty.txt";
|
||||
char *file_contents = NULL;
|
||||
char *serialized = NULL;
|
||||
JSON_Value *a = NULL;
|
||||
JSON_Value *b = NULL;
|
||||
size_t serialization_size = 0;
|
||||
a = json_parse_file(filename);
|
||||
TEST(json_serialize_to_file_pretty(a, temp_filename) == JSONSuccess);
|
||||
b = json_parse_file(temp_filename);
|
||||
a = json_parse_file(get_file_path(filename));
|
||||
TEST(json_serialize_to_file_pretty(a, get_file_path(temp_filename)) == JSONSuccess);
|
||||
b = json_parse_file(get_file_path(temp_filename));
|
||||
TEST(json_value_equals(a, b));
|
||||
remove(temp_filename);
|
||||
serialization_size = json_serialization_size_pretty(a);
|
||||
serialized = json_serialize_to_string_pretty(a);
|
||||
TEST((strlen(serialized)+1) == serialization_size);
|
||||
|
||||
file_contents = read_file(filename);
|
||||
file_contents = read_file(get_file_path(filename));
|
||||
|
||||
TEST(STREQ(file_contents, serialized));
|
||||
}
|
||||
@ -528,18 +539,18 @@ void test_suite_10(void) {
|
||||
|
||||
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);
|
||||
|
||||
val = json_parse_file("tests/test_1_3.txt");
|
||||
val = json_parse_file(get_file_path("test_1_3.txt"));
|
||||
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);
|
||||
json_free_serialized_string(serialized);
|
||||
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);
|
||||
|
||||
TEST(malloc_count == 0);
|
||||
@ -592,7 +603,7 @@ void print_commits_info(const char *username, const char *repo) {
|
||||
system(curl_command);
|
||||
|
||||
/* 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) {
|
||||
system(cleanup_command);
|
||||
return;
|
||||
@ -616,7 +627,7 @@ void print_commits_info(const char *username, const char *repo) {
|
||||
|
||||
void persistence_example(void) {
|
||||
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];
|
||||
const char *name = NULL;
|
||||
if (user_data == NULL || json_validate(schema, user_data) != JSONSuccess) {
|
||||
@ -648,19 +659,22 @@ void serialization_example(void) {
|
||||
json_value_free(root_value);
|
||||
}
|
||||
|
||||
static char * read_file(const char * filename) {
|
||||
FILE *fp = fopen(filename, "r");
|
||||
static char * read_file(const char * file_path) {
|
||||
FILE *fp = NULL;
|
||||
size_t size_to_read = 0;
|
||||
size_t size_read = 0;
|
||||
long pos;
|
||||
char *file_contents;
|
||||
fp = fopen(file_path, "r");
|
||||
if (!fp) {
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
pos = ftell(fp);
|
||||
if (pos < 0) {
|
||||
fclose(fp);
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
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));
|
||||
if (!file_contents) {
|
||||
fclose(fp);
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
size_read = fread(file_contents, 1, size_to_read, fp);
|
||||
if (size_read == 0 || ferror(fp)) {
|
||||
fclose(fp);
|
||||
free(file_contents);
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
fclose(fp);
|
||||
@ -681,6 +697,13 @@ static char * read_file(const char * filename) {
|
||||
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) {
|
||||
void *res = malloc(size);
|
||||
if (res != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user