package main import ( "bytes" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestRun_Good(t *testing.T) { input := strings.NewReader(`{"H":"nav-bar","C":"main-content"}`) var output bytes.Buffer err := run(input, &output) require.NoError(t, err) js := output.String() assert.Contains(t, js, "NavBar") assert.Contains(t, js, "MainContent") assert.Contains(t, js, "customElements.define") assert.Equal(t, 2, strings.Count(js, "extends HTMLElement")) } func TestRunTypeDefinitions_Good(t *testing.T) { input := strings.NewReader(`{"H":"nav-bar","C":"main-content"}`) var output bytes.Buffer err := runTypeDefinitions(input, &output) require.NoError(t, err) dts := output.String() assert.Contains(t, dts, "declare global") assert.Contains(t, dts, `"nav-bar": NavBar;`) assert.Contains(t, dts, `"main-content": MainContent;`) assert.Contains(t, dts, "export {};") } func TestRun_Bad_InvalidJSON(t *testing.T) { input := strings.NewReader(`not json`) var output bytes.Buffer err := run(input, &output) assert.Error(t, err) assert.Contains(t, err.Error(), "invalid JSON") } func TestRun_Bad_InvalidTag(t *testing.T) { input := strings.NewReader(`{"H":"notag"}`) var output bytes.Buffer err := run(input, &output) assert.Error(t, err) assert.Contains(t, err.Error(), "hyphen") } func TestRun_Good_Empty(t *testing.T) { input := strings.NewReader(`{}`) var output bytes.Buffer err := run(input, &output) require.NoError(t, err) assert.Empty(t, output.String()) }