format_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package format
  2. import (
  3. "fmt"
  4. "io/fs"
  5. "os"
  6. "path"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. )
  11. const (
  12. notFormattedStr = `
  13. type Request struct {
  14. Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
  15. }
  16. type Response struct {
  17. Message string ` + "`" + `json:"message"` + "`" + `
  18. Students []Student ` + "`" + `json:"students"` + "`" + `
  19. }
  20. service A-api {
  21. @server(
  22. handler: GreetHandler
  23. )
  24. get /greet/from/:name(Request) returns (Response)
  25. @server(
  26. handler: GreetHandler2
  27. )
  28. get /greet/from2/:name(Request) returns (Response)
  29. }
  30. `
  31. formattedStr = `type Request {
  32. Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
  33. }
  34. type Response {
  35. Message string ` + "`" + `json:"message"` + "`" + `
  36. Students []Student ` + "`" + `json:"students"` + "`" + `
  37. }
  38. service A-api {
  39. @server(
  40. handler: GreetHandler
  41. )
  42. get /greet/from/:name(Request) returns (Response)
  43. @server(
  44. handler: GreetHandler2
  45. )
  46. get /greet/from2/:name(Request) returns (Response)
  47. }`
  48. )
  49. func TestFormat(t *testing.T) {
  50. r, err := apiFormat(notFormattedStr, true)
  51. assert.Nil(t, err)
  52. assert.Equal(t, formattedStr, r)
  53. _, err = apiFormat(notFormattedStr, false)
  54. assert.Errorf(t, err, " line 7:13 can not find declaration 'Student' in context")
  55. }
  56. func Test_apiFormatReader_issue1721(t *testing.T) {
  57. dir, err := os.MkdirTemp("", "goctl-api-format")
  58. require.NoError(t, err)
  59. defer os.RemoveAll(dir)
  60. subDir := path.Join(dir, "sub")
  61. err = os.MkdirAll(subDir, fs.ModePerm)
  62. require.NoError(t, err)
  63. importedFilename := path.Join(dir, "foo.api")
  64. err = os.WriteFile(importedFilename, []byte{}, fs.ModePerm)
  65. require.NoError(t, err)
  66. filename := path.Join(subDir, "bar.api")
  67. err = os.WriteFile(filename, []byte(fmt.Sprintf(`import "%s"`, importedFilename)), 0o644)
  68. require.NoError(t, err)
  69. f, err := os.Open(filename)
  70. require.NoError(t, err)
  71. err = apiFormatReader(f, filename, false)
  72. assert.NoError(t, err)
  73. }