go-html/codegen/codegen_test.go

79 lines
2.3 KiB
Go
Raw Normal View History

package codegen
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGenerateClass_Good(t *testing.T) {
js, err := GenerateClass("photo-grid", "C")
require.NoError(t, err)
assert.Contains(t, js, "class PhotoGrid extends HTMLElement")
assert.Contains(t, js, "attachShadow")
assert.Contains(t, js, `mode: "closed"`)
assert.Contains(t, js, "photo-grid")
}
func TestGenerateClass_Bad_InvalidTag(t *testing.T) {
_, err := GenerateClass("invalid", "C")
assert.Error(t, err, "custom element names must contain a hyphen")
}
func TestGenerateRegistration_Good(t *testing.T) {
js := GenerateRegistration("photo-grid", "PhotoGrid")
assert.Contains(t, js, "customElements.define")
assert.Contains(t, js, `"photo-grid"`)
assert.Contains(t, js, "PhotoGrid")
}
func TestTagToClassName_Good(t *testing.T) {
tests := []struct{ tag, want string }{
{"photo-grid", "PhotoGrid"},
{"nav-breadcrumb", "NavBreadcrumb"},
{"my-super-widget", "MySuperWidget"},
}
for _, tt := range tests {
got := TagToClassName(tt.tag)
assert.Equal(t, tt.want, got, "TagToClassName(%q)", tt.tag)
}
}
func TestGenerateBundle_Good(t *testing.T) {
slots := map[string]string{
"C": "main-content",
"H": "nav-bar",
"F": "page-footer",
}
js, err := GenerateBundle(slots)
require.NoError(t, err)
assert.Contains(t, js, "NavBar")
assert.Contains(t, js, "MainContent")
assert.Contains(t, js, "PageFooter")
assert.Equal(t, 3, strings.Count(js, "extends HTMLElement"))
h := strings.Index(js, "NavBar")
c := strings.Index(js, "MainContent")
f := strings.Index(js, "PageFooter")
assert.True(t, h >= 0 && c >= 0 && f >= 0, "expected all generated classes in output")
assert.True(t, h < c && c < f, "expected canonical HLCRF order in generated bundle")
}
func TestGenerateTypeDefinitions_Good(t *testing.T) {
slots := map[string]string{
"H": "nav-bar",
"C": "main-content",
}
dts, err := GenerateTypeDefinitions(slots)
require.NoError(t, err)
assert.Contains(t, dts, "declare global")
assert.Contains(t, dts, "class NavBar extends HTMLElement")
assert.Contains(t, dts, "class MainContent extends HTMLElement")
assert.Contains(t, dts, `"nav-bar": NavBar;`)
assert.Contains(t, dts, `"main-content": MainContent;`)
assert.Contains(t, dts, "export {};")
}