From 594383f6c98ad3f9502b212aacd33d40947b1ef6 Mon Sep 17 00:00:00 2001 From: Horacio Duran Date: Sun, 19 Nov 2023 16:30:19 +0100 Subject: [PATCH] Add more test cases and fix bug Remove increase in x index count when iterating args sin mage file. --- mage/main_test.go | 102 +++++++++++++++++++++++++++++- mage/testdata/extra_args/extra.go | 35 ++++++++++ parse/parse.go | 3 +- 3 files changed, 137 insertions(+), 3 deletions(-) diff --git a/mage/main_test.go b/mage/main_test.go index 8f0c7cd..d8c6a0d 100644 --- a/mage/main_test.go +++ b/mage/main_test.go @@ -1881,7 +1881,7 @@ func TestExtraArgs(t *testing.T) { stdout := &bytes.Buffer{} inv := Invocation{ Dir: "./testdata/extra_args", - Stderr: os.Stderr, + Stderr: ioutil.Discard, Stdout: stdout, Args: []string{"targetOne"}, ExtraArgs: []string{"--", "-baz", "foo", "bar"}, @@ -1897,6 +1897,106 @@ func TestExtraArgs(t *testing.T) { } } +func TestExtraArgsWithContext(t *testing.T) { + stdout := &bytes.Buffer{} + inv := Invocation{ + Dir: "./testdata/extra_args", + Stderr: ioutil.Discard, + Stdout: stdout, + Args: []string{"targetTwo"}, + ExtraArgs: []string{"--", "-baz", "foo", "bar"}, + } + + code := Invoke(inv) + if code != 0 { + t.Fatalf("expected 0, but got %v", code) + } + expected := "Context is nil: false\nmg.ExtraArgs{\"-baz\", \"foo\", \"bar\"}\n" + if stdout.String() != expected { + t.Fatalf("expected %q, but got %q", expected, stdout.String()) + } +} + +func TestExtraArgsWithContextAndString(t *testing.T) { + stdout := &bytes.Buffer{} + inv := Invocation{ + Dir: "./testdata/extra_args", + Stderr: ioutil.Discard, + Stdout: stdout, + Args: []string{"targetThree", "stringvalue"}, + ExtraArgs: []string{"--", "-baz", "foo", "bar"}, + } + + code := Invoke(inv) + if code != 0 { + t.Fatalf("expected 0, but got %v", code) + } + expected := "Context is nil: false\nmg.ExtraArgs{\"-baz\", \"foo\", \"bar\"}\nstringvalue\n" + if stdout.String() != expected { + t.Fatalf("expected %q, but got %q", expected, stdout.String()) + } +} + +func TestExtraArgsWithContextAndStringAndInt(t *testing.T) { + stdout := &bytes.Buffer{} + inv := Invocation{ + Dir: "./testdata/extra_args", + Stderr: ioutil.Discard, + Stdout: stdout, + Args: []string{"targetFour", "stringvalue", "2"}, + ExtraArgs: []string{"--", "-baz", "foo", "bar"}, + } + + code := Invoke(inv) + if code != 0 { + t.Fatalf("expected 0, but got %v", code) + } + expected := "Context is nil: false\nmg.ExtraArgs{\"-baz\", \"foo\", \"bar\"}\nstringvalue\n2\n" + if stdout.String() != expected { + t.Fatalf("expected %q, but got %q", expected, stdout.String()) + } +} + +func TestExtraArgsWithoutContextAndStringAndInt(t *testing.T) { + stdout := &bytes.Buffer{} + inv := Invocation{ + Dir: "./testdata/extra_args", + Stderr: ioutil.Discard, + Stdout: stdout, + Args: []string{"targetFive", "stringvalue", "2"}, + ExtraArgs: []string{"--", "-baz", "foo", "bar"}, + } + + code := Invoke(inv) + if code != 0 { + t.Fatalf("expected 0, but got %v", code) + } + expected := "mg.ExtraArgs{\"-baz\", \"foo\", \"bar\"}\nstringvalue\n2\n" + if stdout.String() != expected { + t.Fatalf("expected %q, but got %q", expected, stdout.String()) + } +} + +func TestExtraArgsWithoutContextAndStringAndIntNonOrdered(t *testing.T) { + stdout := &bytes.Buffer{} + inv := Invocation{ + Dir: "./testdata/extra_args", + Stderr: ioutil.Discard, + Stdout: stdout, + Args: []string{"targetSix", "stringvalue", "2"}, + ExtraArgs: []string{"--", "-baz", "foo", "bar"}, + } + + code := Invoke(inv) + if code != 0 { + t.Fatalf("expected 0, but got %v", code) + } + expected := "mg.ExtraArgs{\"-baz\", \"foo\", \"bar\"}\nstringvalue\n2\n" + if stdout.String() != expected { + t.Fatalf("expected %q, but got %q", expected, stdout.String()) + } +} + // / This code liberally borrowed from https://github.com/rsc/goversion/blob/master/version/exe.go type ( diff --git a/mage/testdata/extra_args/extra.go b/mage/testdata/extra_args/extra.go index a035d39..84910bb 100644 --- a/mage/testdata/extra_args/extra.go +++ b/mage/testdata/extra_args/extra.go @@ -4,6 +4,7 @@ package main import ( + "context" "fmt" "github.com/magefile/mage/mg" @@ -12,3 +13,37 @@ import ( func TargetOne(extra mg.ExtraArgs) { fmt.Printf("%#v\n", extra) } + +func TargetTwo(ctx context.Context, extra mg.ExtraArgs) { + fmt.Printf("Context is nil: %t\n", ctx == nil) + fmt.Printf("%#v\n", extra) +} + +func TargetThree(ctx context.Context, extra mg.ExtraArgs, aString string) error { + fmt.Printf("Context is nil: %t\n", ctx == nil) + fmt.Printf("%#v\n", extra) + fmt.Printf("%s\n", aString) + return nil +} + +func TargetFour(ctx context.Context, extra mg.ExtraArgs, aString string, anInt int) error { + fmt.Printf("Context is nil: %t\n", ctx == nil) + fmt.Printf("%#v\n", extra) + fmt.Printf("%s\n", aString) + fmt.Printf("%d\n", anInt) + return nil +} + +func TargetFive(extra mg.ExtraArgs, aString string, anInt int) error { + fmt.Printf("%#v\n", extra) + fmt.Printf("%s\n", aString) + fmt.Printf("%d\n", anInt) + return nil +} + +func TargetSix(aString string, anInt int, extra mg.ExtraArgs) error { + fmt.Printf("%#v\n", extra) + fmt.Printf("%s\n", aString) + fmt.Printf("%d\n", anInt) + return nil +} diff --git a/parse/parse.go b/parse/parse.go index 8638c1a..49cc0d1 100644 --- a/parse/parse.go +++ b/parse/parse.go @@ -119,8 +119,7 @@ func (f Function) ExecCode() string { switch arg.Type { case "mg.ExtraArgs": parseargs += fmt.Sprintf(` - arg%d := args.ExtraArgs - x++`, x) + arg%d := args.ExtraArgs`, x) // do not advance x index, this is not part of .Args case "string": parseargs += fmt.Sprintf(` arg%d := args.Args[x]