map_key_iface_test.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package test
  2. import (
  3. "testing"
  4. "github.com/modern-go/reflect2"
  5. "github.com/modern-go/test/must"
  6. )
  7. type intError int
  8. func (err intError) Error() string {
  9. return ""
  10. }
  11. func Test_map_iface_key(t *testing.T) {
  12. t.Run("SetIndex", testOp(func(api reflect2.API) interface{} {
  13. obj := map[error]int{}
  14. valType := api.TypeOf(obj).(reflect2.MapType)
  15. valType.SetIndex(obj, intError(2), 4)
  16. valType.SetIndex(obj, intError(2), 9)
  17. valType.SetIndex(obj, nil, 9)
  18. must.Panic(func() {
  19. valType.SetIndex(obj, "", 9)
  20. })
  21. return obj
  22. }))
  23. t.Run("GetIndex", testOp(func(api reflect2.API) interface{} {
  24. obj := map[error]int{intError(3): 9, intError(2): 4}
  25. valType := api.TypeOf(obj).(reflect2.MapType)
  26. must.Panic(func() {
  27. valType.GetIndex(obj, "")
  28. })
  29. return []interface{}{
  30. valType.GetIndex(obj, intError(3)),
  31. valType.GetIndex(obj, nil),
  32. }
  33. }))
  34. t.Run("Iterate", testOp(func(api reflect2.API) interface{} {
  35. obj := map[error]int{intError(2): 4}
  36. valType := api.TypeOf(obj).(reflect2.MapType)
  37. iter := valType.Iterate(obj)
  38. must.Pass(iter.HasNext(), "api", api)
  39. key1, elem1 := iter.Next()
  40. must.Pass(!iter.HasNext(), "api", api)
  41. return []interface{}{key1, elem1}
  42. }))
  43. }