Skip to content

Commit

Permalink
tpl/strings: Improve type checking
Browse files Browse the repository at this point in the history
  • Loading branch information
jmooring authored and bep committed Apr 4, 2024
1 parent 2fedca6 commit 7bf1abf
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 22 deletions.
26 changes: 17 additions & 9 deletions tpl/strings/strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,24 +162,32 @@ func (ns *Namespace) ContainsAny(s, chars any) (bool, error) {
// ContainsNonSpace reports whether s contains any non-space characters as defined
// by Unicode's White Space property,
// <docsmeta>{"newIn": "0.111.0" }</docsmeta>
func (ns *Namespace) ContainsNonSpace(s any) bool {
ss := cast.ToString(s)
func (ns *Namespace) ContainsNonSpace(s any) (bool, error) {
ss, err := cast.ToStringE(s)
if err != nil {
return false, err
}

for _, r := range ss {
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” 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 {
oldb := []byte(cast.ToString(old))
newb := []byte(cast.ToString(new))

return string(diff.Diff(oldname, oldb, newname, newb))
func (ns *Namespace) Diff(oldname string, old any, newname string, new any) (string, error) {
olds, err := cast.ToStringE(old)
if err != nil {
return "", err
}
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.
Expand Down
50 changes: 37 additions & 13 deletions tpl/strings/strings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,17 +153,30 @@ func TestContainsNonSpace(t *testing.T) {
for _, test := range []struct {
s any
expect bool
isErr bool
}{
{"", false},
{" ", false},
{" ", false},
{"\t", false},
{"\r", false},
{"a", true},
{" a", true},
{"a\n", true},
{"", false, false},
{" ", false, false},
{" ", false, false},
{"\t", false, false},
{"\r", false, false},
{"a", true, false},
{" a", true, false},
{"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)

}
}

Expand Down Expand Up @@ -812,21 +825,32 @@ func TestDiff(t *testing.T) {
t.Parallel()
c := qt.New(t)

for _, tt := range []struct {
for _, test := range []struct {
oldname string
old any
newname string
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", "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", "", "new", "", ""},
// errors
{"old", tstNoStringer{}, "new", "foo", false},
{"old", "foo", "new", tstNoStringer{}, false},
} {

result := ns.Diff(tt.oldname, tt.old, tt.newname, tt.new)
c.Assert(result, qt.Equals, tt.expect)
result, err := ns.Diff(test.oldname, test.old, test.newname, test.new)

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)

}
}

0 comments on commit 7bf1abf

Please sign in to comment.
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy