e8dbb16dbc
This was implemented a long time ago in the original template parser, but it was missed in the rewrite of the template parser to make it use a two-stage parsing strategy. It's implemented as a post-processing step on the result of the first stage of parsing, which produces a flat sequence of literal strings, interpolation markers, and control markers, and prior to the second stage which matches opening and closing control markers to produce an expression AST. It's important to do this at parse time rather than eval time since it is the static layout of the source code that decides the indentation level, and so an interpolation marker at the start of a line that itself produces spaces does not affect the result. |
||
---|---|---|
.. | ||
tests | ||
README.md |
HCL Language Test Suite
This directory contains an implementation-agnostic test suite that can be used to verify the correct behavior not only of the HCL implementation in this repository but also of possible other implementations.
The harness for running this suite -- a Go program in this directory -- uses
the hcldec
program as a level of abstraction to avoid depending directly on
the Go implementation. As a result, other HCL implementations must also
include a version of hcldec
in order to run this spec.
The tests defined in this suite each correspond to a detail of the HCL spec. This suite is separate from and not a substitute for direct unit tests of a given implementation that would presumably also exercise that implementation's own programmatic API.
To run the suite, first build the harness using Go:
go install github.com/hashicorp/hcl2/cmd/hclspecsuite
Then run it, passing it the directory containing the test definitions (the
"tests" subdirectory of this directory) and the path to the hcldec
executable
to use.
For example, if working in the root of this repository and using the hcldec
implementation from here:
go install ./cmd/hcldec
hclspecsuite ./specsuite/tests $GOPATH/bin/hcldec
For developers working on the Go implementation of HCL from this repository,
please note that this spec suite is run as part of a normal go test ./...
execution for this whole repository and so does not need to be run separately.