github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/infra/conf/cfgcommon/testassist/general.go (about) 1 package testassist 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/golang/protobuf/proto" 8 9 "github.com/v2fly/v2ray-core/v5/common" 10 "github.com/v2fly/v2ray-core/v5/infra/conf/cfgcommon" 11 ) 12 13 func LoadJSON(creator func() cfgcommon.Buildable) func(string) (proto.Message, error) { 14 return func(s string) (proto.Message, error) { 15 instance := creator() 16 if err := json.Unmarshal([]byte(s), instance); err != nil { 17 return nil, err 18 } 19 return instance.Build() 20 } 21 } 22 23 type TestCase struct { 24 Input string 25 Parser func(string) (proto.Message, error) 26 Output proto.Message 27 } 28 29 func RunMultiTestCase(t *testing.T, testCases []TestCase) { 30 for _, testCase := range testCases { 31 actual, err := testCase.Parser(testCase.Input) 32 common.Must(err) 33 if !proto.Equal(actual, testCase.Output) { 34 t.Fatalf("Failed in test case:\n%s\nActual:\n%v\nExpected:\n%v", testCase.Input, actual, testCase.Output) 35 } 36 } 37 }