1// Copyright 2020 CUE Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package exec
16
17import (
18 "context"
19 "testing"
20
21 "github.com/google/go-cmp/cmp"
22
23 "cuelang.org/go/cue"
24 "cuelang.org/go/internal/task"
25 "cuelang.org/go/pkg/internal"
26)
27
28func TestEnv(t *testing.T) {
29 testCases := []struct {
30 desc string
31 val string
32 env []string
33 }{
34 {
35 desc: "mapped",
36 val: `
37 cmd: "echo"
38 env: {
39 WHO: "World"
40 WHAT: "Hello"
41 WHEN: "Now!"
42 }
43 `,
44 env: []string{"WHO=World", "WHAT=Hello", "WHEN=Now!"},
45 },
46 {
47 desc: "list",
48 val: `
49 cmd: "echo"
50 env: ["WHO=World", "WHAT=Hello", "WHEN=Now!"]
51 `,
52 env: []string{"WHO=World", "WHAT=Hello", "WHEN=Now!"},
53 },
54 {
55 desc: "struct handles default values",
56 val: `
57 cmd: "echo"
58 env: {
59 WHEN: *"Now!" | string
60 HOW: *WHEN | string
61 }
62 `,
63 env: []string{"WHEN=Now!", "HOW=Now!"},
64 },
65 {
66 desc: "list handles default values",
67 val: `
68 cmd: "echo"
69 env: ["WHO=World", "WHAT=Hello", *"COMMAND=\(cmd)" | string]
70 `,
71 env: []string{"WHO=World", "WHAT=Hello", "COMMAND=echo"},
72 },
73 }
74 for _, tc := range testCases {
75 t.Run(tc.desc, func(t *testing.T) {
76 ctx := internal.NewContext()
77 v := ctx.CompileString(tc.val, cue.Filename(tc.desc))
78 if err := v.Err(); err != nil {
79 t.Fatal(err)
80 }
81
82 cmd, _, err := mkCommand(&task.Context{
83 Context: context.Background(),
84 Obj: v,
85 })
86 if err != nil {
87 t.Fatalf("mkCommand error = %v", err)
88 }
89
90 if diff := cmp.Diff(cmd.Env, tc.env); diff != "" {
91 t.Error(diff)
92 }
93 })
94 }
95}