Skip to content

Commit

Permalink
Replace tool args as well [maven/gradle]. Fixes #42
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Mar 17, 2021
1 parent 939297a commit c5630fa
Show file tree
Hide file tree
Showing 5 changed files with 214 additions and 15 deletions.
2 changes: 1 addition & 1 deletion gum/flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func ParseArgs(args []string) ParsedArgs {
mode := 0

for i := 0; i < len(args); i++ {
s := args[i]
s := strings.TrimSpace(args[i])

switch mode {
case 0:
Expand Down
19 changes: 12 additions & 7 deletions gum/gradle.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ func (c *GradleCommand) doConfigureGradle() {
c.config.gradle.setReplace(!skipReplace)
}
c.debugConfig()
otargs := c.args.Tool
oargs := c.args.Args
rargs := replaceGradleTasks(c.config, c.args)
rtargs, rargs := replaceGradleTasks(c.config, c.args)

if len(c.explicitProjectDir) > 0 {
banner = append(banner, "to run project at '"+c.explicitProjectDir+"':")
Expand Down Expand Up @@ -105,10 +106,10 @@ func (c *GradleCommand) doConfigureGradle() {
}
}

args = appendSafe(args, c.args.Tool)
args = appendSafe(args, rtargs)
c.args.Args = appendSafe(args, rargs)

c.debugGradle(oargs, rargs)
c.debugGradle(otargs, oargs, rtargs, rargs)

if !c.config.general.quiet {
fmt.Println(strings.Join(banner, " "))
Expand All @@ -129,7 +130,7 @@ func (c *GradleCommand) debugConfig() {
}
}

func (c *GradleCommand) debugGradle(oargs []string, rargs []string) {
func (c *GradleCommand) debugGradle(otargs []string, oargs []string, rtargs []string, rargs []string) {
if c.config.general.debug {
fmt.Println("nearest = ", c.args.HasGumFlag("gn"))
fmt.Println("replace = ", c.config.gradle.replace)
Expand All @@ -141,6 +142,10 @@ func (c *GradleCommand) debugGradle(oargs []string, rargs []string) {
fmt.Println("explicitBuildFile = ", c.explicitBuildFile)
fmt.Println("explicitSettingsFile = ", c.explicitSettingsFile)
fmt.Println("explicitProjectDir = ", c.explicitProjectDir)
fmt.Println("original tool args = ", otargs)
if c.config.gradle.replace {
fmt.Println("replaced tool args = ", rtargs)
}
fmt.Println("original args = ", oargs)
if c.config.gradle.replace {
fmt.Println("replaced args = ", rargs)
Expand All @@ -150,12 +155,12 @@ func (c *GradleCommand) debugGradle(oargs []string, rargs []string) {
}
}

func replaceGradleTasks(config *Config, args *ParsedArgs) []string {
func replaceGradleTasks(config *Config, args *ParsedArgs) ([]string, []string) {
if config.gradle.replace {
return replaceArgs(args.Args, config.gradle.mappings, true)
return replaceArgs(args.Tool, config.gradle.mappings, true), replaceArgs(args.Args, config.gradle.mappings, true)
}

return args.Args
return args.Tool, args.Args
}

// FindGradle finds and executes gradlew/gradle
Expand Down
97 changes: 97 additions & 0 deletions gum/gradle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,103 @@ import (
"testing"
)

func TestGradleTaskSubstitutionAppendFlag(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "gradle", "bin"))
pwd, _ := filepath.Abs(filepath.Join("..", "tests", "gradle", "single-with-wrapper"))

context := testContext{
quiet: true,
explicit: true,
windows: false,
workingDir: pwd,
paths: []string{bin}}

// when:
args := ParseArgs([]string{"-gq", "verify", "-S"})
cmd := FindGradle(context, &args)

// then:
if cmd == nil {
t.Error("Expected a command but got nil")
return
}

var checks = []struct {
title, actual, expected string
}{
{"Executable", cmd.executable, filepath.Join(pwd, "gradlew")},
{"RootBuildFile", cmd.rootBuildFile, filepath.Join(pwd, "build.gradle")},
{"BuildFile", cmd.buildFile, filepath.Join(pwd, "build.gradle")},
{"SettingsFile", cmd.settingsFile, filepath.Join(pwd, "settings.gradle")},
{"ExplicitBuildFile", cmd.explicitBuildFile, ""},
{"ExplicitSettingsFile", cmd.explicitSettingsFile, ""},
{"ExplicitProjectDir", cmd.explicitProjectDir, ""},
}

for _, check := range checks {
if check.actual != check.expected {
t.Errorf("%s: got %s, want %s", check.title, check.actual, check.expected)
}
}

cmd.doConfigureGradle()
if cmd.args.Args[0] != "-b" || cmd.args.Args[1] != filepath.Join(pwd, "build.gradle") {
t.Errorf("args: invalid build file")
}
if len(cmd.args.Args) != 3 && cmd.args.Args[len(cmd.args.Args)-2] != "build" {
t.Errorf("args: got verify, want build")
}
}

func TestGradleTaskSubstitutionPrependFlag(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "gradle", "bin"))
pwd, _ := filepath.Abs(filepath.Join("..", "tests", "gradle", "single-with-wrapper"))

context := testContext{
quiet: true,
explicit: true,
windows: false,
workingDir: pwd,
paths: []string{bin}}

// when:
args := ParseArgs([]string{"-gq", "-S", "verify"})
cmd := FindGradle(context, &args)

// then:
if cmd == nil {
t.Error("Expected a command but got nil")
return
}

var checks = []struct {
title, actual, expected string
}{
{"Executable", cmd.executable, filepath.Join(pwd, "gradlew")},
{"RootBuildFile", cmd.rootBuildFile, filepath.Join(pwd, "build.gradle")},
{"BuildFile", cmd.buildFile, filepath.Join(pwd, "build.gradle")},
{"SettingsFile", cmd.settingsFile, filepath.Join(pwd, "settings.gradle")},
{"ExplicitBuildFile", cmd.explicitBuildFile, ""},
{"ExplicitSettingsFile", cmd.explicitSettingsFile, ""},
{"ExplicitProjectDir", cmd.explicitProjectDir, ""},
}

for _, check := range checks {
if check.actual != check.expected {
t.Errorf("%s: got %s, want %s", check.title, check.actual, check.expected)
}
}

cmd.doConfigureGradle()
if cmd.args.Args[0] != "-b" || cmd.args.Args[1] != filepath.Join(pwd, "build.gradle") {
t.Errorf("args: invalid build file")
}
if len(cmd.args.Args) != 3 && cmd.args.Args[len(cmd.args.Args)-1] != "build" {
t.Errorf("args: got verify, want build")
}
}
func TestGradleSingleWithWrapper(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "gradle", "bin"))
Expand Down
19 changes: 12 additions & 7 deletions gum/maven.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ func (c *MavenCommand) doConfigureMaven() {
c.config.gradle.setReplace(!skipReplace)
}
c.debugConfig()
otargs := c.args.Tool
oargs := c.args.Args
rargs := replaceMavenGoals(c.config, c.args)
rtargs, rargs := replaceMavenGoals(c.config, c.args)

if len(c.explicitBuildFile) > 0 {
args = append(args, "-f")
Expand All @@ -75,10 +76,10 @@ func (c *MavenCommand) doConfigureMaven() {
banner = append(banner, "to run buildFile '"+c.rootBuildFile+"':")
}

args = appendSafe(args, c.args.Tool)
args = appendSafe(args, rtargs)
c.args.Args = appendSafe(args, rargs)

c.debugMaven(oargs, rargs)
c.debugMaven(otargs, oargs, rtargs, rargs)

if !c.config.general.quiet {
fmt.Println(strings.Join(banner, " "))
Expand All @@ -99,14 +100,18 @@ func (c *MavenCommand) debugConfig() {
}
}

func (c *MavenCommand) debugMaven(oargs []string, rargs []string) {
func (c *MavenCommand) debugMaven(otargs []string, oargs []string, rtargs []string, rargs []string) {
if c.config.general.debug {
fmt.Println("nearest = ", c.args.HasGumFlag("gn"))
fmt.Println("replace = ", c.config.maven.replace)
fmt.Println("pwd = ", c.context.GetWorkingDir())
fmt.Println("rootBuildFile = ", c.rootBuildFile)
fmt.Println("buildFile = ", c.buildFile)
fmt.Println("explicitBuildFile = ", c.explicitBuildFile)
fmt.Println("original tool args = ", otargs)
if c.config.maven.replace {
fmt.Println("replaced tool args = ", rtargs)
}
fmt.Println("original args = ", oargs)
if c.config.maven.replace {
fmt.Println("replaced args = ", rargs)
Expand All @@ -116,12 +121,12 @@ func (c *MavenCommand) debugMaven(oargs []string, rargs []string) {
}
}

func replaceMavenGoals(config *Config, args *ParsedArgs) []string {
func replaceMavenGoals(config *Config, args *ParsedArgs) ([]string, []string) {
if config.maven.replace {
return replaceArgs(args.Args, config.maven.mappings, false)
return replaceArgs(args.Tool, config.maven.mappings, false), replaceArgs(args.Args, config.maven.mappings, false)
}

return args.Args
return args.Tool, args.Args
}

// FindMaven finds and executes mvnw/mvn
Expand Down
92 changes: 92 additions & 0 deletions gum/maven_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,98 @@ import (
"testing"
)

func TestMavenGoalSubstitutionAppendFlag(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "maven", "bin"))
pwd, _ := filepath.Abs(filepath.Join("..", "tests", "maven", "single-with-wrapper"))

context := testContext{
quiet: true,
explicit: true,
windows: false,
workingDir: pwd,
paths: []string{bin}}

// when:
args := ParseArgs([]string{"-gq", "build", "-X"})
cmd := FindMaven(context, &args)

// then:
if cmd == nil {
t.Error("Expected a command but got nil")
return
}

var checks = []struct {
title, actual, expected string
}{
{"Executable", cmd.executable, filepath.Join(pwd, "mvnw")},
{"RootBuildFile", cmd.rootBuildFile, filepath.Join(pwd, "pom.xml")},
{"BuildFile", cmd.buildFile, filepath.Join(pwd, "pom.xml")},
{"ExplicitBuildFile", cmd.explicitBuildFile, ""},
}

for _, check := range checks {
if check.actual != check.expected {
t.Errorf("%s: got %s, want %s", check.title, check.actual, check.expected)
}
}

cmd.doConfigureMaven()
if cmd.args.Args[0] != "-f" || cmd.args.Args[1] != filepath.Join(pwd, "pom.xml") {
t.Errorf("args: invalid build file")
}
if len(cmd.args.Args) != 3 && cmd.args.Args[len(cmd.args.Args)-2] != "verify" {
t.Errorf("args: got build, want verify")
}
}

func TestMavenGoalSubstitutionPrependFlag(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "maven", "bin"))
pwd, _ := filepath.Abs(filepath.Join("..", "tests", "maven", "single-with-wrapper"))

context := testContext{
quiet: true,
explicit: true,
windows: false,
workingDir: pwd,
paths: []string{bin}}

// when:
args := ParseArgs([]string{"-gq", "-X", "build"})
cmd := FindMaven(context, &args)

// then:
if cmd == nil {
t.Error("Expected a command but got nil")
return
}

var checks = []struct {
title, actual, expected string
}{
{"Executable", cmd.executable, filepath.Join(pwd, "mvnw")},
{"RootBuildFile", cmd.rootBuildFile, filepath.Join(pwd, "pom.xml")},
{"BuildFile", cmd.buildFile, filepath.Join(pwd, "pom.xml")},
{"ExplicitBuildFile", cmd.explicitBuildFile, ""},
}

for _, check := range checks {
if check.actual != check.expected {
t.Errorf("%s: got %s, want %s", check.title, check.actual, check.expected)
}
}

cmd.doConfigureMaven()
if cmd.args.Args[0] != "-f" || cmd.args.Args[1] != filepath.Join(pwd, "pom.xml") {
t.Errorf("args: invalid build file")
}
if len(cmd.args.Args) != 3 && cmd.args.Args[len(cmd.args.Args)-1] != "verify" {
t.Errorf("args: got build, want verify")
}
}

func TestMavenSingleWithWrapper(t *testing.T) {
// given:
bin, _ := filepath.Abs(filepath.Join("..", "tests", "maven", "bin"))
Expand Down

0 comments on commit c5630fa

Please sign in to comment.