feat: add the -validate mode to interpres-decode
Assisted-by: GLM 5.3 Flash
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -20,7 +21,7 @@ func TestRunParsesValidTOML(t *testing.T) {
|
||||
port = 8080
|
||||
enabled = true
|
||||
`))
|
||||
if code := Run(in, &stdout, &stderr); code != 0 {
|
||||
if code := Run(nil, in, &stdout, &stderr); code != 0 {
|
||||
t.Fatalf("Run returned %d, stderr = %q", code, stderr.String())
|
||||
}
|
||||
var got map[string]any
|
||||
@@ -41,7 +42,7 @@ enabled = true
|
||||
func TestRunRejectsInvalidInput(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
in := bytes.NewReader([]byte("v = \n"))
|
||||
code := Run(in, &stdout, &stderr)
|
||||
code := Run(nil, in, &stdout, &stderr)
|
||||
if code != 1 {
|
||||
t.Errorf("Run returned %d, want 1 (parse error); stderr = %q", code, stderr.String())
|
||||
}
|
||||
@@ -52,7 +53,7 @@ func TestRunRejectsInvalidInput(t *testing.T) {
|
||||
|
||||
func TestRunReadErrorReturnsTwo(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
code := Run(errorReader{}, &stdout, &stderr)
|
||||
code := Run(nil, errorReader{}, &stdout, &stderr)
|
||||
if code != 2 {
|
||||
t.Errorf("Run returned %d, want 2 (read error); stderr = %q", code, stderr.String())
|
||||
}
|
||||
@@ -70,7 +71,7 @@ func TestRunEncodeErrorReturnsTwo(t *testing.T) {
|
||||
var stderr bytes.Buffer
|
||||
w := errorWriter{}
|
||||
in := bytes.NewReader([]byte(`k = "v"` + "\n"))
|
||||
code := Run(in, w, &stderr)
|
||||
code := Run(nil, in, w, &stderr)
|
||||
if code != 2 {
|
||||
t.Errorf("Run returned %d, want 2 (encode error); stderr = %q", code, stderr.String())
|
||||
}
|
||||
@@ -210,3 +211,75 @@ func TestTaggedHelper(t *testing.T) {
|
||||
t.Errorf("tagged = %#v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateStdinAcceptsValidDocument(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
in := bytes.NewReader([]byte("title = \"ok\"\n"))
|
||||
if code := Run([]string{"-validate"}, in, &stdout, &stderr); code != 0 {
|
||||
t.Fatalf("Run returned %d, stderr = %q", code, stderr.String())
|
||||
}
|
||||
if stdout.Len() != 0 || stderr.Len() != 0 {
|
||||
t.Fatalf("validate should be quiet on success, stdout %q stderr %q", stdout.String(), stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateStdinRejectsInvalidDocument(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
in := bytes.NewReader([]byte("title = \"unterminated\n"))
|
||||
if code := Run([]string{"-validate"}, in, &stdout, &stderr); code != 1 {
|
||||
t.Fatalf("Run returned %d, want 1; stderr = %q", code, stderr.String())
|
||||
}
|
||||
if !strings.Contains(stderr.String(), "<stdin>") || !strings.Contains(stderr.String(), "line 1") {
|
||||
t.Fatalf("stderr = %q, want the name and the line", stderr.String())
|
||||
}
|
||||
if stdout.Len() != 0 {
|
||||
t.Fatalf("stdout should stay empty, got %q", stdout.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateFiles(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
good := dir + "/good.toml"
|
||||
bad := dir + "/bad.toml"
|
||||
if err := os.WriteFile(good, []byte("a = 1\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(bad, []byte("a =\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var stdout, stderr bytes.Buffer
|
||||
if code := Run([]string{"-validate", good}, nil, &stdout, &stderr); code != 0 {
|
||||
t.Fatalf("one valid file: Run returned %d, stderr = %q", code, stderr.String())
|
||||
}
|
||||
if code := Run([]string{"-validate", good, bad}, nil, &stdout, &stderr); code != 1 {
|
||||
t.Fatalf("valid plus invalid: Run returned %d, want 1; stderr = %q", code, stderr.String())
|
||||
}
|
||||
if !strings.Contains(stderr.String(), bad) || !strings.Contains(stderr.String(), "line 1") {
|
||||
t.Fatalf("stderr = %q, want the file name and the line", stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateMissingFileReturnsTwo(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
if code := Run([]string{"-validate", "no-such-file.toml"}, nil, &stdout, &stderr); code != 2 {
|
||||
t.Fatalf("Run returned %d, want 2; stderr = %q", code, stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdapterModeRejectsPositionalArgument(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
in := bytes.NewReader([]byte("a = 1\n"))
|
||||
if code := Run([]string{"file.toml"}, in, &stdout, &stderr); code != 2 {
|
||||
t.Fatalf("Run returned %d, want 2; stderr = %q", code, stderr.String())
|
||||
}
|
||||
if !strings.Contains(stderr.String(), "-validate") {
|
||||
t.Fatalf("stderr = %q, want it to point at -validate", stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnknownFlagReturnsTwo(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
if code := Run([]string{"-nope"}, nil, &stdout, &stderr); code != 2 {
|
||||
t.Fatalf("Run returned %d, want 2; stderr = %q", code, stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user