ref: 1cebce12ad2335e1140646763dd56009c57d6495
parent: b22364570be6c6add79af21a90de8c5f7a775813
author: Noah Campbell <noahcampbell@gmail.com>
date: Tue Nov 5 00:29:37 EST 2013
Adding RSS test case. Checks to make sure the xml document starts with <?xml. Previously, the html translate package would write additional details into the document that caused it to fail.
--- /dev/null
+++ b/hugolib/rss_test.go
@@ -1,0 +1,65 @@
+package hugolib
+
+import (
+ "testing"
+ "bytes"
+ "github.com/spf13/hugo/source"
+ "github.com/spf13/hugo/target"
+)
+
+const RSS_TEMPLATE = `<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>{{ .Title }} on {{ .Site.Title }} </title>+ <link>{{ .Permalink }}</link>+ <language>en-us</language>
+ <author>Steve Francia</author>
+ <rights>Francia; all rights reserved.</rights>
+ <updated>{{ .Date }}</updated>+ {{ range .Data.Pages }}+ <item>
+ <title>{{ .Title }}</title>+ <link>{{ .Permalink }}</link>+ <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 MST" }}</pubDate>+ <author>Steve Francia</author>
+ <guid>{{ .Permalink }}</guid>+ <description>{{ .Content | html }}</description>+ </item>
+ {{ end }}+ </channel>
+</rss>`
+
+func TestRSSOutput(t *testing.T) {+ files := make(map[string][]byte)
+ target := &target.InMemoryTarget{Files: files}+ s := &Site{+ Target: target,
+ Config: Config{BaseUrl: "http://auth/bub/"},+ Source: &source.InMemorySource{WEIGHTED_SOURCES},+ }
+ s.initializeSiteInfo()
+ s.prepTemplates()
+ // Add an rss.xml template to invoke the rss build.
+ s.addTemplate("rss.xml", RSS_TEMPLATE) +
+ if err := s.CreatePages(); err != nil {+ t.Fatalf("Unable to create pages: %s", err)+ }
+
+ if err := s.BuildSiteMeta(); err != nil {+ t.Fatalf("Unable to build site metadata: %s", err)+ }
+
+ if err := s.RenderHomePage(); err != nil {+ t.Fatalf("Unable to RenderHomePage: %s", err)+ }
+
+ if _, ok := files[".xml"]; !ok {+ t.Errorf("Unable to locate: %s", ".xml")+ t.Logf("%q", files)+ }
+
+ rss, _ := files[".xml"]
+ if !bytes.HasPrefix(rss, []byte("<?xml")) {+ t.Errorf("rss feed should start with <?xml. %s", rss)+ }
+}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -576,6 +576,7 @@
return
}
+
section := ""
if page, ok := d.(*Page); ok {section, _ = page.RelPermalink()
@@ -585,20 +586,19 @@
if err != nil {return
}
-
transformer := transform.NewChain(
append(absURL, transform.NavActive(section, "hugo-nav")...)...,
)
- var RenderBuffer *bytes.Buffer
+ var renderBuffer *bytes.Buffer
if strings.HasSuffix(out, ".xml") {- RenderBuffer = s.NewXMLBuffer()
+ renderBuffer = s.NewXMLBuffer()
} else {- RenderBuffer = new(bytes.Buffer)
+ renderBuffer = new(bytes.Buffer)
}
- err = s.renderThing(d, layout, RenderBuffer)
+ err = s.renderThing(d, layout, renderBuffer)
if err != nil {// Behavior here should be dependent on if running in server or watch mode.
fmt.Println(fmt.Errorf("Rendering error: %v", err))@@ -608,7 +608,12 @@
}
var outBuffer = new(bytes.Buffer)
- transformer.Apply(outBuffer, RenderBuffer)
+ if strings.HasSuffix(out, ".xml") {+ outBuffer = renderBuffer
+ } else {+ transformer.Apply(outBuffer, renderBuffer)
+ }
+
return s.WritePublic(out, outBuffer)
}
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -348,19 +348,20 @@
+++
Front Matter with Ordered Pages 4`)
+var WEIGHTED_SOURCES = []source.ByteSource{+ {"sect/doc1.md", WEIGHTED_PAGE_1, "sect"},+ {"sect/doc2.md", WEIGHTED_PAGE_2, "sect"},+ {"sect/doc3.md", WEIGHTED_PAGE_3, "sect"},+ {"sect/doc4.md", WEIGHTED_PAGE_4, "sect"},+}
+
func TestOrderedPages(t *testing.T) {files := make(map[string][]byte)
target := &target.InMemoryTarget{Files: files}- sources := []source.ByteSource{- {"sect/doc1.md", WEIGHTED_PAGE_1, "sect"},- {"sect/doc2.md", WEIGHTED_PAGE_2, "sect"},- {"sect/doc3.md", WEIGHTED_PAGE_3, "sect"},- {"sect/doc4.md", WEIGHTED_PAGE_4, "sect"},- }
s := &Site{Target: target,
Config: Config{BaseUrl: "http://auth/bub/"},- Source: &source.InMemorySource{sources},+ Source: &source.InMemorySource{WEIGHTED_SOURCES},}
s.initializeSiteInfo()
--
⑨