parsedepends_test.cc 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #include <apt-pkg/deblistparser.h>
  2. #include <apt-pkg/configuration.h>
  3. #include "assert.h"
  4. int main(int argc,char *argv[]) {
  5. std::string Package;
  6. std::string Version;
  7. unsigned int Op = 5;
  8. unsigned int Null = 0;
  9. bool StripMultiArch = true;
  10. bool ParseArchFlags = false;
  11. _config->Set("APT::Architecture","dsk");
  12. const char* Depends =
  13. "debhelper:any (>= 5.0), "
  14. "libdb-dev:any, "
  15. "gettext:native (<= 0.12), "
  16. "libcurl4-gnutls-dev:native | libcurl3-gnutls-dev (>> 7.15.5), "
  17. "debiandoc-sgml, "
  18. "apt (>= 0.7.25), "
  19. "not-for-me [ !dsk ], "
  20. "only-for-me [ dsk ], "
  21. "any-for-me [ any ], "
  22. "not-for-darwin [ !darwin-any ], "
  23. "cpu-for-me [ any-dsk ], "
  24. "os-for-me [ linux-any ], "
  25. "cpu-not-for-me [ any-amd64 ], "
  26. "os-not-for-me [ kfreebsd-any ], "
  27. "overlord-dev:any (= 7.15.3~) | overlord-dev:native (>> 7.15.5), "
  28. ;
  29. unsigned short runner = 0;
  30. test:
  31. // std::clog << (StripMultiArch ? "NO-Multi" : "Multi") << " " << (ParseArchFlags ? "Flags" : "NO-Flags") << std::endl;
  32. // Stripping MultiArch is currently the default setting to not confuse
  33. // non-MultiArch capable users of the library with "strange" extensions.
  34. const char* Start = Depends;
  35. const char* End = Depends + strlen(Depends);
  36. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  37. if (StripMultiArch == true)
  38. equals("debhelper", Package);
  39. else
  40. equals("debhelper:any", Package);
  41. equals("5.0", Version);
  42. equals(Null | pkgCache::Dep::GreaterEq, Op);
  43. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  44. if (StripMultiArch == true)
  45. equals("libdb-dev", Package);
  46. else
  47. equals("libdb-dev:any", Package);
  48. equals("", Version);
  49. equals(Null | pkgCache::Dep::NoOp, Op);
  50. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  51. if (StripMultiArch == true)
  52. equals("gettext", Package);
  53. else
  54. equals("gettext:native", Package);
  55. equals("0.12", Version);
  56. equals(Null | pkgCache::Dep::LessEq, Op);
  57. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  58. if (StripMultiArch == true)
  59. equals("libcurl4-gnutls-dev", Package);
  60. else
  61. equals("libcurl4-gnutls-dev:native", Package);
  62. equals("", Version);
  63. equals(Null | pkgCache::Dep::Or, Op);
  64. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  65. equals("libcurl3-gnutls-dev", Package);
  66. equals("7.15.5", Version);
  67. equals(Null | pkgCache::Dep::Greater, Op);
  68. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  69. equals("debiandoc-sgml", Package);
  70. equals("", Version);
  71. equals(Null | pkgCache::Dep::NoOp, Op);
  72. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  73. equals("apt", Package);
  74. equals("0.7.25", Version);
  75. equals(Null | pkgCache::Dep::GreaterEq, Op);
  76. if (ParseArchFlags == true) {
  77. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  78. equals("", Package); // not-for-me
  79. } else {
  80. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  81. Start = strstr(Start, ",");
  82. Start++;
  83. }
  84. if (ParseArchFlags == true) {
  85. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  86. equals("only-for-me", Package);
  87. equals("", Version);
  88. equals(Null | pkgCache::Dep::NoOp, Op);
  89. } else {
  90. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  91. Start = strstr(Start, ",");
  92. Start++;
  93. }
  94. if (ParseArchFlags == true) {
  95. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  96. equals("any-for-me", Package);
  97. equals("", Version);
  98. equals(Null | pkgCache::Dep::NoOp, Op);
  99. } else {
  100. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  101. Start = strstr(Start, ",");
  102. Start++;
  103. }
  104. if (ParseArchFlags == true) {
  105. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  106. equals("not-for-darwin", Package);
  107. equals("", Version);
  108. equals(Null | pkgCache::Dep::NoOp, Op);
  109. } else {
  110. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  111. Start = strstr(Start, ",");
  112. Start++;
  113. }
  114. if (ParseArchFlags == true) {
  115. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  116. equals("cpu-for-me", Package);
  117. equals("", Version);
  118. equals(Null | pkgCache::Dep::NoOp, Op);
  119. } else {
  120. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  121. Start = strstr(Start, ",");
  122. Start++;
  123. }
  124. if (ParseArchFlags == true) {
  125. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  126. equals("os-for-me", Package);
  127. equals("", Version);
  128. equals(Null | pkgCache::Dep::NoOp, Op);
  129. } else {
  130. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  131. Start = strstr(Start, ",");
  132. Start++;
  133. }
  134. if (ParseArchFlags == true) {
  135. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  136. equals("", Package); // cpu-not-for-me
  137. } else {
  138. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  139. Start = strstr(Start, ",");
  140. Start++;
  141. }
  142. if (ParseArchFlags == true) {
  143. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  144. equals("", Package); // os-not-for-me
  145. } else {
  146. equals(true, 0 == debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch));
  147. Start = strstr(Start, ",");
  148. Start++;
  149. }
  150. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  151. if (StripMultiArch == true)
  152. equals("overlord-dev", Package);
  153. else
  154. equals("overlord-dev:any", Package);
  155. equals("7.15.3~", Version);
  156. equals(Null | pkgCache::Dep::Equals | pkgCache::Dep::Or, Op);
  157. Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
  158. if (StripMultiArch == true)
  159. equals("overlord-dev", Package);
  160. else
  161. equals("overlord-dev:native", Package);
  162. equals("7.15.5", Version);
  163. equals(Null | pkgCache::Dep::Greater, Op);
  164. if (StripMultiArch == false)
  165. ParseArchFlags = true;
  166. StripMultiArch = !StripMultiArch;
  167. runner++;
  168. if (runner < 4)
  169. goto test; // this is the prove: tests are really evil ;)
  170. return 0;
  171. }