}
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
+}
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)
+ }
+}