@@ -77,7 +77,7 @@ describe('proto3Test', function() {
7777 it ( 'testEqualsProto3' , function ( ) {
7878 var msg1 = new proto . jspb . test . TestProto3 ( ) ;
7979 var msg2 = new proto . jspb . test . TestProto3 ( ) ;
80- msg2 . setOptionalString ( '' ) ;
80+ msg2 . setSingularString ( '' ) ;
8181
8282 assertTrue ( jspb . Message . equals ( msg1 , msg2 ) ) ;
8383 } ) ;
@@ -90,12 +90,12 @@ describe('proto3Test', function() {
9090 var msg = new proto . jspb . test . TestProto3 ( ) ;
9191
9292 // Setting should work normally.
93- msg . setOptionalString ( 'optionalString' ) ;
94- assertEquals ( msg . getOptionalString ( ) , 'optionalString' ) ;
93+ msg . setSingularString ( 'optionalString' ) ;
94+ assertEquals ( msg . getSingularString ( ) , 'optionalString' ) ;
9595
9696 // Clearing should work too ...
97- msg . setOptionalString ( '' ) ;
98- assertEquals ( msg . getOptionalString ( ) , '' ) ;
97+ msg . setSingularString ( '' ) ;
98+ assertEquals ( msg . getSingularString ( ) , '' ) ;
9999
100100 // ... and shouldn't affect the equality with a brand new message.
101101 assertTrue ( jspb . Message . equals ( msg , new proto . jspb . test . TestProto3 ( ) ) ) ;
@@ -107,6 +107,58 @@ describe('proto3Test', function() {
107107 it ( 'testProto3FieldDefaults' , function ( ) {
108108 var msg = new proto . jspb . test . TestProto3 ( ) ;
109109
110+ assertEquals ( msg . getSingularInt32 ( ) , 0 ) ;
111+ assertEquals ( msg . getSingularInt64 ( ) , 0 ) ;
112+ assertEquals ( msg . getSingularUint32 ( ) , 0 ) ;
113+ assertEquals ( msg . getSingularUint64 ( ) , 0 ) ;
114+ assertEquals ( msg . getSingularSint32 ( ) , 0 ) ;
115+ assertEquals ( msg . getSingularSint64 ( ) , 0 ) ;
116+ assertEquals ( msg . getSingularFixed32 ( ) , 0 ) ;
117+ assertEquals ( msg . getSingularFixed64 ( ) , 0 ) ;
118+ assertEquals ( msg . getSingularSfixed32 ( ) , 0 ) ;
119+ assertEquals ( msg . getSingularSfixed64 ( ) , 0 ) ;
120+ assertEquals ( msg . getSingularFloat ( ) , 0 ) ;
121+ assertEquals ( msg . getSingularDouble ( ) , 0 ) ;
122+ assertEquals ( msg . getSingularString ( ) , '' ) ;
123+
124+ // TODO(b/26173701): when we change bytes fields default getter to return
125+ // Uint8Array, we'll want to switch this assertion to match the u8 case.
126+ assertEquals ( typeof msg . getSingularBytes ( ) , 'string' ) ;
127+ assertEquals ( msg . getSingularBytes_asU8 ( ) instanceof Uint8Array , true ) ;
128+ assertEquals ( typeof msg . getSingularBytes_asB64 ( ) , 'string' ) ;
129+ assertEquals ( msg . getSingularBytes ( ) . length , 0 ) ;
130+ assertEquals ( msg . getSingularBytes_asU8 ( ) . length , 0 ) ;
131+ assertEquals ( msg . getSingularBytes_asB64 ( ) , '' ) ;
132+
133+ assertEquals (
134+ msg . getSingularForeignEnum ( ) , proto . jspb . test . Proto3Enum . PROTO3_FOO ) ;
135+ assertEquals ( msg . getSingularForeignMessage ( ) , undefined ) ;
136+ assertEquals ( msg . getSingularForeignMessage ( ) , undefined ) ;
137+
138+ assertEquals ( msg . getRepeatedInt32List ( ) . length , 0 ) ;
139+ assertEquals ( msg . getRepeatedInt64List ( ) . length , 0 ) ;
140+ assertEquals ( msg . getRepeatedUint32List ( ) . length , 0 ) ;
141+ assertEquals ( msg . getRepeatedUint64List ( ) . length , 0 ) ;
142+ assertEquals ( msg . getRepeatedSint32List ( ) . length , 0 ) ;
143+ assertEquals ( msg . getRepeatedSint64List ( ) . length , 0 ) ;
144+ assertEquals ( msg . getRepeatedFixed32List ( ) . length , 0 ) ;
145+ assertEquals ( msg . getRepeatedFixed64List ( ) . length , 0 ) ;
146+ assertEquals ( msg . getRepeatedSfixed32List ( ) . length , 0 ) ;
147+ assertEquals ( msg . getRepeatedSfixed64List ( ) . length , 0 ) ;
148+ assertEquals ( msg . getRepeatedFloatList ( ) . length , 0 ) ;
149+ assertEquals ( msg . getRepeatedDoubleList ( ) . length , 0 ) ;
150+ assertEquals ( msg . getRepeatedStringList ( ) . length , 0 ) ;
151+ assertEquals ( msg . getRepeatedBytesList ( ) . length , 0 ) ;
152+ assertEquals ( msg . getRepeatedForeignEnumList ( ) . length , 0 ) ;
153+ assertEquals ( msg . getRepeatedForeignMessageList ( ) . length , 0 ) ;
154+ } ) ;
155+
156+ /**
157+ * Test presence for proto3 optional fields.
158+ */
159+ it ( 'testProto3Optional' , function ( ) {
160+ var msg = new proto . jspb . test . TestProto3 ( ) ;
161+
110162 assertEquals ( msg . getOptionalInt32 ( ) , 0 ) ;
111163 assertEquals ( msg . getOptionalInt64 ( ) , 0 ) ;
112164 assertEquals ( msg . getOptionalUint32 ( ) , 0 ) ;
@@ -135,51 +187,65 @@ describe('proto3Test', function() {
135187 assertEquals ( msg . getOptionalForeignMessage ( ) , undefined ) ;
136188 assertEquals ( msg . getOptionalForeignMessage ( ) , undefined ) ;
137189
138- assertEquals ( msg . getRepeatedInt32List ( ) . length , 0 ) ;
139- assertEquals ( msg . getRepeatedInt64List ( ) . length , 0 ) ;
140- assertEquals ( msg . getRepeatedUint32List ( ) . length , 0 ) ;
141- assertEquals ( msg . getRepeatedUint64List ( ) . length , 0 ) ;
142- assertEquals ( msg . getRepeatedSint32List ( ) . length , 0 ) ;
143- assertEquals ( msg . getRepeatedSint64List ( ) . length , 0 ) ;
144- assertEquals ( msg . getRepeatedFixed32List ( ) . length , 0 ) ;
145- assertEquals ( msg . getRepeatedFixed64List ( ) . length , 0 ) ;
146- assertEquals ( msg . getRepeatedSfixed32List ( ) . length , 0 ) ;
147- assertEquals ( msg . getRepeatedSfixed64List ( ) . length , 0 ) ;
148- assertEquals ( msg . getRepeatedFloatList ( ) . length , 0 ) ;
149- assertEquals ( msg . getRepeatedDoubleList ( ) . length , 0 ) ;
150- assertEquals ( msg . getRepeatedStringList ( ) . length , 0 ) ;
151- assertEquals ( msg . getRepeatedBytesList ( ) . length , 0 ) ;
152- assertEquals ( msg . getRepeatedForeignEnumList ( ) . length , 0 ) ;
153- assertEquals ( msg . getRepeatedForeignMessageList ( ) . length , 0 ) ;
190+ // Serializing an empty proto yields the empty string.
191+ assertEquals ( msg . serializeBinary ( ) . length , 0 ) ;
154192
155- } ) ;
193+ // Values start as unset, but can be explicitly set even to default values
194+ // like 0.
195+ assertFalse ( msg . hasOptionalInt32 ( ) ) ;
196+ msg . setOptionalInt32 ( 0 ) ;
197+ assertTrue ( msg . hasOptionalInt32 ( ) ) ;
198+
199+ assertFalse ( msg . hasOptionalInt64 ( ) ) ;
200+ msg . setOptionalInt64 ( 0 ) ;
201+ assertTrue ( msg . hasOptionalInt64 ( ) ) ;
202+
203+ assertFalse ( msg . hasOptionalString ( ) ) ;
204+ msg . setOptionalString ( '' ) ;
205+ assertTrue ( msg . hasOptionalString ( ) ) ;
206+
207+ // Now the proto will have a non-zero size, even though its values are 0.
208+ var serialized = msg . serializeBinary ( ) ;
209+ assertNotEquals ( serialized . length , 0 ) ;
210+
211+ var msg2 = proto . jspb . test . TestProto3 . deserializeBinary ( serialized ) ;
212+ assertTrue ( msg2 . hasOptionalInt32 ( ) ) ;
213+ assertTrue ( msg2 . hasOptionalInt64 ( ) ) ;
214+ assertTrue ( msg2 . hasOptionalString ( ) ) ;
156215
216+ // We can clear fields to go back to empty.
217+ msg2 . clearOptionalInt32 ( ) ;
218+ assertFalse ( msg2 . hasOptionalInt32 ( ) ) ;
219+
220+ msg2 . clearOptionalString ( ) ;
221+ assertFalse ( msg2 . hasOptionalString ( ) ) ;
222+ } ) ;
157223
158224 /**
159- * Test that all fields can be set and read via a serialization roundtrip.
225+ * Test that all fields can be set , and read via a serialization roundtrip.
160226 */
161227 it ( 'testProto3FieldSetGet' , function ( ) {
162228 var msg = new proto . jspb . test . TestProto3 ( ) ;
163229
164- msg . setOptionalInt32 ( - 42 ) ;
165- msg . setOptionalInt64 ( - 0x7fffffff00000000 ) ;
166- msg . setOptionalUint32 ( 0x80000000 ) ;
167- msg . setOptionalUint64 ( 0xf000000000000000 ) ;
168- msg . setOptionalSint32 ( - 100 ) ;
169- msg . setOptionalSint64 ( - 0x8000000000000000 ) ;
170- msg . setOptionalFixed32 ( 1234 ) ;
171- msg . setOptionalFixed64 ( 0x1234567800000000 ) ;
172- msg . setOptionalSfixed32 ( - 1234 ) ;
173- msg . setOptionalSfixed64 ( - 0x1234567800000000 ) ;
174- msg . setOptionalFloat ( 1.5 ) ;
175- msg . setOptionalDouble ( - 1.5 ) ;
176- msg . setOptionalBool ( true ) ;
177- msg . setOptionalString ( 'hello world' ) ;
178- msg . setOptionalBytes ( BYTES ) ;
230+ msg . setSingularInt32 ( - 42 ) ;
231+ msg . setSingularInt64 ( - 0x7fffffff00000000 ) ;
232+ msg . setSingularUint32 ( 0x80000000 ) ;
233+ msg . setSingularUint64 ( 0xf000000000000000 ) ;
234+ msg . setSingularSint32 ( - 100 ) ;
235+ msg . setSingularSint64 ( - 0x8000000000000000 ) ;
236+ msg . setSingularFixed32 ( 1234 ) ;
237+ msg . setSingularFixed64 ( 0x1234567800000000 ) ;
238+ msg . setSingularSfixed32 ( - 1234 ) ;
239+ msg . setSingularSfixed64 ( - 0x1234567800000000 ) ;
240+ msg . setSingularFloat ( 1.5 ) ;
241+ msg . setSingularDouble ( - 1.5 ) ;
242+ msg . setSingularBool ( true ) ;
243+ msg . setSingularString ( 'hello world' ) ;
244+ msg . setSingularBytes ( BYTES ) ;
179245 var submsg = new proto . jspb . test . ForeignMessage ( ) ;
180246 submsg . setC ( 16 ) ;
181- msg . setOptionalForeignMessage ( submsg ) ;
182- msg . setOptionalForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
247+ msg . setSingularForeignMessage ( submsg ) ;
248+ msg . setSingularForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
183249
184250 msg . setRepeatedInt32List ( [ - 42 ] ) ;
185251 msg . setRepeatedInt64List ( [ - 0x7fffffff00000000 ] ) ;
@@ -206,24 +272,24 @@ describe('proto3Test', function() {
206272 var serialized = msg . serializeBinary ( ) ;
207273 msg = proto . jspb . test . TestProto3 . deserializeBinary ( serialized ) ;
208274
209- assertEquals ( msg . getOptionalInt32 ( ) , - 42 ) ;
210- assertEquals ( msg . getOptionalInt64 ( ) , - 0x7fffffff00000000 ) ;
211- assertEquals ( msg . getOptionalUint32 ( ) , 0x80000000 ) ;
212- assertEquals ( msg . getOptionalUint64 ( ) , 0xf000000000000000 ) ;
213- assertEquals ( msg . getOptionalSint32 ( ) , - 100 ) ;
214- assertEquals ( msg . getOptionalSint64 ( ) , - 0x8000000000000000 ) ;
215- assertEquals ( msg . getOptionalFixed32 ( ) , 1234 ) ;
216- assertEquals ( msg . getOptionalFixed64 ( ) , 0x1234567800000000 ) ;
217- assertEquals ( msg . getOptionalSfixed32 ( ) , - 1234 ) ;
218- assertEquals ( msg . getOptionalSfixed64 ( ) , - 0x1234567800000000 ) ;
219- assertEquals ( msg . getOptionalFloat ( ) , 1.5 ) ;
220- assertEquals ( msg . getOptionalDouble ( ) , - 1.5 ) ;
221- assertEquals ( msg . getOptionalBool ( ) , true ) ;
222- assertEquals ( msg . getOptionalString ( ) , 'hello world' ) ;
223- assertEquals ( true , bytesCompare ( msg . getOptionalBytes ( ) , BYTES ) ) ;
224- assertEquals ( msg . getOptionalForeignMessage ( ) . getC ( ) , 16 ) ;
225- assertEquals ( msg . getOptionalForeignEnum ( ) ,
226- proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
275+ assertEquals ( msg . getSingularInt32 ( ) , - 42 ) ;
276+ assertEquals ( msg . getSingularInt64 ( ) , - 0x7fffffff00000000 ) ;
277+ assertEquals ( msg . getSingularUint32 ( ) , 0x80000000 ) ;
278+ assertEquals ( msg . getSingularUint64 ( ) , 0xf000000000000000 ) ;
279+ assertEquals ( msg . getSingularSint32 ( ) , - 100 ) ;
280+ assertEquals ( msg . getSingularSint64 ( ) , - 0x8000000000000000 ) ;
281+ assertEquals ( msg . getSingularFixed32 ( ) , 1234 ) ;
282+ assertEquals ( msg . getSingularFixed64 ( ) , 0x1234567800000000 ) ;
283+ assertEquals ( msg . getSingularSfixed32 ( ) , - 1234 ) ;
284+ assertEquals ( msg . getSingularSfixed64 ( ) , - 0x1234567800000000 ) ;
285+ assertEquals ( msg . getSingularFloat ( ) , 1.5 ) ;
286+ assertEquals ( msg . getSingularDouble ( ) , - 1.5 ) ;
287+ assertEquals ( msg . getSingularBool ( ) , true ) ;
288+ assertEquals ( msg . getSingularString ( ) , 'hello world' ) ;
289+ assertEquals ( true , bytesCompare ( msg . getSingularBytes ( ) , BYTES ) ) ;
290+ assertEquals ( msg . getSingularForeignMessage ( ) . getC ( ) , 16 ) ;
291+ assertEquals (
292+ msg . getSingularForeignEnum ( ) , proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
227293
228294 assertElementsEquals ( msg . getRepeatedInt32List ( ) , [ - 42 ] ) ;
229295 assertElementsEquals ( msg . getRepeatedInt64List ( ) , [ - 0x7fffffff00000000 ] ) ;
@@ -327,20 +393,20 @@ describe('proto3Test', function() {
327393 // Set each primitive to a non-default value, then back to its default, to
328394 // ensure that the serialization is actually checking the value and not just
329395 // whether it has ever been set.
330- msg . setOptionalInt32 ( 42 ) ;
331- msg . setOptionalInt32 ( 0 ) ;
332- msg . setOptionalDouble ( 3.14 ) ;
333- msg . setOptionalDouble ( 0.0 ) ;
334- msg . setOptionalBool ( true ) ;
335- msg . setOptionalBool ( false ) ;
336- msg . setOptionalString ( 'hello world' ) ;
337- msg . setOptionalString ( '' ) ;
338- msg . setOptionalBytes ( goog . crypt . base64 . encodeString ( '\u00FF\u00FF' ) ) ;
339- msg . setOptionalBytes ( '' ) ;
340- msg . setOptionalForeignMessage ( new proto . jspb . test . ForeignMessage ( ) ) ;
341- msg . setOptionalForeignMessage ( null ) ;
342- msg . setOptionalForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
343- msg . setOptionalForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_FOO ) ;
396+ msg . setSingularInt32 ( 42 ) ;
397+ msg . setSingularInt32 ( 0 ) ;
398+ msg . setSingularDouble ( 3.14 ) ;
399+ msg . setSingularDouble ( 0.0 ) ;
400+ msg . setSingularBool ( true ) ;
401+ msg . setSingularBool ( false ) ;
402+ msg . setSingularString ( 'hello world' ) ;
403+ msg . setSingularString ( '' ) ;
404+ msg . setSingularBytes ( goog . crypt . base64 . encodeString ( '\u00FF\u00FF' ) ) ;
405+ msg . setSingularBytes ( '' ) ;
406+ msg . setSingularForeignMessage ( new proto . jspb . test . ForeignMessage ( ) ) ;
407+ msg . setSingularForeignMessage ( null ) ;
408+ msg . setSingularForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_BAR ) ;
409+ msg . setSingularForeignEnum ( proto . jspb . test . Proto3Enum . PROTO3_FOO ) ;
344410 msg . setOneofUint32 ( 32 ) ;
345411 msg . clearOneofUint32 ( ) ;
346412
@@ -355,27 +421,25 @@ describe('proto3Test', function() {
355421 it ( 'testBytesFieldsInterop' , function ( ) {
356422 var msg = new proto . jspb . test . TestProto3 ( ) ;
357423 // Set as a base64 string and check all the getters work.
358- msg . setOptionalBytes ( BYTES_B64 ) ;
359- assertTrue ( bytesCompare ( msg . getOptionalBytes_asU8 ( ) , BYTES ) ) ;
360- assertTrue ( bytesCompare ( msg . getOptionalBytes_asB64 ( ) , BYTES ) ) ;
361- assertTrue ( bytesCompare ( msg . getOptionalBytes ( ) , BYTES ) ) ;
424+ msg . setSingularBytes ( BYTES_B64 ) ;
425+ assertTrue ( bytesCompare ( msg . getSingularBytes_asU8 ( ) , BYTES ) ) ;
426+ assertTrue ( bytesCompare ( msg . getSingularBytes_asB64 ( ) , BYTES ) ) ;
427+ assertTrue ( bytesCompare ( msg . getSingularBytes ( ) , BYTES ) ) ;
362428
363429 // Test binary serialize round trip doesn't break it.
364430 msg = proto . jspb . test . TestProto3 . deserializeBinary ( msg . serializeBinary ( ) ) ;
365- assertTrue ( bytesCompare ( msg . getOptionalBytes_asU8 ( ) , BYTES ) ) ;
366- assertTrue ( bytesCompare ( msg . getOptionalBytes_asB64 ( ) , BYTES ) ) ;
367- assertTrue ( bytesCompare ( msg . getOptionalBytes ( ) , BYTES ) ) ;
431+ assertTrue ( bytesCompare ( msg . getSingularBytes_asU8 ( ) , BYTES ) ) ;
432+ assertTrue ( bytesCompare ( msg . getSingularBytes_asB64 ( ) , BYTES ) ) ;
433+ assertTrue ( bytesCompare ( msg . getSingularBytes ( ) , BYTES ) ) ;
368434
369435 msg = new proto . jspb . test . TestProto3 ( ) ;
370436 // Set as a Uint8Array and check all the getters work.
371- msg . setOptionalBytes ( BYTES ) ;
372- assertTrue ( bytesCompare ( msg . getOptionalBytes_asU8 ( ) , BYTES ) ) ;
373- assertTrue ( bytesCompare ( msg . getOptionalBytes_asB64 ( ) , BYTES ) ) ;
374- assertTrue ( bytesCompare ( msg . getOptionalBytes ( ) , BYTES ) ) ;
375-
437+ msg . setSingularBytes ( BYTES ) ;
438+ assertTrue ( bytesCompare ( msg . getSingularBytes_asU8 ( ) , BYTES ) ) ;
439+ assertTrue ( bytesCompare ( msg . getSingularBytes_asB64 ( ) , BYTES ) ) ;
440+ assertTrue ( bytesCompare ( msg . getSingularBytes ( ) , BYTES ) ) ;
376441 } ) ;
377442
378-
379443 it ( 'testTimestampWellKnownType' , function ( ) {
380444 var msg = new proto . google . protobuf . Timestamp ( ) ;
381445 msg . fromDate ( new Date ( 123456789 ) ) ;
0 commit comments