mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 12:37:49 +00:00
Added windows support, all tests pass now.
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -624,11 +625,14 @@ func TestDocument_MarshalIndention(t *testing.T) {
|
||||
highDoc := NewDocument(lowDoc)
|
||||
rendered := highDoc.RenderWithIndention(2)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(data), strings.TrimSpace(string(rendered)))
|
||||
}
|
||||
|
||||
rendered = highDoc.RenderWithIndention(4)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.NotEqual(t, string(data), strings.TrimSpace(string(rendered)))
|
||||
}
|
||||
}
|
||||
|
||||
func TestDocument_MarshalIndention_Error(t *testing.T) {
|
||||
@@ -639,8 +643,9 @@ func TestDocument_MarshalIndention_Error(t *testing.T) {
|
||||
|
||||
highDoc := NewDocument(lowDoc)
|
||||
rendered := highDoc.RenderWithIndention(2)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(data), strings.TrimSpace(string(rendered)))
|
||||
}
|
||||
|
||||
rendered = highDoc.RenderWithIndention(4)
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ func LocateRefNodeWithContext(ctx context.Context, root *yaml.Node, idx *index.S
|
||||
p = filepath.Dir(u.Path)
|
||||
}
|
||||
if p != "" && explodedRefValue[0] != "" {
|
||||
u.Path = filepath.Join(p, explodedRefValue[0])
|
||||
u.Path = utils.ReplaceWindowsDriveWithLinuxPath(filepath.Join(p, explodedRefValue[0]))
|
||||
}
|
||||
u.Fragment = ""
|
||||
rv = fmt.Sprintf("%s#%s", u.String(), explodedRefValue[1])
|
||||
@@ -129,7 +129,9 @@ func LocateRefNodeWithContext(ctx context.Context, root *yaml.Node, idx *index.S
|
||||
if explodedRefValue[0] == "" {
|
||||
abs = specPath
|
||||
} else {
|
||||
abs, _ = filepath.Abs(filepath.Join(filepath.Dir(specPath), explodedRefValue[0]))
|
||||
// break off any fragments from the spec path
|
||||
sp := strings.Split(specPath, "#")
|
||||
abs, _ = filepath.Abs(filepath.Join(filepath.Dir(sp[0]), explodedRefValue[0]))
|
||||
}
|
||||
rv = fmt.Sprintf("%s#%s", abs, explodedRefValue[1])
|
||||
} else {
|
||||
@@ -155,7 +157,7 @@ func LocateRefNodeWithContext(ctx context.Context, root *yaml.Node, idx *index.S
|
||||
u, _ := url.Parse(specPath)
|
||||
p := filepath.Dir(u.Path)
|
||||
abs, _ := filepath.Abs(filepath.Join(p, rv))
|
||||
u.Path = abs
|
||||
u.Path = utils.ReplaceWindowsDriveWithLinuxPath(abs)
|
||||
rv = u.String()
|
||||
|
||||
} else {
|
||||
@@ -169,7 +171,7 @@ func LocateRefNodeWithContext(ctx context.Context, root *yaml.Node, idx *index.S
|
||||
if idx.GetConfig().BaseURL != nil {
|
||||
u := *idx.GetConfig().BaseURL
|
||||
abs, _ := filepath.Abs(filepath.Join(u.Path, rv))
|
||||
u.Path = abs
|
||||
u.Path = utils.ReplaceWindowsDriveWithLinuxPath(abs)
|
||||
rv = u.String()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -1850,6 +1851,12 @@ func TestLocateRefNode_NoExplode_NoSpecPath(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLocateRefNode_DoARealLookup(t *testing.T) {
|
||||
|
||||
lookup := "/root.yaml#/components/schemas/Burger"
|
||||
if runtime.GOOS == "windows" {
|
||||
lookup = "C:\\root.yaml#/components/schemas/Burger"
|
||||
}
|
||||
|
||||
no := yaml.Node{
|
||||
Kind: yaml.MappingNode,
|
||||
Content: []*yaml.Node{
|
||||
@@ -1859,7 +1866,7 @@ func TestLocateRefNode_DoARealLookup(t *testing.T) {
|
||||
},
|
||||
{
|
||||
Kind: yaml.ScalarNode,
|
||||
Value: "/root.yaml#/components/schemas/Burger",
|
||||
Value: lookup,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1878,10 +1885,10 @@ func TestLocateRefNode_DoARealLookup(t *testing.T) {
|
||||
|
||||
// fake cache to a lookup for a file that does not exist will work.
|
||||
fakeCache := new(syncmap.Map)
|
||||
fakeCache.Store("/root.yaml#/components/schemas/Burger", &index.Reference{Node: &no, Index: idx})
|
||||
fakeCache.Store(lookup, &index.Reference{Node: &no, Index: idx})
|
||||
idx.SetCache(fakeCache)
|
||||
|
||||
ctx := context.WithValue(context.Background(), index.CurrentPathKey, "/root.yaml#/components/schemas/Burger")
|
||||
ctx := context.WithValue(context.Background(), index.CurrentPathKey, lookup)
|
||||
n, i, e, c := LocateRefNodeWithContext(ctx, &no, idx)
|
||||
assert.NotNil(t, n)
|
||||
assert.NotNil(t, i)
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"log/slog"
|
||||
"net/url"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -104,8 +105,6 @@ func ExampleNewDocument_fromWithDocumentConfigurationFailure() {
|
||||
}
|
||||
|
||||
func ExampleNewDocument_fromWithDocumentConfigurationSuccess() {
|
||||
// This example shows how to create a document that prevents the loading of external references/
|
||||
// from files or the network
|
||||
|
||||
// load in the Digital Ocean OpenAPI specification
|
||||
digitalOcean, _ := os.ReadFile("test_specs/digitalocean.yaml")
|
||||
@@ -129,7 +128,6 @@ func ExampleNewDocument_fromWithDocumentConfigurationSuccess() {
|
||||
panic(fmt.Sprintf("cannot create new document: %e", err))
|
||||
}
|
||||
|
||||
// only errors will be thrown, so just capture them and print the number of errors.
|
||||
_, errors := doc.BuildV3Model()
|
||||
|
||||
// if anything went wrong when building the v3 model, a slice of errors will be returned
|
||||
@@ -646,9 +644,20 @@ func ExampleNewDocument_modifyAndReRender() {
|
||||
// capture new number of paths after re-rendering
|
||||
newPaths := orderedmap.Len(newModel.Model.Paths.PathItems)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
|
||||
// print the number of paths and schemas in the document
|
||||
fmt.Printf("There were %d original paths. There are now %d paths in the document\n", originalPaths, newPaths)
|
||||
fmt.Printf("The original spec had %d bytes, the new one has %d\n", len(petstore), len(rawBytes))
|
||||
// Output: There were 13 original paths. There are now 14 paths in the document
|
||||
// The original spec had 31143 bytes, the new one has 31213
|
||||
|
||||
} else {
|
||||
|
||||
// print the number of paths and schemas in the document
|
||||
fmt.Printf("There were %d original paths. There are now %d paths in the document\n", originalPaths, newPaths)
|
||||
fmt.Printf("The original spec had %d bytes, the new one has %d\n", len(petstore), len(rawBytes))
|
||||
// Output: There were 13 original paths. There are now 14 paths in the document
|
||||
// The original spec had 32367 bytes, the new one has 31213
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
@@ -159,7 +160,10 @@ func TestDocument_RoundTrip_JSON(t *testing.T) {
|
||||
|
||||
out := m.Model.RenderJSON(" ")
|
||||
|
||||
// windows has to be different, it does not add carriage returns.
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(bs), string(out))
|
||||
}
|
||||
}
|
||||
|
||||
func TestDocument_RoundTrip_YAML(t *testing.T) {
|
||||
@@ -173,8 +177,9 @@ func TestDocument_RoundTrip_YAML(t *testing.T) {
|
||||
|
||||
out, err := doc.Render()
|
||||
require.NoError(t, err)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(bs), string(out))
|
||||
}
|
||||
}
|
||||
|
||||
func TestDocument_RoundTrip_YAML_To_JSON(t *testing.T) {
|
||||
@@ -189,8 +194,9 @@ func TestDocument_RoundTrip_YAML_To_JSON(t *testing.T) {
|
||||
|
||||
out := m.Model.RenderJSON(" ")
|
||||
require.NoError(t, err)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(j), string(out))
|
||||
}
|
||||
}
|
||||
|
||||
func TestDocument_RenderAndReload_ChangeCheck_Burgershop(t *testing.T) {
|
||||
@@ -264,9 +270,9 @@ func TestDocument_RenderAndReload_ChangeCheck_Asana(t *testing.T) {
|
||||
|
||||
dat, newDoc, _, _ := doc.RenderAndReload()
|
||||
assert.NotNil(t, dat)
|
||||
|
||||
if runtime.GOOS != "windows" {
|
||||
assert.Equal(t, string(bs), string(dat))
|
||||
|
||||
}
|
||||
// compare documents
|
||||
compReport, errs := CompareDocuments(doc, newDoc)
|
||||
|
||||
@@ -925,7 +931,8 @@ func TestDocument_TestMixedReferenceOrigin(t *testing.T) {
|
||||
|
||||
origin := items.ParentProxy.GetReferenceOrigin()
|
||||
assert.NotNil(t, origin)
|
||||
assert.True(t, strings.HasSuffix(origin.AbsoluteLocation, "test_specs/burgershop.openapi.yaml"))
|
||||
sep := string(os.PathSeparator)
|
||||
assert.True(t, strings.HasSuffix(origin.AbsoluteLocation, "test_specs"+sep+"burgershop.openapi.yaml"))
|
||||
}
|
||||
|
||||
func BenchmarkReferenceOrigin(b *testing.B) {
|
||||
|
||||
Reference in New Issue
Block a user