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 : "<a href='test'>Test</a>" ,
} , {
name : "t2" ,
args : args { text : "<a href='test'>Test</a>" , flags : EntCompat } ,
want : "<a href='test'>Test</a>" ,
} , {
name : "t3" ,
args : args { text : "<a href='test'>T est</a>" , flags : EntCompat | EntSpace } ,
want : "<a href='test'>T est</a>" ,
} ,
}
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 : "<a href='test'>Test</a>" ,
flags : EntCompat ,
} ,
want : "<a href='test'>Test</a>" ,
} , {
name : "t2" ,
args : args {
text : "<a href='test'>Test</a>" ,
flags : EntQuotes ,
} ,
want : "<a href='test'>Test</a>" ,
} , {
name : "t3" ,
args : args {
text : "<p>this -> "</p>\n" ,
flags : EntNoQuotes ,
} ,
want : "<p>this -> "</p>\n" ,
} , {
name : "t4" ,
args : args {
text : "<p>this -> "</p>\n" ,
flags : EntCompat ,
} ,
want : "<p>this -> \"</p>\n" ,
} , {
name : "t5" ,
args : args {
text : "<p>this -> "</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 )
}
} )
}
}