2021-01-09 02:24:51 +08:00
|
|
|
#include "common.h"
|
|
|
|
|
2019-12-09 05:11:54 +08:00
|
|
|
#include <assert.h>
|
2020-06-20 04:04:06 +08:00
|
|
|
#include <string.h>
|
2019-12-09 05:11:54 +08:00
|
|
|
|
2021-01-09 02:18:02 +08:00
|
|
|
#include "cli.h"
|
2021-10-28 00:43:47 +08:00
|
|
|
#include "options.h"
|
2019-12-09 05:11:54 +08:00
|
|
|
|
|
|
|
static void test_flag_version(void) {
|
|
|
|
struct scrcpy_cli_args args = {
|
2021-10-28 00:43:47 +08:00
|
|
|
.opts = scrcpy_options_default,
|
2019-12-09 05:11:54 +08:00
|
|
|
.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 = {
|
2021-10-28 00:43:47 +08:00
|
|
|
.opts = scrcpy_options_default,
|
2019-12-09 05:11:54 +08:00
|
|
|
.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 = {
|
2021-10-28 00:43:47 +08:00
|
|
|
.opts = scrcpy_options_default,
|
2019-12-09 05:11:54 +08:00
|
|
|
.help = false,
|
|
|
|
.version = false,
|
|
|
|
};
|
|
|
|
|
|
|
|
char *argv[] = {
|
|
|
|
"scrcpy",
|
|
|
|
"--always-on-top",
|
2023-02-22 02:56:44 +08:00
|
|
|
"--video-bit-rate", "5M",
|
2019-12-09 05:11:54 +08:00
|
|
|
"--crop", "100:200:300:400",
|
|
|
|
"--fullscreen",
|
|
|
|
"--max-fps", "30",
|
|
|
|
"--max-size", "1024",
|
2021-06-12 00:39:23 +08:00
|
|
|
"--lock-video-orientation=2", // optional arguments require '='
|
2019-12-09 05:11:54 +08:00
|
|
|
// "--no-control" is not compatible with "--turn-screen-off"
|
2023-05-25 02:22:35 +08:00
|
|
|
// "--no-playback" is not compatible with "--fulscreen"
|
2019-12-10 04:16:09 +08:00
|
|
|
"--port", "1234:1236",
|
2019-12-09 05:11:54 +08:00
|
|
|
"--push-target", "/sdcard/Movies",
|
|
|
|
"--record", "file",
|
|
|
|
"--record-format", "mkv",
|
|
|
|
"--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",
|
|
|
|
};
|
|
|
|
|
2019-12-10 03:59:11 +08:00
|
|
|
bool ok = scrcpy_parse_args(&args, ARRAY_LEN(argv), argv);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(ok);
|
|
|
|
|
|
|
|
const struct scrcpy_options *opts = &args.opts;
|
|
|
|
assert(opts->always_on_top);
|
2023-02-22 02:56:44 +08:00
|
|
|
assert(opts->video_bit_rate == 5000000);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(!strcmp(opts->crop, "100:200:300:400"));
|
|
|
|
assert(opts->fullscreen);
|
|
|
|
assert(opts->max_fps == 30);
|
|
|
|
assert(opts->max_size == 1024);
|
2020-02-16 19:30:36 +08:00
|
|
|
assert(opts->lock_video_orientation == 2);
|
2019-12-10 04:16:09 +08:00
|
|
|
assert(opts->port_range.first == 1234);
|
|
|
|
assert(opts->port_range.last == 1236);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(!strcmp(opts->push_target, "/sdcard/Movies"));
|
|
|
|
assert(!strcmp(opts->record_filename, "file"));
|
2020-06-20 04:04:06 +08:00
|
|
|
assert(opts->record_format == SC_RECORD_FORMAT_MKV);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(!strcmp(opts->serial, "0123456789abcdef"));
|
|
|
|
assert(opts->show_touches);
|
|
|
|
assert(opts->turn_screen_off);
|
2021-11-27 05:05:28 +08:00
|
|
|
assert(opts->key_inject_mode == SC_KEY_INJECT_MODE_TEXT);
|
2019-12-09 05:11:54 +08:00
|
|
|
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 = {
|
2021-10-28 00:43:47 +08:00
|
|
|
.opts = scrcpy_options_default,
|
2019-12-09 05:11:54 +08:00
|
|
|
.help = false,
|
|
|
|
.version = false,
|
|
|
|
};
|
|
|
|
|
|
|
|
char *argv[] = {
|
|
|
|
"scrcpy",
|
|
|
|
"--no-control",
|
2023-05-25 02:22:35 +08:00
|
|
|
"--no-playback",
|
|
|
|
"--record", "file.mp4", // cannot enable --no-playback without recording
|
2019-12-09 05:11:54 +08:00
|
|
|
};
|
|
|
|
|
2019-12-10 03:59:11 +08:00
|
|
|
bool ok = scrcpy_parse_args(&args, ARRAY_LEN(argv), argv);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(ok);
|
|
|
|
|
|
|
|
const struct scrcpy_options *opts = &args.opts;
|
|
|
|
assert(!opts->control);
|
2023-05-25 03:22:31 +08:00
|
|
|
assert(!opts->video_playback);
|
|
|
|
assert(!opts->audio_playback);
|
2019-12-09 05:11:54 +08:00
|
|
|
assert(!strcmp(opts->record_filename, "file.mp4"));
|
2020-06-20 04:04:06 +08:00
|
|
|
assert(opts->record_format == SC_RECORD_FORMAT_MP4);
|
2019-12-09 05:11:54 +08:00
|
|
|
}
|
|
|
|
|
2020-07-17 06:00:42 +08:00
|
|
|
static void test_parse_shortcut_mods(void) {
|
|
|
|
struct sc_shortcut_mods mods;
|
|
|
|
bool ok;
|
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("lctrl", &mods);
|
|
|
|
assert(ok);
|
|
|
|
assert(mods.count == 1);
|
2021-12-28 22:24:15 +08:00
|
|
|
assert(mods.data[0] == SC_SHORTCUT_MOD_LCTRL);
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("lctrl+lalt", &mods);
|
|
|
|
assert(ok);
|
|
|
|
assert(mods.count == 1);
|
2021-12-28 22:24:15 +08:00
|
|
|
assert(mods.data[0] == (SC_SHORTCUT_MOD_LCTRL | SC_SHORTCUT_MOD_LALT));
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("rctrl,lalt", &mods);
|
|
|
|
assert(ok);
|
|
|
|
assert(mods.count == 2);
|
2021-12-28 22:24:15 +08:00
|
|
|
assert(mods.data[0] == SC_SHORTCUT_MOD_RCTRL);
|
|
|
|
assert(mods.data[1] == SC_SHORTCUT_MOD_LALT);
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("lsuper,rsuper+lalt,lctrl+rctrl+ralt", &mods);
|
|
|
|
assert(ok);
|
|
|
|
assert(mods.count == 3);
|
2021-12-28 22:24:15 +08:00
|
|
|
assert(mods.data[0] == SC_SHORTCUT_MOD_LSUPER);
|
|
|
|
assert(mods.data[1] == (SC_SHORTCUT_MOD_RSUPER | SC_SHORTCUT_MOD_LALT));
|
|
|
|
assert(mods.data[2] == (SC_SHORTCUT_MOD_LCTRL | SC_SHORTCUT_MOD_RCTRL |
|
|
|
|
SC_SHORTCUT_MOD_RALT));
|
2020-07-17 06:00:42 +08:00
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("", &mods);
|
|
|
|
assert(!ok);
|
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("lctrl+", &mods);
|
|
|
|
assert(!ok);
|
|
|
|
|
|
|
|
ok = sc_parse_shortcut_mods("lctrl,", &mods);
|
|
|
|
assert(!ok);
|
|
|
|
}
|
|
|
|
|
2020-07-15 18:17:04 +08:00
|
|
|
int main(int argc, char *argv[]) {
|
|
|
|
(void) argc;
|
|
|
|
(void) argv;
|
|
|
|
|
2019-12-09 05:11:54 +08:00
|
|
|
test_flag_version();
|
|
|
|
test_flag_help();
|
|
|
|
test_options();
|
|
|
|
test_options2();
|
2020-07-17 06:00:42 +08:00
|
|
|
test_parse_shortcut_mods();
|
2019-12-09 05:11:54 +08:00
|
|
|
return 0;
|
2021-12-04 16:27:59 +08:00
|
|
|
}
|