package htmlcheck
import (
"fmt"
"sort"
"strings"
"testing"
"github.com/PuerkitoBio/goquery"
)
func TestInlineStyleDetection(t *testing.T) {
/// tests should contain the HTML test, and expected test results in alphabetical order
tests := map[string]string{}
tests[`
Heading
`] = "css-transform"
tests[`Heading
`] = "css-transform"
tests[`Heading
`] = "css-transform"
tests[`Heading
`] = "css-transform"
tests[`Heading
`] = "css-transform"
tests[`Heading
`] = "css-transform"
tests[`Heading
`] = "" // no match
tests[`Heading
`] = "css-text-transform"
tests[`Heading
`] = "css-text-transform"
tests[`Heading
`] = "" // no match
tests[`Heading
`] = "css-padding-inline-start-end"
tests[`Heading
`] = "css-margin-inline-start-end"
tests[`Heading
`] = "" // no match
tests[`Heading
`] = "css-important"
tests[`Heading
`] = "css-important"
tests[`Heading
`] = "css-important"
tests[`Heading
`] = "" // no match
tests[`Heading
`] = "css-background-image"
tests[`Heading
`] = "css-background-image"
tests[`Heading
`] = "css-background-image"
tests[`Heading
`] = "css-display,css-display-flex"
tests[`Heading
`] = "css-display,css-display-flex"
tests[`Heading
`] = "css-display" // should not match css-display-flex rule
tests[`Heading
`] = "css-line-height,css-opacity,css-unit-calc,css-width"
tests[`Heading
`] = "css-rgb"
tests[`Heading
`] = "css-rgb"
tests[`Heading
`] = "css-rgb"
tests[`Heading
`] = "css-rgba"
tests[`Heading
`] = "css-border,css-rgb,css-rgba"
tests[`Heading
`] = "css-border"
tests[`Heading
`] = "css-background,css-border"
tests[`Heading
`] = "css-background,css-border"
tests[`Heading
`] = "" // no match
tests[`Heading
`] = "css-border,css-important"
for html, expected := range tests {
reader := strings.NewReader(html)
doc, err := goquery.NewDocumentFromReader(reader)
if err != nil {
t.Log("error ", err)
t.Fail()
}
results := testInlineStyles(doc)
matches := []string{}
uniqMap := make(map[string]bool)
for key := range results {
if _, exists := uniqMap[key]; !exists {
matches = append(matches, key)
}
}
// ensure results are sorted to ensure consistent results
sort.Strings(matches)
assertEqual(t, expected, strings.Join(matches, ","), fmt.Sprintf("inline style detection \"%s\"", html))
}
}
func assertEqual(t *testing.T, a interface{}, b interface{}, message string) {
if a == b {
return
}
message = fmt.Sprintf("%s: \"%v\" != \"%v\"", message, a, b)
t.Fatal(message)
}