summaryrefslogtreecommitdiffstats
path: root/hugolib/segments/segments_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/segments/segments_test.go')
-rw-r--r--hugolib/segments/segments_test.go115
1 files changed, 115 insertions, 0 deletions
diff --git a/hugolib/segments/segments_test.go b/hugolib/segments/segments_test.go
new file mode 100644
index 000000000..1a2dfb97b
--- /dev/null
+++ b/hugolib/segments/segments_test.go
@@ -0,0 +1,115 @@
+package segments
+
+import (
+ "testing"
+
+ qt "github.com/frankban/quicktest"
+)
+
+func TestCompileSegments(t *testing.T) {
+ c := qt.New(t)
+
+ c.Run("excludes", func(c *qt.C) {
+ fields := []SegmentMatcherFields{
+ {
+ Lang: "n*",
+ Output: "rss",
+ },
+ }
+
+ match, err := compileSegments(fields)
+ c.Assert(err, qt.IsNil)
+
+ check := func() {
+ c.Assert(match, qt.IsNotNil)
+ c.Assert(match(SegmentMatcherFields{Lang: "no"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Kind: "page"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Output: "rss"}), qt.Equals, true)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Output: "html"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Kind: "page"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Output: "rss", Kind: "page"}), qt.Equals, true)
+ }
+
+ check()
+
+ fields = []SegmentMatcherFields{
+ {
+ Path: "/blog/**",
+ },
+ {
+ Lang: "n*",
+ Output: "rss",
+ },
+ }
+
+ match, err = compileSegments(fields)
+ c.Assert(err, qt.IsNil)
+ check()
+ c.Assert(match(SegmentMatcherFields{Path: "/blog/foo"}), qt.Equals, true)
+ })
+
+ c.Run("includes", func(c *qt.C) {
+ fields := []SegmentMatcherFields{
+ {
+ Path: "/docs/**",
+ },
+ {
+ Lang: "no",
+ Output: "rss",
+ },
+ }
+
+ match, err := compileSegments(fields)
+ c.Assert(err, qt.IsNil)
+ c.Assert(match, qt.IsNotNil)
+ c.Assert(match(SegmentMatcherFields{Lang: "no"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Kind: "page"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Kind: "page", Path: "/blog/foo"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Lang: "en"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Output: "rss"}), qt.Equals, true)
+ c.Assert(match(SegmentMatcherFields{Lang: "no", Output: "html"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Kind: "page", Path: "/docs/foo"}), qt.Equals, true)
+ })
+
+ c.Run("includes variant1", func(c *qt.C) {
+ c.Skip()
+
+ fields := []SegmentMatcherFields{
+ {
+ Kind: "home",
+ },
+ {
+ Path: "{/docs,/docs/**}",
+ },
+ }
+
+ match, err := compileSegments(fields)
+ c.Assert(err, qt.IsNil)
+ c.Assert(match, qt.IsNotNil)
+ c.Assert(match(SegmentMatcherFields{Path: "/blog/foo"}), qt.Equals, false)
+ c.Assert(match(SegmentMatcherFields{Kind: "page", Path: "/docs/foo"}), qt.Equals, true)
+ c.Assert(match(SegmentMatcherFields{Kind: "home", Path: "/"}), qt.Equals, true)
+ })
+}
+
+func BenchmarkSegmentsMatch(b *testing.B) {
+ fields := []SegmentMatcherFields{
+ {
+ Path: "/docs/**",
+ },
+ {
+ Lang: "no",
+ Output: "rss",
+ },
+ }
+
+ match, err := compileSegments(fields)
+ if err != nil {
+ b.Fatal(err)
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ match(SegmentMatcherFields{Lang: "no", Output: "rss"})
+ }
+}