feat(html): export layout variant diagnostics
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
3fcd8daf59
commit
3375ad0b22
3 changed files with 36 additions and 8 deletions
12
layout.go
12
layout.go
|
|
@ -70,7 +70,7 @@ func ValidateLayoutVariant(variant string) error {
|
|||
if len(invalidSlots) == 0 {
|
||||
return nil
|
||||
}
|
||||
return &layoutVariantError{
|
||||
return &LayoutVariantError{
|
||||
variant: variant,
|
||||
invalidSlots: invalidSlots,
|
||||
invalidPositions: invalidPositions,
|
||||
|
|
@ -200,13 +200,13 @@ func (l *Layout) Render(ctx *Context) string {
|
|||
return b.String()
|
||||
}
|
||||
|
||||
type layoutVariantError struct {
|
||||
type LayoutVariantError struct {
|
||||
variant string
|
||||
invalidSlots []byte
|
||||
invalidPositions []int
|
||||
}
|
||||
|
||||
func (e *layoutVariantError) Error() string {
|
||||
func (e *LayoutVariantError) Error() string {
|
||||
if e == nil {
|
||||
return ErrInvalidLayoutVariant.Error()
|
||||
}
|
||||
|
|
@ -237,13 +237,13 @@ func (e *layoutVariantError) Error() string {
|
|||
return b.String()
|
||||
}
|
||||
|
||||
func (e *layoutVariantError) Unwrap() error {
|
||||
func (e *LayoutVariantError) Unwrap() error {
|
||||
return ErrInvalidLayoutVariant
|
||||
}
|
||||
|
||||
// InvalidSlots returns a copy of the invalid slot characters that were present
|
||||
// in the original variant string.
|
||||
func (e *layoutVariantError) InvalidSlots() []byte {
|
||||
func (e *LayoutVariantError) InvalidSlots() []byte {
|
||||
if e == nil || len(e.invalidSlots) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
|
@ -252,7 +252,7 @@ func (e *layoutVariantError) InvalidSlots() []byte {
|
|||
|
||||
// InvalidPositions returns a copy of the 1-based positions of the invalid slot
|
||||
// characters in the original variant string.
|
||||
func (e *layoutVariantError) InvalidPositions() []int {
|
||||
func (e *LayoutVariantError) InvalidPositions() []int {
|
||||
if e == nil || len(e.invalidPositions) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
28
layout_external_test.go
Normal file
28
layout_external_test.go
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
package html_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
html "dappco.re/go/core/html"
|
||||
)
|
||||
|
||||
func TestValidateLayoutVariant_ExportsPositions(t *testing.T) {
|
||||
err := html.ValidateLayoutVariant("H1X?")
|
||||
if err == nil {
|
||||
t.Fatal("ValidateLayoutVariant returned nil, want error")
|
||||
}
|
||||
|
||||
var variantErr *html.LayoutVariantError
|
||||
if !errors.As(err, &variantErr) {
|
||||
t.Fatalf("errors.As(%T) failed, want *html.LayoutVariantError", err)
|
||||
}
|
||||
|
||||
if got := string(variantErr.InvalidSlots()); got != "1X?" {
|
||||
t.Fatalf("InvalidSlots() = %q, want %q", got, "1X?")
|
||||
}
|
||||
|
||||
if got := variantErr.InvalidPositions(); len(got) != 3 || got[0] != 2 || got[1] != 3 || got[2] != 4 {
|
||||
t.Fatalf("InvalidPositions() = %v, want %v", got, []int{2, 3, 4})
|
||||
}
|
||||
}
|
||||
|
|
@ -188,7 +188,7 @@ func TestLayout_VariantError(t *testing.T) {
|
|||
variant: "H1X?",
|
||||
wantErr: true,
|
||||
wantErrString: "html: invalid layout variant H1X? (invalid slots: '1' at position 2, 'X' at position 3, '?' at position 4)",
|
||||
wantRender: `<header role="banner" data-block="H-0">header</header>`,
|
||||
wantRender: `<header role="banner" data-block="H-0">header</header>`,
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -207,7 +207,7 @@ func TestLayout_VariantError(t *testing.T) {
|
|||
if got := layout.VariantError().Error(); got != tt.wantErrString {
|
||||
t.Fatalf("VariantError().Error() = %q, want %q", got, tt.wantErrString)
|
||||
}
|
||||
if err, ok := layout.VariantError().(*layoutVariantError); ok {
|
||||
if err, ok := layout.VariantError().(*LayoutVariantError); ok {
|
||||
switch tt.variant {
|
||||
case "HXC":
|
||||
if got := string(err.InvalidSlots()); got != "X" {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue