From 18e90339fcac48806a5777766aeb256be2b8c4bc Mon Sep 17 00:00:00 2001 From: Markus Wüstenberg Date: Wed, 28 Oct 2020 16:16:18 +0100 Subject: Add element helpers and refactor (#34) This change adds a lot of element helpers, and refactors: - helpers into simple, text, and other helpers - most tests into table-driven tests, so they're easier to read Thanks to @oderwat for pushing me to improve the tests. 😉--- el/content.go | 33 ------- el/content_test.go | 51 ----------- el/document.go | 57 ------------ el/document_test.go | 63 ------------- el/elements.go | 70 +++++++++++++++ el/elements_test.go | 70 +++++++++++++++ el/form.go | 52 ----------- el/form_test.go | 58 ------------ el/inline.go | 29 ------ el/inline_test.go | 45 ---------- el/media.go | 9 -- el/media_test.go | 15 ---- el/section.go | 80 ----------------- el/section_test.go | 99 -------------------- el/simple.go | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++ el/simple_test.go | 84 +++++++++++++++++ el/text.go | 131 +++++++++++++++++++++++++++ el/text_test.go | 52 +++++++++++ 18 files changed, 660 insertions(+), 591 deletions(-) delete mode 100644 el/content.go delete mode 100644 el/content_test.go delete mode 100644 el/document.go delete mode 100644 el/document_test.go create mode 100644 el/elements.go create mode 100644 el/elements_test.go delete mode 100644 el/form.go delete mode 100644 el/form_test.go delete mode 100644 el/inline.go delete mode 100644 el/inline_test.go delete mode 100644 el/media.go delete mode 100644 el/media_test.go delete mode 100644 el/section.go delete mode 100644 el/section_test.go create mode 100644 el/simple.go create mode 100644 el/simple_test.go create mode 100644 el/text.go create mode 100644 el/text_test.go (limited to 'el') diff --git a/el/content.go b/el/content.go deleted file mode 100644 index a4bcd61..0000000 --- a/el/content.go +++ /dev/null @@ -1,33 +0,0 @@ -package el - -import ( - g "github.com/maragudk/gomponents" -) - -func Div(children ...g.Node) g.NodeFunc { - return g.El("div", children...) -} - -func Ol(children ...g.Node) g.NodeFunc { - return g.El("ol", children...) -} - -func Ul(children ...g.Node) g.NodeFunc { - return g.El("ul", children...) -} - -func Li(children ...g.Node) g.NodeFunc { - return g.El("li", children...) -} - -func P(children ...g.Node) g.NodeFunc { - return g.El("p", children...) -} - -func Br(children ...g.Node) g.NodeFunc { - return g.El("br", children...) -} - -func Hr(children ...g.Node) g.NodeFunc { - return g.El("hr", children...) -} diff --git a/el/content_test.go b/el/content_test.go deleted file mode 100644 index 9cb1d52..0000000 --- a/el/content_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package el_test - -import ( - "testing" - - g "github.com/maragudk/gomponents" - "github.com/maragudk/gomponents/assert" - "github.com/maragudk/gomponents/el" -) - -func TestDiv(t *testing.T) { - t.Run("returns a div element", func(t *testing.T) { - assert.Equal(t, `
`, el.Div(el.Span())) - }) -} - -func TestOl(t *testing.T) { - t.Run("returns an ol element", func(t *testing.T) { - assert.Equal(t, `
`, el.Ol(el.Li())) - }) -} - -func TestUl(t *testing.T) { - t.Run("returns a ul element", func(t *testing.T) { - assert.Equal(t, ``, el.Ul(el.Li())) - }) -} - -func TestLi(t *testing.T) { - t.Run("returns an li element", func(t *testing.T) { - assert.Equal(t, `
  • hat
  • `, el.Li(g.Text("hat"))) - }) -} - -func TestP(t *testing.T) { - t.Run("returns a p element", func(t *testing.T) { - assert.Equal(t, `

    hat

    `, el.P(g.Text("hat"))) - }) -} - -func TestBr(t *testing.T) { - t.Run("returns a br element in context", func(t *testing.T) { - assert.Equal(t, `

    Test
    Me

    `, el.P(g.Text("Test"), el.Br(), g.Text("Me"))) - }) -} - -func TestHr(t *testing.T) { - t.Run("returns a hr element with class", func(t *testing.T) { - assert.Equal(t, `
    `, el.Hr(g.Attr("class", "test"))) - }) -} diff --git a/el/document.go b/el/document.go deleted file mode 100644 index 370a124..0000000 --- a/el/document.go +++ /dev/null @@ -1,57 +0,0 @@ -// Package el provides shortcuts and helpers to common HTML elements. -// See https://developer.mozilla.org/en-US/docs/Web/HTML/Element for a list of elements. -package el - -import ( - "strings" - - g "github.com/maragudk/gomponents" -) - -// Document returns an special kind of Node that prefixes its children with the string "". -func Document(children ...g.Node) g.NodeFunc { - return func() string { - var b strings.Builder - b.WriteString("") - for _, c := range children { - b.WriteString(c.Render()) - } - return b.String() - } -} - -// HTML returns an element with name "html" and the given children. -func HTML(children ...g.Node) g.NodeFunc { - return g.El("html", children...) -} - -// Head returns an element with name "head" and the given children. -func Head(children ...g.Node) g.NodeFunc { - return g.El("head", children...) -} - -// Body returns an element with name "body" and the given children. -func Body(children ...g.Node) g.NodeFunc { - return g.El("body", children...) -} - -// Title returns an element with name "title" and a single Text child. -func Title(title string) g.NodeFunc { - return g.El("title", g.Text(title)) -} - -func Meta(children ...g.Node) g.NodeFunc { - return g.El("meta", children...) -} - -func Link(children ...g.Node) g.NodeFunc { - return g.El("link", children...) -} - -func Style(children ...g.Node) g.NodeFunc { - return g.El("style", children...) -} - -func Base(children ...g.Node) g.NodeFunc { - return g.El("base", children...) -} diff --git a/el/document_test.go b/el/document_test.go deleted file mode 100644 index c525f30..0000000 --- a/el/document_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package el_test - -import ( - "testing" - - g "github.com/maragudk/gomponents" - "github.com/maragudk/gomponents/assert" - "github.com/maragudk/gomponents/el" -) - -func TestDocument(t *testing.T) { - t.Run("returns doctype and children", func(t *testing.T) { - assert.Equal(t, ``, el.Document(g.El("html"))) - }) -} - -func TestHTML(t *testing.T) { - t.Run("returns an html element", func(t *testing.T) { - assert.Equal(t, "
    ", el.HTML(g.El("div"), g.El("span"))) - }) -} - -func TestHead(t *testing.T) { - t.Run("returns a head element", func(t *testing.T) { - assert.Equal(t, "<link /></head>", el.Head(g.El("title"), g.El("link"))) - }) -} - -func TestBody(t *testing.T) { - t.Run("returns a body element", func(t *testing.T) { - assert.Equal(t, "<body><div /><span /></body>", el.Body(g.El("div"), g.El("span"))) - }) -} - -func TestTitle(t *testing.T) { - t.Run("returns a title element with text content", func(t *testing.T) { - assert.Equal(t, "<title>hat", el.Title("hat")) - }) -} - -func TestMeta(t *testing.T) { - t.Run("returns a meta element", func(t *testing.T) { - assert.Equal(t, ``, el.Meta(g.Attr("charset", "utf-8"))) - }) -} - -func TestLink(t *testing.T) { - t.Run("returns a link element", func(t *testing.T) { - assert.Equal(t, ``, el.Link(g.Attr("rel", "stylesheet"))) - }) -} - -func TestStyle(t *testing.T) { - t.Run("returns a style element", func(t *testing.T) { - assert.Equal(t, `