pkgbuild_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package pkgbuild
  2. import "testing"
  3. // Test version parsing
  4. func TestVersionParsing(t *testing.T) {
  5. versions := map[string]bool{
  6. "1.0beta": true,
  7. "1.0.0.0.2": true,
  8. "a.3_4": true,
  9. "A.2": true,
  10. "_1.2": false,
  11. ".2": false,
  12. "a.2Ø": false,
  13. "1.?": false,
  14. "1.-": false,
  15. }
  16. for version, valid := range versions {
  17. _, err := parseVersion(version)
  18. if err != nil && valid {
  19. t.Errorf("Version string '%s' should parse", version)
  20. }
  21. if err == nil && !valid {
  22. t.Errorf("Version string '%s' should not parse", version)
  23. }
  24. }
  25. }
  26. // Test complete-version parsing
  27. func TestCompleteVersionParsing(t *testing.T) {
  28. versions := map[string]*CompleteVersion{
  29. "1:1.0beta": &CompleteVersion{Version("1.0beta"), 1, 0},
  30. "1.0": &CompleteVersion{Version("1.0"), 0, 0},
  31. "2.3-2": &CompleteVersion{Version("2.3"), 0, 2},
  32. "1::": nil,
  33. "4.3--1": nil,
  34. "4.1-a": nil,
  35. "f:2.3": nil,
  36. "1.?": nil,
  37. }
  38. for version, expected := range versions {
  39. ver, err := NewCompleteVersion(version)
  40. if err != nil && expected != nil {
  41. t.Errorf("CompleteVersion string '%s' should not parse", version)
  42. }
  43. if err == nil && expected != nil {
  44. if ver.Version != expected.Version || ver.Epoch != expected.Epoch || ver.Pkgrel != expected.Pkgrel {
  45. t.Errorf("CompleteVersion string '%s' should parse", version)
  46. }
  47. }
  48. }
  49. }
  50. // Test Newer method
  51. func TestNewer(t *testing.T) {
  52. a := &PKGBUILD{
  53. Epoch: 0,
  54. Pkgver: Version("1.0"),
  55. Pkgrel: 1,
  56. }
  57. b := &PKGBUILD{
  58. Epoch: 0,
  59. Pkgver: Version("2.0"),
  60. Pkgrel: 1,
  61. }
  62. c := &PKGBUILD{
  63. Epoch: 1,
  64. Pkgver: Version("1.0"),
  65. Pkgrel: 1,
  66. }
  67. d := &PKGBUILD{
  68. Epoch: 0,
  69. Pkgver: Version("1.0"),
  70. Pkgrel: 2,
  71. }
  72. if a.Newer(b) {
  73. t.Errorf("a (%s) should not be newer than b (%s)", a.Version(), b.Version())
  74. }
  75. if b.Newer(c) {
  76. t.Errorf("b (%s) should not be newer than c (%s)", b.Version(), c.Version())
  77. }
  78. if a.Newer(d) {
  79. t.Errorf("a (%s) should not be newer than d (%s)", a.Version(), d.Version())
  80. }
  81. if a.Newer(a) {
  82. t.Errorf("a (%s) should not be newer than itself", a.Version())
  83. }
  84. }
  85. // Test Older method
  86. func TestOlder(t *testing.T) {
  87. a := &PKGBUILD{
  88. Epoch: 0,
  89. Pkgver: Version("1.0"),
  90. Pkgrel: 1,
  91. }
  92. b := &PKGBUILD{
  93. Epoch: 0,
  94. Pkgver: Version("2.0"),
  95. Pkgrel: 1,
  96. }
  97. c := &PKGBUILD{
  98. Epoch: 1,
  99. Pkgver: Version("1.0"),
  100. Pkgrel: 1,
  101. }
  102. d := &PKGBUILD{
  103. Epoch: 0,
  104. Pkgver: Version("1.0"),
  105. Pkgrel: 2,
  106. }
  107. if !a.Older(b) {
  108. t.Errorf("a (%s) should be older than b (%s)", a.Version(), b.Version())
  109. }
  110. if !b.Older(c) {
  111. t.Errorf("b (%s) should be older than c (%s)", b.Version(), c.Version())
  112. }
  113. if !a.Older(d) {
  114. t.Errorf("a (%s) should be older than d (%s)", a.Version(), d.Version())
  115. }
  116. if d.Older(d) {
  117. t.Errorf("d (%s) should not be older than itself", d.Version())
  118. }
  119. }
  120. // Test Version method
  121. func TestVersionMethod(t *testing.T) {
  122. a := &PKGBUILD{
  123. Epoch: 0,
  124. Pkgver: Version("1.0"),
  125. Pkgrel: 1,
  126. }
  127. version := "1.0-1"
  128. if a.Version() != version {
  129. t.Errorf("a (%s) should be %s", a.Version(), version)
  130. }
  131. b := &PKGBUILD{
  132. Epoch: 4,
  133. Pkgver: Version("1.0"),
  134. Pkgrel: 1,
  135. }
  136. version = "4:1.0-1"
  137. if b.Version() != version {
  138. t.Errorf("a (%s) should be %s", b.Version(), version)
  139. }
  140. }
  141. // Test random SRCINFO files based on pkgbuilds from Arch core
  142. func TestRandomCoreSRCINFOs(t *testing.T) {
  143. srcinfos := []string{
  144. "sudo",
  145. "pacman",
  146. "openssh",
  147. "grub",
  148. "glibc",
  149. "systemd",
  150. "linux",
  151. }
  152. for _, srcinfo := range srcinfos {
  153. path := "./test_pkgbuilds/SRCINFO_" + srcinfo
  154. pkg, err := ParseSRCINFO(path)
  155. if err != nil {
  156. t.Errorf("PKGBUILD for %s did not parse: %s", srcinfo, err.Error())
  157. }
  158. if pkg.Pkgbase != srcinfo {
  159. t.Errorf("pkgbase for %s should be %s", srcinfo, pkg.Pkgbase)
  160. }
  161. }
  162. }
  163. func TestParseDependency(t *testing.T) {
  164. deps := make([]*Dependency, 0)
  165. _, err := parseDependency("linux-mainline-headers<4.6rc1", deps)
  166. if err != nil {
  167. t.Errorf("could not parse dependency %s: %s", "bla", err.Error())
  168. }
  169. _, err = parseDependency("linux-mainline-headers<=4.6rc1", deps)
  170. if err != nil {
  171. t.Errorf("could not parse dependency %s: %s", "bla", err.Error())
  172. }
  173. _, err = parseDependency("linux-mainline-headers>=4.6rc1", deps)
  174. if err != nil {
  175. t.Errorf("could not parse dependency %s: %s", "bla", err.Error())
  176. }
  177. _, err = parseDependency("linux-mainline-headers==4.6rc1", deps)
  178. if err != nil {
  179. t.Errorf("could not parse dependency %s: %s", "bla", err.Error())
  180. }
  181. }