faker_test.gno
4.70 Kb ยท 219 lines
1package faker
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/nt/uassert"
8 "gno.land/p/nt/ufmt"
9)
10
11func TestNewGenerator(t *testing.T) {
12 f := NewGenerator()
13
14 uassert.NotNil(t, f)
15 uassert.NotNil(t, f.rng)
16}
17
18func TestNewGeneratorWithSeed(t *testing.T) {
19 var (
20 seed = uint64(12345)
21 f = NewGeneratorWithSeed(seed)
22 )
23
24 uassert.NotNil(t, f)
25 uassert.NotNil(t, f.rng)
26}
27
28func TestDeterministicOutput(t *testing.T) {
29 var (
30 seed = uint64(42)
31 f1 = NewGeneratorWithSeed(seed)
32 f2 = NewGeneratorWithSeed(seed)
33 )
34
35 for i := 0; i < 42; i++ {
36 uassert.Equal(t, f1.FirstName(), f2.FirstName())
37 uassert.Equal(t, f1.LastName(), f2.LastName())
38 uassert.Equal(t, f1.FullName(), f2.FullName())
39 uassert.Equal(t, f1.Age(0), f2.Age(0))
40 uassert.Equal(t, f1.City(), f2.City())
41 uassert.Equal(t, f1.Country(), f2.Country())
42 uassert.Equal(t, f1.Address(), f2.Address())
43 uassert.Equal(t, f1.Lorem(42), f2.Lorem(42))
44 uassert.Equal(t, f1.LoremSentence(), f2.LoremSentence())
45 uassert.Equal(t, f1.LoremParagraph(), f2.LoremParagraph())
46 uassert.Equal(t, f1.Date(), f2.Date())
47 uassert.Equal(t, f1.Time(), f2.Time())
48 uassert.Equal(t, f1.DateTime(), f2.DateTime())
49 uassert.Equal(t, f1.Email(), f2.Email())
50 uassert.Equal(t, f1.Phone(), f2.Phone())
51 uassert.Equal(t, f1.StdAddress(), f2.StdAddress())
52 uassert.Equal(t, f1.Username(), f2.Username())
53 }
54}
55
56func TestPickRandomLettersOnly(t *testing.T) {
57 f := NewGenerator()
58
59 // Source without any letters only word
60 testData := []string{"hello8", "123", "6world", "hey_hey", "ok."}
61
62 uassert.PanicsWithMessage(
63 t,
64 "could not find a letters-only word after 100 attempts",
65 func() { f.pickRandomLettersOnly(&testData) },
66 )
67}
68
69type goldenTestCase struct {
70 seed uint64
71 iterations []goldenValues
72}
73
74type goldenValues struct {
75 firstName string
76 lastName string
77 fullName string
78 age int
79 city string
80 country string
81 address string
82 lorem string
83 loremSentence string
84 loremParagraph string
85 date string
86 time string
87 dateTime string
88 email string
89 phone string
90 stdAddress std.Address
91 username string
92}
93
94func TestGoldenValues(t *testing.T) {
95 for _, testCase := range goldenTestCases { // See golden_test_cases.gno
96 f := NewGeneratorWithSeed(testCase.seed)
97
98 for i, c := range testCase.iterations {
99 uassert.Equal(
100 t,
101 c.firstName,
102 f.FirstName(),
103 ufmt.Sprintf("First name doesn't match for seed %d (%d)", testCase.seed, i),
104 )
105
106 uassert.Equal(
107 t,
108 c.lastName,
109 f.LastName(),
110 ufmt.Sprintf("Last name doesn't match for seed %d (%d)", testCase.seed, i),
111 )
112
113 uassert.Equal(
114 t,
115 c.fullName,
116 f.FullName(),
117 ufmt.Sprintf("Full name doesn't match for seed %d (%d)", testCase.seed, i),
118 )
119
120 uassert.Equal(
121 t,
122 c.age,
123 f.Age(0),
124 ufmt.Sprintf("Age doesn't match for seed %d (%d)", testCase.seed, i),
125 )
126
127 uassert.Equal(
128 t,
129 c.city,
130 f.City(),
131 ufmt.Sprintf("City doesn't match for seed %d (%d)", testCase.seed, i),
132 )
133
134 uassert.Equal(
135 t,
136 c.country,
137 f.Country(),
138 ufmt.Sprintf("Country doesn't match for seed %d (%d)", testCase.seed, i),
139 )
140
141 uassert.Equal(
142 t,
143 c.address,
144 f.Address(),
145 ufmt.Sprintf("Address doesn't match for seed %d (%d)", testCase.seed, i),
146 )
147
148 uassert.Equal(
149 t,
150 c.lorem,
151 f.Lorem(42),
152 ufmt.Sprintf("Lorem doesn't match for seed %d (%d)", testCase.seed, i),
153 )
154
155 uassert.Equal(
156 t,
157 c.loremSentence,
158 f.LoremSentence(),
159 ufmt.Sprintf("Lorem sentence doesn't match for seed %d (%d)", testCase.seed, i),
160 )
161
162 uassert.Equal(
163 t,
164 c.loremParagraph,
165 f.LoremParagraph(),
166 ufmt.Sprintf("Lorem paragraph doesn't match for seed %d (%d)", testCase.seed, i),
167 )
168
169 uassert.Equal(
170 t,
171 c.date,
172 f.Date(),
173 ufmt.Sprintf("Date doesn't match for seed %d (%d)", testCase.seed, i),
174 )
175
176 uassert.Equal(
177 t,
178 c.time,
179 f.Time(),
180 ufmt.Sprintf("Time doesn't match for seed %d (%d)", testCase.seed, i),
181 )
182
183 uassert.Equal(
184 t,
185 c.dateTime,
186 f.DateTime(),
187 ufmt.Sprintf("DateTime doesn't match for seed %d (%d)", testCase.seed, i),
188 )
189
190 uassert.Equal(
191 t,
192 c.email,
193 f.Email(),
194 ufmt.Sprintf("Email doesn't match for seed %d (%d)", testCase.seed, i),
195 )
196
197 uassert.Equal(
198 t,
199 c.phone,
200 f.Phone(),
201 ufmt.Sprintf("Phone doesn't match for seed %d (%d)", testCase.seed, i),
202 )
203
204 uassert.Equal(
205 t,
206 c.stdAddress,
207 f.StdAddress(),
208 ufmt.Sprintf("StdAddress doesn't match for seed %d (%d)", testCase.seed, i),
209 )
210
211 uassert.Equal(
212 t,
213 c.username,
214 f.Username(),
215 ufmt.Sprintf("Username doesn't match for seed %d (%d)", testCase.seed, i),
216 )
217 }
218 }
219}