mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
1b42dc572a
canonifyUrls=true, RelPermalink and baseUrl with sub-path did not work. This fixes that by adding a check for canonifyUrl=trues=true in RelPermalink(). So given - baseUrl "http://somehost.com/sub/" - the path "some-path/file.html" For canonifyUrls=false RelPermalink() returns "/sub/some-path/file.html" For canonifyUrls=true RelPermalink() returns "/some-path/file.html" In the last case, the Url will be made absolute and clickable in a later step. This commit also makes the menu urls defined in site config releative. To make them work with canonifying of urls, the context root is prepended if canonifying is turned off. Fixes #519 Fixes #711
122 lines
3.9 KiB
Go
122 lines
3.9 KiB
Go
package helpers
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUrlize(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expected string
|
|
}{
|
|
{" foo bar ", "foo-bar"},
|
|
{"foo.bar/foo_bar-foo", "foo.bar/foo_bar-foo"},
|
|
{"foo,bar:foo%bar", "foobarfoobar"},
|
|
{"foo/bar.html", "foo/bar.html"},
|
|
{"трям/трям", "%D1%82%D1%80%D1%8F%D0%BC/%D1%82%D1%80%D1%8F%D0%BC"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
output := Urlize(test.input)
|
|
if output != test.expected {
|
|
t.Errorf("Expected %#v, got %#v\n", test.expected, output)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMakePermalink(t *testing.T) {
|
|
type test struct {
|
|
host, link, output string
|
|
}
|
|
|
|
data := []test{
|
|
{"http://abc.com/foo", "post/bar", "http://abc.com/foo/post/bar"},
|
|
{"http://abc.com/foo/", "post/bar", "http://abc.com/foo/post/bar"},
|
|
{"http://abc.com", "post/bar", "http://abc.com/post/bar"},
|
|
{"http://abc.com", "bar", "http://abc.com/bar"},
|
|
{"http://abc.com/foo/bar", "post/bar", "http://abc.com/foo/bar/post/bar"},
|
|
{"http://abc.com/foo/bar", "post/bar/", "http://abc.com/foo/bar/post/bar/"},
|
|
}
|
|
|
|
for i, d := range data {
|
|
output := MakePermalink(d.host, d.link).String()
|
|
if d.output != output {
|
|
t.Errorf("Test #%d failed. Expected %q got %q", i, d.output, output)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestUrlPrep(t *testing.T) {
|
|
type test struct {
|
|
ugly bool
|
|
input string
|
|
output string
|
|
}
|
|
|
|
data := []test{
|
|
{false, "/section/name.html", "/section/name/"},
|
|
{true, "/section/name/index.html", "/section/name.html"},
|
|
}
|
|
for i, d := range data {
|
|
output := UrlPrep(d.ugly, d.input)
|
|
if d.output != output {
|
|
t.Errorf("Test #%d failed. Expected %q got %q", i, d.output, output)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func TestAddContextRoot(t *testing.T) {
|
|
tests := []struct {
|
|
baseUrl string
|
|
url string
|
|
expected string
|
|
}{
|
|
{"http://example.com/sub/", "/foo", "/sub/foo"},
|
|
{"http://example.com/sub/", "/foo/index.html", "/sub/foo/index.html"},
|
|
{"http://example.com/sub1/sub2", "/foo", "/sub1/sub2/foo"},
|
|
{"http://example.com", "/foo", "/foo"},
|
|
// cannot guess that the context root is already added int the example below
|
|
{"http://example.com/sub/", "/sub/foo", "/sub/sub/foo"},
|
|
{"http://example.com/тря", "/трям/", "/тря/трям/"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
output := AddContextRoot(test.baseUrl, test.url)
|
|
if output != test.expected {
|
|
t.Errorf("Expected %#v, got %#v\n", test.expected, output)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPretty(t *testing.T) {
|
|
assert.Equal(t, PrettifyUrlPath("/section/name.html"), "/section/name/index.html")
|
|
assert.Equal(t, PrettifyUrlPath("/section/sub/name.html"), "/section/sub/name/index.html")
|
|
assert.Equal(t, PrettifyUrlPath("/section/name/"), "/section/name/index.html")
|
|
assert.Equal(t, PrettifyUrlPath("/section/name/index.html"), "/section/name/index.html")
|
|
assert.Equal(t, PrettifyUrlPath("/index.html"), "/index.html")
|
|
assert.Equal(t, PrettifyUrlPath("/name.xml"), "/name/index.xml")
|
|
assert.Equal(t, PrettifyUrlPath("/"), "/")
|
|
assert.Equal(t, PrettifyUrlPath(""), "/")
|
|
assert.Equal(t, PrettifyUrl("/section/name.html"), "/section/name")
|
|
assert.Equal(t, PrettifyUrl("/section/sub/name.html"), "/section/sub/name")
|
|
assert.Equal(t, PrettifyUrl("/section/name/"), "/section/name")
|
|
assert.Equal(t, PrettifyUrl("/section/name/index.html"), "/section/name")
|
|
assert.Equal(t, PrettifyUrl("/index.html"), "/")
|
|
assert.Equal(t, PrettifyUrl("/name.xml"), "/name/index.xml")
|
|
assert.Equal(t, PrettifyUrl("/"), "/")
|
|
assert.Equal(t, PrettifyUrl(""), "/")
|
|
}
|
|
|
|
func TestUgly(t *testing.T) {
|
|
assert.Equal(t, Uglify("/section/name.html"), "/section/name.html")
|
|
assert.Equal(t, Uglify("/section/sub/name.html"), "/section/sub/name.html")
|
|
assert.Equal(t, Uglify("/section/name/"), "/section/name.html")
|
|
assert.Equal(t, Uglify("/section/name/index.html"), "/section/name.html")
|
|
assert.Equal(t, Uglify("/index.html"), "/index.html")
|
|
assert.Equal(t, Uglify("/name.xml"), "/name.xml")
|
|
assert.Equal(t, Uglify("/"), "/")
|
|
assert.Equal(t, Uglify(""), "/")
|
|
}
|