mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-26 17:01:04 -06:00
cf9499cb78
Previously we used the native slash type for the host platform, but that leads to issues if the same configuration is applied on both Windows and non-Windows systems. Since Windows supports slashes and backslashes, we can safely return always slashes here and require that users combine the result with subsequent path parts using slashes, like: "${path.module}/foo/bar" Previously the above would lead to an error on Windows if path.module contained any backslashes. This is not really possible to unit test directly right now since we always run our tests on Unix systems and filepath.ToSlash is a no-op on Unix. However, this does include some tests for the basic behavior to verify that it's not regressed as a result of this change. This will need to be reported in the changelog as a potential breaking change, since anyone who was using Terraform _exclusively_ on Windows may have been using expressions like "${path.module}foo\\bar" which they will now need to update. This fixes #14986.
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package terraform
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
"github.com/hashicorp/terraform/addrs"
|
|
"github.com/hashicorp/terraform/configs"
|
|
"github.com/hashicorp/terraform/tfdiags"
|
|
)
|
|
|
|
func TestEvaluatorGetTerraformAttr(t *testing.T) {
|
|
evaluator := &Evaluator{
|
|
Meta: &ContextMeta{
|
|
Env: "foo",
|
|
},
|
|
}
|
|
data := &evaluationStateData{
|
|
Evaluator: evaluator,
|
|
}
|
|
scope := evaluator.Scope(data, nil)
|
|
|
|
t.Run("workspace", func(t *testing.T) {
|
|
want := cty.StringVal("foo")
|
|
got, diags := scope.Data.GetTerraformAttr(addrs.TerraformAttr{
|
|
Name: "workspace",
|
|
}, tfdiags.SourceRange{})
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics %s", spew.Sdump(diags))
|
|
}
|
|
if !got.RawEquals(want) {
|
|
t.Errorf("wrong result %q; want %q", got, want)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestEvaluatorGetPathAttr(t *testing.T) {
|
|
evaluator := &Evaluator{
|
|
Meta: &ContextMeta{
|
|
Env: "foo",
|
|
},
|
|
Config: &configs.Config{
|
|
Module: &configs.Module{
|
|
SourceDir: "bar/baz",
|
|
},
|
|
},
|
|
}
|
|
data := &evaluationStateData{
|
|
Evaluator: evaluator,
|
|
}
|
|
scope := evaluator.Scope(data, nil)
|
|
|
|
t.Run("module", func(t *testing.T) {
|
|
want := cty.StringVal("bar/baz")
|
|
got, diags := scope.Data.GetPathAttr(addrs.PathAttr{
|
|
Name: "module",
|
|
}, tfdiags.SourceRange{})
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics %s", spew.Sdump(diags))
|
|
}
|
|
if !got.RawEquals(want) {
|
|
t.Errorf("wrong result %#v; want %#v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("root", func(t *testing.T) {
|
|
want := cty.StringVal("bar/baz")
|
|
got, diags := scope.Data.GetPathAttr(addrs.PathAttr{
|
|
Name: "root",
|
|
}, tfdiags.SourceRange{})
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics %s", spew.Sdump(diags))
|
|
}
|
|
if !got.RawEquals(want) {
|
|
t.Errorf("wrong result %#v; want %#v", got, want)
|
|
}
|
|
})
|
|
}
|