Fix some corner cases in revised summary handling
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 7 Aug 2016 21:34:04 +0000 (23:34 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 6 Sep 2016 15:32:18 +0000 (18:32 +0300)
And clean up the test.

See #2309

hugolib/page.go
hugolib/page_test.go

index 99aa0db167645284a4808caf637c3636750d314c..da9fa4f87b0de5fcf38e107a986555f9e2b0154f 100644 (file)
@@ -246,6 +246,7 @@ type summaryContent struct {
 }
 
 func splitUserDefinedSummaryAndContent(markup string, c []byte) *summaryContent {
+       c = bytes.TrimSpace(c)
        startDivider := bytes.Index(c, internalSummaryDivider)
 
        if startDivider == -1 {
@@ -276,20 +277,27 @@ func splitUserDefinedSummaryAndContent(markup string, c []byte) *summaryContent
        }
 
        // Find the closest end/start markup string to the divider
-       //firstStart := bytes.Index(c[:startDivider], startMarkup)
        fromIdx := bytes.LastIndex(c[:startDivider], startMarkup)
        fromStart := startDivider - fromIdx - len(startMarkup)
        fromEnd := bytes.Index(c[endDivider:], endMarkup)
 
        if fromEnd != -1 && fromEnd <= fromStart {
                endSummary = startDivider + fromEnd + len(endMarkup)
-       } else if fromStart != -1 {
+       } else if fromStart != -1 && fromEnd != -1 {
                endSummary = startDivider - fromStart - len(startMarkup)
        }
 
        withoutDivider := bytes.TrimSpace(append(c[:startDivider], c[endDivider:]...))
-       contentWithoutSummary := bytes.TrimSpace(withoutDivider[endSummary:])
-       summary := bytes.TrimSpace(withoutDivider[:endSummary])
+
+       var (
+               contentWithoutSummary []byte
+               summary               []byte
+       )
+
+       if len(withoutDivider) > 0 {
+               contentWithoutSummary = bytes.TrimSpace(withoutDivider[endSummary:])
+               summary = bytes.TrimSpace(withoutDivider[:endSummary])
+       }
 
        if addDiv {
                // For the rst
index da46151edd08c64111012dadf58f8f3b4566eb61..641e421b37ff137030bc568801a86f208e245fe5 100644 (file)
@@ -655,6 +655,11 @@ func TestSplitSummaryAndContent(t *testing.T) {
                {"markdown", "<p>a</p><p>b</p><p>cHUGOMORE42</p>", "<p>a</p><p>b</p><p>c</p>", "<p>a</p><p>b</p><p>c</p>", ""},
                {"markdown", "<p>a</p><p>bHUGOMORE42</p><p>c</p>", "<p>a</p><p>b</p>", "<p>a</p><p>b</p><p>c</p>", "<p>c</p>"},
                {"markdown", "<p>aHUGOMORE42</p><p>b</p><p>c</p>", "<p>a</p>", "<p>a</p><p>b</p><p>c</p>", "<p>b</p><p>c</p>"},
+               {"markdown", "  HUGOMORE42 ", "", "", ""},
+               {"markdown", "HUGOMORE42", "", "", ""},
+               {"markdown", "<p>HUGOMORE42", "<p>", "<p>", ""},
+               {"markdown", "HUGOMORE42<p>", "", "<p>", "<p>"},
+               {"markdown", "\n\n<p>HUGOMORE42</p>\n", "<p></p>", "<p></p>", ""},
        } {
 
                sc := splitUserDefinedSummaryAndContent(this.markup, []byte(this.content))
@@ -664,34 +669,6 @@ func TestSplitSummaryAndContent(t *testing.T) {
                require.Equal(t, this.expectedContent, string(sc.content), fmt.Sprintf("[%d] Content markup %s", i, this.markup))
                require.Equal(t, this.expectedContentWithoutSummary, string(sc.contentWithoutSummary), fmt.Sprintf("[%d] Content without summary, markup %s", i, this.markup))
        }
-
-       if true {
-               return
-       }
-
-       ad := `<div class="paragraph"><p>sn</p></div>
-<div class="paragraph">
-<p>HUGOMORE42 
-Some more text</p>
-</div>
-`
-
-       md := `<p>Summary Same LineHUGOMORE42</p>
-
-<p>Some more text</p>`
-
-       sc := splitUserDefinedSummaryAndContent("markdown", []byte(md))
-
-       require.Equal(t, "adf", string(sc.summary))
-       require.Equal(t, "asdf", string(sc.content))
-
-       if true {
-               return
-       }
-       sc = splitUserDefinedSummaryAndContent("asciidoc", []byte(ad))
-       require.Equal(t, "<div class=\"paragraph\"><p>sn</p></div>", string(sc.summary))
-       require.Equal(t, "\n<div class=\"paragraph\">\n<p> \nSome more text</p>\n</div>\n", string(sc.summary))
-
 }
 
 func TestPageWithDelimiter(t *testing.T) {