| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package stackconfig | |
| import ( | |
| "testing" | |
| "github.com/hashicorp/hcl/v2" | |
| "github.com/hashicorp/hcl/v2/hclsyntax" | |
| ) | |
| func TestDecodeInputVariableBlock_constNotSupported(t *testing.T) { | |
| // const = true is not supported in the stacks component language. | |
| // This test documents that using const produces an "Unsupported argument" | |
| // error from the HCL schema validation. | |
| src := []byte(`variable "example" { | |
| type = string | |
| const = true | |
| }`) | |
| file, diags := hclsyntax.ParseConfig(src, "test.tfcomponent.hcl", hcl.Pos{Line: 1, Column: 1}) | |
| if diags.HasErrors() { | |
| t.Fatalf("unexpected parse error: %s", diags.Error()) | |
| } | |
| content, diags := file.Body.Content(&hcl.BodySchema{ | |
| Blocks: []hcl.BlockHeaderSchema{ | |
| {Type: "variable", LabelNames: []string{"name"}}, | |
| }, | |
| }) | |
| if diags.HasErrors() { | |
| t.Fatalf("unexpected schema error: %s", diags.Error()) | |
| } | |
| if len(content.Blocks) != 1 { | |
| t.Fatalf("expected 1 block, got %d", len(content.Blocks)) | |
| } | |
| _, decodeDiags := decodeInputVariableBlock(content.Blocks[0]) | |
| if len(decodeDiags) != 1 { | |
| t.Fatalf("expected exactly 1 diagnostic, got %d:\n%s", len(decodeDiags), decodeDiags.NonFatalErr()) | |
| } | |
| diag := decodeDiags[0] | |
| if got, want := diag.Description().Summary, "Unsupported argument"; got != want { | |
| t.Errorf("wrong summary\ngot: %s\nwant: %s", got, want) | |
| } | |
| if got, want := diag.Description().Detail, `An argument named "const" is not expected here.`; got != want { | |
| t.Errorf("wrong detail\ngot: %s\nwant: %s", got, want) | |
| } | |
| } |