ref: fc946ded29149443e21587c7f513d4550dc67f39
parent: fd5cf9ac8d9c8587f2ac2f5a58c4b3bcd52f4896
author: spf13 <steve.francia@gmail.com>
date: Wed May 20 14:55:24 EDT 2015
Adding default handler & tests Fixes #147
--- a/hugolib/handler_file.go
+++ b/hugolib/handler_file.go
@@ -22,6 +22,7 @@
func init() {RegisterHandler(new(cssHandler))
+ RegisterHandler(new(defaultHandler))
}
type basicFileHandler Handle
@@ -34,9 +35,15 @@
return HandledResult{}}
-type cssHandler struct {- basicFileHandler
+type defaultHandler struct{ basicFileHandler }+
+func (h defaultHandler) Extensions() []string { return []string{"*"} }+func (h defaultHandler) FileConvert(f *source.File, s *Site) HandledResult {+ s.WriteDestFile(f.Path(), f.Contents)
+ return HandledResult{file: f}}
+
+type cssHandler struct{ basicFileHandler } func (h cssHandler) Extensions() []string { return []string{"css"} } func (h cssHandler) FileConvert(f *source.File, s *Site) HandledResult {--- a/hugolib/handler_meta.go
+++ b/hugolib/handler_meta.go
@@ -17,6 +17,7 @@
"errors"
"fmt"
+
"github.com/spf13/hugo/source"
)
@@ -82,6 +83,11 @@
func (mh *MetaHandle) Handler() Handler { if mh.handler == nil {mh.handler = FindHandler(mh.ext)
+
+ // if no handler found, use default handler
+ if mh.handler == nil {+ mh.handler = FindHandler("*")+ }
}
return mh.handler
}
--- /dev/null
+++ b/hugolib/handler_test.go
@@ -1,0 +1,78 @@
+package hugolib
+
+import (
+ "path/filepath"
+ "testing"
+
+ "github.com/spf13/afero"
+ "github.com/spf13/hugo/helpers"
+ "github.com/spf13/hugo/hugofs"
+ "github.com/spf13/hugo/source"
+ "github.com/spf13/hugo/target"
+ "github.com/spf13/viper"
+)
+
+func TestDefaultHandler(t *testing.T) {+ viper.Reset()
+ defer viper.Reset()
+
+ hugofs.DestinationFS = new(afero.MemMapFs)
+ sources := []source.ByteSource{+ {filepath.FromSlash("sect/doc1.html"), []byte("---\nmarkup: markdown\n---\n# title\nsome *content*")},+ {filepath.FromSlash("sect/doc2.html"), []byte("<!doctype html><html><body>more content</body></html>")},+ {filepath.FromSlash("sect/doc3.md"), []byte("# doc3\n*some* content")},+ {filepath.FromSlash("sect/doc4.md"), []byte("---\ntitle: doc4\n---\n# doc4\n*some content*")},+ {filepath.FromSlash("sect/doc3/img1.png"), []byte("‰PNG ��� IHDR����������:~›U��� IDATWcø��ZMoñ����IEND®B`‚")},+ {filepath.FromSlash("sect/img2.gif"), []byte("GIF89a��€��ÿÿÿ���,�������D�;")},+ {filepath.FromSlash("sect/img2.spf"), []byte("****FAKE-FILETYPE****")},+ {filepath.FromSlash("doc7.html"), []byte("<html><body>doc7 content</body></html>")},+ {filepath.FromSlash("sect/doc8.html"), []byte("---\nmarkup: md\n---\n# title\nsome *content*")},+ }
+
+ viper.Set("DefaultExtension", "html")+ viper.Set("verbose", true)+
+ s := &Site{+ Source: &source.InMemorySource{ByteSource: sources},+ Targets: targetList{Page: &target.PagePub{UglyURLs: true}},+ }
+
+ s.initializeSiteInfo()
+ // From site_test.go
+ templatePrep(s)
+
+ must(s.addTemplate("_default/single.html", "{{.Content}}"))+ must(s.addTemplate("head", "<head><script src=\"script.js\"></script></head>"))+ must(s.addTemplate("head_abs", "<head><script src=\"/script.js\"></script></head>"))+
+ // From site_test.go
+ createAndRenderPages(t, s)
+
+ tests := []struct {+ doc string
+ expected string
+ }{+ {filepath.FromSlash("sect/doc1.html"), "\n\n<h1 id=\"title:5d74edbb89ef198cd37882b687940cda\">title</h1>\n\n<p>some <em>content</em></p>\n"},+ {filepath.FromSlash("sect/doc2.html"), "<!doctype html><html><body>more content</body></html>"},+ {filepath.FromSlash("sect/doc3.html"), "\n\n<h1 id=\"doc3:28c75a9e2162b8eccda73a1ab9ce80b4\">doc3</h1>\n\n<p><em>some</em> content</p>\n"},+ {filepath.FromSlash("sect/doc3/img1.png"), string([]byte("‰PNG ��� IHDR����������:~›U��� IDATWcø��ZMoñ����IEND®B`‚"))},+ {filepath.FromSlash("sect/img2.gif"), string([]byte("GIF89a��€��ÿÿÿ���,�������D�;"))},+ {filepath.FromSlash("sect/img2.spf"), string([]byte("****FAKE-FILETYPE****"))},+ {filepath.FromSlash("doc7.html"), "<html><body>doc7 content</body></html>"},+ {filepath.FromSlash("sect/doc8.html"), "\n\n<h1 id=\"title:0ae308ad73e2f37bd09874105281b5d8\">title</h1>\n\n<p>some <em>content</em></p>\n"},+ }
+
+ for _, test := range tests {+ file, err := hugofs.DestinationFS.Open(test.doc)
+ if err != nil {+ t.Fatalf("Did not find %s in target.", test.doc)+ }
+
+ content := helpers.ReaderToString(file)
+
+ if content != test.expected {+ t.Errorf("%s content expected:\n%q\ngot:\n%q", test.doc, test.expected, content)+ }
+ }
+
+}
--
⑨