int.gno

3.16 Kb ยท 110 lines
  1package expect
  2
  3import (
  4	"strconv"
  5
  6	"gno.land/p/demo/ufmt"
  7)
  8
  9// NewIntChecker creates a new checker of int64 values.
 10func NewIntChecker(ctx Context, value int64) IntChecker {
 11	return IntChecker{ctx, value}
 12}
 13
 14// IntChecker asserts int64 values.
 15type IntChecker struct {
 16	ctx   Context
 17	value int64
 18}
 19
 20// Not negates the next called expectation.
 21func (c IntChecker) Not() IntChecker {
 22	c.ctx.negated = !c.ctx.negated
 23	return c
 24}
 25
 26// ToEqual asserts that current value is equal to an expected value.
 27func (c IntChecker) ToEqual(value int64) {
 28	c.ctx.T().Helper()
 29	c.ctx.CheckExpectation(c.value == value, func(ctx Context) string {
 30		got := formatInt(c.value)
 31		if !ctx.IsNegated() {
 32			want := formatInt(value)
 33			return ufmt.Sprintf("Expected values to match\nGot: %s\nWant: %s", got, want)
 34		}
 35		return ufmt.Sprintf("Expected value to be different\nGot: %s", got)
 36	})
 37}
 38
 39// ToBeGreaterThan asserts that current value is greater than an expected value.
 40func (c IntChecker) ToBeGreaterThan(value int64) {
 41	c.ctx.T().Helper()
 42	c.ctx.CheckExpectation(c.value > value, func(ctx Context) string {
 43		got := formatInt(c.value)
 44		want := formatInt(value)
 45		if !ctx.IsNegated() {
 46			return ufmt.Sprintf("Expected values to be gerater than %s\nGot: %s", want, got)
 47		}
 48		return ufmt.Sprintf("Expected value to not to be greater than %s\nGot: %s", want, got)
 49	})
 50}
 51
 52// ToBeGreaterOrEqualThan asserts that current value is greater or equal than an expected value.
 53func (c IntChecker) ToBeGreaterOrEqualThan(value int64) {
 54	c.ctx.T().Helper()
 55	c.ctx.CheckExpectation(c.value >= value, func(ctx Context) string {
 56		got := formatInt(c.value)
 57		want := formatInt(value)
 58		if !ctx.IsNegated() {
 59			return ufmt.Sprintf("Expected values to be greater or equal than %s\nGot: %s", want, got)
 60		}
 61		return ufmt.Sprintf("Expected value to not to be greater or equal than %s\nGot: %s", want, got)
 62	})
 63}
 64
 65// ToBeLowerThan asserts that current value is lower than an expected value.
 66func (c IntChecker) ToBeLowerThan(value int64) {
 67	c.ctx.T().Helper()
 68	c.ctx.CheckExpectation(c.value < value, func(ctx Context) string {
 69		got := formatInt(c.value)
 70		want := formatInt(value)
 71		if !ctx.IsNegated() {
 72			return ufmt.Sprintf("Expected values to be lower than %s\nGot: %s", want, got)
 73		}
 74		return ufmt.Sprintf("Expected value to not to be lower than %s\nGot: %s", want, got)
 75	})
 76}
 77
 78// ToBeLowerOrEqualThan asserts that current value is lower or equal than an expected value.
 79func (c IntChecker) ToBeLowerOrEqualThan(value int64) {
 80	c.ctx.T().Helper()
 81	c.ctx.CheckExpectation(c.value <= value, func(ctx Context) string {
 82		got := formatInt(c.value)
 83		want := formatInt(value)
 84		if !ctx.IsNegated() {
 85			return ufmt.Sprintf("Expected values to be lower or equal than %s\nGot: %s", want, got)
 86		}
 87		return ufmt.Sprintf("Expected value to not to be lower or equal than %s\nGot: %s", want, got)
 88	})
 89}
 90
 91func formatInt(value int64) string {
 92	return strconv.FormatInt(value, 10)
 93}
 94
 95func asInt(value any) (int64, error) {
 96	switch v := value.(type) {
 97	case int:
 98		return int64(v), nil
 99	case int8:
100		return int64(v), nil
101	case int16:
102		return int64(v), nil
103	case int32:
104		return int64(v), nil
105	case int64:
106		return v, nil
107	default:
108		return 0, ErrIncompatibleType
109	}
110}