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}