@@ -8,12 +8,169 @@ package bson
88
99import  (
1010	"io" 
11- 	"testing" 
1211
13- 	"go.mongodb.org/mongo-driver/v2/internal/assert" 
1412	"go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" 
1513)
1614
15+ var  marshalValueTestCases  =  []marshalValueTestCase {
16+ 	{
17+ 		name :     "double" ,
18+ 		val :      3.14 ,
19+ 		bsontype : TypeDouble ,
20+ 		bytes :    bsoncore .AppendDouble (nil , 3.14 ),
21+ 	},
22+ 	{
23+ 		name :     "string" ,
24+ 		val :      "hello world" ,
25+ 		bsontype : TypeString ,
26+ 		bytes :    bsoncore .AppendString (nil , "hello world" ),
27+ 	},
28+ 	{
29+ 		name :     "binary" ,
30+ 		val :      Binary {1 , []byte {1 , 2 }},
31+ 		bsontype : TypeBinary ,
32+ 		bytes :    bsoncore .AppendBinary (nil , 1 , []byte {1 , 2 }),
33+ 	},
34+ 	{
35+ 		name :     "undefined" ,
36+ 		val :      Undefined {},
37+ 		bsontype : TypeUndefined ,
38+ 		bytes :    []byte {},
39+ 	},
40+ 	{
41+ 		name :     "object id" ,
42+ 		val :      ObjectID {103 , 116 , 166 , 161 , 70 , 33 , 67 , 139 , 164 , 144 , 255 , 112 },
43+ 		bsontype : TypeObjectID ,
44+ 		bytes :    bsoncore .AppendObjectID (nil , ObjectID {103 , 116 , 166 , 161 , 70 , 33 , 67 , 139 , 164 , 144 , 255 , 112 }),
45+ 	},
46+ 	{
47+ 		name :     "boolean" ,
48+ 		val :      true ,
49+ 		bsontype : TypeBoolean ,
50+ 		bytes :    bsoncore .AppendBoolean (nil , true ),
51+ 	},
52+ 	{
53+ 		name :     "datetime" ,
54+ 		val :      DateTime (5 ),
55+ 		bsontype : TypeDateTime ,
56+ 		bytes :    bsoncore .AppendDateTime (nil , 5 ),
57+ 	},
58+ 	{
59+ 		name :     "null" ,
60+ 		val :      Null {},
61+ 		bsontype : TypeNull ,
62+ 		bytes :    []byte {},
63+ 	},
64+ 	{
65+ 		name :     "regex" ,
66+ 		val :      Regex {Pattern : "pattern" , Options : "imx" },
67+ 		bsontype : TypeRegex ,
68+ 		bytes :    bsoncore .AppendRegex (nil , "pattern" , "imx" ),
69+ 	},
70+ 	{
71+ 		name : "dbpointer" ,
72+ 		val : DBPointer {
73+ 			DB :      "db" ,
74+ 			Pointer : ObjectID {103 , 116 , 166 , 161 , 70 , 33 , 67 , 139 , 164 , 144 , 255 , 112 },
75+ 		},
76+ 		bsontype : TypeDBPointer ,
77+ 		bytes : bsoncore .AppendDBPointer (
78+ 			nil ,
79+ 			"db" ,
80+ 			ObjectID {103 , 116 , 166 , 161 , 70 , 33 , 67 , 139 , 164 , 144 , 255 , 112 },
81+ 		),
82+ 	},
83+ 	{
84+ 		name :     "javascript" ,
85+ 		val :      JavaScript ("js" ),
86+ 		bsontype : TypeJavaScript ,
87+ 		bytes :    bsoncore .AppendJavaScript (nil , "js" ),
88+ 	},
89+ 	{
90+ 		name :     "symbol" ,
91+ 		val :      Symbol ("symbol" ),
92+ 		bsontype : TypeSymbol ,
93+ 		bytes :    bsoncore .AppendSymbol (nil , "symbol" ),
94+ 	},
95+ 	{
96+ 		name :     "code with scope" ,
97+ 		val :      CodeWithScope {Code : "code" , Scope : D {{"a" , "b" }}},
98+ 		bsontype : TypeCodeWithScope ,
99+ 		bytes : bsoncore .AppendCodeWithScope (
100+ 			nil ,
101+ 			"code" ,
102+ 			bsoncore .NewDocumentBuilder ().
103+ 				AppendString ("a" , "b" ).
104+ 				Build ()),
105+ 	},
106+ 	{
107+ 		name :     "int32" ,
108+ 		val :      5 ,
109+ 		bsontype : TypeInt32 ,
110+ 		bytes :    bsoncore .AppendInt32 (nil , 5 ),
111+ 	},
112+ 	{
113+ 		name :     "int64" ,
114+ 		val :      int64 (5 ),
115+ 		bsontype : TypeInt64 ,
116+ 		bytes :    bsoncore .AppendInt64 (nil , 5 ),
117+ 	},
118+ 	{
119+ 		name :     "timestamp" ,
120+ 		val :      Timestamp {T : 1 , I : 5 },
121+ 		bsontype : TypeTimestamp ,
122+ 		bytes :    bsoncore .AppendTimestamp (nil , 1 , 5 ),
123+ 	},
124+ 	{
125+ 		name :     "decimal128" ,
126+ 		val :      NewDecimal128 (5 , 10 ),
127+ 		bsontype : TypeDecimal128 ,
128+ 		bytes :    bsoncore .AppendDecimal128 (nil , 5 , 10 ),
129+ 	},
130+ 	{
131+ 		name :     "min key" ,
132+ 		val :      MinKey {},
133+ 		bsontype : TypeMinKey ,
134+ 		bytes :    []byte {},
135+ 	},
136+ 	{
137+ 		name :     "max key" ,
138+ 		val :      MaxKey {},
139+ 		bsontype : TypeMaxKey ,
140+ 		bytes :    []byte {},
141+ 	},
142+ 	{
143+ 		name :     "struct" ,
144+ 		val :      marshalValueStruct {Foo : 10 },
145+ 		bsontype : TypeEmbeddedDocument ,
146+ 		bytes : bsoncore .NewDocumentBuilder ().
147+ 			AppendInt32 ("foo" , 10 ).
148+ 			Build (),
149+ 	},
150+ 	{
151+ 		name :     "D" ,
152+ 		val :      D {{"foo" , int32 (10 )}},
153+ 		bsontype : TypeEmbeddedDocument ,
154+ 		bytes : bsoncore .NewDocumentBuilder ().
155+ 			AppendInt32 ("foo" , 10 ).
156+ 			Build (),
157+ 	},
158+ 	{
159+ 		name :     "M" ,
160+ 		val :      M {"foo" : int32 (10 )},
161+ 		bsontype : TypeEmbeddedDocument ,
162+ 		bytes : bsoncore .NewDocumentBuilder ().
163+ 			AppendInt32 ("foo" , 10 ).
164+ 			Build (),
165+ 	},
166+ 	{
167+ 		name :     "ValueMarshaler" ,
168+ 		val :      marshalValueMarshaler {Foo : 10 },
169+ 		bsontype : TypeInt32 ,
170+ 		bytes :    bsoncore .AppendInt32 (nil , 10 ),
171+ 	},
172+ }
173+ 
17174// helper type for testing MarshalValue that implements io.Reader 
18175type  marshalValueInterfaceInner  struct  {
19176	Foo  int 
@@ -59,70 +216,3 @@ type marshalValueTestCase struct {
59216	bsontype  Type 
60217	bytes     []byte 
61218}
62- 
63- func  newMarshalValueTestCases (t  * testing.T ) []marshalValueTestCase  {
64- 	t .Helper ()
65- 
66- 	var  (
67- 		oid                       =  NewObjectID ()
68- 		regex                     =  Regex {Pattern : "pattern" , Options : "imx" }
69- 		dbPointer                 =  DBPointer {DB : "db" , Pointer : NewObjectID ()}
70- 		codeWithScope             =  CodeWithScope {Code : "code" , Scope : D {{"a" , "b" }}}
71- 		decimal128h , decimal128l  =  NewDecimal128 (5 , 10 ).GetBytes ()
72- 		structTest                =  marshalValueStruct {Foo : 10 }
73- 	)
74- 	idx , scopeCore  :=  bsoncore .AppendDocumentStart (nil )
75- 	scopeCore  =  bsoncore .AppendStringElement (scopeCore , "a" , "b" )
76- 	scopeCore , err  :=  bsoncore .AppendDocumentEnd (scopeCore , idx )
77- 	assert .Nil (t , err , "Document error: %v" , err )
78- 	structCore , err  :=  Marshal (structTest )
79- 	assert .Nil (t , err , "Marshal error: %v" , err )
80- 
81- 	return  []marshalValueTestCase {
82- 		{"double" , 3.14 , TypeDouble , bsoncore .AppendDouble (nil , 3.14 )},
83- 		{"string" , "hello world" , TypeString , bsoncore .AppendString (nil , "hello world" )},
84- 		{"binary" , Binary {1 , []byte {1 , 2 }}, TypeBinary , bsoncore .AppendBinary (nil , 1 , []byte {1 , 2 })},
85- 		{"undefined" , Undefined {}, TypeUndefined , []byte {}},
86- 		{"object id" , oid , TypeObjectID , bsoncore .AppendObjectID (nil , oid )},
87- 		{"boolean" , true , TypeBoolean , bsoncore .AppendBoolean (nil , true )},
88- 		{"datetime" , DateTime (5 ), TypeDateTime , bsoncore .AppendDateTime (nil , 5 )},
89- 		{"null" , Null {}, TypeNull , []byte {}},
90- 		{"regex" , regex , TypeRegex , bsoncore .AppendRegex (nil , regex .Pattern , regex .Options )},
91- 		{"dbpointer" , dbPointer , TypeDBPointer , bsoncore .AppendDBPointer (nil , dbPointer .DB , dbPointer .Pointer )},
92- 		{"javascript" , JavaScript ("js" ), TypeJavaScript , bsoncore .AppendJavaScript (nil , "js" )},
93- 		{"symbol" , Symbol ("symbol" ), TypeSymbol , bsoncore .AppendSymbol (nil , "symbol" )},
94- 		{"code with scope" , codeWithScope , TypeCodeWithScope , bsoncore .AppendCodeWithScope (nil , "code" , scopeCore )},
95- 		{"int32" , 5 , TypeInt32 , bsoncore .AppendInt32 (nil , 5 )},
96- 		{"int64" , int64 (5 ), TypeInt64 , bsoncore .AppendInt64 (nil , 5 )},
97- 		{"timestamp" , Timestamp {T : 1 , I : 5 }, TypeTimestamp , bsoncore .AppendTimestamp (nil , 1 , 5 )},
98- 		{"decimal128" , NewDecimal128 (decimal128h , decimal128l ), TypeDecimal128 , bsoncore .AppendDecimal128 (nil , decimal128h , decimal128l )},
99- 		{"min key" , MinKey {}, TypeMinKey , []byte {}},
100- 		{"max key" , MaxKey {}, TypeMaxKey , []byte {}},
101- 		{"struct" , structTest , TypeEmbeddedDocument , structCore },
102- 		{"D" , D {{"foo" , int32 (10 )}}, TypeEmbeddedDocument , structCore },
103- 		{"M" , M {"foo" : int32 (10 )}, TypeEmbeddedDocument , structCore },
104- 		{"ValueMarshaler" , marshalValueMarshaler {Foo : 10 }, TypeInt32 , bsoncore .AppendInt32 (nil , 10 )},
105- 	}
106- 
107- }
108- 
109- func  newMarshalValueTestCasesWithInterfaceCore (t  * testing.T ) []marshalValueTestCase  {
110- 	t .Helper ()
111- 
112- 	marshalValueTestCases  :=  newMarshalValueTestCases (t )
113- 
114- 	interfaceTest  :=  marshalValueInterfaceOuter {
115- 		Reader : marshalValueInterfaceInner {
116- 			Foo : 10 ,
117- 		},
118- 	}
119- 	interfaceCore , err  :=  Marshal (interfaceTest )
120- 	assert .Nil (t , err , "Marshal error: %v" , err )
121- 
122- 	marshalValueTestCases  =  append (
123- 		marshalValueTestCases ,
124- 		marshalValueTestCase {"interface" , interfaceTest , TypeEmbeddedDocument , interfaceCore },
125- 	)
126- 
127- 	return  marshalValueTestCases 
128- }
0 commit comments