TEST(String, SplitShell) { char **argv; int argc; POINTERS_EQUAL(NULL, string_split_shell (NULL, NULL)); /* test with an empty string */ argc = -1; argv = string_split_shell ("", &argc); LONGS_EQUAL(0, argc); CHECK(argv); POINTERS_EQUAL(NULL, argv[0]); string_free_split (argv); /* test with a real string (command + arguments) */ argv = string_split_shell ("/path/to/bin arg1 \"arg2 here\" 'arg3 here'", &argc); LONGS_EQUAL(4, argc); CHECK(argv); STRCMP_EQUAL("/path/to/bin", argv[0]); STRCMP_EQUAL("arg1", argv[1]); STRCMP_EQUAL("arg2 here", argv[2]); STRCMP_EQUAL("arg3 here", argv[3]); POINTERS_EQUAL(NULL, argv[4]); string_free_split (argv); /* free split with NULL */ string_free_split_shared (NULL); }
int main (int argc, char *argv[]) { int rc, length, weechat_argc; char *weechat_tests_args, *args, **weechat_argv; /* setup environment: default language, no specific timezone */ setenv ("LC_ALL", "C", 1); setenv ("TZ", "", 1); /* build arguments for WeeChat */ weechat_tests_args = getenv ("WEECHAT_TESTS_ARGS"); length = strlen (argv[0]) + 64 + /* --dir ... */ ((weechat_tests_args) ? 1 + strlen (weechat_tests_args) : 0) + 1; args = (char *)malloc (length); if (!args) { fprintf (stderr, "Memory error\n"); return 1; } snprintf (args, length, "%s --dir ./tmp_weechat_test%s%s", argv[0], (weechat_tests_args) ? " " : "", (weechat_tests_args) ? weechat_tests_args : ""); weechat_argv = string_split_shell (args, &weechat_argc); printf ("WeeChat arguments: \"%s\"\n", args); /* init WeeChat */ printf ("------------------------------------------------------------\n"); weechat_init (weechat_argc, weechat_argv, &test_gui_init); if (weechat_argv) string_free_split (weechat_argv); free (args); /* display WeeChat version */ input_data (gui_buffer_search_main (), "/command core version"); /* run all tests */ printf ("\n"); printf (">>>>>>>>>> TESTS >>>>>>>>>>\n"); rc = CommandLineTestRunner::RunAllTests (argc, argv); printf ("<<<<<<<<<< TESTS <<<<<<<<<<\n"); printf ("\n"); /* end WeeChat */ weechat_end (&gui_main_end); printf ("------------------------------------------------------------\n"); /* display status */ printf ("\n"); printf ("\33[%d;1m*** %s ***\33[0m\n", (rc == 0) ? 32 : 31, /* 32 = green (OK), 31 = red (error) */ (rc == 0) ? "OK" : "ERROR"); return rc; }