object_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package object
  2. import (
  3. "errors"
  4. "testing"
  5. )
  6. func TestString(t *testing.T) {
  7. o := Object{
  8. "good": "value",
  9. "bad": float64(25),
  10. // deliberately absent: "absent": "value",
  11. }
  12. str, err := o.GetString("good")
  13. if err != nil {
  14. t.Fatalf("Problem extracting string: %v", err)
  15. }
  16. if str != "value" {
  17. t.Fatalf(`Expected "value" not %v`, str)
  18. }
  19. _, err = o.GetString("bad")
  20. if !errors.Is(err, ErrKeyWrongType) {
  21. t.Fatalf(`Expected ErrKeyWrongType, not %v`, err)
  22. }
  23. _, err = o.GetString("absent")
  24. if !errors.Is(err, ErrKeyNotPresent) {
  25. t.Fatalf(`Expected ErrKeyNotPresent, not %v`, err)
  26. }
  27. }
  28. func TestNumber(t *testing.T) {
  29. o := Object{
  30. "good": float64(25),
  31. "bad": "value",
  32. // deliberately absent: "absent": "value",
  33. }
  34. num, err := o.GetNumber("good")
  35. if err != nil {
  36. t.Fatalf("Problem extracting number: %v", err)
  37. }
  38. if num != 25 {
  39. t.Fatalf(`Expected 25 not %v`, num)
  40. }
  41. _, err = o.GetNumber("bad")
  42. if !errors.Is(err, ErrKeyWrongType) {
  43. t.Fatalf(`Expected ErrKeyWrongType, not %v`, err)
  44. }
  45. _, err = o.GetNumber("absent")
  46. if !errors.Is(err, ErrKeyNotPresent) {
  47. t.Fatalf(`Expected ErrKeyNotPresent, not %v`, err)
  48. }
  49. }
  50. func TestObject(t *testing.T) {
  51. o := Object{
  52. "good": map[string]any{},
  53. "bad": "value",
  54. // deliberately absent: "absent": "value",
  55. }
  56. obj, err := o.GetObject("good")
  57. if err != nil {
  58. t.Fatalf("Problem extracting Object: %v", err)
  59. }
  60. if len(obj) != 0 {
  61. t.Fatalf(`Expected empty map, not %v`, obj)
  62. }
  63. _, err = o.GetObject("bad")
  64. if !errors.Is(err, ErrKeyWrongType) {
  65. t.Fatalf(`Expected ErrKeyWrongType, not %v`, err)
  66. }
  67. _, err = o.GetObject("absent")
  68. if !errors.Is(err, ErrKeyNotPresent) {
  69. t.Fatalf(`Expected ErrKeyNotPresent, not %v`, err)
  70. }
  71. }
  72. func TestList(t *testing.T) {
  73. o := Object{
  74. "multiple": []any{"first", "second"},
  75. "single": "one",
  76. // deliberately absent: "absent": "value",
  77. }
  78. list, err := o.GetList("multiple")
  79. if err != nil {
  80. t.Fatalf("Problem extracting list: %v", err)
  81. }
  82. if len(list) != 2 {
  83. t.Fatalf(`Expected 2 elements, but didn't get them: %v`, list)
  84. }
  85. list, err = o.GetList("single")
  86. if err != nil {
  87. t.Fatalf("Problem extracting list: %v", err)
  88. }
  89. if len(list) != 1 {
  90. t.Fatalf(`Expected 1 element to auto-convert to list, but didn't: %v`, list)
  91. }
  92. _, err = o.GetList("absent")
  93. if !errors.Is(err, ErrKeyNotPresent) {
  94. t.Fatalf(`Expected ErrKeyNotPresent, not %v`, err)
  95. }
  96. }