json_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package json // import "github.com/tdewolff/minify/json"
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os"
  6. "regexp"
  7. "testing"
  8. "github.com/tdewolff/minify"
  9. "github.com/tdewolff/test"
  10. )
  11. func TestJSON(t *testing.T) {
  12. jsonTests := []struct {
  13. json string
  14. expected string
  15. }{
  16. {"{ \"a\": [1, 2] }", "{\"a\":[1,2]}"},
  17. {"[{ \"a\": [{\"x\": null}, true] }]", "[{\"a\":[{\"x\":null},true]}]"},
  18. {"{ \"a\": 1, \"b\": 2 }", "{\"a\":1,\"b\":2}"},
  19. }
  20. m := minify.New()
  21. for _, tt := range jsonTests {
  22. t.Run(tt.json, func(t *testing.T) {
  23. r := bytes.NewBufferString(tt.json)
  24. w := &bytes.Buffer{}
  25. err := Minify(m, w, r, nil)
  26. test.Minify(t, tt.json, err, w.String(), tt.expected)
  27. })
  28. }
  29. }
  30. func TestReaderErrors(t *testing.T) {
  31. r := test.NewErrorReader(0)
  32. w := &bytes.Buffer{}
  33. m := minify.New()
  34. err := Minify(m, w, r, nil)
  35. test.T(t, err, test.ErrPlain, "return error at first read")
  36. }
  37. func TestWriterErrors(t *testing.T) {
  38. errorTests := []struct {
  39. json string
  40. n []int
  41. }{
  42. //01 234 56 78
  43. {`{"key":[100,200]}`, []int{0, 1, 2, 3, 4, 5, 7, 8}},
  44. }
  45. m := minify.New()
  46. for _, tt := range errorTests {
  47. for _, n := range tt.n {
  48. t.Run(fmt.Sprint(tt.json, " ", tt.n), func(t *testing.T) {
  49. r := bytes.NewBufferString(tt.json)
  50. w := test.NewErrorWriter(n)
  51. err := Minify(m, w, r, nil)
  52. test.T(t, err, test.ErrPlain)
  53. })
  54. }
  55. }
  56. }
  57. ////////////////////////////////////////////////////////////////
  58. func ExampleMinify() {
  59. m := minify.New()
  60. m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), Minify)
  61. if err := m.Minify("application/json", os.Stdout, os.Stdin); err != nil {
  62. panic(err)
  63. }
  64. }