Add tests for command-line parsing
This commit is contained in:
parent
d950383b72
commit
929bf48c7e
3 changed files with 134 additions and 0 deletions
|
@ -148,6 +148,11 @@ tests = [
|
||||||
['test_cbuf', [
|
['test_cbuf', [
|
||||||
'tests/test_cbuf.c',
|
'tests/test_cbuf.c',
|
||||||
]],
|
]],
|
||||||
|
['test_cli', [
|
||||||
|
'tests/test_cli.c',
|
||||||
|
'src/cli.c',
|
||||||
|
'src/util/str_util.c',
|
||||||
|
]],
|
||||||
['test_control_event_serialize', [
|
['test_control_event_serialize', [
|
||||||
'tests/test_control_msg_serialize.c',
|
'tests/test_control_msg_serialize.c',
|
||||||
'src/control_msg.c',
|
'src/control_msg.c',
|
||||||
|
|
|
@ -374,6 +374,8 @@ scrcpy_parse_args(struct scrcpy_cli_args *args, int argc, char *argv[]) {
|
||||||
|
|
||||||
struct scrcpy_options *opts = &args->opts;
|
struct scrcpy_options *opts = &args->opts;
|
||||||
|
|
||||||
|
optind = 0; // reset to start from the first argument in tests
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
while ((c = getopt_long(argc, argv, "b:c:fF:hm:nNp:r:s:StTv", long_options,
|
while ((c = getopt_long(argc, argv, "b:c:fF:hm:nNp:r:s:StTv", long_options,
|
||||||
NULL)) != -1) {
|
NULL)) != -1) {
|
||||||
|
|
127
app/tests/test_cli.c
Normal file
127
app/tests/test_cli.c
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "cli.h"
|
||||||
|
|
||||||
|
static void test_flag_version(void) {
|
||||||
|
struct scrcpy_cli_args args = {
|
||||||
|
.opts = SCRCPY_OPTIONS_DEFAULT,
|
||||||
|
.help = false,
|
||||||
|
.version = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
char *argv[] = {"scrcpy", "-v"};
|
||||||
|
|
||||||
|
bool ok = scrcpy_parse_args(&args, 2, argv);
|
||||||
|
assert(ok);
|
||||||
|
assert(!args.help);
|
||||||
|
assert(args.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_flag_help(void) {
|
||||||
|
struct scrcpy_cli_args args = {
|
||||||
|
.opts = SCRCPY_OPTIONS_DEFAULT,
|
||||||
|
.help = false,
|
||||||
|
.version = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
char *argv[] = {"scrcpy", "-v"};
|
||||||
|
|
||||||
|
bool ok = scrcpy_parse_args(&args, 2, argv);
|
||||||
|
assert(ok);
|
||||||
|
assert(!args.help);
|
||||||
|
assert(args.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_options(void) {
|
||||||
|
struct scrcpy_cli_args args = {
|
||||||
|
.opts = SCRCPY_OPTIONS_DEFAULT,
|
||||||
|
.help = false,
|
||||||
|
.version = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
char *argv[] = {
|
||||||
|
"scrcpy",
|
||||||
|
"--always-on-top",
|
||||||
|
"--bit-rate", "5M",
|
||||||
|
"--crop", "100:200:300:400",
|
||||||
|
"--fullscreen",
|
||||||
|
"--max-fps", "30",
|
||||||
|
"--max-size", "1024",
|
||||||
|
// "--no-control" is not compatible with "--turn-screen-off"
|
||||||
|
// "--no-display" is not compatible with "--fulscreen"
|
||||||
|
"--port", "1234",
|
||||||
|
"--push-target", "/sdcard/Movies",
|
||||||
|
"--record", "file",
|
||||||
|
"--record-format", "mkv",
|
||||||
|
"--render-expired-frames",
|
||||||
|
"--serial", "0123456789abcdef",
|
||||||
|
"--show-touches",
|
||||||
|
"--turn-screen-off",
|
||||||
|
"--prefer-text",
|
||||||
|
"--window-title", "my device",
|
||||||
|
"--window-x", "100",
|
||||||
|
"--window-y", "-1",
|
||||||
|
"--window-width", "600",
|
||||||
|
"--window-height", "0",
|
||||||
|
"--window-borderless",
|
||||||
|
};
|
||||||
|
|
||||||
|
bool ok = scrcpy_parse_args(&args, sizeof(argv) / sizeof(*argv), argv);
|
||||||
|
assert(ok);
|
||||||
|
|
||||||
|
const struct scrcpy_options *opts = &args.opts;
|
||||||
|
assert(opts->always_on_top);
|
||||||
|
fprintf(stderr, "%d\n", (int) opts->bit_rate);
|
||||||
|
assert(opts->bit_rate == 5000000);
|
||||||
|
assert(!strcmp(opts->crop, "100:200:300:400"));
|
||||||
|
assert(opts->fullscreen);
|
||||||
|
assert(opts->max_fps == 30);
|
||||||
|
assert(opts->max_size == 1024);
|
||||||
|
assert(opts->port == 1234);
|
||||||
|
assert(!strcmp(opts->push_target, "/sdcard/Movies"));
|
||||||
|
assert(!strcmp(opts->record_filename, "file"));
|
||||||
|
assert(opts->record_format == RECORDER_FORMAT_MKV);
|
||||||
|
assert(opts->render_expired_frames);
|
||||||
|
assert(!strcmp(opts->serial, "0123456789abcdef"));
|
||||||
|
assert(opts->show_touches);
|
||||||
|
assert(opts->turn_screen_off);
|
||||||
|
assert(opts->prefer_text);
|
||||||
|
assert(!strcmp(opts->window_title, "my device"));
|
||||||
|
assert(opts->window_x == 100);
|
||||||
|
assert(opts->window_y == -1);
|
||||||
|
assert(opts->window_width == 600);
|
||||||
|
assert(opts->window_height == 0);
|
||||||
|
assert(opts->window_borderless);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_options2(void) {
|
||||||
|
struct scrcpy_cli_args args = {
|
||||||
|
.opts = SCRCPY_OPTIONS_DEFAULT,
|
||||||
|
.help = false,
|
||||||
|
.version = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
char *argv[] = {
|
||||||
|
"scrcpy",
|
||||||
|
"--no-control",
|
||||||
|
"--no-display",
|
||||||
|
"--record", "file.mp4", // cannot enable --no-display without recording
|
||||||
|
};
|
||||||
|
|
||||||
|
bool ok = scrcpy_parse_args(&args, sizeof(argv) / sizeof(*argv), argv);
|
||||||
|
assert(ok);
|
||||||
|
|
||||||
|
const struct scrcpy_options *opts = &args.opts;
|
||||||
|
assert(!opts->control);
|
||||||
|
assert(!opts->display);
|
||||||
|
assert(!strcmp(opts->record_filename, "file.mp4"));
|
||||||
|
assert(opts->record_format == RECORDER_FORMAT_MP4);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
test_flag_version();
|
||||||
|
test_flag_help();
|
||||||
|
test_options();
|
||||||
|
test_options2();
|
||||||
|
return 0;
|
||||||
|
};
|
Loading…
Reference in a new issue