Adding RSS test case.
authorNoah Campbell <noahcampbell@gmail.com>
Tue, 5 Nov 2013 05:29:37 +0000 (05:29 +0000)
committerNoah Campbell <noahcampbell@gmail.com>
Tue, 5 Nov 2013 07:03:02 +0000 (07:03 +0000)
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.

hugolib/rss_test.go [new file with mode: 0644]
hugolib/site.go
hugolib/site_test.go

diff --git a/hugolib/rss_test.go b/hugolib/rss_test.go
new file mode 100644 (file)
index 0000000..b4c9e01
--- /dev/null
@@ -0,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)
+       }
+}
index f6197013c6a0ee0401ab254d7cac633d19992778..fbebed94c4a666bd0a22c05bc20421a16084b386 100644 (file)
@@ -576,6 +576,7 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
                return
        }
 
+
        section := ""
        if page, ok := d.(*Page); ok {
                section, _ = page.RelPermalink()
@@ -585,20 +586,19 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
        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 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
        }
 
        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)
 }
 
index bd9715b0179d6601680bcdb4727ee024414dbc13..3a47b7ff7559819e7b3a6fbff745d004151f2f1e 100644 (file)
@@ -348,19 +348,20 @@ date = "2012-01-01"
 +++
 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()