test_opts1.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*****************************************************************************
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 3 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. *****************************************************************************/
  17. #include "common.h"
  18. #include "utils_base.h"
  19. #include "extra_opts.h"
  20. #include "tap.h"
  21. void my_free(int *argc, char **argv) {
  22. int i;
  23. printf (" Arg(%i): ", *argc);
  24. for (i=1; i<*argc; i++) printf ("'%s' ", argv[i]);
  25. printf ("\n");
  26. free(argv);
  27. *argc=0;
  28. }
  29. int array_diff(int i1, char **a1, int i2, char **a2) {
  30. int i;
  31. if (i1 != i2) {
  32. printf(" Argument count doesn't match!\n");
  33. return 0;
  34. }
  35. for (i=0; i<=i1; i++) {
  36. if (a1[i]==NULL && a2[i]==NULL) continue;
  37. if (a1[i]==NULL || a2[i]==NULL) {
  38. printf(" Argument # %i null in one array!\n", i);
  39. return 0;
  40. }
  41. if (strcmp(a1[i], a2[i])) {
  42. printf(" Argument # %i doesn't match!\n", i);
  43. return 0;
  44. }
  45. }
  46. return 1;
  47. }
  48. int
  49. main (int argc, char **argv)
  50. {
  51. char **argv_test=NULL, **argv_known=NULL;
  52. int i, argc_test;
  53. plan_tests(5);
  54. argv_test=(char **)malloc(2*sizeof(char **));
  55. argv_test[0] = "prog_name";
  56. argv_test[1] = NULL;
  57. argc_test=1;
  58. argv_known=(char **)realloc(argv_known, 2*sizeof(char **));
  59. argv_known[0] = "prog_name";
  60. argv_known[1] = NULL;
  61. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  62. ok(array_diff(argc_test, argv_test, 1, argv_known), "No opts, returns correct argv/argc");
  63. my_free(&argc_test, argv_test);
  64. argv_test=(char **)malloc(6*sizeof(char **));
  65. argv_test[0] = "prog_name";
  66. argv_test[1] = "arg1";
  67. argv_test[2] = "--arg2=val1";
  68. argv_test[3] = "--arg3";
  69. argv_test[4] = "val2";
  70. argv_test[5] = NULL;
  71. argc_test=5;
  72. argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
  73. argv_known[0] = "prog_name";
  74. argv_known[1] = "arg1";
  75. argv_known[2] = "--arg2=val1";
  76. argv_known[3] = "--arg3";
  77. argv_known[4] = "val2";
  78. argv_known[5] = NULL;
  79. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  80. ok(array_diff(argc_test, argv_test, 5, argv_known), "No extra opts, verbatim copy of argv");
  81. my_free(&argc_test,argv_test);
  82. argv_test=(char **)malloc(3*sizeof(char **));
  83. argv_test[0] = "prog_name";
  84. argv_test[1] = "--extra-opts=@./config-opts.ini";
  85. argv_test[2] = NULL;
  86. argc_test=2;
  87. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  88. argv_known[0] = "prog_name";
  89. argv_known[1] = "--foo=Bar";
  90. argv_known[2] = "--this=Your Mother!";
  91. argv_known[3] = "--blank";
  92. argv_known[4] = NULL;
  93. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  94. ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts using default section");
  95. my_free(&argc_test,argv_test);
  96. argv_test=(char **)malloc(5*sizeof(char **));
  97. argv_test[0] = "prog_name";
  98. argv_test[1] = "--extra-opts=sect1@./config-opts.ini";
  99. argv_test[2] = "--extra-opts";
  100. argv_test[3] = "sect2@./config-opts.ini";
  101. argv_test[4] = NULL;
  102. argc_test=4;
  103. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  104. argv_known[0] = "prog_name";
  105. argv_known[1] = "--one=two";
  106. argv_known[2] = "--something else=oops";
  107. argv_known[3] = "--this=that";
  108. argv_known[4] = NULL;
  109. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  110. ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts specified twice");
  111. my_free(&argc_test,argv_test);
  112. argv_test=(char **)malloc(7*sizeof(char **));
  113. argv_test[0] = "prog_name";
  114. argv_test[1] = "--arg1=val1";
  115. argv_test[2] = "--extra-opts=@./config-opts.ini";
  116. argv_test[3] = "--extra-opts";
  117. argv_test[4] = "sect1@./config-opts.ini";
  118. argv_test[5] = "--arg2";
  119. argv_test[6] = NULL;
  120. argc_test=6;
  121. argv_known=(char **)realloc(argv_known, 8*sizeof(char **));
  122. argv_known[0] = "prog_name";
  123. argv_known[1] = "--foo=Bar";
  124. argv_known[2] = "--this=Your Mother!";
  125. argv_known[3] = "--blank";
  126. argv_known[4] = "--one=two";
  127. argv_known[5] = "--arg1=val1";
  128. argv_known[6] = "--arg2";
  129. argv_known[7] = NULL;
  130. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  131. ok(array_diff(argc_test, argv_test, 7, argv_known), "twice extra opts using two sections");
  132. my_free(&argc_test,argv_test);
  133. return exit_status();
  134. }