rizin/test/unit/test_serialize_spaces.c
Riccardo Schirone 53bf5c497f SPDX Copyright text for all files based on history
- Add LICENSES directory
- Download additional licenses used
- Add .reuse directory
- Add doc about SPDX/reuse

Co-authored-by: Florian Märkl <info@florianmaerkl.de>
2021-03-05 19:39:15 +08:00

155 lines
No EOL
4.5 KiB
C

// SPDX-FileCopyrightText: 2020 Florian Märkl <info@florianmaerkl.de>
// SPDX-License-Identifier: LGPL-3.0-only
#include <rz_util/rz_spaces.h>
#include "minunit.h"
#include "test_sdb.h"
bool test_spaces_save(void) {
RzSpaces *spaces = rz_spaces_new("myspaces");
rz_spaces_add(spaces, "a");
rz_spaces_add(spaces, "b");
rz_spaces_add(spaces, "c");
rz_spaces_add(spaces, PERTURBATOR);
Sdb *db = sdb_new0();
rz_serialize_spaces_save(db, spaces);
Sdb *expected = sdb_new0();
sdb_set(expected, "name", "myspaces", 0);
sdb_set(expected, "spacestack", "[\"*\"]", 0);
Sdb *expected_spaces = sdb_ns(expected, "spaces", true);
sdb_set(expected_spaces, "a", "s", 0);
sdb_set(expected_spaces, "b", "s", 0);
sdb_set(expected_spaces, "c", "s", 0);
sdb_set(expected_spaces, PERTURBATOR, "s", 0);
assert_sdb_eq(db, expected, "spaces save (no current, empty stack)");
sdb_free(db);
rz_spaces_set(spaces, PERTURBATOR);
db = sdb_new0();
rz_serialize_spaces_save(db, spaces);
sdb_set(expected, "spacestack", "[\"" PERTURBATOR_JSON "\"]", 0);
assert_sdb_eq(db, expected, "spaces save (current, empty stack)");
sdb_free(db);
rz_spaces_push(spaces, "a");
rz_spaces_push(spaces, "b");
db = sdb_new0();
rz_serialize_spaces_save(db, spaces);
sdb_set(expected, "spacestack", "[\"" PERTURBATOR_JSON "\",\"a\",\"b\"]", 0);
assert_sdb_eq(db, expected, "spaces save (current, stack)");
sdb_free(db);
sdb_free(expected);
rz_spaces_free(spaces);
mu_end;
}
bool test_spaces_load_noname_nostack(void) {
Sdb *db = sdb_new0();
sdb_set(db, "name", "myspaces", 0);
sdb_set(db, "spacestack", "[\"*\"]", 0);
Sdb *db_spaces = sdb_ns(db, "spaces", true);
sdb_set(db_spaces, "a", "s", 0);
sdb_set(db_spaces, "b", "s", 0);
sdb_set(db_spaces, "c", "s", 0);
sdb_set(db_spaces, PERTURBATOR, "s", 0);
RzSpaces *spaces = rz_spaces_new("fixed name");
bool loaded = rz_serialize_spaces_load(db, spaces, false, NULL);
mu_assert("load success", loaded);
mu_assert_streq(spaces->name, "fixed name", "spaces load without name");
mu_assert_null(spaces->current, "spaces load no current");
mu_assert_eq(rz_list_length(spaces->spacestack), 0, "empty spacestack");
RBIter rbiter;
RzSpace *space;
int i = 0;
rz_rbtree_foreach (spaces->spaces, rbiter, space, RzSpace, rb) {
switch (i) {
case 0:
mu_assert_streq(space->name, PERTURBATOR, "loaded spaces");
break;
case 1:
mu_assert_streq(space->name, "a", "loaded spaces");
break;
case 2:
mu_assert_streq(space->name, "b", "loaded spaces");
break;
case 3:
mu_assert_streq(space->name, "c", "loaded spaces");
break;
default:
break;
}
i++;
}
mu_assert_eq(i, 4, "loaded spaces count");
rz_spaces_free(spaces);
sdb_free(db);
mu_end;
}
bool test_spaces_load_name_stack(void) {
Sdb *db = sdb_new0();
sdb_set(db, "name", "myspaces", 0);
sdb_set(db, "spacestack", "[\"a\",\"*\",\"" PERTURBATOR_JSON "\",\"b\",\"" PERTURBATOR_JSON "\"]", 0);
Sdb *db_spaces = sdb_ns(db, "spaces", true);
sdb_set(db_spaces, "a", "s", 0);
sdb_set(db_spaces, "b", "s", 0);
sdb_set(db_spaces, "c", "s", 0);
sdb_set(db_spaces, PERTURBATOR, "s", 0);
RzSpaces *spaces = rz_spaces_new("");
bool loaded = rz_serialize_spaces_load(db, spaces, true, NULL);
mu_assert("load success", loaded);
mu_assert_streq(spaces->name, "myspaces", "loaded name");
mu_assert_notnull(spaces->current, "current non-null");
mu_assert_streq(spaces->current->name, PERTURBATOR, "current");
mu_assert_eq(rz_list_length(spaces->spacestack), 4, "spacestack size");
mu_assert_streq((const char *)rz_list_get_n(spaces->spacestack, 0), "a", "spacestack");
mu_assert_streq((const char *)rz_list_get_n(spaces->spacestack, 1), "*", "spacestack");
mu_assert_streq((const char *)rz_list_get_n(spaces->spacestack, 2), PERTURBATOR, "spacestack");
mu_assert_streq((const char *)rz_list_get_n(spaces->spacestack, 3), "b", "spacestack");
RBIter rbiter;
RzSpace *space;
int i = 0;
rz_rbtree_foreach (spaces->spaces, rbiter, space, RzSpace, rb) {
switch (i) {
case 0:
mu_assert_streq(space->name, PERTURBATOR, "loaded spaces");
break;
case 1:
mu_assert_streq(space->name, "a", "loaded spaces");
break;
case 2:
mu_assert_streq(space->name, "b", "loaded spaces");
break;
case 3:
mu_assert_streq(space->name, "c", "loaded spaces");
break;
default:
break;
}
i++;
}
mu_assert_eq(i, 4, "loaded spaces count");
rz_spaces_free(spaces);
sdb_free(db);
mu_end;
}
int all_tests() {
mu_run_test(test_spaces_save);
mu_run_test(test_spaces_load_noname_nostack);
mu_run_test(test_spaces_load_name_stack);
return tests_passed != tests_run;
}
mu_main(all_tests)