jsonvalue_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package protocol
  2. import (
  3. "fmt"
  4. "reflect"
  5. "strings"
  6. "testing"
  7. "github.com/aws/aws-sdk-go/aws"
  8. )
  9. var testJSONValueCases = []struct {
  10. Value aws.JSONValue
  11. Mode EscapeMode
  12. String string
  13. }{
  14. {
  15. Value: aws.JSONValue{
  16. "abc": 123.,
  17. },
  18. Mode: NoEscape,
  19. String: `{"abc":123}`,
  20. },
  21. {
  22. Value: aws.JSONValue{
  23. "abc": 123.,
  24. },
  25. Mode: Base64Escape,
  26. String: `eyJhYmMiOjEyM30=`,
  27. },
  28. {
  29. Value: aws.JSONValue{
  30. "abc": 123.,
  31. },
  32. Mode: QuotedEscape,
  33. String: `"{\"abc\":123}"`,
  34. },
  35. }
  36. func TestEncodeJSONValue(t *testing.T) {
  37. for i, c := range testJSONValueCases {
  38. str, err := EncodeJSONValue(c.Value, c.Mode)
  39. if err != nil {
  40. t.Fatalf("%d, expect no error, got %v", i, err)
  41. }
  42. if e, a := c.String, str; e != a {
  43. t.Errorf("%d, expect %v encoded value, got %v", i, e, a)
  44. }
  45. }
  46. }
  47. func TestDecodeJSONValue(t *testing.T) {
  48. for i, c := range testJSONValueCases {
  49. val, err := DecodeJSONValue(c.String, c.Mode)
  50. if err != nil {
  51. t.Fatalf("%d, expect no error, got %v", i, err)
  52. }
  53. if e, a := c.Value, val; !reflect.DeepEqual(e, a) {
  54. t.Errorf("%d, expect %v encoded value, got %v", i, e, a)
  55. }
  56. }
  57. }
  58. func TestEncodeJSONValue_PanicUnkownMode(t *testing.T) {
  59. defer func() {
  60. if r := recover(); r == nil {
  61. t.Errorf("expect panic, got none")
  62. } else {
  63. reason := fmt.Sprintf("%v", r)
  64. if e, a := "unknown EscapeMode", reason; !strings.Contains(a, e) {
  65. t.Errorf("expect %q to be in %v", e, a)
  66. }
  67. }
  68. }()
  69. val := aws.JSONValue{}
  70. EncodeJSONValue(val, 123456)
  71. }
  72. func TestDecodeJSONValue_PanicUnkownMode(t *testing.T) {
  73. defer func() {
  74. if r := recover(); r == nil {
  75. t.Errorf("expect panic, got none")
  76. } else {
  77. reason := fmt.Sprintf("%v", r)
  78. if e, a := "unknown EscapeMode", reason; !strings.Contains(a, e) {
  79. t.Errorf("expect %q to be in %v", e, a)
  80. }
  81. }
  82. }()
  83. DecodeJSONValue(`{"abc":123}`, 123456)
  84. }