func markdownParse(c *Controller) ([]*markdown.Config, error) { var mdconfigs []*markdown.Config for c.Next() { md := &markdown.Config{ Renderer: blackfriday.HtmlRenderer(0, "", ""), Extensions: make(map[string]struct{}), Template: markdown.GetDefaultTemplate(), } // Get the path scope args := c.RemainingArgs() switch len(args) { case 0: md.PathScope = "/" case 1: md.PathScope = args[0] default: return mdconfigs, c.ArgErr() } // Load any other configuration parameters for c.NextBlock() { if err := loadParams(c, md); err != nil { return mdconfigs, err } } // If no extensions were specified, assume some defaults if len(md.Extensions) == 0 { md.Extensions[".md"] = struct{}{} md.Extensions[".markdown"] = struct{}{} md.Extensions[".mdown"] = struct{}{} } mdconfigs = append(mdconfigs, md) } return mdconfigs, nil }
func TestMarkdownParse(t *testing.T) { tests := []struct { inputMarkdownConfig string shouldErr bool expectedMarkdownConfig []markdown.Config }{ {`markdown /blog { ext .md .txt css /resources/css/blog.css js /resources/js/blog.js }`, false, []markdown.Config{{ PathScope: "/blog", Extensions: map[string]struct{}{ ".md": {}, ".txt": {}, }, Styles: []string{"/resources/css/blog.css"}, Scripts: []string{"/resources/js/blog.js"}, Template: markdown.GetDefaultTemplate(), }}}, {`markdown /blog { ext .md template tpl_with_include.html }`, false, []markdown.Config{{ PathScope: "/blog", Extensions: map[string]struct{}{ ".md": {}, }, Template: markdown.GetDefaultTemplate(), }}}, } // Setup the extra template tmpl := tests[1].expectedMarkdownConfig[0].Template markdown.SetTemplate(tmpl, "", "./testdata/tpl_with_include.html") for i, test := range tests { c := NewTestController(test.inputMarkdownConfig) c.Root = "./testdata" actualMarkdownConfigs, err := markdownParse(c) if err == nil && test.shouldErr { t.Errorf("Test %d didn't error, but it should have", i) } else if err != nil && !test.shouldErr { t.Errorf("Test %d errored, but it shouldn't have; got '%v'", i, err) } if len(actualMarkdownConfigs) != len(test.expectedMarkdownConfig) { t.Fatalf("Test %d expected %d no of WebSocket configs, but got %d ", i, len(test.expectedMarkdownConfig), len(actualMarkdownConfigs)) } for j, actualMarkdownConfig := range actualMarkdownConfigs { if actualMarkdownConfig.PathScope != test.expectedMarkdownConfig[j].PathScope { t.Errorf("Test %d expected %dth Markdown PathScope to be %s , but got %s", i, j, test.expectedMarkdownConfig[j].PathScope, actualMarkdownConfig.PathScope) } if fmt.Sprint(actualMarkdownConfig.Styles) != fmt.Sprint(test.expectedMarkdownConfig[j].Styles) { t.Errorf("Test %d expected %dth Markdown Config Styles to be %s , but got %s", i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Styles), fmt.Sprint(actualMarkdownConfig.Styles)) } if fmt.Sprint(actualMarkdownConfig.Scripts) != fmt.Sprint(test.expectedMarkdownConfig[j].Scripts) { t.Errorf("Test %d expected %dth Markdown Config Scripts to be %s , but got %s", i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Scripts), fmt.Sprint(actualMarkdownConfig.Scripts)) } if ok, tx, ty := equalTemplates(actualMarkdownConfig.Template, test.expectedMarkdownConfig[j].Template); !ok { t.Errorf("Test %d the %dth Markdown Config Templates did not match, expected %s to be %s", i, j, tx, ty) } } } }