71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
//go:build !js
|
|
|
|
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildComponentJS_Good(t *testing.T) {
|
|
slotsJSON := `{"H":"nav-bar","C":"main-content"}`
|
|
js, err := buildComponentJS(slotsJSON)
|
|
require.NoError(t, err)
|
|
assert.Contains(t, js, "NavBar")
|
|
assert.Contains(t, js, "MainContent")
|
|
assert.Contains(t, js, "customElements.define")
|
|
}
|
|
|
|
func TestBuildComponentJS_Bad_InvalidJSON(t *testing.T) {
|
|
_, err := buildComponentJS("not json")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestTagToClassName(t *testing.T) {
|
|
tests := []struct {
|
|
tag string
|
|
want string
|
|
}{
|
|
{tag: "nav-bar", want: "NavBar"},
|
|
{tag: "my-super-widget", want: "MySuperWidget"},
|
|
{tag: "x", want: "X"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.tag, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, tagToClassName(tt.tag))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsValidCustomElementTag(t *testing.T) {
|
|
tests := []struct {
|
|
tag string
|
|
want bool
|
|
}{
|
|
{tag: "nav-bar", want: true},
|
|
{tag: "main-content", want: true},
|
|
{tag: "NavBar", want: false},
|
|
{tag: "nav", want: false},
|
|
{tag: "nav_bar", want: false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.tag, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, isValidCustomElementTag(tt.tag))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCustomElementClassSource(t *testing.T) {
|
|
src := customElementClassSource(`nav-bar`, `H`)
|
|
|
|
assert.Contains(t, src, `class NavBar extends HTMLElement`)
|
|
assert.Contains(t, src, `mode:"closed"`)
|
|
assert.Contains(t, src, `data-slot`)
|
|
assert.Contains(t, src, `wc-ready`)
|
|
assert.Contains(t, src, `nav-bar`)
|
|
assert.Contains(t, src, `H`)
|
|
}
|