Assisted-by: GLM 5.3 Flash
This commit is contained in:
@@ -5,10 +5,12 @@ package interpres
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -821,3 +823,65 @@ func TestZeroOffsetRoundTrip(t *testing.T) {
|
||||
t.Errorf("a = %q, want 1979-05-27T07:32Z", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatements(t *testing.T) {
|
||||
src := strings.NewReader(`title = "demo"
|
||||
port = 8080
|
||||
|
||||
[server]
|
||||
host = "127.0.0.1"
|
||||
|
||||
[[items]]
|
||||
name = "a"
|
||||
|
||||
[[items]]
|
||||
name = "b"
|
||||
`)
|
||||
var lines []string
|
||||
for stmt, err := range Statements(src) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
switch {
|
||||
case stmt.Index >= 0:
|
||||
lines = append(lines, fmt.Sprintf("%s #%d", stmt.Key, stmt.Index))
|
||||
case stmt.Table != nil:
|
||||
lines = append(lines, fmt.Sprintf("[%s] %v", stmt.Key, stmt.Table.Keys()))
|
||||
default:
|
||||
lines = append(lines, fmt.Sprintf("%s = %v", stmt.Key, stmt.Value))
|
||||
}
|
||||
}
|
||||
want := []string{
|
||||
`title = demo`,
|
||||
`port = 8080`,
|
||||
`[server] [host]`,
|
||||
`items #0`,
|
||||
`items #1`,
|
||||
}
|
||||
if !slices.Equal(lines, want) {
|
||||
t.Errorf("statements =\n%v\nwant:\n%v", lines, want)
|
||||
}
|
||||
|
||||
t.Run("breaking stops the iteration", func(t *testing.T) {
|
||||
src := strings.NewReader("a = 1\nb = 2\nc = 3\n")
|
||||
count := 0
|
||||
for range Statements(src) {
|
||||
count++
|
||||
break
|
||||
}
|
||||
if count != 1 {
|
||||
t.Errorf("iterated %d statements after break, want 1", count)
|
||||
}
|
||||
})
|
||||
t.Run("a parse error arrives as the second value", func(t *testing.T) {
|
||||
for stmt, err := range Statements(strings.NewReader("broken =\n")) {
|
||||
if err == nil {
|
||||
t.Fatalf("statement %+v without an error", stmt)
|
||||
}
|
||||
if _, ok := errors.AsType[*SyntaxError](err); !ok {
|
||||
t.Errorf("err = %v, want a SyntaxError", err)
|
||||
}
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user