82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
|
package testcssmiddleware
|
||
|
|
||
|
import (
|
||
|
_ "embed"
|
||
|
"fmt"
|
||
|
"net/http/httptest"
|
||
|
"strings"
|
||
|
"sync"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/a-h/htmlformat"
|
||
|
"github.com/a-h/templ"
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
)
|
||
|
|
||
|
//go:embed expected.html
|
||
|
var expected string
|
||
|
|
||
|
var expectedCSS = `.red_050e5e03{color:red;}
|
||
|
`
|
||
|
|
||
|
func Test(t *testing.T) {
|
||
|
var errs []error
|
||
|
var wg sync.WaitGroup
|
||
|
wg.Add(3)
|
||
|
|
||
|
// Format the expected value.
|
||
|
go func() {
|
||
|
defer wg.Done()
|
||
|
e := new(strings.Builder)
|
||
|
err := htmlformat.Fragment(e, strings.NewReader(expected))
|
||
|
if err != nil {
|
||
|
errs = append(errs, fmt.Errorf("expected html formatting error: %w", err))
|
||
|
}
|
||
|
expected = e.String()
|
||
|
}()
|
||
|
|
||
|
component := render("Red text")
|
||
|
h := templ.Handler(component)
|
||
|
cssmw := templ.NewCSSMiddleware(h, red())
|
||
|
|
||
|
// Create the actual value.
|
||
|
var actual string
|
||
|
go func() {
|
||
|
defer wg.Done()
|
||
|
|
||
|
w := httptest.NewRecorder()
|
||
|
cssmw.ServeHTTP(w, httptest.NewRequest("GET", "/", nil))
|
||
|
|
||
|
a := new(strings.Builder)
|
||
|
err := htmlformat.Fragment(a, w.Body)
|
||
|
if err != nil {
|
||
|
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
|
||
|
}
|
||
|
actual = a.String()
|
||
|
}()
|
||
|
|
||
|
var actualCSS string
|
||
|
go func() {
|
||
|
defer wg.Done()
|
||
|
|
||
|
w := httptest.NewRecorder()
|
||
|
cssmw.ServeHTTP(w, httptest.NewRequest("GET", "/styles/templ.css", nil))
|
||
|
|
||
|
a := new(strings.Builder)
|
||
|
err := htmlformat.Fragment(a, w.Body)
|
||
|
if err != nil {
|
||
|
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
|
||
|
}
|
||
|
actualCSS = a.String()
|
||
|
}()
|
||
|
|
||
|
wg.Wait()
|
||
|
|
||
|
if diff := cmp.Diff(expected, actual); diff != "" {
|
||
|
t.Error(diff)
|
||
|
}
|
||
|
if diff := cmp.Diff(expectedCSS, actualCSS); diff != "" {
|
||
|
t.Error(diff)
|
||
|
}
|
||
|
}
|