Files
gof3/tree/generic/path_test.go
2024-03-07 16:36:47 +08:00

107 lines
3.3 KiB
Go

// Copyright Earl Warren <contact@earl-warren.org>
// Copyright Loïc Dachary <loic@dachary.org>
// SPDX-License-Identifier: MIT
package generic
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewPathFromString(t *testing.T) {
for _, pathString := range []string{"", ".", "A/.."} {
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 1, path.String())
assert.EqualValues(t, ".", string(path.First().GetID()))
}
for _, pathString := range []string{"/", "/.", "/..", "/A/.."} {
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 1, path.String())
assert.EqualValues(t, KindRoot, path.First().GetKind(), path.String())
assert.EqualValues(t, "", string(path.First().GetID()))
}
for _, pathString := range []string{"A", "A/.", "B/../A"} {
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 1, path.String())
assert.NotEqualValues(t, KindRoot, path.First().GetKind(), path.String())
assert.EqualValues(t, "A", string(path.First().GetID()))
}
{
pathString := "/A"
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 2, path.String())
assert.EqualValues(t, KindRoot, path.First().GetKind(), path.String())
notRoot := path.RemoveFirst()
assert.NotEqualValues(t, KindRoot, notRoot.First().GetKind(), path.String())
assert.EqualValues(t, pathString, path.String(), path.String())
}
{
pathString := "A/B"
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 2, path.String())
assert.NotEqualValues(t, KindRoot, path.First().GetKind(), path.String())
notRoot := path.RemoveFirst()
assert.NotEqualValues(t, KindRoot, notRoot.First().GetKind(), path.String())
assert.EqualValues(t, pathString, path.String(), path.String())
}
{
pathString := "../B"
path := NewPathFromString(pathString)
assert.False(t, path.Empty(), path.String())
assert.Len(t, path, 2, path.String())
assert.NotEqualValues(t, KindRoot, path.First().GetKind(), path.String())
notRoot := path.RemoveFirst()
assert.NotEqualValues(t, KindRoot, notRoot.First().GetKind(), path.String())
assert.EqualValues(t, pathString, path.String(), path.String())
}
}
func TestNodePath(t *testing.T) {
{
path := NilNode.GetCurrentPath()
assert.True(t, path.Empty())
pathString := path.PathString()
assert.True(t, pathString.Empty())
assert.EqualValues(t, "", pathString.Join())
}
root := NewNode()
root.SetIsNil(false)
root.SetKind(KindRoot)
level1 := NewNode()
level1.SetIsNil(false)
level1.SetParent(root)
id1 := NodeID("1")
level1.SetID(id1)
level2 := NewNode()
level2.SetIsNil(false)
level2.SetParent(level1)
id2 := NodeID("2")
level2.SetID(id2)
{
path := level2.GetCurrentPath()
assert.False(t, path.Empty())
if assert.EqualValues(t, 3, path.Length()) {
assert.True(t, root == path.First(), path.First().GetID())
rest := path.RemoveFirst()
assert.True(t, level1 == rest.First(), path.First().GetID())
rest = rest.RemoveFirst()
assert.True(t, level2 == rest.First(), path.First().GetID())
}
pathString := path.PathString()
assert.False(t, pathString.Empty())
assert.EqualValues(t, 3, len(pathString))
assert.EqualValues(t, "/1/2", pathString.Join())
}
}