URI: 
       regexp_test.go - hugo - [fork] hugo port for 9front
  HTML git clone https://git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       regexp_test.go (3704B)
       ---
            1 // Copyright 2017 The Hugo Authors. All rights reserved.
            2 //
            3 // Licensed under the Apache License, Version 2.0 (the "License");
            4 // you may not use this file except in compliance with the License.
            5 // You may obtain a copy of the License at
            6 // http://www.apache.org/licenses/LICENSE-2.0
            7 //
            8 // Unless required by applicable law or agreed to in writing, software
            9 // distributed under the License is distributed on an "AS IS" BASIS,
           10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           11 // See the License for the specific language governing permissions and
           12 // limitations under the License.
           13 
           14 package strings
           15 
           16 import (
           17         "testing"
           18 
           19         qt "github.com/frankban/quicktest"
           20 )
           21 
           22 func TestFindRE(t *testing.T) {
           23         t.Parallel()
           24         c := qt.New(t)
           25 
           26         for _, test := range []struct {
           27                 expr    string
           28                 content any
           29                 limit   any
           30                 expect  any
           31         }{
           32                 {"[G|g]o", "Hugo is a static site generator written in Go.", 2, []string{"go", "Go"}},
           33                 {"[G|g]o", "Hugo is a static site generator written in Go.", -1, []string{"go", "Go"}},
           34                 {"[G|g]o", "Hugo is a static site generator written in Go.", 1, []string{"go"}},
           35                 {"[G|g]o", "Hugo is a static site generator written in Go.", "1", []string{"go"}},
           36                 {"[G|g]o", "Hugo is a static site generator written in Go.", nil, []string(nil)},
           37                 // errors
           38                 {"[G|go", "Hugo is a static site generator written in Go.", nil, false},
           39                 {"[G|g]o", t, nil, false},
           40         } {
           41                 result, err := ns.FindRE(test.expr, test.content, test.limit)
           42 
           43                 if b, ok := test.expect.(bool); ok && !b {
           44                         c.Assert(err, qt.Not(qt.IsNil))
           45                         continue
           46                 }
           47 
           48                 c.Assert(err, qt.IsNil)
           49                 c.Check(result, qt.DeepEquals, test.expect)
           50         }
           51 }
           52 
           53 func TestFindRESubmatch(t *testing.T) {
           54         t.Parallel()
           55         c := qt.New(t)
           56 
           57         for _, test := range []struct {
           58                 expr    string
           59                 content any
           60                 limit   any
           61                 expect  any
           62         }{
           63                 {`<a\s*href="(.+?)">(.+?)</a>`, `<li><a href="#foo">Foo</a></li><li><a href="#bar">Bar</a></li>`, -1, [][]string{
           64                         {"<a href=\"#foo\">Foo</a>", "#foo", "Foo"},
           65                         {"<a href=\"#bar\">Bar</a>", "#bar", "Bar"},
           66                 }},
           67                 // Some simple cases.
           68                 {"([G|g]o)", "Hugo is a static site generator written in Go.", -1, [][]string{{"go", "go"}, {"Go", "Go"}}},
           69                 {"([G|g]o)", "Hugo is a static site generator written in Go.", 1, [][]string{{"go", "go"}}},
           70 
           71                 // errors
           72                 {"([G|go", "Hugo is a static site generator written in Go.", nil, false},
           73                 {"([G|g]o)", t, nil, false},
           74         } {
           75                 result, err := ns.FindRESubmatch(test.expr, test.content, test.limit)
           76 
           77                 if b, ok := test.expect.(bool); ok && !b {
           78                         c.Assert(err, qt.Not(qt.IsNil))
           79                         continue
           80                 }
           81 
           82                 c.Assert(err, qt.IsNil)
           83                 c.Check(result, qt.DeepEquals, test.expect)
           84         }
           85 }
           86 
           87 func TestReplaceRE(t *testing.T) {
           88         t.Parallel()
           89         c := qt.New(t)
           90 
           91         for _, test := range []struct {
           92                 pattern any
           93                 repl    any
           94                 s       any
           95                 n       []any
           96                 expect  any
           97         }{
           98                 {"^https?://([^/]+).*", "$1", "http://gohugo.io/docs", nil, "gohugo.io"},
           99                 {"^https?://([^/]+).*", "$2", "http://gohugo.io/docs", nil, ""},
          100                 {"(ab)", "AB", "aabbaab", nil, "aABbaAB"},
          101                 {"(ab)", "AB", "aabbaab", []any{1}, "aABbaab"},
          102                 // errors
          103                 {"(ab", "AB", "aabb", nil, false}, // invalid re
          104                 {tstNoStringer{}, "$2", "http://gohugo.io/docs", nil, false},
          105                 {"^https?://([^/]+).*", tstNoStringer{}, "http://gohugo.io/docs", nil, false},
          106                 {"^https?://([^/]+).*", "$2", tstNoStringer{}, nil, false},
          107         } {
          108 
          109                 var (
          110                         result string
          111                         err    error
          112                 )
          113                 if len(test.n) > 0 {
          114                         result, err = ns.ReplaceRE(test.pattern, test.repl, test.s, test.n...)
          115                 } else {
          116                         result, err = ns.ReplaceRE(test.pattern, test.repl, test.s)
          117                 }
          118 
          119                 if b, ok := test.expect.(bool); ok && !b {
          120                         c.Assert(err, qt.Not(qt.IsNil))
          121                         continue
          122                 }
          123 
          124                 c.Assert(err, qt.IsNil)
          125                 c.Check(result, qt.Equals, test.expect)
          126         }
          127 }