cmp_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package version
  5. import (
  6. "testing"
  7. "github.com/google/go-cmp/cmp"
  8. "tailscale.com/tstest"
  9. )
  10. func TestParse(t *testing.T) {
  11. tests := []struct {
  12. version string
  13. parsed parsed
  14. want bool
  15. }{
  16. {"1", parsed{Major: 1}, true},
  17. {"1.2", parsed{Major: 1, Minor: 2}, true},
  18. {"1.2.3", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  19. {"1.2.3-4", parsed{Major: 1, Minor: 2, Patch: 3, ExtraCommits: 4}, true},
  20. {"1.2-4", parsed{Major: 1, Minor: 2, ExtraCommits: 4}, true},
  21. {"1.2.3-4-extra", parsed{Major: 1, Minor: 2, Patch: 3, ExtraCommits: 4}, true},
  22. {"1.2.3-4a-test", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  23. {"1.2-extra", parsed{Major: 1, Minor: 2}, true},
  24. {"1.2.3-extra", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  25. {"date.20200612", parsed{Datestamp: 20200612}, true},
  26. {"borkbork", parsed{}, false},
  27. {"1a.2.3", parsed{}, false},
  28. {"", parsed{}, false},
  29. }
  30. for _, test := range tests {
  31. gotParsed, got := parse(test.version)
  32. if got != test.want {
  33. t.Errorf("version(%q) = %v, want %v", test.version, got, test.want)
  34. }
  35. if diff := cmp.Diff(gotParsed, test.parsed); diff != "" {
  36. t.Errorf("parse(%q) diff (-got+want):\n%s", test.version, diff)
  37. }
  38. err := tstest.MinAllocsPerRun(t, 0, func() {
  39. gotParsed, got = parse(test.version)
  40. })
  41. if err != nil {
  42. t.Errorf("parse(%q): %v", test.version, err)
  43. }
  44. }
  45. }
  46. func TestAtLeast(t *testing.T) {
  47. tests := []struct {
  48. v, m string
  49. want bool
  50. }{
  51. {"1", "1", true},
  52. {"1.2", "1", true},
  53. {"1.2.3", "1", true},
  54. {"1.2.3-4", "1", true},
  55. {"0.98-0", "0.98", true},
  56. {"0.97.1-216", "0.98", false},
  57. {"0.94", "0.98", false},
  58. {"0.98", "0.98", true},
  59. {"0.98.0-0", "0.98", true},
  60. {"1.2.3-4", "1.2.4-4", false},
  61. {"1.2.3-4", "1.2.3-4", true},
  62. {"date.20200612", "date.20200612", true},
  63. {"date.20200701", "date.20200612", true},
  64. {"date.20200501", "date.20200612", false},
  65. }
  66. for _, test := range tests {
  67. got := AtLeast(test.v, test.m)
  68. if got != test.want {
  69. t.Errorf("AtLeast(%q, %q) = %v, want %v", test.v, test.m, got, test.want)
  70. }
  71. }
  72. }