messagediff_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package messagediff
  2. import (
  3. "testing"
  4. "time"
  5. )
  6. type testStruct struct {
  7. A, b int
  8. C []int
  9. }
  10. func TestPrettyDiff(t *testing.T) {
  11. testData := []struct {
  12. a, b interface{}
  13. diff string
  14. equal bool
  15. }{
  16. {
  17. true,
  18. false,
  19. "modified: = false\n",
  20. false,
  21. },
  22. {
  23. true,
  24. 0,
  25. "modified: = 0\n",
  26. false,
  27. },
  28. {
  29. []int{0, 1, 2},
  30. []int{0, 1, 2, 3},
  31. "added: [3] = 3\n",
  32. false,
  33. },
  34. {
  35. []int{0, 1, 2, 3},
  36. []int{0, 1, 2},
  37. "removed: [3] = 3\n",
  38. false,
  39. },
  40. {
  41. []int{0},
  42. []int{1},
  43. "modified: [0] = 1\n",
  44. false,
  45. },
  46. {
  47. &[]int{0},
  48. &[]int{1},
  49. "modified: [0] = 1\n",
  50. false,
  51. },
  52. {
  53. map[string]int{"a": 1, "b": 2},
  54. map[string]int{"b": 4, "c": 3},
  55. "added: [\"c\"] = 3\nmodified: [\"b\"] = 4\nremoved: [\"a\"] = 1\n",
  56. false,
  57. },
  58. {
  59. testStruct{1, 2, []int{1}},
  60. testStruct{1, 3, []int{1, 2}},
  61. "added: .C[1] = 2\nmodified: .b = 3\n",
  62. false,
  63. },
  64. {
  65. nil,
  66. nil,
  67. "",
  68. true,
  69. },
  70. {
  71. &time.Time{},
  72. nil,
  73. "modified: = <nil>\n",
  74. false,
  75. },
  76. {
  77. time.Time{},
  78. time.Time{},
  79. "",
  80. true,
  81. },
  82. {
  83. time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC),
  84. time.Time{},
  85. "modified: .loc = (*time.Location)(nil)\nmodified: .sec = 0\n",
  86. false,
  87. },
  88. }
  89. for i, td := range testData {
  90. diff, equal := PrettyDiff(td.a, td.b)
  91. if diff != td.diff {
  92. t.Errorf("%d. PrettyDiff(%#v, %#v) diff = %#v; not %#v", i, td.a, td.b, diff, td.diff)
  93. }
  94. if equal != td.equal {
  95. t.Errorf("%d. PrettyDiff(%#v, %#v) equal = %#v; not %#v", i, td.a, td.b, equal, td.equal)
  96. }
  97. }
  98. }
  99. func TestPathString(t *testing.T) {
  100. testData := []struct {
  101. in Path
  102. want string
  103. }{{
  104. Path{StructField("test"), SliceIndex(1), MapKey{"blue"}, MapKey{12.3}},
  105. ".test[1][\"blue\"][12.3]",
  106. }}
  107. for i, td := range testData {
  108. if out := td.in.String(); out != td.want {
  109. t.Errorf("%d. %#v.String() = %#v; not %#v", i, td.in, out, td.want)
  110. }
  111. }
  112. }