diff options
Diffstat (limited to 'hugolib/segments/segments_test.go')
-rw-r--r-- | hugolib/segments/segments_test.go | 115 |
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"}) + } +} |