1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
package xml
import (
"testing"
"github.com/tdewolff/test"
)
func TestEscapeAttrVal(t *testing.T) {
var attrValTests = []struct {
attrVal string
expected string
}{
{`xyz`, `"xyz"`},
{``, `""`},
{`x'z`, `"x'z"`},
{`x"z`, `'x"z'`},
{`a'b=""`, `'a'b=""'`},
{`'x'"'z'`, `"x'"'z"`},
{`"x"'"z"`, `'x"'"z'`},
{`a'b=""`, `'a'b=""'`},
}
var buf []byte
for _, tt := range attrValTests {
t.Run(tt.attrVal, func(t *testing.T) {
b := []byte(tt.attrVal)
if len(b) > 1 && (b[0] == '"' || b[0] == '\'') && b[0] == b[len(b)-1] {
b = b[1 : len(b)-1]
}
val := EscapeAttrVal(&buf, b)
test.String(t, string(val), tt.expected)
})
}
}
func TestEscapeCDATAVal(t *testing.T) {
var CDATAValTests = []struct {
CDATAVal string
expected string
}{
{"<![CDATA[<b>]]>", "<b>"},
{"<![CDATA[abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz]]>", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"},
{"<![CDATA[ <b> ]]>", " <b> "},
{"<![CDATA[<<<<<]]>", "<![CDATA[<<<<<]]>"},
{"<![CDATA[&]]>", "&"},
{"<![CDATA[&&&&]]>", "<![CDATA[&&&&]]>"},
{"<![CDATA[ a ]]>", " a "},
{"<![CDATA[]]>", ""},
{"<![CDATA[ a ]]> b ]]>", " a ]]&gt; b "},
}
var buf []byte
for _, tt := range CDATAValTests {
t.Run(tt.CDATAVal, func(t *testing.T) {
b := []byte(tt.CDATAVal[len("<![CDATA[") : len(tt.CDATAVal)-len("]]>")])
data, useText := EscapeCDATAVal(&buf, b)
text := string(data)
if !useText {
text = "<![CDATA[" + text + "]]>"
}
test.String(t, text, tt.expected)
})
}
}
|