2018-02-20 15:50:42 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package util
import (
2019-11-13 05:27:11 +03:00
"strings"
2018-02-20 15:50:42 +03:00
"testing"
2018-06-26 17:45:18 +03:00
"code.gitea.io/gitea/modules/setting"
2018-02-20 15:50:42 +03:00
"github.com/stretchr/testify/assert"
)
func TestURLJoin ( t * testing . T ) {
type test struct {
Expected string
Base string
Elements [ ] string
}
newTest := func ( expected , base string , elements ... string ) test {
return test { Expected : expected , Base : base , Elements : elements }
}
for _ , test := range [ ] test {
newTest ( "https://try.gitea.io/a/b/c" ,
"https://try.gitea.io" , "a/b" , "c" ) ,
newTest ( "https://try.gitea.io/a/b/c" ,
"https://try.gitea.io/" , "/a/b/" , "/c/" ) ,
newTest ( "https://try.gitea.io/a/c" ,
"https://try.gitea.io/" , "/a/./b/" , "../c/" ) ,
newTest ( "a/b/c" ,
"a" , "b/c/" ) ,
newTest ( "a/b/d" ,
"a/" , "b/c/" , "/../d/" ) ,
2018-05-29 06:51:42 +03:00
newTest ( "https://try.gitea.io/a/b/c#d" ,
"https://try.gitea.io" , "a/b" , "c#d" ) ,
2018-05-30 16:23:43 +03:00
newTest ( "/a/b/d" ,
"/a/" , "b/c/" , "/../d/" ) ,
newTest ( "/a/b/c" ,
"/a" , "b/c/" ) ,
newTest ( "/a/b/c#hash" ,
"/a" , "b/c#hash" ) ,
2018-02-20 15:50:42 +03:00
} {
assert . Equal ( t , test . Expected , URLJoin ( test . Base , test . Elements ... ) )
}
}
2018-06-26 17:45:18 +03:00
func TestIsExternalURL ( t * testing . T ) {
2019-05-28 00:08:38 +03:00
setting . AppURL = "https://try.gitea.io"
2018-06-26 17:45:18 +03:00
type test struct {
Expected bool
RawURL string
}
newTest := func ( expected bool , rawURL string ) test {
return test { Expected : expected , RawURL : rawURL }
}
for _ , test := range [ ] test {
newTest ( false ,
"https://try.gitea.io" ) ,
newTest ( true ,
"https://example.com/" ) ,
newTest ( true ,
"//example.com" ) ,
newTest ( true ,
"http://example.com" ) ,
newTest ( false ,
"a/" ) ,
newTest ( false ,
"https://try.gitea.io/test?param=false" ) ,
newTest ( false ,
"test?param=false" ) ,
newTest ( false ,
"//try.gitea.io/test?param=false" ) ,
newTest ( false ,
"/hey/hey/hey#3244" ) ,
} {
assert . Equal ( t , test . Expected , IsExternalURL ( test . RawURL ) )
}
}
2019-01-21 14:45:32 +03:00
func TestIsEmptyString ( t * testing . T ) {
cases := [ ] struct {
s string
expected bool
} {
{ "" , true } ,
{ " " , true } ,
{ " " , true } ,
{ " a" , false } ,
}
for _ , v := range cases {
assert . Equal ( t , v . expected , IsEmptyString ( v . s ) )
}
}
2019-11-13 05:27:11 +03:00
func Test_NormalizeEOL ( t * testing . T ) {
data1 := [ ] string {
"" ,
"This text starts with empty lines" ,
"another" ,
"" ,
"" ,
"" ,
"Some other empty lines in the middle" ,
"more." ,
"And more." ,
"Ends with empty lines too." ,
"" ,
"" ,
"" ,
}
data2 := [ ] string {
"This text does not start with empty lines" ,
"another" ,
"" ,
"" ,
"" ,
"Some other empty lines in the middle" ,
"more." ,
"And more." ,
"Ends without EOLtoo." ,
}
buildEOLData := func ( data [ ] string , eol string ) [ ] byte {
return [ ] byte ( strings . Join ( data , eol ) )
}
dos := buildEOLData ( data1 , "\r\n" )
unix := buildEOLData ( data1 , "\n" )
mac := buildEOLData ( data1 , "\r" )
assert . Equal ( t , unix , NormalizeEOL ( dos ) )
assert . Equal ( t , unix , NormalizeEOL ( mac ) )
assert . Equal ( t , unix , NormalizeEOL ( unix ) )
dos = buildEOLData ( data2 , "\r\n" )
unix = buildEOLData ( data2 , "\n" )
mac = buildEOLData ( data2 , "\r" )
assert . Equal ( t , unix , NormalizeEOL ( dos ) )
assert . Equal ( t , unix , NormalizeEOL ( mac ) )
assert . Equal ( t , unix , NormalizeEOL ( unix ) )
assert . Equal ( t , [ ] byte ( "one liner" ) , NormalizeEOL ( [ ] byte ( "one liner" ) ) )
assert . Equal ( t , [ ] byte ( "\n" ) , NormalizeEOL ( [ ] byte ( "\n" ) ) )
assert . Equal ( t , [ ] byte ( "\ntwo liner" ) , NormalizeEOL ( [ ] byte ( "\ntwo liner" ) ) )
assert . Equal ( t , [ ] byte ( "two liner\n" ) , NormalizeEOL ( [ ] byte ( "two liner\n" ) ) )
assert . Equal ( t , [ ] byte { } , NormalizeEOL ( [ ] byte { } ) )
assert . Equal ( t , [ ] byte ( "mix\nand\nmatch\n." ) , NormalizeEOL ( [ ] byte ( "mix\r\nand\rmatch\n." ) ) )
}