| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- //------------------------------------------------------------------------------
- // sokol-args-test.c
- //------------------------------------------------------------------------------
- #define SOKOL_IMPL
- #include "sokol_args.h"
- #include "utest.h"
- #define T(b) EXPECT_TRUE(b)
- #define TSTR(s0, s1) EXPECT_TRUE(0 == strcmp(s0,s1))
- #define NUM_ARGS(x) (sizeof(x)/sizeof(void*))
- static char* argv_0[] = { "exe_name " };
- UTEST(sokol_args, init_shutdown) {
- sargs_setup(&(sargs_desc){0});
- T(sargs_isvalid());
- T(_sargs.max_args == _SARGS_MAX_ARGS_DEF);
- T(_sargs.args);
- T(_sargs.buf_size == _SARGS_BUF_SIZE_DEF);
- T(_sargs.buf_pos == 1);
- T(_sargs.buf);
- T(sargs_num_args() == 0);
- TSTR(sargs_key_at(0), "");
- TSTR(sargs_value_at(0), "");
- sargs_shutdown();
- T(!sargs_isvalid());
- T(0 == _sargs.args);
- T(0 == _sargs.buf);
- }
- UTEST(sokol_args, no_args) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_0),
- .argv = argv_0
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 0);
- TSTR(sargs_key_at(0), "");
- TSTR(sargs_value_at(0), "");
- T(-1 == sargs_find("bla"));
- T(!sargs_exists("bla"));
- TSTR(sargs_value("bla"), "");
- TSTR(sargs_value_def("bla", "blub"), "blub");
- sargs_shutdown();
- }
- static char* argv_1[] = { "exe_name", "kvp0=val0", "kvp1=val1", "kvp2=val2" };
- UTEST(sokol_args, simple_args) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_1),
- .argv = argv_1,
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "val0");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "val0");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), "val1");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), "val1");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "val2");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "val2");
- T(_sargs.buf_pos == 31);
- sargs_shutdown();
- }
- static char* argv_2[] = { "exe_name", "kvp0 = val0 ", " \tkvp1= val1", "kvp2 = val2 "};
- UTEST(sokol_args, simple_whitespace) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_2),
- .argv = argv_2
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "val0");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "val0");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), "val1");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), "val1");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "val2");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "val2");
- T(_sargs.buf_pos == 31);
- sargs_shutdown();
- }
- static char* argv_4[] = { "exe_name", "kvp0 ", "=val0 ", " kvp1", "=", "val1", "kvp2 \t", "= val2 "};
- UTEST(sokol_args, standalone_separator) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_4),
- .argv = argv_4
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "val0");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "val0");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), "val1");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), "val1");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "val2");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "val2");
- T(_sargs.buf_pos == 31);
- sargs_shutdown();
- }
- static char* argv_5[] = { "exe_name", "kvp0='bla bla'", "kvp1=' blub blub'", "kvp2='blob blob '"};
- UTEST(sokol_args, single_quotes) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_5),
- .argv = argv_5
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "bla bla");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "bla bla");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), " blub blub");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), " blub blub");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "blob blob ");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "blob blob ");
- sargs_shutdown();
- }
- static char* argv_6[] = { "exe_name", "kvp0=\"bla bla\"", "kvp1=\" blub blub\"", "kvp2=\"blob blob \""};
- UTEST(sokol_args, double_quotes) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_6),
- .argv = argv_6
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "bla bla");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "bla bla");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), " blub blub");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), " blub blub");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "blob blob ");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "blob blob ");
- sargs_shutdown();
- }
- static char* argv_7[] = { "exe_name", "kvp0='bla \"bla\"'", "kvp1=' \"blub blub\"'", "kvp2='blob \"blob\" '"};
- UTEST(sokol_args, double_in_single_quotes) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_7),
- .argv = argv_7
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "bla \"bla\"");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "bla \"bla\"");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), " \"blub blub\"");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), " \"blub blub\"");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "blob \"blob\" ");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "blob \"blob\" ");
- sargs_shutdown();
- }
- static char* argv_8[] = { "exe_name", "kvp0=\"bla 'bla'\"", "kvp1=\" 'blub blub'\"", "kvp2=\"blob 'blob' \""};
- UTEST(sokol_args, single_in_double_quotes) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_8),
- .argv = argv_8
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "bla 'bla'");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "bla 'bla'");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), " 'blub blub'");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), " 'blub blub'");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "blob 'blob' ");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "blob 'blob' ");
- sargs_shutdown();
- }
- static char* argv_9[] = { "exe_name", "kvp0='bla ", "bla'", "kvp1= ' blub", " blub'", "kvp2='blob blob '"};
- UTEST(sokol_args, test_split_quotes) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_9),
- .argv = argv_9
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "bla bla");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "bla bla");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), " blub blub");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), " blub blub");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "blob blob ");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "blob blob ");
- sargs_shutdown();
- }
- static char* argv_10[] = { "exe_name", "kvp0=\\\\val0\\nval1", "kvp1=val1\\rval2", "kvp2='val2\\tval3'" };
- UTEST(sokol_args, escape_sequence) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_10),
- .argv = argv_10,
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 3);
- T(0 == sargs_find("kvp0"));
- TSTR(sargs_value("kvp0"), "\\val0\nval1");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_value_at(0), "\\val0\nval1");
- T(1 == sargs_find("kvp1"));
- TSTR(sargs_value("kvp1"), "val1\rval2");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_value_at(1), "val1\rval2");
- T(2 == sargs_find("kvp2"));
- TSTR(sargs_value("kvp2"), "val2\tval3");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_value_at(2), "val2\tval3");
- sargs_shutdown();
- }
- static char* argv_11[] = { "exe_name", "kvp0 kvp1", "kvp2 = val2", "kvp3", "kvp4=val4" };
- UTEST(sokol_args, key_only_args) {
- sargs_setup(&(sargs_desc){
- .argc = NUM_ARGS(argv_11),
- .argv = argv_11,
- });
- T(sargs_isvalid());
- T(sargs_num_args() == 5);
- T(0 == sargs_find("kvp0"));
- T(1 == sargs_find("kvp1"));
- T(2 == sargs_find("kvp2"));
- T(3 == sargs_find("kvp3"));
- T(4 == sargs_find("kvp4"))
- T(-1 == sargs_find("kvp5"));
- T(-1 == sargs_find("val2"));
- T(-1 == sargs_find("val4"));
- T(sargs_exists("kvp0"));
- T(sargs_exists("kvp1"));
- T(sargs_exists("kvp2"));
- T(sargs_exists("kvp3"));
- T(sargs_exists("kvp4"));
- T(!sargs_exists("kvp5"));
- TSTR(sargs_value("kvp0"), "");
- TSTR(sargs_value("kvp1"), "");
- TSTR(sargs_value("kvp2"), "val2");
- TSTR(sargs_value("kvp3"), "");
- TSTR(sargs_value("kvp4"), "val4");
- TSTR(sargs_value("kvp5"), "");
- TSTR(sargs_value_def("kvp0", "bla0"), "bla0");
- TSTR(sargs_value_def("kvp1", "bla1"), "bla1");
- TSTR(sargs_value_def("kvp2", "bla2"), "val2");
- TSTR(sargs_value_def("kvp3", "bla3"), "bla3");
- TSTR(sargs_value_def("kvp4", "bla4"), "val4");
- TSTR(sargs_value_def("kvp5", "bla5"), "bla5");
- TSTR(sargs_key_at(0), "kvp0");
- TSTR(sargs_key_at(1), "kvp1");
- TSTR(sargs_key_at(2), "kvp2");
- TSTR(sargs_key_at(3), "kvp3");
- TSTR(sargs_key_at(4), "kvp4");
- TSTR(sargs_key_at(5), "");
- TSTR(sargs_value_at(0), "");
- TSTR(sargs_value_at(1), "");
- TSTR(sargs_value_at(2), "val2");
- TSTR(sargs_value_at(3), "");
- TSTR(sargs_value_at(4), "val4");
- TSTR(sargs_value_at(5), "");
- }
|