wp-go/helper/html/html_test.go

292 lines
6.6 KiB
Go
Raw Normal View History

2023-01-21 11:31:23 +00:00
package html
2022-10-06 13:33:04 +00:00
2023-01-13 04:31:35 +00:00
import (
2023-01-23 15:42:37 +00:00
"html/template"
2023-03-04 15:57:19 +00:00
"os"
2023-01-13 04:31:35 +00:00
"reflect"
"testing"
)
2022-10-06 13:33:04 +00:00
func Test_htmlSpecialChars(t *testing.T) {
type args struct {
text string
flags int
}
tests := []struct {
name string
args args
want string
}{
{
name: "t1",
args: args{text: "<a href='test'>Test</a>", flags: EntQuotes},
want: "&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;",
}, {
name: "t2",
args: args{text: "<a href='test'>Test</a>", flags: EntCompat},
want: "&lt;a href='test'&gt;Test&lt;/a&gt;",
}, {
name: "t3",
args: args{text: "<a href='test'>T est</a>", flags: EntCompat | EntSpace},
want: "&lt;a&nbsp;href='test'&gt;T&nbsp;est&lt;/a&gt;",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := htmlSpecialChars(tt.args.text, tt.args.flags); got != tt.want {
t.Errorf("htmlSpecialChars() = %v, want %v", got, tt.want)
}
})
}
}
func Test_htmlSpecialCharsDecode(t *testing.T) {
type args struct {
text string
flags int
}
tests := []struct {
name string
args args
want string
}{
{
name: "t1",
args: args{
text: "&lt;a href='test'&gt;Test&lt;/a&gt;",
flags: EntCompat,
},
want: "<a href='test'>Test</a>",
}, {
name: "t2",
args: args{
text: "&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;",
flags: EntQuotes,
},
want: "<a href='test'>Test</a>",
}, {
name: "t3",
args: args{
text: "<p>this -&gt; &quot;</p>\n",
flags: EntNoQuotes,
},
want: "<p>this -> &quot;</p>\n",
}, {
name: "t4",
args: args{
text: "<p>this -&gt; &quot;</p>\n",
flags: EntCompat,
},
want: "<p>this -> \"</p>\n",
}, {
name: "t5",
args: args{
text: "<p>this -&gt;&nbsp;&quot;</p>\n",
flags: EntCompat | EntSpace,
},
want: "<p>this -> \"</p>\n",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := htmlSpecialCharsDecode(tt.args.text, tt.args.flags); got != tt.want {
t.Errorf("htmlSpecialCharsDecode() = %v, want %v", got, tt.want)
}
})
}
}
2023-01-13 04:31:35 +00:00
func TestStripTags(t *testing.T) {
type args struct {
str string
allowable string
}
tests := []struct {
name string
args args
want string
}{
{
name: "t1",
args: args{
str: "<p>ppppp<span>ffff</span></p><img />",
allowable: "<p><img>",
},
want: "<p>pppppffff</p><img />",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := StripTags(tt.args.str, tt.args.allowable); got != tt.want {
t.Errorf("StripTags() = %v, want %v", got, tt.want)
}
})
}
}
func TestStripTagsX(t *testing.T) {
type args struct {
str string
allowable string
}
tests := []struct {
name string
args args
want string
}{
{
name: "t1",
args: args{
str: "<p>ppppp<span>ffff</span></p><img />",
allowable: "<p><img>",
},
want: "<p>pppppffff</p><img />",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := StripTagsX(tt.args.str, tt.args.allowable); got != tt.want {
t.Errorf("StripTagsX() = %v, want %v", got, tt.want)
}
})
}
}
func BenchmarkStripTags(b *testing.B) {
for i := 0; i < b.N; i++ {
StripTags(`<p>ppppp<span>ffff</span></p><img />`, "<p><img>")
}
}
func BenchmarkStripTagsX(b *testing.B) {
for i := 0; i < b.N; i++ {
StripTagsX(`<p>ppppp<span>ffff</span></p><img />`, "<p><img>")
}
}
func TestCloseHtmlTag(t *testing.T) {
type args struct {
str string
}
tests := []struct {
name string
args args
want string
}{
{
name: "t1",
args: args{str: `<pre class="wp-block-preformatted">GRANT privileges ON databasename.tablename TO 'username'@'h...<p class="read-more"><a href="/p/305">继续阅读</a></p>`},
want: "</pre>",
},
{
name: "t2",
args: args{str: `<pre><div>`},
want: "</div></pre>",
},
2023-03-04 15:57:19 +00:00
{
name: "t3",
args: args{str: func() string {
s, err := os.ReadFile("/home/xing/aaa.html")
if err != nil {
panic(err)
}
return string(s)
}()},
want: "</div></pre>",
},
{
name: "t5",
args: args{str: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;"><defs><filter id="wp-duotone-dark-grayscale"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 "></feColorMatrix><feComponentTransfer color-interpolation-filters="sRGB"><feFuncR type="table" tableValues="0 0.49803921568627"></feFuncR><feFuncG type="table" tableValues="0 0.49803921568627"></feFuncG><feFuncB type="table" tableValues="0 0.49803921568627"></feFuncB><feFuncA type="table" tableValues="1 1"></feFuncA></feComponentTransfer><feComposite in2="SourceGraphic" operator="in"></feComposite></filter></defs></svg>`},
want: "</div></pre>",
},
2023-01-13 04:31:35 +00:00
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
2023-01-21 11:31:23 +00:00
if got := CloseTag(tt.args.str); !reflect.DeepEqual(got, tt.want) {
t.Errorf("CloseTag() = %v, want %v", got, tt.want)
2023-01-13 04:31:35 +00:00
}
})
}
}
func Test_clearTag(t *testing.T) {
type args struct {
s []string
}
tests := []struct {
name string
args args
want []string
}{
{
name: "t1",
args: args{s: []string{"<pre>", "<p>", "<span>", "</span>"}},
want: []string{"<pre>", "<p>"},
},
{
name: "t2",
args: args{s: []string{"<pre>", "</pre>", "<div>", "<span>", "</span>"}},
want: []string{"<div>"},
},
{
name: "t3",
args: args{s: []string{"<pre>", "</pre>"}},
want: []string{},
},
{
name: "t4",
args: args{s: []string{"<pre>", "<p>"}},
want: []string{"<pre>", "<p>"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
2023-01-21 11:31:23 +00:00
if got := UnClosedTag(tt.args.s); !reflect.DeepEqual(got, tt.want) {
t.Errorf("UnClosedTag() = %v, want %v", got, tt.want)
2023-01-13 04:31:35 +00:00
}
})
}
}
2023-01-23 15:42:37 +00:00
func TestRenderedHtml(t *testing.T) {
type args struct {
t *template.Template
data map[string]any
}
tests := []struct {
name string
args args
wantR string
wantErr bool
}{
{
name: "t1",
args: args{
t: func() *template.Template {
tt, err := template.ParseFiles("./a.gohtml")
if err != nil {
panic(err)
}
return tt
}(),
data: map[string]any{
"xx": "oo",
},
},
wantR: "oo",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotR, err := RenderedHtml(tt.args.t, tt.args.data)
if (err != nil) != tt.wantErr {
t.Errorf("RenderedHtml() error = %v, wantErr %v", err, tt.wantErr)
return
}
if gotR != tt.wantR {
t.Errorf("RenderedHtml() gotR = %v, want %v", gotR, tt.wantR)
}
})
}
}