tokenizecmd_test.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright 2012-2017 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
  4. */
  5. #include "test.h"
  6. #include <bx/commandline.h>
  7. #include <bx/string.h>
  8. TEST_CASE("commandLine", "")
  9. {
  10. const char* args[] =
  11. {
  12. "-s",
  13. "--long",
  14. "--platform",
  15. "x",
  16. };
  17. bx::CommandLine cmdLine(BX_COUNTOF(args), args);
  18. REQUIRE(cmdLine.hasArg("long") );
  19. REQUIRE(cmdLine.hasArg('s') );
  20. // non-existing argument
  21. REQUIRE(!cmdLine.hasArg('x') );
  22. REQUIRE(!cmdLine.hasArg("preprocess") );
  23. }
  24. static bool test(const char* _input, int32_t _argc, ...)
  25. {
  26. char buffer[1024];
  27. uint32_t len = sizeof(buffer);
  28. char* argv[32];
  29. int32_t argc;
  30. bx::tokenizeCommandLine(_input, buffer, len, argc, argv, BX_COUNTOF(argv) );
  31. if (_argc != argc)
  32. {
  33. return false;
  34. }
  35. va_list argList;
  36. va_start(argList, _argc);
  37. for (int32_t ii = 0; ii < _argc; ++ii)
  38. {
  39. const char* arg = va_arg(argList, const char*);
  40. if (0 != bx::strncmp(argv[ii], arg) )
  41. {
  42. return false;
  43. }
  44. }
  45. va_end(argList);
  46. return true;
  47. }
  48. TEST_CASE("tokenizeCommandLine", "")
  49. {
  50. REQUIRE(test(" ", 0, NULL) );
  51. REQUIRE(test("\\", 0, NULL) );
  52. REQUIRE(test("a b v g d", 5, "a", "b", "v", "g", "d") );
  53. REQUIRE(test("\"ab\\\"v\" \"\\\\\" g", 3, "ab\"v", "\\", "g") );
  54. REQUIRE(test("a\\\\\\\"b v g", 3, "a\\\"b", "v", "g") );
  55. REQUIRE(test("a\\\\\\\\\"b v\" g d", 3, "a\\\\b v", "g", "d") );
  56. }