|
|
|
package path_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/aziis98/cabret/path"
|
|
|
|
"gotest.tools/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestPath(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("/foo/bar")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathString{"foo"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathString{"bar"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSimplePattern(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("posts/{name}.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathString{"posts"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"name"},
|
|
|
|
&path.PathString{".md"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSimplePatternWithAny(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("posts/*/{name}.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathString{"posts"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathLiteral{ShortAny: true},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"name"},
|
|
|
|
&path.PathString{".md"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("MatchGood", func(t *testing.T) {
|
|
|
|
m, ctx, err := p.Match("posts/2022/post-1.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err, nil)
|
|
|
|
assert.Equal(t, m, true)
|
|
|
|
assert.DeepEqual(t, ctx, map[string]string{
|
|
|
|
path.FullMatch: "posts/2022/post-1.md",
|
|
|
|
"name": "post-1",
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("MatchBad", func(t *testing.T) {
|
|
|
|
m, ctx, err := p.Match("posts/2022/12/post-1.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.Assert(t, m == false)
|
|
|
|
assert.Assert(t, ctx == nil)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSimplePatternCombo(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("posts/{{path}}/{name}.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathString{"posts"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathLongPattern{"path"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"name"},
|
|
|
|
&path.PathString{".md"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestPatternCombo(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("posts/**/{date}_{slug}.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathString{"posts"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathLiteral{LongAny: true},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"date"},
|
|
|
|
&path.PathString{"_"},
|
|
|
|
&path.PathShortPattern{"slug"},
|
|
|
|
&path.PathString{".md"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("MatchGood", func(t *testing.T) {
|
|
|
|
ok, ctx, err := p.Match("posts/a/b/c/2022-12-25_example.md")
|
|
|
|
|
|
|
|
assert.Assert(t, ok)
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, ctx, map[string]string{
|
|
|
|
path.FullMatch: "posts/a/b/c/2022-12-25_example.md",
|
|
|
|
"date": "2022-12-25",
|
|
|
|
"slug": "example",
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStrangePatternCombo(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("foo{{path}}/{name}.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathString{"foo"},
|
|
|
|
&path.PathLongPattern{"path"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"name"},
|
|
|
|
&path.PathString{".md"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("match", func(t *testing.T) {
|
|
|
|
m, ctx, err := p.Match("foo-1/bar/baz/post-1.md")
|
|
|
|
|
|
|
|
assert.NilError(t, err, nil)
|
|
|
|
assert.Equal(t, m, true)
|
|
|
|
assert.DeepEqual(t, ctx, map[string]string{
|
|
|
|
path.FullMatch: "foo-1/bar/baz/post-1.md",
|
|
|
|
"name": "post-1",
|
|
|
|
"path": "-1/bar/baz",
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMultipleGroups(t *testing.T) {
|
|
|
|
p, err := path.ParsePattern("{a}/{b}/{c}")
|
|
|
|
|
|
|
|
assert.NilError(t, err)
|
|
|
|
assert.DeepEqual(t, p, &path.Pattern{
|
|
|
|
Parts: []path.PathPart{
|
|
|
|
&path.PathShortPattern{"a"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"b"},
|
|
|
|
&path.PathLiteral{Slash: true},
|
|
|
|
&path.PathShortPattern{"c"},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("match", func(t *testing.T) {
|
|
|
|
m, ctx, err := p.Match("foo/bar/baz")
|
|
|
|
|
|
|
|
assert.NilError(t, err, nil)
|
|
|
|
assert.Equal(t, m, true)
|
|
|
|
assert.DeepEqual(t, ctx, map[string]string{
|
|
|
|
path.FullMatch: "foo/bar/baz",
|
|
|
|
"a": "foo",
|
|
|
|
"b": "bar",
|
|
|
|
"c": "baz",
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|