pointer.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package assert
  2. import (
  3. "reflect"
  4. "v2ray.com/core/common/serial"
  5. )
  6. func (this *Assert) Pointer(value interface{}) *PointerSubject {
  7. return &PointerSubject{
  8. Subject: Subject{
  9. a: this,
  10. disp: serial.PointerToString(value),
  11. },
  12. value: value,
  13. }
  14. }
  15. type PointerSubject struct {
  16. Subject
  17. value interface{}
  18. }
  19. func (subject *PointerSubject) Equals(expectation interface{}) {
  20. if subject.value != expectation {
  21. subject.Fail("is equal to", serial.PointerToString(expectation))
  22. }
  23. }
  24. func (subject *PointerSubject) IsNil() {
  25. if subject.value == nil {
  26. return
  27. }
  28. valueType := reflect.TypeOf(subject.value)
  29. nilType := reflect.Zero(valueType)
  30. realValue := reflect.ValueOf(subject.value)
  31. if nilType != realValue {
  32. subject.Fail("is", "nil")
  33. }
  34. }
  35. func (subject *PointerSubject) IsNotNil() {
  36. if subject.value == nil {
  37. subject.Fail("is not", "nil")
  38. }
  39. valueType := reflect.TypeOf(subject.value)
  40. nilType := reflect.Zero(valueType)
  41. realValue := reflect.ValueOf(subject.value)
  42. if nilType == realValue {
  43. subject.Fail("is not", "nil")
  44. }
  45. }