lang_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package lang
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "reflect"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestRepr(t *testing.T) {
  10. var (
  11. f32 float32 = 1.1
  12. f64 = 2.2
  13. i8 int8 = 1
  14. i16 int16 = 2
  15. i32 int32 = 3
  16. i64 int64 = 4
  17. u8 uint8 = 5
  18. u16 uint16 = 6
  19. u32 uint32 = 7
  20. u64 uint64 = 8
  21. )
  22. tests := []struct {
  23. v any
  24. expect string
  25. }{
  26. {
  27. nil,
  28. "",
  29. },
  30. {
  31. mockStringable{},
  32. "mocked",
  33. },
  34. {
  35. new(mockStringable),
  36. "mocked",
  37. },
  38. {
  39. newMockPtr(),
  40. "mockptr",
  41. },
  42. {
  43. &mockOpacity{
  44. val: 1,
  45. },
  46. "{1}",
  47. },
  48. {
  49. true,
  50. "true",
  51. },
  52. {
  53. false,
  54. "false",
  55. },
  56. {
  57. f32,
  58. "1.1",
  59. },
  60. {
  61. f64,
  62. "2.2",
  63. },
  64. {
  65. i8,
  66. "1",
  67. },
  68. {
  69. i16,
  70. "2",
  71. },
  72. {
  73. i32,
  74. "3",
  75. },
  76. {
  77. i64,
  78. "4",
  79. },
  80. {
  81. u8,
  82. "5",
  83. },
  84. {
  85. u16,
  86. "6",
  87. },
  88. {
  89. u32,
  90. "7",
  91. },
  92. {
  93. u64,
  94. "8",
  95. },
  96. {
  97. []byte(`abcd`),
  98. "abcd",
  99. },
  100. {
  101. mockOpacity{val: 1},
  102. "{1}",
  103. },
  104. }
  105. for _, test := range tests {
  106. t.Run(test.expect, func(t *testing.T) {
  107. assert.Equal(t, test.expect, Repr(test.v))
  108. })
  109. }
  110. }
  111. func TestReprOfValue(t *testing.T) {
  112. t.Run("error", func(t *testing.T) {
  113. assert.Equal(t, "error", reprOfValue(reflect.ValueOf(errors.New("error"))))
  114. })
  115. t.Run("stringer", func(t *testing.T) {
  116. assert.Equal(t, "1.23", reprOfValue(reflect.ValueOf(json.Number("1.23"))))
  117. })
  118. t.Run("int", func(t *testing.T) {
  119. assert.Equal(t, "1", reprOfValue(reflect.ValueOf(1)))
  120. })
  121. t.Run("int", func(t *testing.T) {
  122. assert.Equal(t, "1", reprOfValue(reflect.ValueOf("1")))
  123. })
  124. t.Run("int", func(t *testing.T) {
  125. assert.Equal(t, "1", reprOfValue(reflect.ValueOf(uint(1))))
  126. })
  127. }
  128. type mockStringable struct{}
  129. func (m mockStringable) String() string {
  130. return "mocked"
  131. }
  132. type mockPtr struct{}
  133. func newMockPtr() *mockPtr {
  134. return new(mockPtr)
  135. }
  136. func (m *mockPtr) String() string {
  137. return "mockptr"
  138. }
  139. type mockOpacity struct {
  140. val int
  141. }