cuelang.org/go@v0.13.0/encoding/protobuf/jsonpb/decoder_test.go (about) 1 // Copyright 2021 CUE Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package jsonpb_test 16 17 import ( 18 "strings" 19 "testing" 20 21 "cuelang.org/go/cue" 22 "cuelang.org/go/cue/ast" 23 "cuelang.org/go/cue/ast/astutil" 24 "cuelang.org/go/cue/cuecontext" 25 "cuelang.org/go/cue/errors" 26 "cuelang.org/go/cue/format" 27 "cuelang.org/go/cue/parser" 28 "cuelang.org/go/encoding/json" 29 "cuelang.org/go/encoding/protobuf/jsonpb" 30 "cuelang.org/go/encoding/yaml" 31 "cuelang.org/go/internal/cuetxtar" 32 ) 33 34 func TestParse(t *testing.T) { 35 test := cuetxtar.TxTarTest{ 36 Root: "./testdata/decoder", 37 Name: "jsonpb", 38 } 39 40 test.Run(t, func(t *cuetxtar.Test) { 41 // TODO: use high-level API. 42 43 var schema cue.Value 44 var file *ast.File 45 46 for _, f := range t.Archive.Files { 47 switch { 48 case f.Name == "schema.cue": 49 schema = t.CueContext().CompileBytes(f.Data, cue.Filename(f.Name)) 50 if err := schema.Err(); err != nil { 51 t.WriteErrors(errors.Promote(err, "test")) 52 return 53 } 54 continue 55 56 case strings.HasPrefix(f.Name, "out/"): 57 continue 58 59 case strings.HasSuffix(f.Name, ".cue"): 60 f, err := parser.ParseFile(f.Name, f.Data, parser.ParseComments) 61 if err != nil { 62 t.Fatal(err) 63 } 64 file = f 65 66 case strings.HasSuffix(f.Name, ".json"): 67 x, err := json.Extract(f.Name, f.Data) 68 if err != nil { 69 t.Fatal(err) 70 } 71 file, err = astutil.ToFile(x) 72 if err != nil { 73 t.Fatal(err) 74 } 75 76 case strings.HasSuffix(f.Name, ".yaml"): 77 f, err := yaml.Extract(f.Name, f.Data) 78 if err != nil { 79 t.Fatal(err) 80 } 81 file = f 82 } 83 84 w := t.Writer(f.Name) 85 err := jsonpb.NewDecoder(schema).RewriteFile(file) 86 if err != nil { 87 errors.Print(w, err, nil) 88 continue 89 } 90 91 b, err := format.Node(file) 92 if err != nil { 93 t.Fatal(err) 94 } 95 _, _ = w.Write(b) 96 } 97 }) 98 } 99 100 // For debugging purposes: DO NOT REMOVE. 101 func TestX(t *testing.T) { 102 const schema = ` 103 104 ` 105 const data = ` 106 ` 107 if strings.TrimSpace(data) == "" { 108 t.Skip() 109 } 110 val := cuecontext.New().CompileString(schema) 111 if err := val.Err(); err != nil { 112 t.Fatal(err) 113 } 114 115 file, err := parser.ParseFile("data", data) 116 if err != nil { 117 t.Fatal(err) 118 } 119 120 if err := jsonpb.NewDecoder(val).RewriteFile(file); err != nil { 121 t.Fatal(err) 122 } 123 124 b, err := format.Node(file) 125 if err != nil { 126 t.Fatal(err) 127 } 128 t.Error(string(b)) 129 }