go-html/cmd/wasm/register_test.go
Virgil 967182a676
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
feat(wasm): add component registration export
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 20:13:14 +00:00

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`)
}