Files
upstream-centrifugo/internal/tools/json_test.go
upstream-mirror b352a9a30d
Some checks failed
test / Lint (push) Failing after 3s
test / Test with Go 1.26.8 (push) Failing after 2s
snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:17:21 +05:00

182 lines
3.5 KiB
Go

package tools
import (
"testing"
)
func TestIsValidJSON(t *testing.T) {
tests := []struct {
name string
input []byte
expected bool
}{
{
name: "empty data",
input: []byte{},
expected: false,
},
{
name: "valid json object",
input: []byte(`{"key": "value"}`),
expected: true,
},
{
name: "valid json array",
input: []byte(`[1, 2, 3]`),
expected: true,
},
{
name: "valid json string",
input: []byte(`"hello"`),
expected: true,
},
{
name: "valid json number",
input: []byte(`123`),
expected: true,
},
{
name: "valid json boolean true",
input: []byte(`true`),
expected: true,
},
{
name: "valid json boolean false",
input: []byte(`false`),
expected: true,
},
{
name: "valid json null",
input: []byte(`null`),
expected: true,
},
{
name: "valid empty json object",
input: []byte(`{}`),
expected: true,
},
{
name: "valid empty json array",
input: []byte(`[]`),
expected: true,
},
{
name: "invalid json - missing closing brace",
input: []byte(`{"key": "value"`),
expected: false,
},
{
name: "invalid json - plain text",
input: []byte(`hello world`),
expected: false,
},
{
name: "invalid json - trailing comma",
input: []byte(`{"key": "value",}`),
expected: false,
},
{
name: "invalid json - single quote",
input: []byte(`{'key': 'value'}`),
expected: false,
},
{
name: "invalid json - unquoted key",
input: []byte(`{key: "value"}`),
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := IsValidJSON(tt.input)
if got != tt.expected {
t.Errorf("IsValidJSON() = %v, want %v", got, tt.expected)
}
})
}
}
func TestIsValidJSONObject(t *testing.T) {
tests := []struct {
name string
input []byte
expected bool
}{
{
name: "empty data",
input: []byte{},
expected: false,
},
{
name: "valid json object",
input: []byte(`{"key": "value"}`),
expected: true,
},
{
name: "valid empty json object",
input: []byte(`{}`),
expected: true,
},
{
name: "valid json object with whitespace",
input: []byte(` {"key": "value"} `),
expected: true,
},
{
name: "valid json object with newlines",
input: []byte("{\n \"key\": \"value\"\n}"),
expected: true,
},
{
name: "valid json array - should be false",
input: []byte(`[1, 2, 3]`),
expected: false,
},
{
name: "valid json string - should be false",
input: []byte(`"hello"`),
expected: false,
},
{
name: "valid json number - should be false",
input: []byte(`123`),
expected: false,
},
{
name: "valid json boolean - should be false",
input: []byte(`true`),
expected: false,
},
{
name: "valid json null - should be false",
input: []byte(`null`),
expected: false,
},
{
name: "invalid json - missing closing brace",
input: []byte(`{"key": "value"`),
expected: false,
},
{
name: "invalid json - plain text",
input: []byte(`hello world`),
expected: false,
},
{
name: "invalid json - trailing comma",
input: []byte(`{"key": "value",}`),
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := IsValidJSONObject(tt.input)
if got != tt.expected {
t.Errorf("IsValidJSONObject() = %v, want %v", got, tt.expected)
}
})
}
}