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}