mirror of https://github.com/gofiber/fiber.git
175 lines
3.3 KiB
Go
175 lines
3.3 KiB
Go
package json
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseString(t *testing.T) {
|
|
tests := []struct {
|
|
in string
|
|
out string
|
|
ext string
|
|
}{
|
|
{`""`, `""`, ``},
|
|
{`"1234567890"`, `"1234567890"`, ``},
|
|
{`"Hello World!"`, `"Hello World!"`, ``},
|
|
{`"Hello\"World!"`, `"Hello\"World!"`, ``},
|
|
{`"\\"`, `"\\"`, ``},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.in, func(t *testing.T) {
|
|
out, ext, err := parseString([]byte(test.in))
|
|
|
|
if err != nil {
|
|
t.Errorf("%s => %s", test.in, err)
|
|
return
|
|
}
|
|
|
|
if s := string(out); s != test.out {
|
|
t.Error("invalid output")
|
|
t.Logf("expected: %s", test.out)
|
|
t.Logf("found: %s", s)
|
|
}
|
|
|
|
if s := string(ext); s != test.ext {
|
|
t.Error("invalid extra bytes")
|
|
t.Logf("expected: %s", test.ext)
|
|
t.Logf("found: %s", s)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestAppendToLower(t *testing.T) {
|
|
tests := []string{
|
|
"",
|
|
"A",
|
|
"a",
|
|
"__segment_internal",
|
|
"someFieldWithALongBName",
|
|
"Hello World!",
|
|
"Hello\"World!",
|
|
"Hello\\World!",
|
|
"Hello\nWorld!",
|
|
"Hello\rWorld!",
|
|
"Hello\tWorld!",
|
|
"Hello\bWorld!",
|
|
"Hello\fWorld!",
|
|
"你好",
|
|
"<",
|
|
">",
|
|
"&",
|
|
"\u001944",
|
|
"\u00c2e>",
|
|
"\u00c2V?",
|
|
"\u000e=8",
|
|
"\u001944\u00c2e>\u00c2V?\u000e=8",
|
|
"ir\u001bQJ\u007f\u0007y\u0015)",
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s1 := strings.ToLower(test)
|
|
s2 := string(appendToLower(nil, []byte(test)))
|
|
|
|
if s1 != s2 {
|
|
t.Error("lowercase values mismatch")
|
|
t.Log("expected:", s1)
|
|
t.Log("found: ", s2)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseString(b *testing.B) {
|
|
s := []byte(`"__segment_internal"`)
|
|
|
|
for i := 0; i != b.N; i++ {
|
|
parseString(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkToLower(b *testing.B) {
|
|
s := []byte("someFieldWithALongName")
|
|
|
|
for i := 0; i != b.N; i++ {
|
|
bytes.ToLower(s)
|
|
}
|
|
}
|
|
|
|
func BenchmarkAppendToLower(b *testing.B) {
|
|
a := []byte(nil)
|
|
s := []byte("someFieldWithALongName")
|
|
|
|
for i := 0; i != b.N; i++ {
|
|
a = appendToLower(a[:0], s)
|
|
}
|
|
}
|
|
|
|
var benchmarkHasPrefixString = []byte("some random string")
|
|
var benchmarkHasPrefixResult = false
|
|
|
|
func BenchmarkHasPrefix(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
benchmarkHasPrefixResult = hasPrefix(benchmarkHasPrefixString, "null")
|
|
}
|
|
}
|
|
|
|
func BenchmarkHasNullPrefix(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
benchmarkHasPrefixResult = hasNullPrefix(benchmarkHasPrefixString)
|
|
}
|
|
}
|
|
|
|
func BenchmarkHasTruePrefix(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
benchmarkHasPrefixResult = hasTruePrefix(benchmarkHasPrefixString)
|
|
}
|
|
}
|
|
|
|
func BenchmarkHasFalsePrefix(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
benchmarkHasPrefixResult = hasFalsePrefix(benchmarkHasPrefixString)
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseStringEscapeNone(b *testing.B) {
|
|
var j = []byte(`"` + strings.Repeat(`a`, 1000) + `"`)
|
|
var s string
|
|
b.SetBytes(int64(len(j)))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
if err := Unmarshal(j, &s); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
s = ""
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseStringEscapeOne(b *testing.B) {
|
|
var j = []byte(`"` + strings.Repeat(`a`, 998) + `\n"`)
|
|
var s string
|
|
b.SetBytes(int64(len(j)))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
if err := Unmarshal(j, &s); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
s = ""
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseStringEscapeAll(b *testing.B) {
|
|
var j = []byte(`"` + strings.Repeat(`\`, 1000) + `"`)
|
|
var s string
|
|
b.SetBytes(int64(len(j)))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
if err := Unmarshal(j, &s); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
s = ""
|
|
}
|
|
}
|