diff --git a/pkg/yqlib/printer_test.go b/pkg/yqlib/printer_test.go index 23ce183f..f1bcb082 100644 --- a/pkg/yqlib/printer_test.go +++ b/pkg/yqlib/printer_test.go @@ -17,20 +17,22 @@ a: apple a: coconut ` +var multiDocSampleLeadingExpected = `# go cats +--- +a: banana +--- +a: apple +--- +# cool +a: coconut +` + func nodeToList(candidate *CandidateNode) *list.List { elMap := list.New() elMap.PushBack(candidate) return elMap } -func TestPrinterWithLeadingContentEvalStyle(t *testing.T) { - test.AssertResult(t, "todo", "") -} - -func TestPrinterWithLeadingContentEvalAllStyle(t *testing.T) { - test.AssertResult(t, "todo", "") -} - func TestPrinterMultipleDocsInSequence(t *testing.T) { var output bytes.Buffer var writer = bufio.NewWriter(&output) @@ -69,6 +71,45 @@ func TestPrinterMultipleDocsInSequence(t *testing.T) { test.AssertResult(t, multiDocSample, output.String()) } +func TestPrinterMultipleDocsInSequenceWithLeadingContent(t *testing.T) { + var output bytes.Buffer + var writer = bufio.NewWriter(&output) + printer := NewPrinter(writer, false, true, false, 2, true) + + inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) + if err != nil { + panic(err) + } + + el := inputs.Front() + sample1 := nodeToList(el.Value.(*CandidateNode)) + + el = el.Next() + sample2 := nodeToList(el.Value.(*CandidateNode)) + + el = el.Next() + sample3 := nodeToList(el.Value.(*CandidateNode)) + + err = printer.PrintResults(sample1, "# go cats\n---\n") + if err != nil { + panic(err) + } + + err = printer.PrintResults(sample2, "---\n") + if err != nil { + panic(err) + } + + err = printer.PrintResults(sample3, "---\n# cool\n") + if err != nil { + panic(err) + } + + writer.Flush() + + test.AssertResult(t, multiDocSampleLeadingExpected, output.String()) +} + func TestPrinterMultipleFilesInSequence(t *testing.T) { var output bytes.Buffer var writer = bufio.NewWriter(&output) @@ -116,6 +157,53 @@ func TestPrinterMultipleFilesInSequence(t *testing.T) { test.AssertResult(t, multiDocSample, output.String()) } +func TestPrinterMultipleFilesInSequenceWithLeadingContent(t *testing.T) { + var output bytes.Buffer + var writer = bufio.NewWriter(&output) + printer := NewPrinter(writer, false, true, false, 2, true) + + inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) + if err != nil { + panic(err) + } + + el := inputs.Front() + elNode := el.Value.(*CandidateNode) + elNode.Document = 0 + elNode.FileIndex = 0 + sample1 := nodeToList(elNode) + + el = el.Next() + elNode = el.Value.(*CandidateNode) + elNode.Document = 0 + elNode.FileIndex = 1 + sample2 := nodeToList(elNode) + + el = el.Next() + elNode = el.Value.(*CandidateNode) + elNode.Document = 0 + elNode.FileIndex = 2 + sample3 := nodeToList(elNode) + + err = printer.PrintResults(sample1, "# go cats\n---\n") + if err != nil { + panic(err) + } + + err = printer.PrintResults(sample2, "---\n") + if err != nil { + panic(err) + } + + err = printer.PrintResults(sample3, "---\n# cool\n") + if err != nil { + panic(err) + } + + writer.Flush() + test.AssertResult(t, multiDocSampleLeadingExpected, output.String()) +} + func TestPrinterMultipleDocsInSinglePrint(t *testing.T) { var output bytes.Buffer var writer = bufio.NewWriter(&output) @@ -135,6 +223,59 @@ func TestPrinterMultipleDocsInSinglePrint(t *testing.T) { test.AssertResult(t, multiDocSample, output.String()) } +func TestPrinterMultipleDocsInSinglePrintWithLeadingDoc(t *testing.T) { + var output bytes.Buffer + var writer = bufio.NewWriter(&output) + printer := NewPrinter(writer, false, true, false, 2, true) + + inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) + if err != nil { + panic(err) + } + + err = printer.PrintResults(inputs, "# go cats\n---\n") + if err != nil { + panic(err) + } + + writer.Flush() + expected := `# go cats +--- +a: banana +--- +a: apple +--- +a: coconut +` + test.AssertResult(t, expected, output.String()) +} + +func TestPrinterMultipleDocsInSinglePrintWithLeadingDocTrailing(t *testing.T) { + var output bytes.Buffer + var writer = bufio.NewWriter(&output) + printer := NewPrinter(writer, false, true, false, 2, true) + + inputs, err := readDocuments(strings.NewReader(multiDocSample), "sample.yml", 0) + if err != nil { + panic(err) + } + + err = printer.PrintResults(inputs, "---\n") + if err != nil { + panic(err) + } + + writer.Flush() + expected := `--- +a: banana +--- +a: apple +--- +a: coconut +` + test.AssertResult(t, expected, output.String()) +} + func TestPrinterMultipleDocsJson(t *testing.T) { var output bytes.Buffer var writer = bufio.NewWriter(&output)