format_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package main
  4. import (
  5. "go/format"
  6. "testing"
  7. "tailscale.com/util/must"
  8. "tailscale.com/util/safediff"
  9. )
  10. func TestFormatFile(t *testing.T) {
  11. tests := []struct{ in, want string }{{
  12. in: `package foobar
  13. import (
  14. "encoding/json"
  15. jsonv2exp "github.com/go-json-experiment/json"
  16. )
  17. func main() {
  18. json.Marshal()
  19. jsonv2exp.Marshal()
  20. {
  21. var json T // deliberately shadow "json" package name
  22. json.Marshal() // should not be re-written
  23. }
  24. }
  25. `,
  26. want: `package foobar
  27. import (
  28. jsonv1 "encoding/json"
  29. jsonv2 "github.com/go-json-experiment/json"
  30. )
  31. func main() {
  32. jsonv1.Marshal()
  33. jsonv2.Marshal()
  34. {
  35. var json T // deliberately shadow "json" package name
  36. json.Marshal() // should not be re-written
  37. }
  38. }
  39. `,
  40. }, {
  41. in: `package foobar
  42. import (
  43. "github.com/go-json-experiment/json"
  44. jsonv2exp "github.com/go-json-experiment/json"
  45. )
  46. func main() {
  47. json.Marshal()
  48. jsonv2exp.Marshal()
  49. }
  50. `,
  51. want: `package foobar
  52. import (
  53. jsonv2 "github.com/go-json-experiment/json"
  54. )
  55. func main() {
  56. jsonv2.Marshal()
  57. jsonv2.Marshal()
  58. }
  59. `,
  60. }, {
  61. in: `package foobar
  62. import "github.com/go-json-experiment/json/v1"
  63. func main() {
  64. json.Marshal()
  65. }
  66. `,
  67. want: `package foobar
  68. import jsonv1 "github.com/go-json-experiment/json/v1"
  69. func main() {
  70. jsonv1.Marshal()
  71. }
  72. `,
  73. }, {
  74. in: `package foobar
  75. import (
  76. "encoding/json"
  77. jsonv1in2 "github.com/go-json-experiment/json/v1"
  78. )
  79. func main() {
  80. json.Marshal()
  81. jsonv1in2.Marshal()
  82. }
  83. `,
  84. want: `package foobar
  85. import (
  86. jsonv1std "encoding/json"
  87. jsonv1 "github.com/go-json-experiment/json/v1"
  88. )
  89. func main() {
  90. jsonv1std.Marshal()
  91. jsonv1.Marshal()
  92. }
  93. `,
  94. }, {
  95. in: `package foobar
  96. import (
  97. "encoding/json"
  98. jsonv1in2 "github.com/go-json-experiment/json/v1"
  99. )
  100. func main() {
  101. json.Marshal()
  102. jsonv1in2.Marshal()
  103. }
  104. `,
  105. want: `package foobar
  106. import (
  107. jsonv1std "encoding/json"
  108. jsonv1 "github.com/go-json-experiment/json/v1"
  109. )
  110. func main() {
  111. jsonv1std.Marshal()
  112. jsonv1.Marshal()
  113. }
  114. `,
  115. }, {
  116. in: `package foobar
  117. import (
  118. "encoding/json"
  119. j2 "encoding/json/v2"
  120. "encoding/json/jsontext"
  121. )
  122. func main() {
  123. json.Marshal()
  124. j2.Marshal()
  125. jsontext.NewEncoder
  126. }
  127. `,
  128. want: `package foobar
  129. import (
  130. jsonv1 "encoding/json"
  131. jsonv2 "github.com/go-json-experiment/json"
  132. "github.com/go-json-experiment/json/jsontext"
  133. )
  134. func main() {
  135. jsonv1.Marshal()
  136. jsonv2.Marshal()
  137. jsontext.NewEncoder
  138. }
  139. `,
  140. }}
  141. for _, tt := range tests {
  142. got := string(must.Get(format.Source([]byte(tt.in))))
  143. got = string(mustFormatFile([]byte(got)))
  144. want := string(must.Get(format.Source([]byte(tt.want))))
  145. if got != want {
  146. diff, _ := safediff.Lines(got, want, -1)
  147. t.Errorf("mismatch (-got +want)\n%s", diff)
  148. t.Error(got)
  149. t.Error(want)
  150. }
  151. }
  152. }