1
0
mirror of https://github.com/json-iterator/go.git synced 2024-11-24 08:22:14 +02:00

fix html escape test and omit empty

This commit is contained in:
Tao Wen 2017-06-20 07:46:13 +08:00
parent 8367a97ad8
commit 945fe53724
3 changed files with 21 additions and 7 deletions

View File

@ -113,12 +113,25 @@ func (cfg *frozenConfig) marshalFloatWith6Digits() {
}})
}
type htmlEscapedStringEncoder struct {
}
func (encoder *htmlEscapedStringEncoder) encode(ptr unsafe.Pointer, stream *Stream) {
str := *((*string)(ptr))
stream.WriteStringWithHtmlEscaped(str)
}
func (encoder *htmlEscapedStringEncoder) encodeInterface(val interface{}, stream *Stream) {
writeToStream(val, stream, encoder)
}
func (encoder *htmlEscapedStringEncoder) isEmpty(ptr unsafe.Pointer) bool {
return *((*string)(ptr)) == ""
}
func (cfg *frozenConfig) escapeHtml() {
// for better performance
cfg.addEncoderToCache(reflect.TypeOf((*string)(nil)).Elem(), &funcEncoder{func(ptr unsafe.Pointer, stream *Stream) {
val := *((*string)(ptr))
stream.WriteStringWithHtmlEscaped(val)
}})
cfg.addEncoderToCache(reflect.TypeOf((*string)(nil)).Elem(), &htmlEscapedStringEncoder{})
}
func (cfg *frozenConfig) addDecoderToCache(cacheKey reflect.Type, decoder Decoder) {

View File

@ -18,8 +18,8 @@ func (codec *stringCodec) encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteString(str)
}
func (encoder *stringCodec) encodeInterface(val interface{}, stream *Stream) {
writeToStream(val, stream, encoder)
func (codec *stringCodec) encodeInterface(val interface{}, stream *Stream) {
writeToStream(val, stream, codec)
}
func (codec *stringCodec) isEmpty(ptr unsafe.Pointer) bool {

View File

@ -118,6 +118,7 @@ func Test_string_encode_with_std(t *testing.T) {
}
func Test_string_encode_with_std_without_html_escape(t *testing.T) {
api := Config{EscapeHtml: false}.Froze()
should := require.New(t)
for i := 0; i < utf8.RuneSelf; i++ {
input := string([]byte{byte(i)})
@ -128,7 +129,7 @@ func Test_string_encode_with_std_without_html_escape(t *testing.T) {
should.Nil(err)
stdOutput := buf.String()
stdOutput = stdOutput[:len(stdOutput)-1]
jsoniterOutputBytes, err := Marshal(input)
jsoniterOutputBytes, err := api.Marshal(input)
should.Nil(err)
jsoniterOutput := string(jsoniterOutputBytes)
should.Equal(stdOutput, jsoniterOutput)