func loadParams(c *Controller, mdc *markdown.Config) error { switch c.Val() { case "ext": for _, ext := range c.RemainingArgs() { mdc.Extensions[ext] = struct{}{} } return nil case "css": if !c.NextArg() { return c.ArgErr() } mdc.Styles = append(mdc.Styles, c.Val()) return nil case "js": if !c.NextArg() { return c.ArgErr() } mdc.Scripts = append(mdc.Scripts, c.Val()) return nil case "template": tArgs := c.RemainingArgs() switch len(tArgs) { default: return c.ArgErr() case 1: fpath := filepath.ToSlash(filepath.Clean(c.Root + string(filepath.Separator) + tArgs[0])) if err := markdown.SetTemplate(mdc.Template, "", fpath); err != nil { c.Errf("default template parse error: %v", err) } return nil case 2: fpath := filepath.ToSlash(filepath.Clean(c.Root + string(filepath.Separator) + tArgs[1])) if err := markdown.SetTemplate(mdc.Template, tArgs[0], fpath); err != nil { c.Errf("template parse error: %v", err) } return nil } case "templatedir": if !c.NextArg() { return c.ArgErr() } _, err := mdc.Template.ParseGlob(c.Val()) if err != nil { c.Errf("template load error: %v", err) } if c.NextArg() { return c.ArgErr() } return nil default: return c.Err("Expected valid markdown configuration property") } }
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) } } } }