value.gno
3.37 Kb ยท 145 lines
1package expect
2
3import "gno.land/p/demo/ufmt"
4
5// Value creates a new checker values of different types.
6func Value(t TestingT, value any) ValueChecker {
7 return ValueChecker{
8 ctx: NewContext(t),
9 value: value,
10 }
11}
12
13// ValueChecker asserts values of different types.
14type ValueChecker struct {
15 ctx Context
16 value any
17}
18
19// WithFailPrefix assigns a prefix that will be prefixed to testing errors when an assertion fails.
20func (c ValueChecker) WithFailPrefix(prefix string) ValueChecker {
21 c.ctx.prefix = prefix
22 return c
23}
24
25// Not negates the next called expectation.
26func (c ValueChecker) Not() ValueChecker {
27 c.ctx.negated = !c.ctx.negated
28 return c
29}
30
31// ToBeNil asserts that current value is nil.
32func (c ValueChecker) ToBeNil() {
33 c.ctx.T().Helper()
34 c.ctx.CheckExpectation(c.value == nil, func(ctx Context) string {
35 if !ctx.IsNegated() {
36 return ufmt.Sprintf("Expected value to be nil\nGot: %v", c.value)
37 }
38 return "Expected a non nil value"
39 })
40}
41
42// ToEqual asserts that current value is equal to an expected value.
43func (c ValueChecker) ToEqual(value any) {
44 c.ctx.T().Helper()
45
46 switch v := value.(type) {
47 case string:
48 c.AsString().ToEqual(v)
49 case []byte:
50 c.AsString().ToEqual(string(v))
51 case bool:
52 c.AsBoolean().ToEqual(v)
53 case float32:
54 c.AsFloat().ToEqual(float64(v))
55 case float64:
56 c.AsFloat().ToEqual(v)
57 case uint:
58 c.AsUint().ToEqual(uint64(v))
59 case uint8:
60 c.AsUint().ToEqual(uint64(v))
61 case uint16:
62 c.AsUint().ToEqual(uint64(v))
63 case uint32:
64 c.AsUint().ToEqual(uint64(v))
65 case uint64:
66 c.AsUint().ToEqual(v)
67 case int:
68 c.AsInt().ToEqual(int64(v))
69 case int8:
70 c.AsInt().ToEqual(int64(v))
71 case int16:
72 c.AsInt().ToEqual(int64(v))
73 case int32:
74 c.AsInt().ToEqual(int64(v))
75 case int64:
76 c.AsInt().ToEqual(v)
77 default:
78 c.ctx.Fail("Unsupported type: %T", value)
79 }
80}
81
82// AsString returns a checker to assert current value as a string.
83func (c ValueChecker) AsString() StringChecker {
84 c.ctx.T().Helper()
85
86 v, err := asString(c.value)
87 if err != nil {
88 c.ctx.Fail("Failed: %s: expected a string value\nGot: %T", err.Error(), c.value)
89 return StringChecker{}
90 }
91
92 return NewStringChecker(c.ctx, v)
93}
94
95// AsBoolean returns a checker to assert current value as a boolean.
96func (c ValueChecker) AsBoolean() BooleanChecker {
97 c.ctx.T().Helper()
98
99 v, err := asBoolean(c.value)
100 if err != nil {
101 c.ctx.Fail("Failed: %s: expected a boolean value\nGot: %T", err.Error(), c.value)
102 return BooleanChecker{}
103 }
104
105 return NewBooleanChecker(c.ctx, v)
106}
107
108// AsFloat returns a checker to assert current value as a float64.
109func (c ValueChecker) AsFloat() FloatChecker {
110 c.ctx.T().Helper()
111
112 v, err := asFloat(c.value)
113 if err != nil {
114 c.ctx.Fail("%s: expected a float value\nGot: %T", err.Error(), c.value)
115 return FloatChecker{}
116 }
117
118 return NewFloatChecker(c.ctx, v)
119}
120
121// AsUint returns a checker to assert current value as a uint64.
122func (c ValueChecker) AsUint() UintChecker {
123 c.ctx.T().Helper()
124
125 v, err := asUint(c.value)
126 if err != nil {
127 c.ctx.Fail("Failed: %s: expected a uint value\nGot: %T", err.Error(), c.value)
128 return UintChecker{}
129 }
130
131 return NewUintChecker(c.ctx, v)
132}
133
134// AsInt returns a checker to assert current value as a int64.
135func (c ValueChecker) AsInt() IntChecker {
136 c.ctx.T().Helper()
137
138 v, err := asInt(c.value)
139 if err != nil {
140 c.ctx.Fail("Failed: %s: expected an int value\nGot: %T", err.Error(), c.value)
141 return IntChecker{}
142 }
143
144 return NewIntChecker(c.ctx, v)
145}