Skip to content

Commit 30591e3

Browse files
committed
Test label loading
1 parent e144f57 commit 30591e3

File tree

5 files changed

+84
-16
lines changed

5 files changed

+84
-16
lines changed

label/load.c

+13-15
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,23 @@
4040

4141
#define MAX_LABEL_NAME 128
4242

43-
/**
44-
* Load labels from file.
45-
* \param [in] filename Input filename.
46-
* \param [out] repository Label repository.
47-
* \return 1 if the labels contained in the file were succesfully added to the repository.
48-
* 0 if an error occured.
49-
*/
50-
int label_repository_load(const char* filename, label_repository_t* repository) {
51-
json_t* root;
43+
// Load labels from file.
44+
bool label_repository_load(LabelRepository* repository, const char* filename) {
45+
assert(repository != NULL);
46+
assert(filename != NULL);
47+
48+
bool ret = false;
49+
5250
json_error_t err;
53-
json_t* value;
54-
int ret = 0, index = 0;
55-
root = json_load_file(filename, 0, &err);
51+
json_t* root = json_load_file(filename, 0, &err);
5652
if(!root) {
5753
ERROR_MSG("Failed to parse %s:%d:%d: %s", filename, err.line, err.column, err.text);
5854
} else {
55+
json_t* value = NULL;
56+
int index = 0;
5957
if(!json_is_array(root)) {
6058
ERROR_MSG("Array expected.");
61-
} else for (index = 0, ret = 1; ret && (index < json_array_size(root)) && (value = json_array_get(root, index)); index++) {
59+
} else for (index = 0, ret = true; ret && (index < json_array_size(root)) && (value = json_array_get(root, index)); index++) {
6260
ret = 0;
6361
if(!json_is_object(value)) {
6462
ERROR_MSG("Expected object.");
@@ -74,7 +72,7 @@ int label_repository_load(const char* filename, label_repository_t* repository)
7472
tmp = json_object_get(value, "logical");
7573
if(!json_validate_int(tmp, &num)) {
7674
ERROR_MSG("Invalid or missing logical address.");
77-
} else if((num < 0) || (num > 0xffff)) {
75+
} else if((num < 0) || (num > 0xFFFF)) {
7876
ERROR_MSG("Logical address out of range.");
7977
} else {
8078
uint16_t logical = (uint16_t)num;
@@ -88,7 +86,7 @@ int label_repository_load(const char* filename, label_repository_t* repository)
8886
if((num < 0) || (num > 0xff)) {
8987
ERROR_MSG("Page value out of range.");
9088
} else if(label_repository_add(repository, key, logical, (uint8_t)num, description)) {
91-
ret = 1;
89+
ret = true;
9290
}
9391
free(description);
9492
}

test/CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ add_unit_test(
9595
SOURCES
9696
label.c
9797
${PROJECT_SOURCE_DIR}/label.c
98+
${PROJECT_SOURCE_DIR}/label/load.c
9899
${PROJECT_SOURCE_DIR}/message.c
100+
${PROJECT_SOURCE_DIR}/jsonhelpers.c
99101
${PROJECT_SOURCE_DIR}/message/console.c
100-
LIBRARIES cwalk
102+
LIBRARIES cwalk jansson
101103
INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR}
102104
)
103105

test/data/label_0.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[
2+
{ "name": "var", "logical": "31dc", "page": "f8" },
3+
{ "name": "do_something", "logical": "eabc", "page": "00", "description": "do something" },
4+
{ "name": "run", "logical" : "d6f7", "page": "1f", "description": [
5+
"line0",
6+
"line1",
7+
"line2",
8+
"line3"
9+
]
10+
}
11+
]

test/data/label_1.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[
2+
{ "name": "ok", "logical": "5030", "page": "04" },
3+
{ "name": "broken", "logical": "cafe", "page": ["5a"], "description": "!" }
4+
]

test/label.c

+53
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,62 @@ MunitResult label_delete_test(const MunitParameter params[] __attribute__((unuse
121121
return MUNIT_OK;
122122
}
123123

124+
MunitResult label_load_test(const MunitParameter params[] __attribute__((unused)), void* fixture __attribute__((unused))) {
125+
Label label = {};
126+
LabelRepository* repository = label_repository_create();
127+
munit_assert_not_null(repository);
128+
129+
munit_assert_false(label_repository_load(repository, "/not_here/label.json"));
130+
munit_assert_int(label_repository_size(repository), ==, 0);
131+
132+
munit_assert_false(label_repository_load(repository, "data/label_1.json"));
133+
munit_assert_int(label_repository_size(repository), ==, 1);
134+
135+
munit_assert_true(label_repository_get(repository, 0, &label));
136+
munit_assert_uint16(label.logical, ==, 0x5030U);
137+
munit_assert_uint8(label.page, ==, 4);
138+
munit_assert_string_equal(label.name, "ok");
139+
munit_assert_null(label.description);
140+
141+
label_repository_destroy(repository);
142+
143+
munit_assert_true(label_repository_load(repository, "data/label_0.json"));
144+
munit_assert_int(label_repository_size(repository), ==, 3);
145+
146+
munit_assert_true(label_repository_find(repository, 0x31DC, 0xF8, &label));
147+
munit_assert_uint16(label.logical, ==, 0x31DCU);
148+
munit_assert_uint8(label.page, ==, 0xF8);
149+
munit_assert_string_equal(label.name, "var");
150+
munit_assert_null(label.description);
151+
152+
munit_assert_true(label_repository_find(repository, 0xEABC, 0x00, &label));
153+
munit_assert_uint16(label.logical, ==, 0xEABCU);
154+
munit_assert_uint8(label.page, ==, 0x00);
155+
munit_assert_string_equal(label.name, "do_something");
156+
munit_assert_string_equal(label.description, "do something");
157+
158+
munit_assert_true(label_repository_find(repository, 0xD6F7, 0x1F, &label));
159+
munit_assert_uint16(label.logical, ==, 0xD6F7U);
160+
munit_assert_uint8(label.page, ==, 0x1F);
161+
munit_assert_string_equal(label.name, "run");
162+
munit_assert_string_equal(label.description, "line0\nline1\nline2\nline3");
163+
164+
label_repository_destroy(repository);
165+
166+
return MUNIT_OK;
167+
}
168+
169+
MunitResult label_save_test(const MunitParameter params[] __attribute__((unused)), void* fixture __attribute__((unused))) {
170+
// [todo]
171+
return MUNIT_OK;
172+
}
173+
174+
124175
static MunitTest Labelests[] = {
125176
{ "/add", label_add_test, setup, tear_down, MUNIT_TEST_OPTION_NONE, NULL },
126177
{ "/delete", label_delete_test, setup, tear_down, MUNIT_TEST_OPTION_NONE, NULL },
178+
{ "/load", label_load_test, setup, tear_down, MUNIT_TEST_OPTION_NONE, NULL },
179+
{ "/save", label_save_test, setup, tear_down, MUNIT_TEST_OPTION_NONE, NULL },
127180
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
128181
};
129182

0 commit comments

Comments
 (0)