From b25ae78545e7f2d34c6e759141345cb15da95d52 Mon Sep 17 00:00:00 2001 From: Terminal Chai Date: Thu, 26 Mar 2026 03:46:21 +0530 Subject: [PATCH] fix: reset TOML decoder state between files (#2634) * fix: reset TOML decoder between files * test: fix TOML regression fixture spelling --- pkg/yqlib/all_at_once_evaluator_test.go | 22 ++++++++++++++++++++++ pkg/yqlib/decoder_toml.go | 1 + 2 files changed, 23 insertions(+) diff --git a/pkg/yqlib/all_at_once_evaluator_test.go b/pkg/yqlib/all_at_once_evaluator_test.go index 3567655d..ce83db88 100644 --- a/pkg/yqlib/all_at_once_evaluator_test.go +++ b/pkg/yqlib/all_at_once_evaluator_test.go @@ -54,3 +54,25 @@ func TestAllAtOnceEvaluateNodes(t *testing.T) { test.AssertResultComplex(t, tt.expected, resultsToString(t, list)) } } + +func TestTomlDecoderCanBeReinitializedAcrossDocuments(t *testing.T) { + decoder := NewTomlDecoder() + + firstDocuments, err := ReadDocuments(strings.NewReader("id = \"Foobar\"\n"), decoder) + if err != nil { + t.Fatalf("failed to read first TOML document: %v", err) + } + if firstDocuments.Len() != 1 { + t.Fatalf("expected first document count to be 1, got %d", firstDocuments.Len()) + } + test.AssertResult(t, "Foobar", firstDocuments.Front().Value.(*CandidateNode).Content[1].Value) + + secondDocuments, err := ReadDocuments(strings.NewReader("id = \"Banana\"\n"), decoder) + if err != nil { + t.Fatalf("failed to read second TOML document: %v", err) + } + if secondDocuments.Len() != 1 { + t.Fatalf("expected second document count to be 1, got %d", secondDocuments.Len()) + } + test.AssertResult(t, "Banana", secondDocuments.Front().Value.(*CandidateNode).Content[1].Value) +} diff --git a/pkg/yqlib/decoder_toml.go b/pkg/yqlib/decoder_toml.go index dd568bea..dac720bb 100644 --- a/pkg/yqlib/decoder_toml.go +++ b/pkg/yqlib/decoder_toml.go @@ -44,6 +44,7 @@ func (dec *tomlDecoder) Init(reader io.Reader) error { } dec.pendingComments = make([]string, 0) dec.firstContentSeen = false + dec.finished = false return nil }