test_lintian.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #! /usr/bin/env python3
  2. import unittest
  3. from base_test import DakTestCase
  4. from daklib.lintian import generate_reject_messages, parse_lintian_output
  5. class ParseLintianTestCase(DakTestCase):
  6. def assertParse(self, output, expected):
  7. self.assertEqual(
  8. list(parse_lintian_output(output)),
  9. expected,
  10. )
  11. def testSimple(self):
  12. self.assertParse(
  13. "W: pkgname: some-tag path/to/file",
  14. [
  15. {
  16. "level": "W",
  17. "package": "pkgname",
  18. "tag": "some-tag",
  19. "description": "path/to/file",
  20. }
  21. ],
  22. )
  23. self.assertParse("", [])
  24. self.assertParse("\n\n", [])
  25. self.assertParse("dummy error test", [])
  26. def testBinaryNoDescription(self):
  27. self.assertParse(
  28. "W: pkgname: some-tag",
  29. [
  30. {
  31. "level": "W",
  32. "package": "pkgname",
  33. "tag": "some-tag",
  34. "description": "",
  35. }
  36. ],
  37. )
  38. def testSource(self):
  39. self.assertParse(
  40. "W: pkgname source: some-tag",
  41. [
  42. {
  43. "level": "W",
  44. "package": "pkgname source",
  45. "tag": "some-tag",
  46. "description": "",
  47. }
  48. ],
  49. )
  50. def testSourceNoDescription(self):
  51. self.assertParse(
  52. "W: pkgname source: some-tag path/to/file",
  53. [
  54. {
  55. "level": "W",
  56. "package": "pkgname source",
  57. "tag": "some-tag",
  58. "description": "path/to/file",
  59. }
  60. ],
  61. )
  62. class GenerateRejectMessages(DakTestCase):
  63. def assertNumReject(self, input, defs, num):
  64. msgs = list(generate_reject_messages(input, defs))
  65. self.assertEqual(len(msgs), num)
  66. def testUnknownTag(self):
  67. self.assertNumReject(
  68. [
  69. {
  70. "level": "W",
  71. "package": "pkgname",
  72. "tag": "unknown-tag",
  73. "description": "",
  74. }
  75. ],
  76. {"fatal": ["known-tag"], "nonfatal": []},
  77. 0,
  78. )
  79. def testFatalTags(self):
  80. self.assertNumReject(
  81. [
  82. {
  83. "level": "W",
  84. "package": "pkgname",
  85. "tag": "fatal-tag-1",
  86. "description": "",
  87. },
  88. {
  89. "level": "W",
  90. "package": "pkgname",
  91. "tag": "fatal-tag-2",
  92. "description": "",
  93. },
  94. ],
  95. {"fatal": ["fatal-tag-1", "fatal-tag-2"], "nonfatal": []},
  96. 2,
  97. )
  98. def testMixture(self):
  99. self.assertNumReject(
  100. [
  101. {
  102. "level": "W",
  103. "package": "pkgname",
  104. "tag": "fatal-tag",
  105. "description": "",
  106. },
  107. {
  108. "level": "W",
  109. "package": "pkgname",
  110. "tag": "unknown-tag",
  111. "description": "",
  112. },
  113. ],
  114. {"fatal": ["fatal-tag"], "nonfatal": []},
  115. 1,
  116. )
  117. def testOverridable(self):
  118. self.assertNumReject(
  119. [
  120. {
  121. "level": "W",
  122. "package": "pkgname",
  123. "tag": "non-fatal-tag",
  124. "description": "",
  125. }
  126. ],
  127. {"fatal": [], "nonfatal": ["non-fatal-tag"]},
  128. 1 + 1, # We add an extra 'reject' hint message
  129. )
  130. def testOverrideAllowed(self):
  131. self.assertNumReject(
  132. [
  133. {
  134. "level": "O",
  135. "package": "pkgname",
  136. "tag": "non-fatal-tag",
  137. "description": "",
  138. }
  139. ],
  140. {"fatal": [], "nonfatal": ["non-fatal-tag"]},
  141. 0,
  142. )
  143. def testOverrideNotAllowed(self):
  144. self.assertNumReject(
  145. [
  146. {
  147. "level": "O",
  148. "package": "pkgname",
  149. "tag": "fatal-tag",
  150. "description": "",
  151. }
  152. ],
  153. {"fatal": ["fatal-tag"], "nonfatal": []},
  154. 1,
  155. )
  156. if __name__ == "__main__":
  157. unittest.main()