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