ref: 1cebce12ad2335e1140646763dd56009c57d6495
parent: b22364570be6c6add79af21a90de8c5f7a775813
author: Noah Campbell <[email protected]>
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()