mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
tpl/strings: Improve type checking
This commit is contained in:
parent
2fedca6c8a
commit
7bf1abfc55
2 changed files with 54 additions and 22 deletions
|
@ -162,24 +162,32 @@ func (ns *Namespace) ContainsAny(s, chars any) (bool, error) {
|
||||||
// ContainsNonSpace reports whether s contains any non-space characters as defined
|
// ContainsNonSpace reports whether s contains any non-space characters as defined
|
||||||
// by Unicode's White Space property,
|
// by Unicode's White Space property,
|
||||||
// <docsmeta>{"newIn": "0.111.0" }</docsmeta>
|
// <docsmeta>{"newIn": "0.111.0" }</docsmeta>
|
||||||
func (ns *Namespace) ContainsNonSpace(s any) bool {
|
func (ns *Namespace) ContainsNonSpace(s any) (bool, error) {
|
||||||
ss := cast.ToString(s)
|
ss, err := cast.ToStringE(s)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
for _, r := range ss {
|
for _, r := range ss {
|
||||||
if !unicode.IsSpace(r) {
|
if !unicode.IsSpace(r) {
|
||||||
return true
|
return true, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Diff returns an anchored diff of the two texts old and new in the “unified
|
// Diff returns an anchored diff of the two texts old and new in the “unified
|
||||||
// diff” format. If old and new are identical, Diff returns an empty string.
|
// diff” format. If old and new are identical, Diff returns an empty string.
|
||||||
func (ns *Namespace) Diff(oldname string, old any, newname string, new any) string {
|
func (ns *Namespace) Diff(oldname string, old any, newname string, new any) (string, error) {
|
||||||
oldb := []byte(cast.ToString(old))
|
olds, err := cast.ToStringE(old)
|
||||||
newb := []byte(cast.ToString(new))
|
if err != nil {
|
||||||
|
return "", err
|
||||||
return string(diff.Diff(oldname, oldb, newname, newb))
|
}
|
||||||
|
news, err := cast.ToStringE(new)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(diff.Diff(oldname, []byte(olds), newname, []byte(news))), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasPrefix tests whether the input s begins with prefix.
|
// HasPrefix tests whether the input s begins with prefix.
|
||||||
|
|
|
@ -153,17 +153,30 @@ func TestContainsNonSpace(t *testing.T) {
|
||||||
for _, test := range []struct {
|
for _, test := range []struct {
|
||||||
s any
|
s any
|
||||||
expect bool
|
expect bool
|
||||||
|
isErr bool
|
||||||
}{
|
}{
|
||||||
{"", false},
|
{"", false, false},
|
||||||
{" ", false},
|
{" ", false, false},
|
||||||
{" ", false},
|
{" ", false, false},
|
||||||
{"\t", false},
|
{"\t", false, false},
|
||||||
{"\r", false},
|
{"\r", false, false},
|
||||||
{"a", true},
|
{"a", true, false},
|
||||||
{" a", true},
|
{" a", true, false},
|
||||||
{"a\n", true},
|
{"a\n", true, false},
|
||||||
|
// error
|
||||||
|
{tstNoStringer{}, false, true},
|
||||||
} {
|
} {
|
||||||
c.Assert(ns.ContainsNonSpace(test.s), qt.Equals, test.expect)
|
|
||||||
|
result, err := ns.ContainsNonSpace(test.s)
|
||||||
|
|
||||||
|
if test.isErr {
|
||||||
|
c.Assert(err, qt.IsNotNil)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(result, qt.Equals, test.expect)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -812,21 +825,32 @@ func TestDiff(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
|
|
||||||
for _, tt := range []struct {
|
for _, test := range []struct {
|
||||||
oldname string
|
oldname string
|
||||||
old any
|
old any
|
||||||
newname string
|
newname string
|
||||||
new any
|
new any
|
||||||
expect string
|
expect any
|
||||||
}{
|
}{
|
||||||
{"old", "foo\n", "new", "bar\n", "diff old new\n--- old\n+++ new\n@@ -1,1 +1,1 @@\n-foo\n+bar\n"},
|
{"old", "foo\n", "new", "bar\n", "diff old new\n--- old\n+++ new\n@@ -1,1 +1,1 @@\n-foo\n+bar\n"},
|
||||||
{"old", "foo\n", "new", "foo\n", ""},
|
{"old", "foo\n", "new", "foo\n", ""},
|
||||||
{"old", "foo\n", "new", "", "diff old new\n--- old\n+++ new\n@@ -1,1 +0,0 @@\n-foo\n"},
|
{"old", "foo\n", "new", "", "diff old new\n--- old\n+++ new\n@@ -1,1 +0,0 @@\n-foo\n"},
|
||||||
{"old", "foo\n", "new", nil, "diff old new\n--- old\n+++ new\n@@ -1,1 +0,0 @@\n-foo\n"},
|
{"old", "foo\n", "new", nil, "diff old new\n--- old\n+++ new\n@@ -1,1 +0,0 @@\n-foo\n"},
|
||||||
{"old", "", "new", "", ""},
|
{"old", "", "new", "", ""},
|
||||||
|
// errors
|
||||||
|
{"old", tstNoStringer{}, "new", "foo", false},
|
||||||
|
{"old", "foo", "new", tstNoStringer{}, false},
|
||||||
} {
|
} {
|
||||||
|
|
||||||
result := ns.Diff(tt.oldname, tt.old, tt.newname, tt.new)
|
result, err := ns.Diff(test.oldname, test.old, test.newname, test.new)
|
||||||
c.Assert(result, qt.Equals, tt.expect)
|
|
||||||
|
if b, ok := test.expect.(bool); ok && !b {
|
||||||
|
c.Assert(err, qt.Not(qt.IsNil))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(result, qt.Equals, test.expect)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue