Fix half-broken self-closing shortcodes
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 27 Sep 2016 19:11:34 +0000 (21:11 +0200)
committerGitHub <noreply@github.com>
Tue, 27 Sep 2016 19:11:34 +0000 (21:11 +0200)
Fixes #2498

hugolib/shortcodeparser.go
hugolib/shortcodeparser_test.go

index a15b057a9f6d97c77a77f3dc7edc9802704329f3..027d661cae63901e6890eafffa09d6353d52b771 100644 (file)
@@ -345,6 +345,7 @@ func lexShortcodeComment(l *pagelexer) stateFunc {
 }
 
 func lexShortcodeRightDelim(l *pagelexer) stateFunc {
+       l.closingState = 0
        l.pos += pos(len(l.currentRightShortcodeDelim()))
        l.emit(l.currentRightShortcodeDelimItem())
        return lexTextOutsideShortcodes
index a5d7453cc612f12e25d197652358b42aa58dcb76..662ce0f6429c8c43d54ecf9d62722d250394c1fd 100644 (file)
@@ -81,6 +81,18 @@ var shortCodeLexerTests = []shortCodeLexerTest{
        // issue #934
        {"self-closing", `{{< sc1 />}}`, []item{
                tstLeftNoMD, tstSC1, tstSCClose, tstRightNoMD, tstEOF}},
+       // Issue 2498
+       {"multiple self-closing", `{{< sc1 />}}{{< sc1 />}}`, []item{
+               tstLeftNoMD, tstSC1, tstSCClose, tstRightNoMD,
+               tstLeftNoMD, tstSC1, tstSCClose, tstRightNoMD, tstEOF}},
+       {"self-closing with param", `{{< sc1 param1 />}}`, []item{
+               tstLeftNoMD, tstSC1, tstParam1, tstSCClose, tstRightNoMD, tstEOF}},
+       {"multiple self-closing with param", `{{< sc1 param1 />}}{{< sc1 param1 />}}`, []item{
+               tstLeftNoMD, tstSC1, tstParam1, tstSCClose, tstRightNoMD,
+               tstLeftNoMD, tstSC1, tstParam1, tstSCClose, tstRightNoMD, tstEOF}},
+       {"multiple different self-closing with param", `{{< sc1 param1 />}}{{< sc2 param1 />}}`, []item{
+               tstLeftNoMD, tstSC1, tstParam1, tstSCClose, tstRightNoMD,
+               tstLeftNoMD, tstSC2, tstParam1, tstSCClose, tstRightNoMD, tstEOF}},
        {"nested simple", `{{< sc1 >}}{{< sc2 >}}{{< /sc1 >}}`, []item{
                tstLeftNoMD, tstSC1, tstRightNoMD,
                tstLeftNoMD, tstSC2, tstRightNoMD,
@@ -140,11 +152,10 @@ var shortCodeLexerTests = []shortCodeLexerTest{
 }
 
 func TestShortcodeLexer(t *testing.T) {
-       for _, test := range shortCodeLexerTests {
-
+       for i, test := range shortCodeLexerTests {
                items := collect(&test)
                if !equal(items, test.items) {
-                       t.Errorf("%s: got\n\t%v\nexpected\n\t%v", test.name, items, test.items)
+                       t.Errorf("[%d] %s: got\n\t%v\nexpected\n\t%v", i, test.name, items, test.items)
                }
        }
 }