tpl/path: Add path.Clean

Fixes #8885
This commit is contained in:
Brad 2021-10-05 10:15:10 -04:00 committed by GitHub
parent ecf025f006
commit e55466ce70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 0 deletions

View file

@ -144,3 +144,15 @@ func (ns *Namespace) Join(elements ...interface{}) (string, error) {
} }
return _path.Join(pathElements...), nil return _path.Join(pathElements...), nil
} }
// Clean replaces the separators used with standard slashes and then
// extraneous slashes are removed.
func (ns *Namespace) Clean(path interface{}) (string, error) {
spath, err := cast.ToStringE(path)
if err != nil {
return "", err
}
spath = filepath.ToSlash(spath)
return _path.Clean(spath), nil
}

View file

@ -175,3 +175,32 @@ func TestSplit(t *testing.T) {
c.Assert(result, qt.Equals, test.expect) c.Assert(result, qt.Equals, test.expect)
} }
} }
func TestClean(t *testing.T) {
t.Parallel()
c := qt.New(t)
for _, test := range []struct {
path interface{}
expect interface{}
}{
{filepath.FromSlash(`foo/bar.txt`), `foo/bar.txt`},
{filepath.FromSlash(`foo/bar/txt`), `foo/bar/txt`},
{filepath.FromSlash(`foo/bar`), `foo/bar`},
{filepath.FromSlash(`foo/bar.t`), `foo/bar.t`},
{``, `.`},
// errors
{tstNoStringer{}, false},
} {
result, err := ns.Clean(test.path)
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)
}
}