Add posts.ExtractTitle func
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
package posts
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExtractTitle(content string) (title string, body string) {
|
||||||
|
if hashIndex := strings.Index(content, "# "); hashIndex == 0 {
|
||||||
|
eol := strings.IndexRune(content, '\n')
|
||||||
|
// First line should start with # and end with \n
|
||||||
|
if eol != -1 {
|
||||||
|
body = strings.TrimLeft(content[eol:], " \t\n\r")
|
||||||
|
title = content[len("# "):eol]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
body = content
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package posts
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type titleTest struct {
|
||||||
|
in, title, body string
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExtractTitle(t *testing.T) {
|
||||||
|
tests := []titleTest{
|
||||||
|
{`# Hello World
|
||||||
|
This is my post`, "Hello World", "This is my post"},
|
||||||
|
{"No title", "", "No title"},
|
||||||
|
{`Not explicit title
|
||||||
|
|
||||||
|
It's not explicit.
|
||||||
|
Yep.`, "", `Not explicit title
|
||||||
|
|
||||||
|
It's not explicit.
|
||||||
|
Yep.`},
|
||||||
|
{"# Only a title", "", "# Only a title"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
title, body := ExtractTitle(test.in)
|
||||||
|
if title != test.title {
|
||||||
|
t.Fatalf("Wanted title '%s', got '%s'", test.title, title)
|
||||||
|
}
|
||||||
|
if body != test.body {
|
||||||
|
t.Fatalf("Wanted body '%s', got '%s'", test.body, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user