@@ -12,6 +12,7 @@ package goavro
1212import (
1313 "bytes"
1414 "fmt"
15+ "math/big"
1516 "testing"
1617)
1718
@@ -389,7 +390,7 @@ func TestRecordFieldDefaultValue(t *testing.T) {
389390 testSchemaValid (t , `{"type":"record","name":"r1","fields":[{"name":"f1","type":"string","default":"foo"}]}` )
390391 testSchemaInvalid (t ,
391392 `{"type":"record","name":"r1","fields":[{"name":"f1","type":"int","default":"foo"}]}` ,
392- "default value ought to encode using field schema " )
393+ "default value ought to have a number type " )
393394}
394395
395396func TestRecordFieldUnionDefaultValue (t * testing.T ) {
@@ -618,7 +619,7 @@ func TestRecordFieldFixedDefaultValue(t *testing.T) {
618619
619620func TestRecordFieldDefaultValueTypes (t * testing.T ) {
620621 t .Run ("success" , func (t * testing.T ) {
621- codec , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someBoolean", "type": "boolean", "default": true},{"name": "someBytes", "type": "bytes", "default": "0"},{"name": "someDouble", "type": "double", "default": 0},{"name": "someFloat", "type": "float", "default": 0},{"name": "someInt", "type": "int", "default": 0},{"name": "someLong", "type": "long", "default": 0},{"name": "someString", "type": "string", "default": "0"}]}` )
622+ codec , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someBoolean", "type": "boolean", "default": true},{"name": "someBytes", "type": "bytes", "default": "0"},{"name": "someDouble", "type": "double", "default": 0},{"name": "someFloat", "type": "float", "default": 0},{"name": "someInt", "type": "int", "default": 0},{"name": "someLong", "type": "long", "default": 0},{"name": "someString", "type": "string", "default": "0"}, {"name":"someTimestamp", "type":"long", "logicalType":"timestamp-millis","default":0}, {"name": "someDecimal", "type": "bytes", "logicalType": "decimal", "precision": 4, "scale": 2, "default":"\u0000"} ]}` )
622623 ensureError (t , err )
623624
624625 r1 , _ , err := codec .NativeFromTextual ([]byte ("{}" ))
@@ -660,24 +661,32 @@ func TestRecordFieldDefaultValueTypes(t *testing.T) {
660661 if _ , ok := someString .(string ); ! ok {
661662 t .Errorf ("GOT: %T; WANT: string" , someString )
662663 }
664+ someTimestamp := r1m ["someTimestamp" ]
665+ if _ , ok := someTimestamp .(float64 ); ! ok {
666+ t .Errorf ("GOT: %T; WANT: float64" , someTimestamp )
667+ }
668+ someDecimal := r1m ["someDecimal" ]
669+ if _ , ok := someDecimal .(* big.Rat ); ! ok {
670+ t .Errorf ("GOT: %T; WANT: *big.Rat" , someDecimal )
671+ }
663672 })
664673
665674 t .Run ("provided default is wrong type" , func (t * testing.T ) {
666675 t .Run ("long" , func (t * testing.T ) {
667676 _ , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someLong", "type": "long", "default": "0"},{"name": "someInt", "type": "int", "default": 0},{"name": "someFloat", "type": "float", "default": 0},{"name": "someDouble", "type": "double", "default": 0}]}` )
668- ensureError (t , err , "field schema " )
677+ ensureError (t , err , "default value ought to have a number type " )
669678 })
670679 t .Run ("int" , func (t * testing.T ) {
671680 _ , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someLong", "type": "long", "default": 0},{"name": "someInt", "type": "int", "default": "0"},{"name": "someFloat", "type": "float", "default": 0},{"name": "someDouble", "type": "double", "default": 0}]}` )
672- ensureError (t , err , "field schema " )
681+ ensureError (t , err , "default value ought to have a number type " )
673682 })
674683 t .Run ("float" , func (t * testing.T ) {
675684 _ , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someLong", "type": "long", "default": 0},{"name": "someInt", "type": "int", "default": 0},{"name": "someFloat", "type": "float", "default": "0"},{"name": "someDouble", "type": "double", "default": 0}]}` )
676- ensureError (t , err , "field schema " )
685+ ensureError (t , err , "default value ought to have a float type " )
677686 })
678687 t .Run ("double" , func (t * testing.T ) {
679688 _ , err := NewCodec (`{"type": "record", "name": "r1", "fields":[{"name": "someLong", "type": "long", "default": 0},{"name": "someInt", "type": "int", "default": 0},{"name": "someFloat", "type": "float", "default": 0},{"name": "someDouble", "type": "double", "default": "0"}]}` )
680- ensureError (t , err , "field schema " )
689+ ensureError (t , err , "default value ought to have a double type " )
681690 })
682691 })
683692
0 commit comments