Skip to content

Commit 5dae614

Browse files
authored
Merge pull request #120 from dmarkham/pr-109
Pr 109
2 parents 17a8006 + 18b1232 commit 5dae614

File tree

5 files changed

+388
-70
lines changed

5 files changed

+388
-70
lines changed

enumer.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,30 @@ func (g *Generator) buildYAMLMethods(runs [][]Value, typeName string, runsThresh
215215
// We rely on the %[1]sString method to provide typed errors when enabled
216216
g.Printf(yamlMethods, typeName)
217217
}
218+
219+
// Arguments to format are: [1]: type name
220+
const flagValueMethodSet = `
221+
// Set allows flag and pflag libraries to set a value dynamically.
222+
func (i *%[1]s) Set(value string) error {
223+
var err error
224+
*i, err = %[1]sString(value)
225+
return err
226+
}
227+
`
228+
229+
// Arguments to format are: [1]: type name
230+
const pflagValueMethodType = `
231+
// Type returns a string that represents all possible values to this type joined by '|'.
232+
func (%[1]s) Type() string {
233+
return strings.Join(_%[1]sNames, "|")
234+
}
235+
`
236+
237+
func (g *Generator) buildFlagMethods(runs [][]Value, typeName string, runsThreshold int) {
238+
g.Printf(flagValueMethodSet, typeName)
239+
}
240+
241+
func (g *Generator) buildPflagMethods(runs [][]Value, typeName string, runsThreshold int) {
242+
g.Printf(flagValueMethodSet, typeName)
243+
g.Printf(pflagValueMethodType, typeName)
244+
}

golden_test.go

Lines changed: 97 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
package main
1111

1212
import (
13-
"io/ioutil"
13+
"io"
1414
"os"
1515
"path/filepath"
1616
"strings"
@@ -76,6 +76,14 @@ var goldenLinecomment = []Golden{
7676
{"dayWithLinecomment", linecommentIn},
7777
}
7878

79+
var goldenFlagValue = []Golden{
80+
{"flagvalue", dayIn},
81+
}
82+
83+
var goldenPflagValue = []Golden{
84+
{"pflagvalue", dayIn},
85+
}
86+
7987
var goldenTypedErrors = []Golden{
8088
{"typedErrors", typedErrorsIn},
8189
}
@@ -327,49 +335,102 @@ const (
327335

328336
func TestGolden(t *testing.T) {
329337
for _, test := range golden {
330-
runGoldenTest(t, test, false, false, false, false, false, false, true, "", "", false)
338+
runGoldenTest(t, test, generateOptions{
339+
transformMethod: "noop",
340+
includeValuesMethod: true,
341+
})
331342
}
332343
for _, test := range goldenJSON {
333-
runGoldenTest(t, test, true, false, false, false, false, false, false, "", "", false)
344+
runGoldenTest(t, test, generateOptions{
345+
includeJSON: true,
346+
transformMethod: "noop",
347+
})
334348
}
335349
for _, test := range goldenText {
336-
runGoldenTest(t, test, false, false, false, true, false, false, false, "", "", false)
350+
runGoldenTest(t, test, generateOptions{
351+
includeText: true,
352+
transformMethod: "noop",
353+
})
337354
}
338355
for _, test := range goldenYAML {
339-
runGoldenTest(t, test, false, true, false, false, false, false, false, "", "", false)
356+
runGoldenTest(t, test, generateOptions{
357+
includeYAML: true,
358+
transformMethod: "noop",
359+
})
340360
}
341361
for _, test := range goldenSQL {
342-
runGoldenTest(t, test, false, false, true, false, false, false, false, "", "", false)
362+
runGoldenTest(t, test, generateOptions{
363+
includeSQL: true,
364+
transformMethod: "noop",
365+
})
343366
}
344367
for _, test := range goldenJSONAndSQL {
345-
runGoldenTest(t, test, true, false, true, false, false, false, false, "", "", false)
368+
runGoldenTest(t, test, generateOptions{
369+
includeJSON: true,
370+
includeSQL: true,
371+
transformMethod: "noop",
372+
})
346373
}
347374
for _, test := range goldenGQLGen {
348-
runGoldenTest(t, test, false, false, false, false, false, true, false, "", "", false)
375+
runGoldenTest(t, test, generateOptions{
376+
includeGQLGen: true,
377+
transformMethod: "noop",
378+
})
349379
}
350380
for _, test := range goldenTrimPrefix {
351-
runGoldenTest(t, test, false, false, false, false, false, false, false, "Day", "", false)
381+
runGoldenTest(t, test, generateOptions{
382+
trimPrefix: "Day",
383+
transformMethod: "noop",
384+
})
352385
}
353386
for _, test := range goldenTrimPrefixMultiple {
354-
runGoldenTest(t, test, false, false, false, false, false, false, false, "Day,Night", "", false)
387+
runGoldenTest(t, test, generateOptions{
388+
trimPrefix: "Day,Night",
389+
transformMethod: "noop",
390+
})
355391
}
356392
for _, test := range goldenWithPrefix {
357-
runGoldenTest(t, test, false, false, false, false, false, false, false, "", "Day", false)
393+
runGoldenTest(t, test, generateOptions{
394+
addPrefix: "Day",
395+
transformMethod: "noop",
396+
})
358397
}
359398
for _, test := range goldenTrimAndAddPrefix {
360-
runGoldenTest(t, test, false, false, false, false, false, false, false, "Day", "Night", false)
399+
runGoldenTest(t, test, generateOptions{
400+
trimPrefix: "Day",
401+
addPrefix: "Night",
402+
transformMethod: "noop",
403+
})
361404
}
362405
for _, test := range goldenLinecomment {
363-
runGoldenTest(t, test, false, false, false, false, true, false, false, "", "", false)
406+
runGoldenTest(t, test, generateOptions{
407+
transformMethod: "noop",
408+
lineComment: true,
409+
})
410+
}
411+
for _, test := range goldenFlagValue {
412+
runGoldenTest(t, test, generateOptions{
413+
transformMethod: "noop",
414+
includeFlagMethods: true,
415+
})
416+
}
417+
for _, test := range goldenPflagValue {
418+
runGoldenTest(t, test, generateOptions{
419+
transformMethod: "noop",
420+
includePflagMethods: true,
421+
})
364422
}
423+
365424
for _, test := range goldenTypedErrors {
366-
runGoldenTest(t, test, false, false, false, false, false, false, false, "", "", true)
425+
runGoldenTest(t, test, generateOptions{
426+
transformMethod: "noop",
427+
useTypedErrors: true,
428+
})
367429
}
368430
}
369431

370-
func runGoldenTest(t *testing.T, test Golden,
371-
generateJSON, generateYAML, generateSQL, generateText, linecomment, generateGQLGen, generateValuesMethod bool,
372-
trimPrefix string, prefix string, useTypedErrors bool) {
432+
func runGoldenTest(t *testing.T, test Golden, opts generateOptions) {
433+
t.Helper()
373434

374435
var g Generator
375436
file := test.name + ".go"
@@ -397,29 +458,35 @@ func runGoldenTest(t *testing.T, test Golden,
397458
if len(tokens) != 3 {
398459
t.Fatalf("%s: need type declaration on first line", test.name)
399460
}
400-
g.generate(tokens[1], generateJSON, generateYAML, generateSQL, generateText, generateGQLGen, "noop", trimPrefix, prefix, linecomment, generateValuesMethod, useTypedErrors)
461+
g.generate(tokens[1], opts)
462+
401463
got := string(g.format())
402-
if got != loadGolden(test.name) {
464+
expected, err := loadGolden(test.name)
465+
if err != nil {
466+
t.Fatalf("unexpected error while loading golden %q: %v", test.name, err)
467+
}
468+
469+
if got != expected {
403470
// Use this to help build a golden text when changes are needed
404-
// goldenFile := fmt.Sprintf("./testdata/%v.golden", test.name)
405-
// err = os.WriteFile(goldenFile, []byte(got), 0644)
406-
// if err != nil {
407-
// t.Error(err)
408-
// }
409-
t.Errorf("%s: got\n====\n%s====\nexpected\n====%s", test.name, got, loadGolden(test.name))
471+
//goldenFile := fmt.Sprintf("./testdata/%v.golden", test.name)
472+
//err = ioutil.WriteFile(goldenFile, []byte(got), 0644)
473+
//if err != nil {
474+
// t.Error(err)
475+
//}
476+
t.Errorf("%s: got\n====\n%s====\nexpected\n====%s", test.name, got, expected)
410477
}
411478
}
412479

413-
func loadGolden(name string) string {
480+
func loadGolden(name string) (string, error) {
414481
fh, err := os.Open("testdata/" + name + ".golden")
415482
if err != nil {
416-
return ""
483+
return "", err
417484
}
418485
defer fh.Close()
419-
b, err := ioutil.ReadAll(fh)
486+
b, err := io.ReadAll(fh)
420487
if err != nil {
421-
return ""
488+
return "", err
422489
}
423-
return string(b)
490+
return string(b), nil
424491

425492
}

0 commit comments

Comments
 (0)