test: expand coverage across readers, writers, cmd, ui, diff and merge
Implements tests/_plans and previously deferred packages; updates plan README with new coverage numbers.
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
package template
|
||||
|
||||
import (
|
||||
"math"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestToJSON(t *testing.T) {
|
||||
if got := ToJSON(map[string]int{"a": 1}); got != `{"a":1}` {
|
||||
t.Errorf("got %q", got)
|
||||
}
|
||||
if got := ToJSON(nil); got != "null" {
|
||||
t.Errorf("nil: %q", got)
|
||||
}
|
||||
if got := ToJSON(math.Inf(1)); !strings.HasPrefix(got, `{"error": "failed to marshal`) {
|
||||
t.Errorf("marshal failure: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestToJSONPretty(t *testing.T) {
|
||||
got := ToJSONPretty(map[string]int{"a": 1}, " ")
|
||||
if got != "{\n \"a\": 1\n}" {
|
||||
t.Errorf("got %q", got)
|
||||
}
|
||||
if got := ToJSONPretty(make(chan int), " "); !strings.HasPrefix(got, `{"error"`) {
|
||||
t.Errorf("marshal failure: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestToYAML(t *testing.T) {
|
||||
if got := ToYAML(map[string]int{"a": 1}); got != "a: 1\n" {
|
||||
t.Errorf("got %q", got)
|
||||
}
|
||||
if got := ToYAML(make(chan int)); !strings.HasPrefix(got, "error: failed to marshal") {
|
||||
// yaml.v3 panics-recovers into an error for unsupported types
|
||||
t.Errorf("marshal failure: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestIndent(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
spaces int
|
||||
want string
|
||||
}{
|
||||
{"", 4, ""},
|
||||
{"a", 2, " a"},
|
||||
{"a\nb", 2, " a\n b"},
|
||||
{"a\n\nb", 2, " a\n\n b"},
|
||||
{"a", 0, "a"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := Indent(tt.in, tt.spaces); got != tt.want {
|
||||
t.Errorf("Indent(%q,%d) = %q, want %q", tt.in, tt.spaces, got, tt.want)
|
||||
}
|
||||
}
|
||||
if got := IndentWith("", ">"); got != "" {
|
||||
t.Errorf("IndentWith empty: %q", got)
|
||||
}
|
||||
if got := IndentWith("a\n\nb", "> "); got != "> a\n\n> b" {
|
||||
t.Errorf("IndentWith: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEscape(t *testing.T) {
|
||||
if got := Escape("a\"b\\c\nd\re\tf"); got != `a\"b\\c\nd\re\tf` {
|
||||
t.Errorf("got %q", got)
|
||||
}
|
||||
if got := Escape(""); got != "" {
|
||||
t.Errorf("empty: %q", got)
|
||||
}
|
||||
if got := EscapeQuotes(`a"b'c`); got != `a\"b\'c` {
|
||||
t.Errorf("EscapeQuotes: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestComment(t *testing.T) {
|
||||
tests := []struct {
|
||||
name, in, style, want string
|
||||
}{
|
||||
{"empty", "", "//", ""},
|
||||
{"slashes", "a\nb", "//", "// a\n// b"},
|
||||
{"hash", "a", "#", "# a"},
|
||||
{"sql", "a\nb", "--", "-- a\n-- b"},
|
||||
{"block single", "a", "/* */", "/* a */"},
|
||||
{"block single alt", "a", "/**/", "/* a */"},
|
||||
{"block multi", "a\nb", "/* */", "/*\n * a\n * b\n */"},
|
||||
{"default", "a", "weird", "// a"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := Comment(tt.in, tt.style); got != tt.want {
|
||||
t.Errorf("got %q, want %q", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestQuoteUnquote(t *testing.T) {
|
||||
if got := QuoteString("a"); got != `"a"` {
|
||||
t.Errorf("QuoteString: %q", got)
|
||||
}
|
||||
tests := []struct{ in, want string }{
|
||||
{`"a"`, "a"},
|
||||
{`'a'`, "a"},
|
||||
{`""`, ""},
|
||||
{`"a'`, `"a'`},
|
||||
{`a`, `a`},
|
||||
{`"`, `"`},
|
||||
{"", ""},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := UnquoteString(tt.in); got != tt.want {
|
||||
t.Errorf("UnquoteString(%q) = %q, want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user