Skip to content

Commit

Permalink
Simplify the signature of New{Local,UNIX}Parser()
Browse files Browse the repository at this point in the history
It's really annoying that these functions can return errors. Especially
because functions like path.Resolve() can also fail. Let's just make it
so that these functions always return a parser. We can move the null
byte check into ParseScope() to achieve what we want.
  • Loading branch information
EdSchouten committed Jun 21, 2024
1 parent 998e0ba commit 0f210f0
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 91 deletions.
18 changes: 9 additions & 9 deletions pkg/filesystem/local_directory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestLocalDirectoryEnterFile(t *testing.T) {

func TestLocalDirectoryEnterSymlink(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))
_, err := d.EnterDirectory(path.MustNewComponent("symlink"))
require.Equal(t, syscall.ENOTDIR, err)
require.NoError(t, d.Close())
Expand Down Expand Up @@ -123,7 +123,7 @@ func TestLocalDirectoryLstatFile(t *testing.T) {

func TestLocalDirectoryLstatSymlink(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))
fi, err := d.Lstat(path.MustNewComponent("symlink"))
require.NoError(t, err)
require.Equal(t, path.MustNewComponent("symlink"), fi.Name())
Expand All @@ -143,7 +143,7 @@ func TestLocalDirectoryLstatDirectory(t *testing.T) {

func TestLocalDirectoryMkdirExisting(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))
require.True(t, os.IsExist(d.Mkdir(path.MustNewComponent("symlink"), 0o777)))
require.NoError(t, d.Close())
}
Expand Down Expand Up @@ -173,7 +173,7 @@ func TestLocalDirectoryOpenReadNonExistent(t *testing.T) {

func TestLocalDirectoryOpenReadSymlink(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/etc/passwd"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/etc/passwd"), path.MustNewComponent("symlink")))
_, err := d.OpenRead(path.MustNewComponent("symlink"))
require.Equal(t, syscall.ELOOP, err)
require.NoError(t, d.Close())
Expand All @@ -195,7 +195,7 @@ func TestLocalDirectoryReadDir(t *testing.T) {
require.NoError(t, err)
require.NoError(t, f.Close())
require.NoError(t, d.Mkdir(path.MustNewComponent("directory"), 0o777))
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))

// Validate directory listing.
files, err := d.ReadDir()
Expand Down Expand Up @@ -238,7 +238,7 @@ func TestLocalDirectoryReadlinkFile(t *testing.T) {

func TestLocalDirectoryReadlinkSuccess(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/foo/bar/baz"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/foo/bar/baz"), path.MustNewComponent("symlink")))
targetParser, err := d.Readlink(path.MustNewComponent("symlink"))
require.NoError(t, err)
targetPath, scopeWalker := path.EmptyBuilder.Join(path.VoidScopeWalker)
Expand Down Expand Up @@ -275,7 +275,7 @@ func TestLocalDirectoryRemoveFile(t *testing.T) {

func TestLocalDirectoryRemoveSymlink(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Remove(path.MustNewComponent("symlink")))
_, err := d.OpenRead(path.MustNewComponent("symlink"))
require.True(t, os.IsNotExist(err))
Expand Down Expand Up @@ -303,13 +303,13 @@ func TestLocalDirectoryRenameSuccess(t *testing.T) {
func TestLocalDirectorySymlinkExistent(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Mkdir(path.MustNewComponent("directory"), 0o777))
require.True(t, os.IsExist(d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("directory"))))
require.True(t, os.IsExist(d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("directory"))))
require.NoError(t, d.Close())
}

func TestLocalDirectorySymlinkSuccess(t *testing.T) {
d := openTmpDir(t)
require.NoError(t, d.Symlink(path.MustNewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Symlink(path.NewUNIXParser("/"), path.MustNewComponent("symlink")))
require.NoError(t, d.Close())
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/filesystem/local_directory_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func (d *localDirectory) Readlink(name path.Component) (path.Parser, error) {
return nil, err
}
if n < l {
return path.NewLocalParser(string(b[0:n]))
return path.NewLocalParser(string(b[0:n])), nil
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/filesystem/path/absolute_scope_walker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestAbsoluteScopeWalker(t *testing.T) {
componentWalker := mock.NewMockComponentWalker(ctrl)
componentWalker.EXPECT().OnTerminal(path.MustNewComponent("hello"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("/hello"), path.NewAbsoluteScopeWalker(componentWalker)))
require.NoError(t, path.Resolve(path.NewUNIXParser("/hello"), path.NewAbsoluteScopeWalker(componentWalker)))
})

t.Run("Relative", func(t *testing.T) {
Expand All @@ -28,6 +28,6 @@ func TestAbsoluteScopeWalker(t *testing.T) {
require.Equal(
t,
status.Error(codes.InvalidArgument, "Path is relative, while an absolute path was expected"),
path.Resolve(path.MustNewUNIXParser("hello"), path.NewAbsoluteScopeWalker(componentWalker)))
path.Resolve(path.NewUNIXParser("hello"), path.NewAbsoluteScopeWalker(componentWalker)))
})
}
14 changes: 7 additions & 7 deletions pkg/filesystem/path/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func TestBuilder(t *testing.T) {
} {
t.Run(p, func(t *testing.T) {
builder1, scopewalker1 := path.EmptyBuilder.Join(path.VoidScopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser(p), scopewalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser(p), scopewalker1))
require.Equal(t, p, builder1.GetUNIXString())

builder2, scopewalker2 := path.EmptyBuilder.Join(path.VoidScopeWalker)
Expand Down Expand Up @@ -182,7 +182,7 @@ func TestBuilder(t *testing.T) {
} {
t.Run(from, func(t *testing.T) {
builder1, scopeWalker1 := path.EmptyBuilder.Join(path.VoidScopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser(from), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser(from), scopeWalker1))
require.Equal(t, to, builder1.GetUNIXString())

builder2, scopeWalker2 := path.EmptyBuilder.Join(path.VoidScopeWalker)
Expand All @@ -209,7 +209,7 @@ func TestBuilder(t *testing.T) {
} {
t.Run(from, func(t *testing.T) {
builder1, scopeWalker1 := path.EmptyBuilder.Join(path.VoidScopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser(from), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser(from), scopeWalker1))
require.Equal(t, to, mustGetWindowsString(builder1))

builder2, scopeWalker2 := path.EmptyBuilder.Join(path.VoidScopeWalker)
Expand All @@ -231,7 +231,7 @@ func TestBuilder(t *testing.T) {
} {
t.Run(from, func(t *testing.T) {
builder1, scopeWalker1 := path.RootBuilder.Join(path.VoidScopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser(from), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser(from), scopeWalker1))
require.Equal(t, to, builder1.GetUNIXString())

builder2, scopeWalker2 := path.EmptyBuilder.Join(path.VoidScopeWalker)
Expand All @@ -257,7 +257,7 @@ func TestBuilder(t *testing.T) {
componentWalker2.EXPECT().OnUp().Return(componentWalker3, nil)

builder, s := path.EmptyBuilder.Join(scopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser("hello/.."), s))
require.NoError(t, path.Resolve(path.NewUNIXParser("hello/.."), s))
require.Equal(t, ".", builder.GetUNIXString())
})

Expand All @@ -276,7 +276,7 @@ func TestBuilder(t *testing.T) {
componentWalker3.EXPECT().OnUp().Return(componentWalker4, nil)

builder, s := path.EmptyBuilder.Join(scopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser("../hello/.."), s))
require.NoError(t, path.Resolve(path.NewUNIXParser("../hello/.."), s))
require.Equal(t, "..", builder.GetUNIXString())
})

Expand All @@ -298,7 +298,7 @@ func TestBuilder(t *testing.T) {
componentWalker3.EXPECT().OnUp().Return(componentWalker4, nil)

builder, s := path.EmptyBuilder.Join(scopeWalker)
require.NoError(t, path.Resolve(path.MustNewUNIXParser("/hello/world/.."), s))
require.NoError(t, path.Resolve(path.NewUNIXParser("/hello/world/.."), s))
require.Equal(t, "/hello/", builder.GetUNIXString())
})
}
2 changes: 1 addition & 1 deletion pkg/filesystem/path/local_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package path

// NewLocalParser creates a pathname parser for paths that are native to
// the locally running operating system.
func NewLocalParser(path string) (Parser, error) {
func NewLocalParser(path string) Parser {
return NewUNIXParser(path)
}

Expand Down
8 changes: 4 additions & 4 deletions pkg/filesystem/path/loop_detecting_scope_walker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ func TestLoopDetectingScopeWalker(t *testing.T) {
componentWalker := mock.NewMockComponentWalker(ctrl)
scopeWalker.EXPECT().OnRelative().Return(componentWalker, nil).Times(41)
componentWalker.EXPECT().OnTerminal(path.MustNewComponent("foo")).
Return(&path.GotSymlink{Parent: scopeWalker, Target: path.MustNewUNIXParser("foo")}, nil).
Return(&path.GotSymlink{Parent: scopeWalker, Target: path.NewUNIXParser("foo")}, nil).
Times(41)

require.Equal(
t,
status.Error(codes.InvalidArgument, "Maximum number of symbolic link redirections reached"),
path.Resolve(path.MustNewUNIXParser("foo"), path.NewLoopDetectingScopeWalker(scopeWalker)))
path.Resolve(path.NewUNIXParser("foo"), path.NewLoopDetectingScopeWalker(scopeWalker)))
})

t.Run("Success", func(t *testing.T) {
Expand All @@ -38,7 +38,7 @@ func TestLoopDetectingScopeWalker(t *testing.T) {
scopeWalker1.EXPECT().OnAbsolute().Return(componentWalker1, nil)
scopeWalker2 := mock.NewMockScopeWalker(ctrl)
componentWalker1.EXPECT().OnTerminal(path.MustNewComponent("tmp")).
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.MustNewUNIXParser("private/tmp")}, nil)
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.NewUNIXParser("private/tmp")}, nil)
componentWalker2 := mock.NewMockComponentWalker(ctrl)
scopeWalker2.EXPECT().OnRelative().Return(componentWalker2, nil)
componentWalker3 := mock.NewMockComponentWalker(ctrl)
Expand All @@ -49,6 +49,6 @@ func TestLoopDetectingScopeWalker(t *testing.T) {

require.NoError(
t,
path.Resolve(path.MustNewUNIXParser("/tmp"), path.NewLoopDetectingScopeWalker(scopeWalker1)))
path.Resolve(path.NewUNIXParser("/tmp"), path.NewLoopDetectingScopeWalker(scopeWalker1)))
})
}
4 changes: 2 additions & 2 deletions pkg/filesystem/path/relative_scope_walker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestRelativeScopeWalker(t *testing.T) {
componentWalker := mock.NewMockComponentWalker(ctrl)
componentWalker.EXPECT().OnTerminal(path.MustNewComponent("hello"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("hello"), path.NewRelativeScopeWalker(componentWalker)))
require.NoError(t, path.Resolve(path.NewUNIXParser("hello"), path.NewRelativeScopeWalker(componentWalker)))
})

t.Run("Absolute", func(t *testing.T) {
Expand All @@ -28,6 +28,6 @@ func TestRelativeScopeWalker(t *testing.T) {
require.Equal(
t,
status.Error(codes.InvalidArgument, "Path is absolute, while a relative path was expected"),
path.Resolve(path.MustNewUNIXParser("/hello"), path.NewRelativeScopeWalker(componentWalker)))
path.Resolve(path.NewUNIXParser("/hello"), path.NewRelativeScopeWalker(componentWalker)))
})
}
39 changes: 20 additions & 19 deletions pkg/filesystem/path/resolve_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ func TestResolve(t *testing.T) {
ctrl := gomock.NewController(t)

t.Run("NullByte", func(t *testing.T) {
_, err := path.NewUNIXParser("hello\x00world")
scopeWalker := mock.NewMockScopeWalker(ctrl)

require.Equal(
t,
status.Error(codes.InvalidArgument, "Path contains a null byte"),
err,
path.Resolve(path.NewUNIXParser("hello\x00world"), scopeWalker),
)
})

Expand All @@ -29,15 +30,15 @@ func TestResolve(t *testing.T) {
componentWalker := mock.NewMockComponentWalker(ctrl)
scopeWalker.EXPECT().OnRelative().Return(componentWalker, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser(""), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser(""), scopeWalker))
})

t.Run("Dot", func(t *testing.T) {
scopeWalker := mock.NewMockScopeWalker(ctrl)
componentWalker := mock.NewMockComponentWalker(ctrl)
scopeWalker.EXPECT().OnRelative().Return(componentWalker, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser("."), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("."), scopeWalker))
})

t.Run("SingleFileRelative", func(t *testing.T) {
Expand All @@ -46,7 +47,7 @@ func TestResolve(t *testing.T) {
scopeWalker.EXPECT().OnRelative().Return(componentWalker, nil)
componentWalker.EXPECT().OnTerminal(path.MustNewComponent("hello"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("hello"), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("hello"), scopeWalker))
})

t.Run("SingleFileAbsolute", func(t *testing.T) {
Expand All @@ -55,7 +56,7 @@ func TestResolve(t *testing.T) {
scopeWalker.EXPECT().OnAbsolute().Return(componentWalker, nil)
componentWalker.EXPECT().OnTerminal(path.MustNewComponent("hello"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("/hello"), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("/hello"), scopeWalker))
})

t.Run("SingleDirectoryWithSlash", func(t *testing.T) {
Expand All @@ -66,7 +67,7 @@ func TestResolve(t *testing.T) {
componentWalker1.EXPECT().OnDirectory(path.MustNewComponent("hello")).
Return(path.GotDirectory{Child: componentWalker2}, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser("hello/"), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("hello/"), scopeWalker))
})

t.Run("SingleDirectoryWithSlashDot", func(t *testing.T) {
Expand All @@ -77,7 +78,7 @@ func TestResolve(t *testing.T) {
componentWalker1.EXPECT().OnDirectory(path.MustNewComponent("hello")).
Return(path.GotDirectory{Child: componentWalker2}, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser("hello/."), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("hello/."), scopeWalker))
})

t.Run("MultipleComponents", func(t *testing.T) {
Expand All @@ -99,7 +100,7 @@ func TestResolve(t *testing.T) {
componentWalker5.EXPECT().OnUp().Return(componentWalker6, nil)
componentWalker6.EXPECT().OnTerminal(path.MustNewComponent("d"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("./a////../b/c/../d"), scopeWalker))
require.NoError(t, path.Resolve(path.NewUNIXParser("./a////../b/c/../d"), scopeWalker))
})

t.Run("SymlinkWithoutSlash", func(t *testing.T) {
Expand All @@ -108,12 +109,12 @@ func TestResolve(t *testing.T) {
scopeWalker1.EXPECT().OnRelative().Return(componentWalker1, nil)
scopeWalker2 := mock.NewMockScopeWalker(ctrl)
componentWalker1.EXPECT().OnTerminal(path.MustNewComponent("a")).
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.MustNewUNIXParser("b")}, nil)
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.NewUNIXParser("b")}, nil)
componentWalker2 := mock.NewMockComponentWalker(ctrl)
scopeWalker2.EXPECT().OnRelative().Return(componentWalker2, nil)
componentWalker2.EXPECT().OnTerminal(path.MustNewComponent("b"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("a"), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser("a"), scopeWalker1))
})

t.Run("SymlinkWithSlashInSymlink", func(t *testing.T) {
Expand All @@ -122,14 +123,14 @@ func TestResolve(t *testing.T) {
scopeWalker1.EXPECT().OnRelative().Return(componentWalker1, nil)
scopeWalker2 := mock.NewMockScopeWalker(ctrl)
componentWalker1.EXPECT().OnTerminal(path.MustNewComponent("a")).
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.MustNewUNIXParser("b/")}, nil)
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.NewUNIXParser("b/")}, nil)
componentWalker2 := mock.NewMockComponentWalker(ctrl)
scopeWalker2.EXPECT().OnRelative().Return(componentWalker2, nil)
componentWalker3 := mock.NewMockComponentWalker(ctrl)
componentWalker2.EXPECT().OnDirectory(path.MustNewComponent("b")).
Return(path.GotDirectory{Child: componentWalker3}, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser("a"), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser("a"), scopeWalker1))
})

t.Run("SymlinkWithSlashInPath", func(t *testing.T) {
Expand All @@ -138,14 +139,14 @@ func TestResolve(t *testing.T) {
scopeWalker1.EXPECT().OnRelative().Return(componentWalker1, nil)
scopeWalker2 := mock.NewMockScopeWalker(ctrl)
componentWalker1.EXPECT().OnDirectory(path.MustNewComponent("a")).
Return(path.GotSymlink{Parent: scopeWalker2, Target: path.MustNewUNIXParser("b")}, nil)
Return(path.GotSymlink{Parent: scopeWalker2, Target: path.NewUNIXParser("b")}, nil)
componentWalker2 := mock.NewMockComponentWalker(ctrl)
scopeWalker2.EXPECT().OnRelative().Return(componentWalker2, nil)
componentWalker3 := mock.NewMockComponentWalker(ctrl)
componentWalker2.EXPECT().OnDirectory(path.MustNewComponent("b")).
Return(path.GotDirectory{Child: componentWalker3}, nil)

require.NoError(t, path.Resolve(path.MustNewUNIXParser("a/"), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser("a/"), scopeWalker1))
})

t.Run("SymlinkInSymlinkInSymlink", func(t *testing.T) {
Expand All @@ -154,17 +155,17 @@ func TestResolve(t *testing.T) {
scopeWalker1.EXPECT().OnRelative().Return(componentWalker1, nil)
scopeWalker2 := mock.NewMockScopeWalker(ctrl)
componentWalker1.EXPECT().OnTerminal(path.MustNewComponent("a")).
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.MustNewUNIXParser("b/z")}, nil)
Return(&path.GotSymlink{Parent: scopeWalker2, Target: path.NewUNIXParser("b/z")}, nil)
componentWalker2 := mock.NewMockComponentWalker(ctrl)
scopeWalker2.EXPECT().OnRelative().Return(componentWalker2, nil)
scopeWalker3 := mock.NewMockScopeWalker(ctrl)
componentWalker2.EXPECT().OnDirectory(path.MustNewComponent("b")).
Return(path.GotSymlink{Parent: scopeWalker3, Target: path.MustNewUNIXParser("c/y")}, nil)
Return(path.GotSymlink{Parent: scopeWalker3, Target: path.NewUNIXParser("c/y")}, nil)
componentWalker3 := mock.NewMockComponentWalker(ctrl)
scopeWalker3.EXPECT().OnRelative().Return(componentWalker3, nil)
scopeWalker4 := mock.NewMockScopeWalker(ctrl)
componentWalker3.EXPECT().OnDirectory(path.MustNewComponent("c")).
Return(path.GotSymlink{Parent: scopeWalker4, Target: path.MustNewUNIXParser("x")}, nil)
Return(path.GotSymlink{Parent: scopeWalker4, Target: path.NewUNIXParser("x")}, nil)
componentWalker4 := mock.NewMockComponentWalker(ctrl)
scopeWalker4.EXPECT().OnRelative().Return(componentWalker4, nil)
componentWalker5 := mock.NewMockComponentWalker(ctrl)
Expand All @@ -175,6 +176,6 @@ func TestResolve(t *testing.T) {
Return(path.GotDirectory{Child: componentWalker6}, nil)
componentWalker6.EXPECT().OnTerminal(path.MustNewComponent("z"))

require.NoError(t, path.Resolve(path.MustNewUNIXParser("a"), scopeWalker1))
require.NoError(t, path.Resolve(path.NewUNIXParser("a"), scopeWalker1))
})
}
Loading

0 comments on commit 0f210f0

Please sign in to comment.