rizin/test/unit/test_yank.c
Anton Kochkov aac743beb1
Port y (yank) commands to the rzshell (#1734)
* Port `y` (yank) commands to the rzshell
* Add very basic yank unit tests

Co-authored-by: Riccardo Schirone <sirmy15@gmail.com>
2021-09-27 13:27:41 +08:00

59 lines
2.2 KiB
C

// SPDX-FileCopyrightText: 2021 ret2libc <sirmy15@gmail.com>
// SPDX-License-Identifier: LGPL-3.0-only
#include <rz_core.h>
#include "minunit.h"
static RzCore *fake_core_new(void) {
RzCore *core = rz_core_new();
RzCoreFile *file = rz_core_file_open(core, "malloc://1024", RZ_PERM_RW, 0);
mu_assert_notnull(file, "open file");
rz_config_set_b(core->config, "cfg.bigendian", false);
rz_core_bin_load(core, NULL, 0);
return core;
}
bool test_yank(void) {
RzCore *core = fake_core_new();
bool r = rz_core_write_value_at(core, 0, 0x11223344, 4);
mu_assert_true(r, "value should be written at 0");
mu_assert_memeq(core->block, (const ut8 *)"\x44\x33\x22\x11", 4, "original bytes should be right at address 0");
r = rz_core_yank(core, 0, 4);
mu_assert_true(r, "4 bytes should be yanked from 0");
r = rz_core_seek(core, 4, true);
mu_assert_true(r, "seek should be moved to 4");
r = rz_core_yank_paste(core, 4, 4);
mu_assert_true(r, "clipboard content should be pasted at address 4");
r = rz_core_block_read(core) > 0;
mu_assert_true(r, "more than 0 bytes should be read at address 4");
mu_assert_memeq(core->block, (const ut8 *)"\x44\x33\x22\x11", 4, "yanked bytes should be pasted at address 4");
rz_core_free(core);
mu_end;
}
bool test_yank_string(void) {
RzCore *core = fake_core_new();
bool r = rz_core_write_string_at(core, 0, "Hello World");
mu_assert_true(r, "string should be written at 0");
r = rz_core_yank_string(core, 0, 0);
mu_assert_true(r, "string should be yanked from address 0");
r = rz_core_seek(core, 4, true);
mu_assert_true(r, "seek should be moved to 4");
r = rz_core_yank_paste(core, 4, 0);
mu_assert_true(r, "clipboard string should be pasted at address 4");
r = rz_core_block_read(core) > 0;
mu_assert_true(r, "more than 0 bytes should be read at address 4");
mu_assert_streq((const char *)core->block, "Hello World", "yanked bytes should be pasted at address 4");
rz_core_seek(core, 0, true);
mu_assert_streq((const char *)core->block, "HellHello World", "yanked bytes should be pasted at address 4, original content there");
rz_core_free(core);
mu_end;
}
int all_tests() {
mu_run_test(test_yank);
mu_run_test(test_yank_string);
return tests_passed != tests_run;
}
mu_main(all_tests)