mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-09-05 19:44:32 -04:00
146 lines
2.7 KiB
Go
146 lines
2.7 KiB
Go
|
package json
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestYMLToJSON_V2Style(t *testing.T) {
|
||
|
input := `
|
||
|
log:
|
||
|
loglevel: debug
|
||
|
inbounds:
|
||
|
- port: 10800
|
||
|
listen: 127.0.0.1
|
||
|
protocol: socks
|
||
|
settings:
|
||
|
udp: true
|
||
|
outbounds:
|
||
|
- protocol: vmess
|
||
|
settings:
|
||
|
vnext:
|
||
|
- address: example.com
|
||
|
port: 443
|
||
|
users:
|
||
|
- id: '98a15fa6-2eb1-edd5-50ea-cfc428aaab78'
|
||
|
streamSettings:
|
||
|
network: tcp
|
||
|
security: tls
|
||
|
`
|
||
|
expected := `
|
||
|
{
|
||
|
"log": {
|
||
|
"loglevel": "debug"
|
||
|
},
|
||
|
"inbounds": [{
|
||
|
"port": 10800,
|
||
|
"listen": "127.0.0.1",
|
||
|
"protocol": "socks",
|
||
|
"settings": {
|
||
|
"udp": true
|
||
|
}
|
||
|
}],
|
||
|
"outbounds": [{
|
||
|
"protocol": "vmess",
|
||
|
"settings": {
|
||
|
"vnext": [{
|
||
|
"port": 443,
|
||
|
"address": "example.com",
|
||
|
"users": [{
|
||
|
"id": "98a15fa6-2eb1-edd5-50ea-cfc428aaab78"
|
||
|
}]
|
||
|
}]
|
||
|
},
|
||
|
"streamSettings": {
|
||
|
"network": "tcp",
|
||
|
"security": "tls"
|
||
|
}
|
||
|
}]
|
||
|
}
|
||
|
`
|
||
|
bs, err := FromYAML([]byte(input))
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
m := make(map[string]interface{})
|
||
|
json.Unmarshal(bs, &m)
|
||
|
assertResult(t, m, expected)
|
||
|
}
|
||
|
func TestYMLToJSON_ValueTypes(t *testing.T) {
|
||
|
input := `
|
||
|
boolean:
|
||
|
- TRUE
|
||
|
- FALSE
|
||
|
- true
|
||
|
- false
|
||
|
float:
|
||
|
- 3.14
|
||
|
- 6.8523015e+5
|
||
|
int:
|
||
|
- 123
|
||
|
- 0b1010_0111_0100_1010_1110
|
||
|
null:
|
||
|
nodeName: 'node'
|
||
|
parent: ~ # ~ for null
|
||
|
string:
|
||
|
- 哈哈
|
||
|
- 'Hello world'
|
||
|
- newline
|
||
|
newline2 # multi-line string
|
||
|
date:
|
||
|
- 2018-02-17 # yyyy-MM-dd
|
||
|
datetime:
|
||
|
- 2018-02-17T15:02:31+08:00 # ISO 8601 time
|
||
|
mixed:
|
||
|
- true
|
||
|
- false
|
||
|
- 1
|
||
|
- 0
|
||
|
- null
|
||
|
- hello
|
||
|
# arbitrary keys
|
||
|
1: 0
|
||
|
true: false
|
||
|
TRUE: TRUE
|
||
|
"str": "hello"
|
||
|
`
|
||
|
expected := `
|
||
|
{
|
||
|
"boolean": [true, false, true, false],
|
||
|
"float": [3.14, 685230.15],
|
||
|
"int": [123, 685230],
|
||
|
"null": {
|
||
|
"nodeName": "node",
|
||
|
"parent": null
|
||
|
},
|
||
|
"string": ["哈哈", "Hello world", "newline newline2"],
|
||
|
"date": ["2018-02-17"],
|
||
|
"datetime": ["2018-02-17T15:02:31+08:00"],
|
||
|
"mixed": [true,false,1,0,null,"hello"],
|
||
|
"1": 0,
|
||
|
"true": true,
|
||
|
"str": "hello"
|
||
|
}
|
||
|
`
|
||
|
bs, err := FromYAML([]byte(input))
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
m := make(map[string]interface{})
|
||
|
json.Unmarshal(bs, &m)
|
||
|
assertResult(t, m, expected)
|
||
|
}
|
||
|
|
||
|
func assertResult(t *testing.T, value map[string]interface{}, expected string) {
|
||
|
e := make(map[string]interface{})
|
||
|
err := json.Unmarshal([]byte(expected), &e)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(value, e) {
|
||
|
bs, _ := json.Marshal(value)
|
||
|
t.Fatalf("expected:\n%s\n\nactual:\n%s", expected, string(bs))
|
||
|
}
|
||
|
}
|