summaryrefslogtreecommitdiff
path: root/tests/integration
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2019-04-09 16:31:05 -0700
committerGitHub <noreply@github.com>2019-04-09 16:31:05 -0700
commit67e97968fdb190cbdbbe511c8d6f816ff65eb124 (patch)
treede763083c0eeebe58ab679f595d4e95214534c84 /tests/integration
parent32235c3c65d9c5fdc7171077f603b203197088a2 (diff)
parentac0012f4f6d2cde52490294e1fb262770f95ba9f (diff)
Merge pull request #529 from hairyhenderson/output-file-template-288
Adding --output-map argument for templating output paths
Diffstat (limited to 'tests/integration')
-rw-r--r--tests/integration/basic_test.go6
-rw-r--r--tests/integration/inputdir_test.go85
2 files changed, 91 insertions, 0 deletions
diff --git a/tests/integration/basic_test.go b/tests/integration/basic_test.go
index 9789716a..31018806 100644
--- a/tests/integration/basic_test.go
+++ b/tests/integration/basic_test.go
@@ -140,6 +140,12 @@ func (s *BasicSuite) TestFlagRules(c *C) {
ExitCode: 1,
Err: "--output-dir can not be used together with --out",
})
+
+ result = icmd.RunCommand(GomplateBin, "--output-map", ".", "--out", "param")
+ result.Assert(c, icmd.Expected{
+ ExitCode: 1,
+ Err: "--output-map can not be used together with --out or --output-dir",
+ })
}
func (s *BasicSuite) TestDelimsChangedThroughOpts(c *C) {
diff --git a/tests/integration/inputdir_test.go b/tests/integration/inputdir_test.go
index a9df9823..341aab57 100644
--- a/tests/integration/inputdir_test.go
+++ b/tests/integration/inputdir_test.go
@@ -24,6 +24,11 @@ var _ = Suite(&InputDirSuite{})
func (s *InputDirSuite) SetUpTest(c *C) {
s.tmpDir = fs.NewDir(c, "gomplate-inttests",
fs.WithFile("config.yml", "one: eins\ntwo: deux\n"),
+ fs.WithFile("filemap.json", `{"eins.txt":"uno","deux.txt":"dos"}`),
+ fs.WithFile("out.t", `{{- /* .in may contain a directory name - we want to preserve that */ -}}
+{{ $f := filepath.Base .in -}}
+out/{{ .in | strings.ReplaceAll $f (index .filemap $f) }}.out
+`),
fs.WithDir("in",
fs.WithFile("eins.txt", `{{ (ds "config").one }}`, fs.WithMode(0644)),
fs.WithDir("inner",
@@ -116,6 +121,86 @@ func (s *InputDirSuite) TestInputDirWithModeOverride(c *C) {
}
}
+func (s *InputDirSuite) TestOutputMapInline(c *C) {
+ result := icmd.RunCmd(icmd.Command(GomplateBin,
+ "--input-dir", s.tmpDir.Join("in"),
+ "--output-map", `OUT/{{ strings.ToUpper .in }}`,
+ "-d", "config.yml",
+ ), func(c *icmd.Cmd) {
+ c.Dir = s.tmpDir.Path()
+ })
+ result.Assert(c, icmd.Success)
+
+ files, err := ioutil.ReadDir(s.tmpDir.Join("OUT"))
+ assert.NilError(c, err)
+ tassert.Len(c, files, 2)
+
+ files, err = ioutil.ReadDir(s.tmpDir.Join("OUT", "INNER"))
+ assert.NilError(c, err)
+ tassert.Len(c, files, 1)
+
+ testdata := []struct {
+ path string
+ mode os.FileMode
+ content string
+ }{
+ {s.tmpDir.Join("OUT", "EINS.TXT"), 0644, "eins"},
+ {s.tmpDir.Join("OUT", "INNER", "DEUX.TXT"), 0644, "deux"},
+ }
+ for _, v := range testdata {
+ info, err := os.Stat(v.path)
+ assert.NilError(c, err)
+ // chmod support on Windows is pretty weak for now
+ if runtime.GOOS != "windows" {
+ assert.Equal(c, v.mode, info.Mode())
+ }
+ content, err := ioutil.ReadFile(v.path)
+ assert.NilError(c, err)
+ assert.Equal(c, v.content, string(content))
+ }
+}
+
+func (s *InputDirSuite) TestOutputMapExternal(c *C) {
+ result := icmd.RunCmd(icmd.Command(GomplateBin,
+ "--input-dir", s.tmpDir.Join("in"),
+ "--output-map", `{{ template "out" . }}`,
+ "-t", "out=out.t",
+ "-c", "filemap.json",
+ "-d", "config.yml",
+ ), func(c *icmd.Cmd) {
+ c.Dir = s.tmpDir.Path()
+ })
+ result.Assert(c, icmd.Success)
+
+ files, err := ioutil.ReadDir(s.tmpDir.Join("out"))
+ assert.NilError(c, err)
+ tassert.Len(c, files, 2)
+
+ files, err = ioutil.ReadDir(s.tmpDir.Join("out", "inner"))
+ assert.NilError(c, err)
+ tassert.Len(c, files, 1)
+
+ testdata := []struct {
+ path string
+ mode os.FileMode
+ content string
+ }{
+ {s.tmpDir.Join("out", "uno.out"), 0644, "eins"},
+ {s.tmpDir.Join("out", "inner", "dos.out"), 0644, "deux"},
+ }
+ for _, v := range testdata {
+ info, err := os.Stat(v.path)
+ assert.NilError(c, err)
+ // chmod support on Windows is pretty weak for now
+ if runtime.GOOS != "windows" {
+ assert.Equal(c, v.mode, info.Mode())
+ }
+ content, err := ioutil.ReadFile(v.path)
+ assert.NilError(c, err)
+ assert.Equal(c, v.content, string(content))
+ }
+}
+
func (s *InputDirSuite) TestDefaultOutputDir(c *C) {
result := icmd.RunCmd(icmd.Command(GomplateBin,
"--input-dir", s.tmpDir.Join("in"),