Skip to content

Commit fd36f13

Browse files
committed
Sync from Piper @320514613
PROTOBUF_SYNC_PIPER
2 parents 9097b5d + 4904403 commit fd36f13

6 files changed

Lines changed: 238 additions & 149 deletions

File tree

gulpfile.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,16 @@ gulp.task('genproto_group1_closure', function (cb) {
7171
});
7272
});
7373

74-
gulp.task('genproto_group2_closure', function (cb) {
75-
exec(protoc + ' --js_out=library=testproto_libs2,binary:. -I ../src -I . -I commonjs ' + group2Protos.join(' '),
76-
function (err, stdout, stderr) {
77-
console.log(stdout);
78-
console.log(stderr);
79-
cb(err);
80-
});
74+
gulp.task('genproto_group2_closure', function(cb) {
75+
exec(
76+
protoc +
77+
' --experimental_allow_proto3_optional --js_out=library=testproto_libs2,binary:. -I ../src -I . -I commonjs ' +
78+
group2Protos.join(' '),
79+
function(err, stdout, stderr) {
80+
console.log(stdout);
81+
console.log(stderr);
82+
cb(err);
83+
});
8184
});
8285

8386
gulp.task('genproto_well_known_types_commonjs', function (cb) {
@@ -98,13 +101,16 @@ gulp.task('genproto_group1_commonjs', function (cb) {
98101
});
99102
});
100103

101-
gulp.task('genproto_group2_commonjs', function (cb) {
102-
exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . ' + group2Protos.join(' '),
103-
function (err, stdout, stderr) {
104-
console.log(stdout);
105-
console.log(stderr);
106-
cb(err);
107-
});
104+
gulp.task('genproto_group2_commonjs', function(cb) {
105+
exec(
106+
'mkdir -p commonjs_out && ' + protoc +
107+
' --experimental_allow_proto3_optional --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . ' +
108+
group2Protos.join(' '),
109+
function(err, stdout, stderr) {
110+
console.log(stdout);
111+
console.log(stderr);
112+
cb(err);
113+
});
108114
});
109115

110116
gulp.task('genproto_commonjs_wellknowntypes', function (cb) {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "google-protobuf",
3-
"version": "3.12.2",
3+
"version": "3.12.3",
44
"description": "Protocol Buffers for JavaScript",
55
"main": "google-protobuf.js",
66
"files": [

proto3_test.js

Lines changed: 149 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)