shell.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. #include <glib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include "test.h"
  5. RESULT
  6. test_shell_argv1 ()
  7. {
  8. GError *error;
  9. gint argc;
  10. gchar **argv;
  11. gboolean ret;
  12. /* The next line prints a critical error and returns FALSE
  13. ret = g_shell_parse_argv (NULL, NULL, NULL, NULL);
  14. */
  15. ret = g_shell_parse_argv ("", NULL, NULL, NULL);
  16. if (ret)
  17. return FAILED ("1. It should return FALSE");
  18. ret = g_shell_parse_argv ("hola", NULL, NULL, NULL);
  19. if (!ret)
  20. return FAILED ("2. It should return TRUE");
  21. argc = 0;
  22. ret = g_shell_parse_argv ("hola", &argc, NULL, NULL);
  23. if (!ret)
  24. return FAILED ("3. It should return TRUE");
  25. if (argc != 1)
  26. return FAILED ("4. argc was %d", argc);
  27. argc = 0;
  28. ret = g_shell_parse_argv ("hola bola", &argc, NULL, NULL);
  29. if (!ret)
  30. return FAILED ("5. It should return TRUE");
  31. if (argc != 2)
  32. return FAILED ("6. argc was %d", argc);
  33. argc = 0;
  34. ret = g_shell_parse_argv ("hola bola", &argc, &argv, NULL);
  35. if (!ret)
  36. return FAILED ("7. It should return TRUE");
  37. if (argc != 2)
  38. return FAILED ("8. argc was %d", argc);
  39. if (strcmp (argv [0], "hola"))
  40. return FAILED ("9. argv[0] was %s", argv [0]);
  41. if (strcmp (argv [1], "bola"))
  42. return FAILED ("10. argv[1] was %s", argv [1]);
  43. g_strfreev (argv);
  44. argv = NULL;
  45. argc = 0;
  46. error = NULL;
  47. ret = g_shell_parse_argv ("hola 'bola'", &argc, &argv, &error);
  48. if (!ret)
  49. return FAILED ("11. It should return TRUE");
  50. if (argc != 2)
  51. return FAILED ("12. argc was %d expected 2", argc);
  52. if (strcmp (argv [0], "hola"))
  53. return FAILED ("13. argv[0] was %s", argv [0]);
  54. if (strcmp (argv [1], "bola"))
  55. return FAILED ("14. argv[1] was %s", argv [1]);
  56. if (error != NULL)
  57. return FAILED ("15. error is not null");
  58. g_strfreev (argv);
  59. argv = NULL;
  60. argc = 0;
  61. error = NULL;
  62. ret = g_shell_parse_argv ("hola '' 'bola'", &argc, &argv, &error);
  63. if (!ret)
  64. return FAILED ("16. It should return TRUE");
  65. if (argc != 3)
  66. return FAILED ("17. argc was %d expected 3", argc);
  67. if (strcmp (argv [0], "hola"))
  68. return FAILED ("18. argv[0] was %s", argv [0]);
  69. if (strcmp (argv [1], ""))
  70. return FAILED ("19. argv[2] was %s", argv [1]);
  71. if (strcmp (argv [2], "bola"))
  72. return FAILED ("19. argv[2] was %s", argv [2]);
  73. if (error != NULL)
  74. return FAILED ("20. error is not null");
  75. g_strfreev (argv);
  76. argv = NULL;
  77. argc = 0;
  78. error = NULL;
  79. ret = g_shell_parse_argv ("hola'' bola", &argc, &argv, &error);
  80. if (!ret)
  81. return FAILED ("21. It should return TRUE");
  82. if (argc != 2)
  83. return FAILED ("22. argc was %d expected 2", argc);
  84. if (strcmp (argv [0], "hola"))
  85. return FAILED ("23. argv[0] was %s", argv [0]);
  86. if (strcmp (argv [1], "bola"))
  87. return FAILED ("24. argv[2] was %s", argv [1]);
  88. if (error != NULL)
  89. return FAILED ("25. error is not null");
  90. return OK;
  91. }
  92. RESULT
  93. test_shell_argv2 ()
  94. {
  95. GError *error;
  96. gint argc;
  97. gchar **argv;
  98. gboolean ret;
  99. argv = NULL;
  100. argc = 0;
  101. error = NULL;
  102. ret = g_shell_parse_argv ("hola \"bola\"", &argc, &argv, &error);
  103. if (!ret)
  104. return FAILED ("1. It should return TRUE");
  105. if (argc != 2)
  106. return FAILED ("2. argc was %d expected 2", argc);
  107. if (strcmp (argv [0], "hola"))
  108. return FAILED ("3. argv[0] was %s", argv [0]);
  109. if (strcmp (argv [1], "bola"))
  110. return FAILED ("4. argv[1] was %s", argv [1]);
  111. if (error != NULL)
  112. return FAILED ("5. error is not null");
  113. g_strfreev (argv);
  114. argv = NULL;
  115. argc = 0;
  116. error = NULL;
  117. ret = g_shell_parse_argv ("hola \"\" \"bola \"", &argc, &argv, &error);
  118. if (!ret)
  119. return FAILED ("6. It should return TRUE");
  120. if (argc != 3)
  121. return FAILED ("7. argc was %d expected 3", argc);
  122. if (strcmp (argv [0], "hola"))
  123. return FAILED ("8. argv[0] was %s", argv [0]);
  124. if (strcmp (argv [1], ""))
  125. return FAILED ("9. argv[2] was %s", argv [1]);
  126. if (strcmp (argv [2], "bola "))
  127. return FAILED ("10. argv[2] was %s", argv [2]);
  128. if (error != NULL)
  129. return FAILED ("11. error is not null");
  130. g_strfreev (argv);
  131. argv = NULL;
  132. argc = 0;
  133. error = NULL;
  134. ret = g_shell_parse_argv ("hola\n\t \"\t\" \"bola \"", &argc, &argv, &error);
  135. if (!ret)
  136. return FAILED ("10. It should return TRUE");
  137. if (argc != 3)
  138. return FAILED ("11. argc was %d expected 3", argc);
  139. if (strcmp (argv [0], "hola"))
  140. return FAILED ("12. argv[0] was %s", argv [0]);
  141. if (strcmp (argv [1], "\t"))
  142. return FAILED ("13. argv[2] was %s", argv [1]);
  143. if (strcmp (argv [2], "bola "))
  144. return FAILED ("14. argv[2] was %s", argv [2]);
  145. if (error != NULL)
  146. return FAILED ("15. error is not null");
  147. g_strfreev (argv);
  148. argv = NULL;
  149. argc = 0;
  150. error = NULL;
  151. ret = g_shell_parse_argv ("hola\n\t \\\n \"\t\" \"bola \"", &argc, &argv, &error);
  152. if (!ret)
  153. return FAILED ("16. It should return TRUE");
  154. if (argc != 3)
  155. return FAILED ("17. argc was %d expected 3", argc);
  156. if (strcmp (argv [0], "hola"))
  157. return FAILED ("18. argv[0] was %s", argv [0]);
  158. if (strcmp (argv [1], "\t"))
  159. return FAILED ("19. argv[2] was %s", argv [1]);
  160. if (strcmp (argv [2], "bola "))
  161. return FAILED ("20. argv[2] was %s", argv [2]);
  162. if (error != NULL)
  163. return FAILED ("21. error is not null");
  164. g_strfreev (argv);
  165. return OK;
  166. }
  167. RESULT
  168. test_shell_argv3 ()
  169. {
  170. GError *error;
  171. gint argc;
  172. gchar **argv;
  173. gboolean ret;
  174. argv = NULL;
  175. argc = 0;
  176. error = NULL;
  177. ret = g_shell_parse_argv ("hola \"bola", &argc, &argv, &error);
  178. if (ret)
  179. return FAILED ("1. It should return FALSE");
  180. if (argc != 0)
  181. return FAILED ("2. argc was %d expected 0", argc);
  182. if (argv != NULL)
  183. return FAILED ("3. argv[0] was %s", argv [0]);
  184. if (error == NULL)
  185. return FAILED ("4. error is null");
  186. /* Text ended before matching quote was found for ". (The text was 'hola "bola') */
  187. g_error_free (error);
  188. error = NULL;
  189. ret = g_shell_parse_argv ("hola \\\"bola", &argc, &argv, &error);
  190. if (!ret)
  191. return FAILED ("5. It should return TRUE");
  192. if (argc != 2)
  193. return FAILED ("6. argc was %d expected 2", argc);
  194. if (strcmp (argv [0], "hola"))
  195. return FAILED ("18. argv[0] was %s", argv [0]);
  196. if (strcmp (argv [1], "\"bola"))
  197. return FAILED ("18. argv[1] was %s", argv [1]);
  198. if (error != NULL)
  199. return FAILED ("8. error is not null");
  200. g_strfreev (argv);
  201. argv = NULL;
  202. argc = 0;
  203. ret = g_shell_parse_argv ("hola \"\n\\'bola\"", &argc, &argv, &error);
  204. if (!ret)
  205. return FAILED ("9. It should return TRUE. %s", error->message);
  206. if (argc != 2)
  207. return FAILED ("10. argc was %d expected 2", argc);
  208. if (strcmp (argv [0], "hola"))
  209. return FAILED ("11. argv[0] was %s", argv [0]);
  210. if (strcmp (argv [1], "\n\\'bola"))
  211. return FAILED ("12. argv[1] was %s", argv [1]);
  212. if (error != NULL)
  213. return FAILED ("13. error is not null");
  214. g_strfreev (argv);
  215. argv = NULL;
  216. argc = 0;
  217. return OK;
  218. }
  219. // This was the 2.8 showstopper error
  220. RESULT
  221. test_shell_argv4 ()
  222. {
  223. GError *error;
  224. gint argc;
  225. gchar **argv;
  226. gboolean ret;
  227. char *str = "'/usr/bin/gnome-terminal' -e \"bash -c 'read -p \\\"Press any key to continue...\\\" -n1;'\"";
  228. argv = NULL;
  229. argc = 0;
  230. error = NULL;
  231. ret = g_shell_parse_argv (str, &argc, &argv, &error);
  232. if (!ret)
  233. return FAILED ("1. It should return TRUE");
  234. if (argc != 3)
  235. return FAILED ("2. argc was %d expected 3", argc);
  236. if (argv == NULL)
  237. return FAILED ("3. argv[0] was NULL");
  238. if (error != NULL)
  239. return FAILED ("4. error was set");
  240. if (strcmp (argv [0], "/usr/bin/gnome-terminal"))
  241. return FAILED ("5. Expected /usr/bin/gnome-terminal got %s", argv [0]);
  242. if (strcmp (argv [1], "-e"))
  243. return FAILED ("6. Expected -e, got: %s", argv [1]);
  244. if (strcmp (argv [2], "bash -c 'read -p \"Press any key to continue...\" -n1;'"))
  245. return FAILED ("7. Got unexpected result: %s\n", argv [2]);
  246. return OK;
  247. }
  248. // This is https://bugzilla.novell.com/show_bug.cgi?id=655896
  249. RESULT
  250. test_shell_argv5 ()
  251. {
  252. GError *error;
  253. gint argc;
  254. gchar **argv;
  255. gboolean ret;
  256. char *str = "echo \"foo\",\"bar\"";
  257. argv = NULL;
  258. argc = 0;
  259. error = NULL;
  260. ret = g_shell_parse_argv (str, &argc, &argv, &error);
  261. if (!ret)
  262. return FAILED ("1. It should return TRUE");
  263. if (argc != 2)
  264. return FAILED ("2. argc was %d expected 2", argc);
  265. if (argv == NULL)
  266. return FAILED ("3. argv[0] was NULL");
  267. if (error != NULL)
  268. return FAILED ("4. error was set");
  269. if (strcmp (argv [0], "echo"))
  270. return FAILED ("5. Expected echo got %s", argv [0]);
  271. if (strcmp (argv [1], "foo,bar"))
  272. return FAILED ("6. Expected foo,bar, got: %s", argv [1]);
  273. return OK;
  274. }
  275. RESULT
  276. test_quote ()
  277. {
  278. if (strcmp (g_shell_quote ("foo"), "'foo'"))
  279. return FAILED ("Should return 'foo'");
  280. if (strcmp (g_shell_quote ("foo'bar"), "'foo'\\''bar'"))
  281. return FAILED ("Should return 'foo'\\''bar'");
  282. if (strcmp (g_shell_quote ("foo bar"), "'foo bar'"))
  283. return FAILED ("Should return 'foo bar'");
  284. return OK;
  285. }
  286. static Test shell_tests [] = {
  287. {"test_shell_argv1", test_shell_argv1},
  288. {"test_shell_argv2", test_shell_argv2},
  289. {"test_shell_argv3", test_shell_argv3},
  290. {"test_shell_argv4", test_shell_argv4},
  291. {"test_shell_argv5", test_shell_argv5},
  292. {"g_shell_quote", test_quote},
  293. {NULL, NULL}
  294. };
  295. DEFINE_TEST_GROUP_INIT(shell_tests_init, shell_tests)