39 lines
1.5 KiB
Go
39 lines
1.5 KiB
Go
package configkit
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/document"
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/yaml"
|
|
)
|
|
|
|
func TestParseSourceOwnsDocumentAndSafeDiagnostics(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
limits := defaultParseLimits()
|
|
parsed, diagnostics := parseSource(Bytes("memory.yml", []byte("name: config\n")), "source-1", limits)
|
|
if len(diagnostics) != 0 || parsed.source == nil || parsed.source.Label != "memory.yml" || parsed.document.Kind != document.Mapping {
|
|
t.Fatalf("parse result = %#v, diagnostics = %#v", parsed, diagnostics)
|
|
}
|
|
|
|
const canary = "CANARY_PRIVATE_INPUT"
|
|
failed, diagnostics := parseSource(Bytes("unsafe\nlabel", []byte("name: ["+canary+"\n")), "source-1", limits)
|
|
if failed.document != nil || failed.source == nil || len(diagnostics) != 1 || diagnostics[0].Code != CodeYAMLInvalid {
|
|
t.Fatalf("failed parse = %#v, diagnostics = %#v", failed, diagnostics)
|
|
}
|
|
var output strings.Builder
|
|
if err := WriteDiagnostics(&output, diagnostics); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(output.String(), canary) || strings.Count(output.String(), "\n") != 1 {
|
|
t.Fatalf("unsafe rendered diagnostic = %q", output.String())
|
|
}
|
|
|
|
limits.document = yaml.Limits{Depth: 1, Nodes: 20, ParserDepth: 20}
|
|
_, diagnostics = parseSource(Bytes("deep", []byte("a:\n b: value\n")), "source-1", limits)
|
|
if len(diagnostics) != 1 || diagnostics[0].Code != CodeYAMLDepthLimit || diagnostics[0].Primary.Line == 0 {
|
|
t.Fatalf("depth diagnostics = %#v", diagnostics)
|
|
}
|
|
}
|