Skip to content

Commit b63a2af

Browse files
pratik-sharma-1daveshanley
authored andcommitted
fix error on negative float and int numbers
1 parent f1e3b5e commit b63a2af

File tree

4 files changed

+41
-33
lines changed

4 files changed

+41
-33
lines changed

datamodel/high/node_builder.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -492,24 +492,22 @@ func (n *NodeBuilder) AddYAMLNode(parent *yaml.Node, entry *nodes.NodeEntry) *ya
492492
}
493493
if b, bok := value.(*int64); bok {
494494
encodeSkip = true
495-
if *b > 0 {
495+
if *b != 0 {
496496
valueNode = utils.CreateIntNode(strconv.Itoa(int(*b)))
497497
valueNode.Line = line
498498
}
499499
}
500500
if b, bok := value.(*float64); bok {
501501
encodeSkip = true
502-
if *b > 0 || (entry.RenderZero && entry.Line > 0) {
502+
if *b != 0 || (entry.RenderZero && entry.Line > 0) {
503503
formatFloat := strconv.FormatFloat(*b, 'f', -1, 64)
504-
if *b > 0 {
505-
if *b == math.Trunc(*b) {
506-
valueNode = utils.CreateIntNode(formatFloat)
507-
} else {
508-
valueNode = utils.CreateFloatNode(formatFloat)
509-
}
510-
} else {
504+
505+
if *b == math.Trunc(*b) {
511506
valueNode = utils.CreateIntNode(formatFloat)
507+
} else {
508+
valueNode = utils.CreateFloatNode(formatFloat)
512509
}
510+
513511
valueNode.Line = line
514512
}
515513
}

datamodel/high/node_builder_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,3 +1108,35 @@ func TestNodeBuilder_GetStringLowValue(t *testing.T) {
11081108

11091109
assert.Equal(t, `thing: "thing"`, strings.TrimSpace(string(data)))
11101110
}
1111+
1112+
func TestNewNodeBuilder_Float64_Negative(t *testing.T) {
1113+
floatNum := -3.33333
1114+
t1 := test1{
1115+
Thral: &floatNum,
1116+
}
1117+
1118+
nb := NewNodeBuilder(&t1, &t1)
1119+
node := nb.Render()
1120+
1121+
data, _ := yaml.Marshal(node)
1122+
1123+
desired := `thung: -3.33333`
1124+
1125+
assert.Equal(t, desired, strings.TrimSpace(string(data)))
1126+
}
1127+
1128+
func TestNewNodeBuilder_Int64_Negative(t *testing.T) {
1129+
intNum := int64(-3)
1130+
t1 := test1{
1131+
Thurr: &intNum,
1132+
}
1133+
1134+
nb := NewNodeBuilder(&t1, &t1)
1135+
node := nb.Render()
1136+
1137+
data, _ := yaml.Marshal(node)
1138+
1139+
desired := `thurr: -3`
1140+
1141+
assert.Equal(t, desired, strings.TrimSpace(string(data)))
1142+
}

datamodel/high/v3/document_test.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -880,25 +880,3 @@ components:
880880

881881
assert.Equal(t, desired, strings.TrimSpace(string(r)))
882882
}
883-
884-
func TestDocument_RenderJSONError(t *testing.T) {
885-
// create a new document
886-
jsonFile := `{"openapi":"3.0.0","info":{"title":"dummy","version":"1.0.0"},"paths":{"/dummy":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number","format":"decimal","multipleOf":0.01,"minimum":-999.99}}}}}},"responses":{"200":{"description":"OK"}}}}}}`
887-
888-
info, _ := datamodel.ExtractSpecInfo([]byte(jsonFile))
889-
var err error
890-
lowDoc, err = lowv3.CreateDocumentFromConfig(info, &datamodel.DocumentConfiguration{
891-
AllowFileReferences: true,
892-
AllowRemoteReferences: true,
893-
})
894-
if err != nil {
895-
panic("broken something")
896-
}
897-
h := NewDocument(lowDoc)
898-
899-
// render the document to YAML and it should be identical.
900-
r, e := h.RenderJSON(" ")
901-
assert.Nil(t, r)
902-
assert.Error(t, e)
903-
assert.Equal(t, "yaml: cannot decode !!float `-999.99` as a !!int", e.Error())
904-
}

document_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,8 +1429,8 @@ func TestDocument_Issue264(t *testing.T) {
14291429
_, _ = d.BuildV3Model()
14301430

14311431
_, _, _, errs := d.RenderAndReload() // code panics here
1432-
assert.Len(t, errs, 1)
1433-
assert.Equal(t, "yaml: cannot decode !!float `-999.99` as a !!int", errs[0].Error())
1432+
assert.Nil(t, errs)
1433+
14341434
}
14351435

14361436
func TestDocument_Issue269(t *testing.T) {

0 commit comments

Comments
 (0)