test_cli.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include "common.h"
  2. #include <assert.h>
  3. #include <string.h>
  4. #include "cli.h"
  5. #include "options.h"
  6. static void test_flag_version(void) {
  7. struct scrcpy_cli_args args = {
  8. .opts = scrcpy_options_default,
  9. .help = false,
  10. .version = false,
  11. };
  12. char *argv[] = {"scrcpy", "-v"};
  13. bool ok = scrcpy_parse_args(&args, 2, argv);
  14. assert(ok);
  15. assert(!args.help);
  16. assert(args.version);
  17. }
  18. static void test_flag_help(void) {
  19. struct scrcpy_cli_args args = {
  20. .opts = scrcpy_options_default,
  21. .help = false,
  22. .version = false,
  23. };
  24. char *argv[] = {"scrcpy", "-v"};
  25. bool ok = scrcpy_parse_args(&args, 2, argv);
  26. assert(ok);
  27. assert(!args.help);
  28. assert(args.version);
  29. }
  30. static void test_options(void) {
  31. struct scrcpy_cli_args args = {
  32. .opts = scrcpy_options_default,
  33. .help = false,
  34. .version = false,
  35. };
  36. char *argv[] = {
  37. "scrcpy",
  38. "--always-on-top",
  39. "--video-bit-rate", "5M",
  40. "--crop", "100:200:300:400",
  41. "--fullscreen",
  42. "--max-fps", "30",
  43. "--max-size", "1024",
  44. "--lock-video-orientation=2", // optional arguments require '='
  45. // "--no-control" is not compatible with "--turn-screen-off"
  46. // "--no-playback" is not compatible with "--fulscreen"
  47. "--port", "1234:1236",
  48. "--push-target", "/sdcard/Movies",
  49. "--record", "file",
  50. "--record-format", "mkv",
  51. "--serial", "0123456789abcdef",
  52. "--show-touches",
  53. "--turn-screen-off",
  54. "--prefer-text",
  55. "--window-title", "my device",
  56. "--window-x", "100",
  57. "--window-y", "-1",
  58. "--window-width", "600",
  59. "--window-height", "0",
  60. "--window-borderless",
  61. };
  62. bool ok = scrcpy_parse_args(&args, ARRAY_LEN(argv), argv);
  63. assert(ok);
  64. const struct scrcpy_options *opts = &args.opts;
  65. assert(opts->always_on_top);
  66. assert(opts->video_bit_rate == 5000000);
  67. assert(!strcmp(opts->crop, "100:200:300:400"));
  68. assert(opts->fullscreen);
  69. assert(!strcmp(opts->max_fps, "30"));
  70. assert(opts->max_size == 1024);
  71. assert(opts->lock_video_orientation == 2);
  72. assert(opts->port_range.first == 1234);
  73. assert(opts->port_range.last == 1236);
  74. assert(!strcmp(opts->push_target, "/sdcard/Movies"));
  75. assert(!strcmp(opts->record_filename, "file"));
  76. assert(opts->record_format == SC_RECORD_FORMAT_MKV);
  77. assert(!strcmp(opts->serial, "0123456789abcdef"));
  78. assert(opts->show_touches);
  79. assert(opts->turn_screen_off);
  80. assert(opts->key_inject_mode == SC_KEY_INJECT_MODE_TEXT);
  81. assert(!strcmp(opts->window_title, "my device"));
  82. assert(opts->window_x == 100);
  83. assert(opts->window_y == -1);
  84. assert(opts->window_width == 600);
  85. assert(opts->window_height == 0);
  86. assert(opts->window_borderless);
  87. }
  88. static void test_options2(void) {
  89. struct scrcpy_cli_args args = {
  90. .opts = scrcpy_options_default,
  91. .help = false,
  92. .version = false,
  93. };
  94. char *argv[] = {
  95. "scrcpy",
  96. "--no-control",
  97. "--no-playback",
  98. "--record", "file.mp4", // cannot enable --no-playback without recording
  99. };
  100. bool ok = scrcpy_parse_args(&args, ARRAY_LEN(argv), argv);
  101. assert(ok);
  102. const struct scrcpy_options *opts = &args.opts;
  103. assert(!opts->control);
  104. assert(!opts->video_playback);
  105. assert(!opts->audio_playback);
  106. assert(!strcmp(opts->record_filename, "file.mp4"));
  107. assert(opts->record_format == SC_RECORD_FORMAT_MP4);
  108. }
  109. static void test_parse_shortcut_mods(void) {
  110. uint8_t mods;
  111. bool ok;
  112. ok = sc_parse_shortcut_mods("lctrl", &mods);
  113. assert(ok);
  114. assert(mods == SC_SHORTCUT_MOD_LCTRL);
  115. ok = sc_parse_shortcut_mods("rctrl,lalt", &mods);
  116. assert(ok);
  117. assert(mods == (SC_SHORTCUT_MOD_RCTRL | SC_SHORTCUT_MOD_LALT));
  118. ok = sc_parse_shortcut_mods("lsuper,rsuper,lctrl", &mods);
  119. assert(ok);
  120. assert(mods == (SC_SHORTCUT_MOD_LSUPER
  121. | SC_SHORTCUT_MOD_RSUPER
  122. | SC_SHORTCUT_MOD_LCTRL));
  123. ok = sc_parse_shortcut_mods("", &mods);
  124. assert(!ok);
  125. ok = sc_parse_shortcut_mods("lctrl+", &mods);
  126. assert(!ok);
  127. ok = sc_parse_shortcut_mods("lctrl,", &mods);
  128. assert(!ok);
  129. }
  130. int main(int argc, char *argv[]) {
  131. (void) argc;
  132. (void) argv;
  133. test_flag_version();
  134. test_flag_help();
  135. test_options();
  136. test_options2();
  137. test_parse_shortcut_mods();
  138. return 0;
  139. }