60 lines
1.9 KiB
Go
60 lines
1.9 KiB
Go
package yaml
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit/internal/document"
|
|
)
|
|
|
|
func TestWriteUsesStableExplicitFormatting(t *testing.T) {
|
|
t.Parallel()
|
|
root := &document.Node{Kind: document.Mapping, Mapping: []document.Entry{
|
|
{Key: "empty_map", Value: &document.Node{Kind: document.Mapping, Mapping: []document.Entry{}}},
|
|
{Key: "empty_sequence", Value: &document.Node{Kind: document.Sequence, Sequence: []*document.Node{}}},
|
|
{Key: "number", Value: &document.Node{Kind: document.Number, Text: "1.25e+2"}},
|
|
{Key: "redacted", Value: &document.Node{Kind: document.String, Text: "[REDACTED]"}},
|
|
{Key: "sequence", Value: &document.Node{Kind: document.Sequence, Sequence: []*document.Node{
|
|
{Kind: document.String, Text: "first"},
|
|
{Kind: document.String, Text: "true"},
|
|
}}},
|
|
{Key: "nil_value", Value: &document.Node{Kind: document.Null}},
|
|
}}
|
|
var output bytes.Buffer
|
|
if err := Write(&output, root); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := "empty_map: {}\nempty_sequence: []\nnumber: 1.25e+2\nredacted: '[REDACTED]'\nsequence:\n - first\n - 'true'\nnil_value: null\n"
|
|
if output.String() != want {
|
|
t.Fatalf("output:\n%s\nwant:\n%s", output.String(), want)
|
|
}
|
|
}
|
|
|
|
func TestWritePropagatesWriterErrorsAndShortWrites(t *testing.T) {
|
|
t.Parallel()
|
|
root := &document.Node{Kind: document.Mapping, Mapping: []document.Entry{{Key: "value", Value: &document.Node{Kind: document.String, Text: "safe"}}}}
|
|
want := errors.New("write failed")
|
|
if err := Write(failingWriter{err: want}, root); !errors.Is(err, want) {
|
|
t.Fatalf("writer error = %v", err)
|
|
}
|
|
if err := Write(shortOutput{}, root); !errors.Is(err, io.ErrShortWrite) {
|
|
t.Fatalf("short writer error = %v", err)
|
|
}
|
|
}
|
|
|
|
type failingWriter struct {
|
|
err error
|
|
}
|
|
|
|
func (writer failingWriter) Write(data []byte) (int, error) {
|
|
return min(2, len(data)), writer.err
|
|
}
|
|
|
|
type shortOutput struct{}
|
|
|
|
func (shortOutput) Write(data []byte) (int, error) {
|
|
return max(0, len(data)-1), nil
|
|
}
|