tagsection_test.cc 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. #include <config.h>
  2. #include <apt-pkg/fileutl.h>
  3. #include <apt-pkg/tagfile.h>
  4. #include <string>
  5. #include <sstream>
  6. #include <gtest/gtest.h>
  7. #include "file-helpers.h"
  8. std::string packageValue = "aaaa";
  9. std::string typoValue = "aa\n"
  10. " .\n"
  11. " cc";
  12. std::string typoRawValue = "\n " + typoValue;
  13. std::string overrideValue = "1";
  14. /*
  15. std::cerr << "FILECONTENT: »";
  16. char buffer[3000];
  17. while (fd.ReadLine(buffer, sizeof(buffer)))
  18. std::cerr << buffer;
  19. std::cerr << "«" << std::endl;;
  20. */
  21. static void setupTestcaseStart(FileFd &fd, pkgTagSection &section, std::string &content)
  22. {
  23. createTemporaryFile("writesection", fd, NULL, NULL);
  24. content = "Package: " + packageValue + "\n"
  25. "TypoA:\n " + typoValue + "\n"
  26. "Override: " + overrideValue + "\n"
  27. "Override-Backup: " + overrideValue + "\n"
  28. "\n";
  29. EXPECT_TRUE(section.Scan(content.c_str(), content.length(), true));
  30. EXPECT_TRUE(section.Exists("Package"));
  31. EXPECT_TRUE(section.Exists("TypoA"));
  32. EXPECT_TRUE(section.Exists("Override"));
  33. EXPECT_TRUE(section.Exists("Override-Backup"));
  34. EXPECT_FALSE(section.Exists("TypoB"));
  35. EXPECT_EQ(packageValue, section.FindS("Package"));
  36. EXPECT_EQ(typoValue, section.FindS("TypoA"));
  37. EXPECT_EQ(typoRawValue, section.FindRawS("TypoA"));
  38. EXPECT_EQ(1, section.FindI("Override"));
  39. EXPECT_EQ(1, section.FindI("Override-Backup"));
  40. EXPECT_EQ(4, section.Count());
  41. }
  42. TEST(TagSectionTest,WriteUnmodified)
  43. {
  44. FileFd fd;
  45. pkgTagSection section;
  46. std::string content;
  47. setupTestcaseStart(fd, section, content);
  48. EXPECT_TRUE(section.Write(fd));
  49. EXPECT_TRUE(fd.Seek(0));
  50. pkgTagFile tfile(&fd);
  51. ASSERT_TRUE(tfile.Step(section));
  52. EXPECT_TRUE(section.Exists("Package"));
  53. EXPECT_TRUE(section.Exists("TypoA"));
  54. EXPECT_TRUE(section.Exists("Override"));
  55. EXPECT_TRUE(section.Exists("Override-Backup"));
  56. EXPECT_FALSE(section.Exists("TypoB"));
  57. EXPECT_EQ(packageValue, section.FindS("Package"));
  58. EXPECT_EQ(typoValue, section.FindS("TypoA"));
  59. EXPECT_EQ(1, section.FindI("Override"));
  60. EXPECT_EQ(1, section.FindI("Override-Backup"));
  61. EXPECT_EQ(4, section.Count());
  62. }
  63. TEST(TagSectionTest,WriteUnmodifiedOrder)
  64. {
  65. FileFd fd;
  66. pkgTagSection section;
  67. std::string content;
  68. setupTestcaseStart(fd, section, content);
  69. char const * const order[] = { "Package", "TypoA", "Override", NULL };
  70. EXPECT_TRUE(section.Write(fd, order));
  71. EXPECT_TRUE(fd.Seek(0));
  72. pkgTagFile tfile(&fd);
  73. ASSERT_TRUE(tfile.Step(section));
  74. EXPECT_TRUE(section.Exists("Package"));
  75. EXPECT_TRUE(section.Exists("TypoA"));
  76. EXPECT_TRUE(section.Exists("Override"));
  77. EXPECT_TRUE(section.Exists("Override-Backup"));
  78. EXPECT_FALSE(section.Exists("TypoB"));
  79. EXPECT_EQ(packageValue, section.FindS("Package"));
  80. EXPECT_EQ(typoValue, section.FindS("TypoA"));
  81. EXPECT_EQ(1, section.FindI("Override"));
  82. EXPECT_EQ(1, section.FindI("Override-Backup"));
  83. EXPECT_EQ(4, section.Count());
  84. }
  85. TEST(TagSectionTest,WriteUnmodifiedOrderReversed)
  86. {
  87. FileFd fd;
  88. pkgTagSection section;
  89. std::string content;
  90. setupTestcaseStart(fd, section, content);
  91. char const * const order[] = { "Override", "TypoA", "Package", NULL };
  92. EXPECT_TRUE(section.Write(fd, order));
  93. EXPECT_TRUE(fd.Seek(0));
  94. pkgTagFile tfile(&fd);
  95. ASSERT_TRUE(tfile.Step(section));
  96. EXPECT_TRUE(section.Exists("Package"));
  97. EXPECT_TRUE(section.Exists("TypoA"));
  98. EXPECT_TRUE(section.Exists("Override"));
  99. EXPECT_TRUE(section.Exists("Override-Backup"));
  100. EXPECT_FALSE(section.Exists("TypoB"));
  101. EXPECT_EQ(packageValue, section.FindS("Package"));
  102. EXPECT_EQ(typoValue, section.FindS("TypoA"));
  103. EXPECT_EQ(1, section.FindI("Override"));
  104. EXPECT_EQ(1, section.FindI("Override-Backup"));
  105. EXPECT_EQ(4, section.Count());
  106. }
  107. TEST(TagSectionTest,WriteUnmodifiedOrderNotAll)
  108. {
  109. FileFd fd;
  110. pkgTagSection section;
  111. std::string content;
  112. setupTestcaseStart(fd, section, content);
  113. char const * const order[] = { "Override", NULL };
  114. EXPECT_TRUE(section.Write(fd, order));
  115. EXPECT_TRUE(fd.Seek(0));
  116. pkgTagFile tfile(&fd);
  117. ASSERT_TRUE(tfile.Step(section));
  118. EXPECT_TRUE(section.Exists("Package"));
  119. EXPECT_TRUE(section.Exists("TypoA"));
  120. EXPECT_TRUE(section.Exists("Override"));
  121. EXPECT_TRUE(section.Exists("Override-Backup"));
  122. EXPECT_FALSE(section.Exists("TypoB"));
  123. EXPECT_EQ(packageValue, section.FindS("Package"));
  124. EXPECT_EQ(typoValue, section.FindS("TypoA"));
  125. EXPECT_EQ(1, section.FindI("Override"));
  126. EXPECT_EQ(1, section.FindI("Override-Backup"));
  127. EXPECT_EQ(4, section.Count());
  128. }
  129. TEST(TagSectionTest,WriteNoOrderRename)
  130. {
  131. FileFd fd;
  132. pkgTagSection section;
  133. std::string content;
  134. setupTestcaseStart(fd, section, content);
  135. std::vector<pkgTagSection::Tag> rewrite;
  136. rewrite.push_back(pkgTagSection::Tag::Rename("TypoA", "TypoB"));
  137. EXPECT_TRUE(section.Write(fd, NULL, rewrite));
  138. EXPECT_TRUE(fd.Seek(0));
  139. pkgTagFile tfile(&fd);
  140. ASSERT_TRUE(tfile.Step(section));
  141. EXPECT_TRUE(section.Exists("Package"));
  142. EXPECT_FALSE(section.Exists("TypoA"));
  143. EXPECT_TRUE(section.Exists("TypoB"));
  144. EXPECT_TRUE(section.Exists("Override"));
  145. EXPECT_TRUE(section.Exists("Override-Backup"));
  146. EXPECT_EQ(packageValue, section.FindS("Package"));
  147. EXPECT_EQ(typoValue, section.FindS("TypoB"));
  148. EXPECT_EQ(1, section.FindI("Override"));
  149. EXPECT_EQ(1, section.FindI("Override-Backup"));
  150. EXPECT_EQ(4, section.Count());
  151. }
  152. TEST(TagSectionTest,WriteNoOrderRemove)
  153. {
  154. FileFd fd;
  155. pkgTagSection section;
  156. std::string content;
  157. setupTestcaseStart(fd, section, content);
  158. std::vector<pkgTagSection::Tag> rewrite;
  159. rewrite.push_back(pkgTagSection::Tag::Remove("TypoA"));
  160. rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", ""));
  161. EXPECT_TRUE(section.Write(fd, NULL, rewrite));
  162. EXPECT_TRUE(fd.Seek(0));
  163. pkgTagFile tfile(&fd);
  164. ASSERT_TRUE(tfile.Step(section));
  165. EXPECT_TRUE(section.Exists("Package"));
  166. EXPECT_FALSE(section.Exists("TypoA"));
  167. EXPECT_FALSE(section.Exists("TypoB"));
  168. EXPECT_FALSE(section.Exists("Override"));
  169. EXPECT_TRUE(section.Exists("Override-Backup"));
  170. EXPECT_EQ(packageValue, section.FindS("Package"));
  171. EXPECT_EQ(2, section.Count());
  172. }
  173. TEST(TagSectionTest,WriteNoOrderRewrite)
  174. {
  175. FileFd fd;
  176. pkgTagSection section;
  177. std::string content;
  178. setupTestcaseStart(fd, section, content);
  179. std::vector<pkgTagSection::Tag> rewrite;
  180. rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", "42"));
  181. EXPECT_TRUE(section.Write(fd, NULL, rewrite));
  182. EXPECT_TRUE(fd.Seek(0));
  183. pkgTagFile tfile(&fd);
  184. ASSERT_TRUE(tfile.Step(section));
  185. EXPECT_TRUE(section.Exists("Package"));
  186. EXPECT_TRUE(section.Exists("TypoA"));
  187. EXPECT_FALSE(section.Exists("TypoB"));
  188. EXPECT_TRUE(section.Exists("Override"));
  189. EXPECT_TRUE(section.Exists("Override-Backup"));
  190. EXPECT_EQ(packageValue, section.FindS("Package"));
  191. EXPECT_EQ(42, section.FindI("Override"));
  192. EXPECT_EQ(1, section.FindI("Override-Backup"));
  193. EXPECT_EQ(4, section.Count());
  194. }
  195. TEST(TagSectionTest,WriteOrderRename)
  196. {
  197. FileFd fd;
  198. pkgTagSection section;
  199. std::string content;
  200. setupTestcaseStart(fd, section, content);
  201. std::vector<pkgTagSection::Tag> rewrite;
  202. rewrite.push_back(pkgTagSection::Tag::Rename("TypoA", "TypoB"));
  203. char const * const order[] = { "Package", "TypoA", "Override", NULL };
  204. EXPECT_TRUE(section.Write(fd, order, rewrite));
  205. EXPECT_TRUE(fd.Seek(0));
  206. pkgTagFile tfile(&fd);
  207. ASSERT_TRUE(tfile.Step(section));
  208. EXPECT_TRUE(section.Exists("Package"));
  209. EXPECT_FALSE(section.Exists("TypoA"));
  210. EXPECT_TRUE(section.Exists("TypoB"));
  211. EXPECT_TRUE(section.Exists("Override"));
  212. EXPECT_TRUE(section.Exists("Override-Backup"));
  213. EXPECT_EQ(packageValue, section.FindS("Package"));
  214. EXPECT_EQ(typoValue, section.FindS("TypoB"));
  215. EXPECT_EQ(1, section.FindI("Override"));
  216. EXPECT_EQ(1, section.FindI("Override-Backup"));
  217. EXPECT_EQ(4, section.Count());
  218. }
  219. TEST(TagSectionTest,WriteOrderRemove)
  220. {
  221. FileFd fd;
  222. pkgTagSection section;
  223. std::string content;
  224. setupTestcaseStart(fd, section, content);
  225. std::vector<pkgTagSection::Tag> rewrite;
  226. rewrite.push_back(pkgTagSection::Tag::Remove("TypoA"));
  227. rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", ""));
  228. char const * const order[] = { "Package", "TypoA", "Override", NULL };
  229. EXPECT_TRUE(section.Write(fd, order, rewrite));
  230. EXPECT_TRUE(fd.Seek(0));
  231. pkgTagFile tfile(&fd);
  232. ASSERT_TRUE(tfile.Step(section));
  233. EXPECT_TRUE(section.Exists("Package"));
  234. EXPECT_FALSE(section.Exists("TypoA"));
  235. EXPECT_FALSE(section.Exists("TypoB"));
  236. EXPECT_FALSE(section.Exists("Override"));
  237. EXPECT_TRUE(section.Exists("Override-Backup"));
  238. EXPECT_EQ(packageValue, section.FindS("Package"));
  239. EXPECT_EQ(1, section.FindI("Override-Backup"));
  240. EXPECT_EQ(2, section.Count());
  241. }
  242. TEST(TagSectionTest,WriteOrderRewrite)
  243. {
  244. FileFd fd;
  245. pkgTagSection section;
  246. std::string content;
  247. setupTestcaseStart(fd, section, content);
  248. std::vector<pkgTagSection::Tag> rewrite;
  249. rewrite.push_back(pkgTagSection::Tag::Rewrite("Override", "42"));
  250. char const * const order[] = { "Package", "TypoA", "Override", NULL };
  251. EXPECT_TRUE(section.Write(fd, order, rewrite));
  252. EXPECT_TRUE(fd.Seek(0));
  253. pkgTagFile tfile(&fd);
  254. ASSERT_TRUE(tfile.Step(section));
  255. EXPECT_TRUE(section.Exists("Package"));
  256. EXPECT_TRUE(section.Exists("TypoA"));
  257. EXPECT_FALSE(section.Exists("TypoB"));
  258. EXPECT_TRUE(section.Exists("Override"));
  259. EXPECT_TRUE(section.Exists("Override-Backup"));
  260. EXPECT_EQ(packageValue, section.FindS("Package"));
  261. EXPECT_EQ(42, section.FindI("Override"));
  262. EXPECT_EQ(1, section.FindI("Override-Backup"));
  263. EXPECT_EQ(4, section.Count());
  264. }