strslice_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package stringutils
  2. import (
  3. "encoding/json"
  4. "testing"
  5. )
  6. func TestStrSliceMarshalJSON(t *testing.T) {
  7. strss := map[*StrSlice]string{
  8. nil: "",
  9. &StrSlice{}: "null",
  10. &StrSlice{[]string{"/bin/sh", "-c", "echo"}}: `["/bin/sh","-c","echo"]`,
  11. }
  12. for strs, expected := range strss {
  13. data, err := strs.MarshalJSON()
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. if string(data) != expected {
  18. t.Fatalf("Expected %v, got %v", expected, string(data))
  19. }
  20. }
  21. }
  22. func TestStrSliceUnmarshalJSON(t *testing.T) {
  23. parts := map[string][]string{
  24. "": {"default", "values"},
  25. "[]": {},
  26. `["/bin/sh","-c","echo"]`: {"/bin/sh", "-c", "echo"},
  27. }
  28. for json, expectedParts := range parts {
  29. strs := &StrSlice{
  30. []string{"default", "values"},
  31. }
  32. if err := strs.UnmarshalJSON([]byte(json)); err != nil {
  33. t.Fatal(err)
  34. }
  35. actualParts := strs.Slice()
  36. if len(actualParts) != len(expectedParts) {
  37. t.Fatalf("Expected %v parts, got %v (%v)", len(expectedParts), len(actualParts), expectedParts)
  38. }
  39. for index, part := range actualParts {
  40. if part != expectedParts[index] {
  41. t.Fatalf("Expected %v, got %v", expectedParts, actualParts)
  42. break
  43. }
  44. }
  45. }
  46. }
  47. func TestStrSliceUnmarshalString(t *testing.T) {
  48. var e *StrSlice
  49. echo, err := json.Marshal("echo")
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. if err := json.Unmarshal(echo, &e); err != nil {
  54. t.Fatal(err)
  55. }
  56. slice := e.Slice()
  57. if len(slice) != 1 {
  58. t.Fatalf("expected 1 element after unmarshal: %q", slice)
  59. }
  60. if slice[0] != "echo" {
  61. t.Fatalf("expected `echo`, got: %q", slice[0])
  62. }
  63. }
  64. func TestStrSliceUnmarshalSlice(t *testing.T) {
  65. var e *StrSlice
  66. echo, err := json.Marshal([]string{"echo"})
  67. if err != nil {
  68. t.Fatal(err)
  69. }
  70. if err := json.Unmarshal(echo, &e); err != nil {
  71. t.Fatal(err)
  72. }
  73. slice := e.Slice()
  74. if len(slice) != 1 {
  75. t.Fatalf("expected 1 element after unmarshal: %q", slice)
  76. }
  77. if slice[0] != "echo" {
  78. t.Fatalf("expected `echo`, got: %q", slice[0])
  79. }
  80. }
  81. func TestStrSliceToString(t *testing.T) {
  82. slices := map[*StrSlice]string{
  83. NewStrSlice(""): "",
  84. NewStrSlice("one"): "one",
  85. NewStrSlice("one", "two"): "one two",
  86. }
  87. for s, expected := range slices {
  88. toString := s.ToString()
  89. if toString != expected {
  90. t.Fatalf("Expected %v, got %v", expected, toString)
  91. }
  92. }
  93. }