2017-02-14 04:13:59 +03:00
package misc
import (
"net/http"
"net/http/httptest"
"testing"
macaron "gopkg.in/macaron.v1"
"net/url"
"io/ioutil"
"strings"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/markdown"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/sdk/gitea"
"github.com/go-macaron/inject"
"github.com/stretchr/testify/assert"
)
const AppURL = "http://localhost:3000/"
const Repo = "gogits/gogs"
const AppSubURL = AppURL + Repo + "/"
func createContext ( req * http . Request ) ( * macaron . Context , * httptest . ResponseRecorder ) {
resp := httptest . NewRecorder ( )
c := & macaron . Context {
Injector : inject . New ( ) ,
2017-02-26 08:25:35 +03:00
Req : macaron . Request { Request : req } ,
2017-02-14 04:13:59 +03:00
Resp : macaron . NewResponseWriter ( resp ) ,
2017-02-26 08:25:35 +03:00
Render : & macaron . DummyRender { ResponseWriter : resp } ,
2017-02-14 04:13:59 +03:00
Data : make ( map [ string ] interface { } ) ,
}
c . Map ( c )
c . Map ( req )
return c , resp
}
func wrap ( ctx * macaron . Context ) * context . APIContext {
return & context . APIContext {
Context : & context . Context {
Context : ctx ,
} ,
}
}
func TestAPI_RenderGFM ( t * testing . T ) {
setting . AppURL = AppURL
options := api . MarkdownOption {
Mode : "gfm" ,
Text : "" ,
Context : Repo ,
2017-02-24 17:59:56 +03:00
Wiki : true ,
2017-02-14 04:13:59 +03:00
}
requrl , _ := url . Parse ( markdown . URLJoin ( AppURL , "api" , "v1" , "markdown" ) )
req := & http . Request {
Method : "POST" ,
URL : requrl ,
}
m , resp := createContext ( req )
ctx := wrap ( m )
testCases := [ ] string {
// dear imgui wiki markdown extract: special wiki syntax
` Wiki ! Enjoy : )
- [ [ Links , Language bindings , Engine bindings | Links ] ]
- [ [ Tips ] ]
- Bezier widget ( by @ r - lyeh ) https : //github.com/ocornut/imgui/issues/786`,
// rendered
` < p > Wiki ! Enjoy : ) < / p >
< ul >
< li > < a href = "` + AppSubURL + `wiki/Links" rel = "nofollow" > Links , Language bindings , Engine bindings < / a > < / li >
< li > < a href = "` + AppSubURL + `wiki/Tips" rel = "nofollow" > Tips < / a > < / li >
2017-08-14 01:30:28 +03:00
< li > Bezier widget ( by < a href = "` + AppURL + `r-lyeh" rel = "nofollow" > @ r - lyeh < / a > ) https : //github.com/ocornut/imgui/issues/786</li>
2017-02-14 04:13:59 +03:00
< / ul >
` ,
// wine-staging wiki home extract: special wiki syntax, images
` # # What is Wine Staging ?
* * Wine Staging * * on website [ wine - staging . com ] ( http : //wine-staging.com).
# # Quick Links
Here are some links to the most important topics . You can find the full list of pages at the sidebar .
[ [ Configuration ] ]
[ [ images / icon - bug . png ] ]
` ,
// rendered
` < h2 > What is Wine Staging ? < / h2 >
< p > < strong > Wine Staging < / strong > on website < a href = "http://wine-staging.com" rel = "nofollow" > wine - staging . com < / a > . < / p >
< h2 > Quick Links < / h2 >
< p > Here are some links to the most important topics . You can find the full list of pages at the sidebar . < / p >
< p > < a href = "` + AppSubURL + `wiki/Configuration" rel = "nofollow" > Configuration < / a >
2017-02-24 17:59:56 +03:00
< a href = "` + AppSubURL + `wiki/raw/images/icon-bug.png" rel = "nofollow" > < img src = "` + AppSubURL + `wiki/raw/images/icon-bug.png" alt = "images/icon-bug.png" title = "icon-bug.png" / > < / a > < / p >
2017-02-14 04:13:59 +03:00
` ,
// Guard wiki sidebar: special syntax
` [[Guardfile-DSL / Configuring-Guard|Guardfile-DSL---Configuring-Guard]] ` ,
// rendered
` <p><a href=" ` + AppSubURL + ` wiki / Guardfile - DSL -- - Configuring - Guard " rel=" nofollow " > Guardfile - DSL / Configuring - Guard < / a > < / p >
` ,
// special syntax
` [[Name|Link]] ` ,
// rendered
` <p><a href=" ` + AppSubURL + ` wiki / Link " rel=" nofollow " > Name < / a > < / p >
` ,
// empty
` ` ,
// rendered
` ` ,
}
for i := 0 ; i < len ( testCases ) ; i += 2 {
options . Text = testCases [ i ]
Markdown ( ctx , options )
assert . Equal ( t , testCases [ i + 1 ] , resp . Body . String ( ) )
resp . Body . Reset ( )
}
}
var simpleCases = [ ] string {
// Guard wiki sidebar: special syntax
` [[Guardfile-DSL / Configuring-Guard|Guardfile-DSL---Configuring-Guard]] ` ,
// rendered
` < p > [ [ Guardfile - DSL / Configuring - Guard | Guardfile - DSL -- - Configuring - Guard ] ] < / p >
` ,
// special syntax
` [[Name|Link]] ` ,
// rendered
` < p > [ [ Name | Link ] ] < / p >
` ,
// empty
` ` ,
// rendered
` ` ,
}
func TestAPI_RenderSimple ( t * testing . T ) {
setting . AppURL = AppURL
options := api . MarkdownOption {
Mode : "markdown" ,
Text : "" ,
Context : Repo ,
}
requrl , _ := url . Parse ( markdown . URLJoin ( AppURL , "api" , "v1" , "markdown" ) )
req := & http . Request {
Method : "POST" ,
URL : requrl ,
}
m , resp := createContext ( req )
ctx := wrap ( m )
for i := 0 ; i < len ( simpleCases ) ; i += 2 {
options . Text = simpleCases [ i ]
Markdown ( ctx , options )
assert . Equal ( t , simpleCases [ i + 1 ] , resp . Body . String ( ) )
resp . Body . Reset ( )
}
}
func TestAPI_RenderRaw ( t * testing . T ) {
setting . AppURL = AppURL
requrl , _ := url . Parse ( markdown . URLJoin ( AppURL , "api" , "v1" , "markdown" ) )
req := & http . Request {
Method : "POST" ,
URL : requrl ,
}
m , resp := createContext ( req )
ctx := wrap ( m )
for i := 0 ; i < len ( simpleCases ) ; i += 2 {
ctx . Req . Request . Body = ioutil . NopCloser ( strings . NewReader ( simpleCases [ i ] ) )
MarkdownRaw ( ctx )
assert . Equal ( t , simpleCases [ i + 1 ] , resp . Body . String ( ) )
resp . Body . Reset ( )
}
}