/eglib/test/shell.c

https://github.com/sdether/mono · C · 286 lines · 250 code · 31 blank · 5 comment · 93 complexity · a3767198f5184a470cd558a9fefb2957 MD5 · raw file

  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", 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", 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. return OK;
  79. }
  80. RESULT
  81. test_shell_argv2 ()
  82. {
  83. GError *error;
  84. gint argc;
  85. gchar **argv;
  86. gboolean ret;
  87. argv = NULL;
  88. argc = 0;
  89. error = NULL;
  90. ret = g_shell_parse_argv ("hola \"bola\"", &argc, &argv, &error);
  91. if (!ret)
  92. return FAILED ("1. It should return TRUE");
  93. if (argc != 2)
  94. return FAILED ("2. argc was %d", argc);
  95. if (strcmp (argv [0], "hola"))
  96. return FAILED ("3. argv[0] was %s", argv [0]);
  97. if (strcmp (argv [1], "bola"))
  98. return FAILED ("4. argv[1] was %s", argv [1]);
  99. if (error != NULL)
  100. return FAILED ("5. error is not null");
  101. g_strfreev (argv);
  102. argv = NULL;
  103. argc = 0;
  104. error = NULL;
  105. ret = g_shell_parse_argv ("hola \"\" \"bola \"", &argc, &argv, &error);
  106. if (!ret)
  107. return FAILED ("6. It should return TRUE");
  108. if (argc != 3)
  109. return FAILED ("7. argc was %d", argc);
  110. if (strcmp (argv [0], "hola"))
  111. return FAILED ("8. argv[0] was %s", argv [0]);
  112. if (strcmp (argv [1], ""))
  113. return FAILED ("9. argv[2] was %s", argv [1]);
  114. if (strcmp (argv [2], "bola "))
  115. return FAILED ("10. argv[2] was %s", argv [2]);
  116. if (error != NULL)
  117. return FAILED ("11. error is not null");
  118. g_strfreev (argv);
  119. argv = NULL;
  120. argc = 0;
  121. error = NULL;
  122. ret = g_shell_parse_argv ("hola\n\t \"\t\" \"bola \"", &argc, &argv, &error);
  123. if (!ret)
  124. return FAILED ("10. It should return TRUE");
  125. if (argc != 3)
  126. return FAILED ("11. argc was %d", argc);
  127. if (strcmp (argv [0], "hola"))
  128. return FAILED ("12. argv[0] was %s", argv [0]);
  129. if (strcmp (argv [1], "\t"))
  130. return FAILED ("13. argv[2] was %s", argv [1]);
  131. if (strcmp (argv [2], "bola "))
  132. return FAILED ("14. argv[2] was %s", argv [2]);
  133. if (error != NULL)
  134. return FAILED ("15. error is not null");
  135. g_strfreev (argv);
  136. argv = NULL;
  137. argc = 0;
  138. error = NULL;
  139. ret = g_shell_parse_argv ("hola\n\t \\\n \"\t\" \"bola \"", &argc, &argv, &error);
  140. if (!ret)
  141. return FAILED ("16. It should return TRUE");
  142. if (argc != 3)
  143. return FAILED ("17. argc was %d", argc);
  144. if (strcmp (argv [0], "hola"))
  145. return FAILED ("18. argv[0] was %s", argv [0]);
  146. if (strcmp (argv [1], "\t"))
  147. return FAILED ("19. argv[2] was %s", argv [1]);
  148. if (strcmp (argv [2], "bola "))
  149. return FAILED ("20. argv[2] was %s", argv [2]);
  150. if (error != NULL)
  151. return FAILED ("21. error is not null");
  152. g_strfreev (argv);
  153. return OK;
  154. }
  155. RESULT
  156. test_shell_argv3 ()
  157. {
  158. GError *error;
  159. gint argc;
  160. gchar **argv;
  161. gboolean ret;
  162. argv = NULL;
  163. argc = 0;
  164. error = NULL;
  165. ret = g_shell_parse_argv ("hola \"bola", &argc, &argv, &error);
  166. if (ret)
  167. return FAILED ("1. It should return FALSE");
  168. if (argc != 0)
  169. return FAILED ("2. argc was %d", argc);
  170. if (argv != NULL)
  171. return FAILED ("3. argv[0] was %s", argv [0]);
  172. if (error == NULL)
  173. return FAILED ("4. error is null");
  174. /* Text ended before matching quote was found for ". (The text was 'hola "bola') */
  175. g_error_free (error);
  176. error = NULL;
  177. ret = g_shell_parse_argv ("hola \\\"bola", &argc, &argv, &error);
  178. if (!ret)
  179. return FAILED ("5. It should return TRUE");
  180. if (argc != 2)
  181. return FAILED ("6. argc was %d", argc);
  182. if (strcmp (argv [0], "hola"))
  183. return FAILED ("18. argv[0] was %s", argv [0]);
  184. if (strcmp (argv [1], "\"bola"))
  185. return FAILED ("18. argv[1] was %s", argv [1]);
  186. if (error != NULL)
  187. return FAILED ("8. error is not null");
  188. g_strfreev (argv);
  189. argv = NULL;
  190. argc = 0;
  191. ret = g_shell_parse_argv ("hola \"\n\\'bola\"", &argc, &argv, &error);
  192. if (!ret)
  193. return FAILED ("9. It should return TRUE. %s", error->message);
  194. if (argc != 2)
  195. return FAILED ("10. argc was %d", argc);
  196. if (strcmp (argv [0], "hola"))
  197. return FAILED ("11. argv[0] was %s", argv [0]);
  198. if (strcmp (argv [1], "\n\\'bola"))
  199. return FAILED ("12. argv[1] was %s", argv [1]);
  200. if (error != NULL)
  201. return FAILED ("13. error is not null");
  202. g_strfreev (argv);
  203. argv = NULL;
  204. argc = 0;
  205. return OK;
  206. }
  207. // This was the 2.8 showstopper error
  208. RESULT
  209. test_shell_argv4 ()
  210. {
  211. GError *error;
  212. gint argc;
  213. gchar **argv;
  214. gboolean ret;
  215. char *str = "'/usr/bin/gnome-terminal' -e \"bash -c 'read -p \\\"Press any key to continue...\\\" -n1;'\"";
  216. argv = NULL;
  217. argc = 0;
  218. error = NULL;
  219. ret = g_shell_parse_argv (str, &argc, &argv, &error);
  220. if (!ret)
  221. return FAILED ("1. It should return TRUE");
  222. if (argc != 3)
  223. return FAILED ("2. argc was %d", argc);
  224. if (argv == NULL)
  225. return FAILED ("3. argv[0] was NULL");
  226. if (error != NULL)
  227. return FAILED ("4. error was set");
  228. if (strcmp (argv [0], "/usr/bin/gnome-terminal"))
  229. return FAILED ("5. Expected /usr/bin/gnome-terminal got %s", argv [0]);
  230. if (strcmp (argv [1], "-e"))
  231. return FAILED ("6. Expected -e, got: %s", argv [1]);
  232. if (strcmp (argv [2], "bash -c 'read -p \"Press any key to continue...\" -n1;'"))
  233. return FAILED ("7. Got unexpected result: %s\n", argv [2]);
  234. return OK;
  235. }
  236. RESULT
  237. test_quote ()
  238. {
  239. if (strcmp (g_shell_quote ("foo"), "'foo'"))
  240. return FAILED ("Should return 'foo'");
  241. if (strcmp (g_shell_quote ("foo'bar"), "'foo'\\''bar'"))
  242. return FAILED ("Should return 'foo'\\''bar'");
  243. if (strcmp (g_shell_quote ("foo bar"), "'foo bar'"))
  244. return FAILED ("Should return 'foo bar'");
  245. return OK;
  246. }
  247. static Test shell_tests [] = {
  248. {"g_shell_parse_argv1", test_shell_argv1},
  249. {"g_shell_parse_argv2", test_shell_argv2},
  250. {"g_shell_parse_argv3", test_shell_argv3},
  251. {"g_shell_parse_argv4", test_shell_argv4},
  252. {"g_shell_quote", test_quote},
  253. {NULL, NULL}
  254. };
  255. DEFINE_TEST_GROUP_INIT(shell_tests_init, shell_tests)