|
10 | 10 | package main |
11 | 11 |
|
12 | 12 | import ( |
13 | | - "io/ioutil" |
| 13 | + "io" |
14 | 14 | "os" |
15 | 15 | "path/filepath" |
16 | 16 | "strings" |
@@ -76,6 +76,14 @@ var goldenLinecomment = []Golden{ |
76 | 76 | {"dayWithLinecomment", linecommentIn}, |
77 | 77 | } |
78 | 78 |
|
| 79 | +var goldenFlagValue = []Golden{ |
| 80 | + {"flagvalue", dayIn}, |
| 81 | +} |
| 82 | + |
| 83 | +var goldenPflagValue = []Golden{ |
| 84 | + {"pflagvalue", dayIn}, |
| 85 | +} |
| 86 | + |
79 | 87 | var goldenTypedErrors = []Golden{ |
80 | 88 | {"typedErrors", typedErrorsIn}, |
81 | 89 | } |
@@ -327,49 +335,102 @@ const ( |
327 | 335 |
|
328 | 336 | func TestGolden(t *testing.T) { |
329 | 337 | 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 | + }) |
331 | 342 | } |
332 | 343 | 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 | + }) |
334 | 348 | } |
335 | 349 | 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 | + }) |
337 | 354 | } |
338 | 355 | 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 | + }) |
340 | 360 | } |
341 | 361 | 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 | + }) |
343 | 366 | } |
344 | 367 | 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 | + }) |
346 | 373 | } |
347 | 374 | 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 | + }) |
349 | 379 | } |
350 | 380 | 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 | + }) |
352 | 385 | } |
353 | 386 | 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 | + }) |
355 | 391 | } |
356 | 392 | 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 | + }) |
358 | 397 | } |
359 | 398 | 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 | + }) |
361 | 404 | } |
362 | 405 | 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 | + }) |
364 | 422 | } |
| 423 | + |
365 | 424 | 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 | + }) |
367 | 429 | } |
368 | 430 | } |
369 | 431 |
|
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() |
373 | 434 |
|
374 | 435 | var g Generator |
375 | 436 | file := test.name + ".go" |
@@ -397,29 +458,35 @@ func runGoldenTest(t *testing.T, test Golden, |
397 | 458 | if len(tokens) != 3 { |
398 | 459 | t.Fatalf("%s: need type declaration on first line", test.name) |
399 | 460 | } |
400 | | - g.generate(tokens[1], generateJSON, generateYAML, generateSQL, generateText, generateGQLGen, "noop", trimPrefix, prefix, linecomment, generateValuesMethod, useTypedErrors) |
| 461 | + g.generate(tokens[1], opts) |
| 462 | + |
401 | 463 | 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 { |
403 | 470 | // 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) |
410 | 477 | } |
411 | 478 | } |
412 | 479 |
|
413 | | -func loadGolden(name string) string { |
| 480 | +func loadGolden(name string) (string, error) { |
414 | 481 | fh, err := os.Open("testdata/" + name + ".golden") |
415 | 482 | if err != nil { |
416 | | - return "" |
| 483 | + return "", err |
417 | 484 | } |
418 | 485 | defer fh.Close() |
419 | | - b, err := ioutil.ReadAll(fh) |
| 486 | + b, err := io.ReadAll(fh) |
420 | 487 | if err != nil { |
421 | | - return "" |
| 488 | + return "", err |
422 | 489 | } |
423 | | - return string(b) |
| 490 | + return string(b), nil |
424 | 491 |
|
425 | 492 | } |
0 commit comments