encoding/openapi: convert CUE to openapi schemas
Change-Id: Iea3369d702f7cb91e49e61153518c04d6845f03c
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2120
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/encoding/openapi/openapi_test.go b/encoding/openapi/openapi_test.go
new file mode 100644
index 0000000..504b75a
--- /dev/null
+++ b/encoding/openapi/openapi_test.go
@@ -0,0 +1,80 @@
+// Copyright 2019 CUE Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package openapi
+
+import (
+ "bytes"
+ "encoding/json"
+ "flag"
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+
+ "cuelang.org/go/cue"
+ "cuelang.org/go/cue/build"
+ "cuelang.org/go/cue/load"
+ "cuelang.org/go/cue/parser"
+ "github.com/kylelemons/godebug/diff"
+)
+
+var update *bool = flag.Bool("update", false, "update the test output")
+
+var config = &load.Config{
+ Context: build.NewContext(build.ParseOptions(parser.ParseComments)),
+}
+
+func TestParseDefinitions(t *testing.T) {
+ defaultConfig := &Config{}
+ resolveRefs := &Config{ExpandReferences: true}
+
+ testCases := []struct {
+ in, out string
+ config *Config
+ }{{
+ "openapi.cue",
+ "openapi.json",
+ defaultConfig,
+ }, {
+ "openapi.cue",
+ "openapi-norefs.json",
+ resolveRefs,
+ }}
+ for _, tc := range testCases {
+ t.Run(tc.out, func(t *testing.T) {
+ filename := filepath.Join("testdata", filepath.FromSlash(tc.in))
+
+ inst := cue.Build(load.Instances([]string{filename}, config))[0]
+
+ b, err := Gen(inst, tc.config)
+ var out = &bytes.Buffer{}
+ json.Indent(out, b, "", " ")
+
+ wantFile := filepath.Join("testdata", tc.out)
+ if *update {
+ ioutil.WriteFile(wantFile, out.Bytes(), 0644)
+ return
+ }
+
+ b, err = ioutil.ReadFile(wantFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if d := diff.Diff(string(b), out.String()); d != "" {
+ t.Errorf("files differ:\n%v", d)
+ }
+ })
+ }
+}