Skip to content

Commit 70b796c

Browse files
committed
Merge branch 'develop'
2 parents 130211d + 9aa5357 commit 70b796c

16 files changed

+552
-432
lines changed

BENCHMARKS.md

+319-325
Large diffs are not rendered by default.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ type Foo struct {
149149
Map map[string]int `fakesize:"2"`
150150
Array []string `fakesize:"2"`
151151
ArrayRange []string `fakesize:"2,6"`
152-
Bar Bar
152+
Bar Bar
153153
Skip *string `fake:"skip"` // Set to "skip" to not generate data for
154154
SkipAlt *string `fake:"-"` // Set to "-" to not generate data for
155155
Created time.Time // Can take in a fake tag as well as a format tag

error.go

+18-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ func (f *Faker) Error() error {
1515
}
1616

1717
func err(f *Faker) error {
18-
return errors.New(generate(f, getRandValue(f, []string{"error", "generic"})))
18+
genStr, _ := generate(f, getRandValue(f, []string{"error", "generic"}))
19+
return errors.New(genStr)
1920
}
2021

2122
// ErrorObject will return a random error object word
@@ -29,7 +30,8 @@ func (f *Faker) ErrorObject() error {
2930
}
3031

3132
func errorObject(f *Faker) error {
32-
return errors.New(generate(f, getRandValue(f, []string{"error", "object"})))
33+
genStr, _ := generate(f, getRandValue(f, []string{"error", "object"}))
34+
return errors.New(genStr)
3335
}
3436

3537
// ErrorDatabase will return a random database error
@@ -43,7 +45,8 @@ func (f *Faker) ErrorDatabase() error {
4345
}
4446

4547
func errorDatabase(f *Faker) error {
46-
return errors.New(generate(f, getRandValue(f, []string{"error", "database"})))
48+
genStr, _ := generate(f, getRandValue(f, []string{"error", "database"}))
49+
return errors.New(genStr)
4750
}
4851

4952
// ErrorGRPC will return a random gRPC error
@@ -57,7 +60,8 @@ func (f *Faker) ErrorGRPC() error {
5760
}
5861

5962
func errorGRPC(f *Faker) error {
60-
return errors.New(generate(f, getRandValue(f, []string{"error", "grpc"})))
63+
genStr, _ := generate(f, getRandValue(f, []string{"error", "grpc"}))
64+
return errors.New(genStr)
6165
}
6266

6367
// ErrorHTTP will return a random HTTP error
@@ -71,7 +75,8 @@ func (f *Faker) ErrorHTTP() error {
7175
}
7276

7377
func errorHTTP(f *Faker) error {
74-
return errors.New(generate(f, getRandValue(f, []string{"error", "http"})))
78+
genStr, _ := generate(f, getRandValue(f, []string{"error", "http"}))
79+
return errors.New(genStr)
7580
}
7681

7782
// ErrorHTTPClient will return a random HTTP client error response (400-418)
@@ -85,7 +90,8 @@ func (f *Faker) ErrorHTTPClient() error {
8590
}
8691

8792
func errorHTTPClient(f *Faker) error {
88-
return errors.New(generate(f, getRandValue(f, []string{"error", "http_client"})))
93+
genStr, _ := generate(f, getRandValue(f, []string{"error", "http_client"}))
94+
return errors.New(genStr)
8995
}
9096

9197
// ErrorHTTPServer will return a random HTTP server error response (500-511)
@@ -99,7 +105,8 @@ func (f *Faker) ErrorHTTPServer() error {
99105
}
100106

101107
func errorHTTPServer(f *Faker) error {
102-
return errors.New(generate(f, getRandValue(f, []string{"error", "http_server"})))
108+
genStr, _ := generate(f, getRandValue(f, []string{"error", "http_server"}))
109+
return errors.New(genStr)
103110
}
104111

105112
// ErrorRuntime will return a random runtime error
@@ -113,7 +120,8 @@ func (f *Faker) ErrorRuntime() error {
113120
}
114121

115122
func errorRuntime(f *Faker) error {
116-
return errors.New(generate(f, getRandValue(f, []string{"error", "runtime"})))
123+
genStr, _ := generate(f, getRandValue(f, []string{"error", "runtime"}))
124+
return errors.New(genStr)
117125
}
118126

119127
// ErrorValidation will return a random validation error
@@ -127,7 +135,8 @@ func (f *Faker) ErrorValidation() error {
127135
}
128136

129137
func errorValidation(f *Faker) error {
130-
return errors.New(generate(f, getRandValue(f, []string{"error", "validation"})))
138+
genStr, _ := generate(f, getRandValue(f, []string{"error", "validation"}))
139+
return errors.New(genStr)
131140
}
132141

133142
func addErrorLookup() {

generate.go

+27-15
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
// Ex: ??? - fda - random letters
2424
//
2525
// For a complete list of runnable functions use FuncsLookup
26-
func Generate(dataVal string) string { return generate(GlobalFaker, dataVal) }
26+
func Generate(dataVal string) (string, error) { return generate(GlobalFaker, dataVal) }
2727

2828
// Generate fake information from given string.
2929
// Replaceable values should be within {}
@@ -39,16 +39,17 @@ func Generate(dataVal string) string { return generate(GlobalFaker, dataVal) }
3939
// Ex: ??? - fda - random letters
4040
//
4141
// For a complete list of runnable functions use FuncsLookup
42-
func (f *Faker) Generate(dataVal string) string { return generate(f, dataVal) }
42+
func (f *Faker) Generate(dataVal string) (string, error) { return generate(f, dataVal) }
4343

44-
func generate(f *Faker, dataVal string) string {
44+
func generate(f *Faker, dataVal string) (string, error) {
4545
// Replace # with numbers and ? with letters
4646
dataVal = replaceWithNumbers(f, dataVal)
4747
dataVal = replaceWithLetters(f, dataVal)
4848

4949
// Check if string has any replaceable values
50+
// Even if it doesnt its ok we will just return the string
5051
if !strings.Contains(dataVal, "{") && !strings.Contains(dataVal, "}") {
51-
return dataVal
52+
return dataVal, nil
5253
}
5354

5455
// Variables to identify the index in which it exists
@@ -111,8 +112,15 @@ func generate(f *Faker, dataVal string) string {
111112
if paramsLen == 1 && info.Params[0].Type == "string" {
112113
mapParams.Add(info.Params[0].Field, fParams)
113114
} else if paramsLen > 0 && fParams != "" {
114-
splitVals := funcLookupSplit(fParams)
115-
mapParams = addSplitValsToMapParams(splitVals, info, mapParams)
115+
var err error
116+
splitVals, err := funcLookupSplit(fParams)
117+
if err != nil {
118+
return "", err
119+
}
120+
mapParams, err = addSplitValsToMapParams(splitVals, info, mapParams)
121+
if err != nil {
122+
return "", err
123+
}
116124
}
117125
if mapParams.Size() == 0 {
118126
mapParams = nil
@@ -121,13 +129,12 @@ func generate(f *Faker, dataVal string) string {
121129
// Call function
122130
fValue, err := info.Generate(f, mapParams, info)
123131
if err != nil {
124-
// If we came across an error just dont replace value
125-
dataVal = strings.Replace(dataVal, "{"+fParts+"}", err.Error(), 1)
126-
} else {
127-
// Successfully found, run replace with new value
128-
dataVal = strings.Replace(dataVal, "{"+fParts+"}", fmt.Sprintf("%v", fValue), 1)
132+
return "", err
129133
}
130134

135+
// Successfully found, run replace with new value
136+
dataVal = strings.Replace(dataVal, "{"+fParts+"}", fmt.Sprintf("%v", fValue), 1)
137+
131138
// Reset the curly index back to -1 and reset ignores
132139
startCurly = -1
133140
startCurlyIgnore = []int{}
@@ -148,7 +155,7 @@ func generate(f *Faker, dataVal string) string {
148155
continue
149156
}
150157

151-
return dataVal
158+
return dataVal, nil
152159
}
153160

154161
// FixedWidthOptions defines values needed for csv generation
@@ -207,15 +214,20 @@ func fixeWidthFunc(f *Faker, co *FixedWidthOptions) (string, error) {
207214
if funcInfo == nil {
208215
// Try to run the function through generate
209216
for i := 0; i < co.RowCount; i++ {
210-
row = append(row, generate(f, field.Function))
217+
genStr, err := generate(f, field.Function)
218+
if err != nil {
219+
return "", err
220+
}
221+
222+
row = append(row, genStr)
211223
}
212224
} else {
213225
// Generate function value
214226
var err error
215227
for i := 0; i < co.RowCount; i++ {
216228
value, err = funcInfo.Generate(f, &field.Params, funcInfo)
217229
if err != nil {
218-
value = ""
230+
return "", err
219231
}
220232

221233
// Add value to row
@@ -491,7 +503,7 @@ func addGenerateLookup() {
491503
return nil, errors.New("string length is too large. limit to 1000 characters")
492504
}
493505

494-
return generate(f, str), nil
506+
return generate(f, str)
495507
},
496508
})
497509

generate_test.go

+55-31
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ import (
99

1010
func TestGenerate(t *testing.T) {
1111
output := ""
12+
var err error
1213

1314
numTests := 1000
1415
for i := 0; i < numTests; i++ {
15-
output = Generate("{firstname} {lastname} {email} #?#?#?")
16+
output, err = Generate("{firstname} {lastname} {email} #?#?#?")
17+
if err != nil {
18+
t.Error(err)
19+
}
1620
if strings.Contains(output, "{") || strings.Contains(output, "}") {
1721
t.Error("Output should not contain either { or }. Output: ", output)
1822
}
@@ -23,7 +27,10 @@ func TestGenerate_Sub(t *testing.T) {
2327
t.Run("Simple", func(t *testing.T) {
2428
Seed(11)
2529

26-
output := Generate("{randomstring:[{firstname},{lastname}]}")
30+
output, err := Generate("{randomstring:[{firstname},{lastname}]}")
31+
if err != nil {
32+
t.Error(err)
33+
}
2734
if output == "" {
2835
t.Error("Output was empty")
2936
}
@@ -32,7 +39,10 @@ func TestGenerate_Sub(t *testing.T) {
3239
t.Run("Complex", func(t *testing.T) {
3340
Seed(11)
3441

35-
output := Generate("{randomstring:[{randomstring:[{firstname},{lastname}]},{randomstring:[{firstname},{lastname}]}]}")
42+
output, err := Generate("{randomstring:[{randomstring:[{firstname},{lastname}]},{randomstring:[{firstname},{lastname}]}]}")
43+
if err != nil {
44+
t.Error(err)
45+
}
3646
if output == "" {
3747
t.Error("Output was empty")
3848
}
@@ -42,41 +52,55 @@ func TestGenerate_Sub(t *testing.T) {
4252
func ExampleGenerate() {
4353
Seed(11)
4454

45-
fmt.Println(Generate("{firstname} {lastname} ssn is {ssn} and lives at {street}"))
46-
fmt.Println(Generate("{sentence:3}"))
47-
fmt.Println(Generate("{shuffleints:[1,2,3]}"))
48-
fmt.Println(Generate("{randomint:[-1,2,3,-4]}"))
49-
fmt.Println(Generate("{randomuint:[1,2,3,4]}"))
50-
fmt.Println(Generate("{number:1,50}"))
51-
fmt.Println(Generate("{shufflestrings:[key:value,int:string,1:2,a:b]}"))
52-
53-
// Output: Sonny Stiedemann ssn is 279582238 and lives at 2759 Stationside
54-
// How shall cut.
55-
// [1 2 3]
56-
// 2
55+
genStr, _ := Generate("{firstname} {lastname} {email} #?#?#?")
56+
fmt.Println(genStr)
57+
genStr, _ = Generate("{sentence:3}")
58+
fmt.Println(genStr)
59+
genStr, _ = Generate("{shuffleints:[1,2,3]}")
60+
fmt.Println(genStr)
61+
genStr, _ = Generate("{randomint:[1,2,3,-4]}")
62+
fmt.Println(genStr)
63+
genStr, _ = Generate("{randomuint:[1,2,3,4]}")
64+
fmt.Println(genStr)
65+
genStr, _ = Generate("{number:1,50}")
66+
fmt.Println(genStr)
67+
genStr, _ = Generate("{shufflestrings:[key:value,int:string,1:2,a:b]}")
68+
fmt.Println(genStr)
69+
70+
// Output: Mollie Legros [email protected] 8K8b1M
71+
// Something am elsewhere.
72+
// [3 2 1]
5773
// 3
58-
// 47
59-
// [1:2 int:string a:b key:value]
74+
// 3
75+
// 18
76+
// [key:value a:b int:string 1:2]
6077
}
6178

6279
func ExampleFaker_Generate() {
6380
f := New(11)
6481

65-
fmt.Println(f.Generate("{firstname} {lastname} ssn is {ssn} and lives at {street}"))
66-
fmt.Println(f.Generate("{sentence:3}"))
67-
fmt.Println(f.Generate("{shuffleints:[1,2,3]}"))
68-
fmt.Println(f.Generate("{randomint:[1,2,3,-4]}"))
69-
fmt.Println(f.Generate("{randomuint:[1,2,3,4]}"))
70-
fmt.Println(f.Generate("{number:1,50}"))
71-
fmt.Println(f.Generate("{shufflestrings:[key:value,int:string,1:2,a:b]}"))
72-
73-
// Output: Sonny Stiedemann ssn is 279582238 and lives at 2759 Stationside
74-
// How shall cut.
75-
// [1 2 3]
76-
// 2
82+
genStr, _ := f.Generate("{firstname} {lastname} {email} #?#?#?")
83+
fmt.Println(genStr)
84+
genStr, _ = f.Generate("{sentence:3}")
85+
fmt.Println(genStr)
86+
genStr, _ = f.Generate("{shuffleints:[1,2,3]}")
87+
fmt.Println(genStr)
88+
genStr, _ = f.Generate("{randomint:[1,2,3,-4]}")
89+
fmt.Println(genStr)
90+
genStr, _ = f.Generate("{randomuint:[1,2,3,4]}")
91+
fmt.Println(genStr)
92+
genStr, _ = f.Generate("{number:1,50}")
93+
fmt.Println(genStr)
94+
genStr, _ = f.Generate("{shufflestrings:[key:value,int:string,1:2,a:b]}")
95+
fmt.Println(genStr)
96+
97+
// Output: Mollie Legros [email protected] 8K8b1M
98+
// Something am elsewhere.
99+
// [3 2 1]
100+
// 3
77101
// 3
78-
// 47
79-
// [1:2 int:string a:b key:value]
102+
// 18
103+
// [key:value a:b int:string 1:2]
80104
}
81105

82106
func BenchmarkGenerate(b *testing.B) {

hacker.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ func HackerPhrase() string { return hackerPhrase(GlobalFaker) }
1111
func (f *Faker) HackerPhrase() string { return hackerPhrase(f) }
1212

1313
func hackerPhrase(f *Faker) string {
14-
words := strings.Split(generate(f, getRandValue(f, []string{"hacker", "phrase"})), " ")
14+
genStr, _ := generate(f, getRandValue(f, []string{"hacker", "phrase"}))
15+
16+
words := strings.Split(genStr, " ")
1517
words[0] = strings.ToUpper(words[0][0:1]) + words[0][1:]
1618
return strings.Join(words, " ")
1719
}

0 commit comments

Comments
 (0)