shithub: hugo

Download patch

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()