1ffe3c632Sopenharmony_ci// Protocol Buffers - Google's data interchange format 2ffe3c632Sopenharmony_ci// Copyright 2008 Google Inc. All rights reserved. 3ffe3c632Sopenharmony_ci// https://developers.google.com/protocol-buffers/ 4ffe3c632Sopenharmony_ci// 5ffe3c632Sopenharmony_ci// Redistribution and use in source and binary forms, with or without 6ffe3c632Sopenharmony_ci// modification, are permitted provided that the following conditions are 7ffe3c632Sopenharmony_ci// met: 8ffe3c632Sopenharmony_ci// 9ffe3c632Sopenharmony_ci// * Redistributions of source code must retain the above copyright 10ffe3c632Sopenharmony_ci// notice, this list of conditions and the following disclaimer. 11ffe3c632Sopenharmony_ci// * Redistributions in binary form must reproduce the above 12ffe3c632Sopenharmony_ci// copyright notice, this list of conditions and the following disclaimer 13ffe3c632Sopenharmony_ci// in the documentation and/or other materials provided with the 14ffe3c632Sopenharmony_ci// distribution. 15ffe3c632Sopenharmony_ci// * Neither the name of Google Inc. nor the names of its 16ffe3c632Sopenharmony_ci// contributors may be used to endorse or promote products derived from 17ffe3c632Sopenharmony_ci// this software without specific prior written permission. 18ffe3c632Sopenharmony_ci// 19ffe3c632Sopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20ffe3c632Sopenharmony_ci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21ffe3c632Sopenharmony_ci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22ffe3c632Sopenharmony_ci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23ffe3c632Sopenharmony_ci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24ffe3c632Sopenharmony_ci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25ffe3c632Sopenharmony_ci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26ffe3c632Sopenharmony_ci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27ffe3c632Sopenharmony_ci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28ffe3c632Sopenharmony_ci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29ffe3c632Sopenharmony_ci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30ffe3c632Sopenharmony_ci 31ffe3c632Sopenharmony_ci// Test suite is written using Jasmine -- see http://jasmine.github.io/ 32ffe3c632Sopenharmony_ci 33ffe3c632Sopenharmony_cigoog.setTestOnly(); 34ffe3c632Sopenharmony_ci 35ffe3c632Sopenharmony_cigoog.require('goog.json'); 36ffe3c632Sopenharmony_cigoog.require('goog.testing.asserts'); 37ffe3c632Sopenharmony_cigoog.require('goog.userAgent'); 38ffe3c632Sopenharmony_ci 39ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: google-protobuf jspb 40ffe3c632Sopenharmony_cigoog.require('jspb.Message'); 41ffe3c632Sopenharmony_ci 42ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: test5_pb proto.jspb.exttest.beta 43ffe3c632Sopenharmony_cigoog.require('proto.jspb.exttest.beta.floatingStrField'); 44ffe3c632Sopenharmony_ci 45ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: test3_pb proto.jspb.exttest 46ffe3c632Sopenharmony_cigoog.require('proto.jspb.exttest.floatingMsgField'); 47ffe3c632Sopenharmony_ci 48ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: test4_pb proto.jspb.exttest 49ffe3c632Sopenharmony_cigoog.require('proto.jspb.exttest.floatingMsgFieldTwo'); 50ffe3c632Sopenharmony_ci 51ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: test_pb proto.jspb.test 52ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.CloneExtension'); 53ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.Complex'); 54ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.DefaultValues'); 55ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.Empty'); 56ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.EnumContainer'); 57ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.floatingMsgField'); 58ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.FloatingPointFields'); 59ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.floatingStrField'); 60ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.HasExtensions'); 61ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.IndirectExtension'); 62ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.IsExtension'); 63ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.OptionalFields'); 64ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.OuterEnum'); 65ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.OuterMessage.Complex'); 66ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.Simple1'); 67ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.Simple2'); 68ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.SpecialCases'); 69ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestClone'); 70ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestEndsWithBytes'); 71ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestGroup'); 72ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestGroup1'); 73ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestMessageWithOneof'); 74ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestReservedNames'); 75ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestReservedNamesExtension'); 76ffe3c632Sopenharmony_ci 77ffe3c632Sopenharmony_ci// CommonJS-LoadFromFile: test2_pb proto.jspb.test 78ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.ExtensionMessage'); 79ffe3c632Sopenharmony_cigoog.require('proto.jspb.test.TestExtensionsMessage'); 80ffe3c632Sopenharmony_ci 81ffe3c632Sopenharmony_ci 82ffe3c632Sopenharmony_ci 83ffe3c632Sopenharmony_ci 84ffe3c632Sopenharmony_cidescribe('Message test suite', function() { 85ffe3c632Sopenharmony_ci it('testEmptyProto', function() { 86ffe3c632Sopenharmony_ci var empty1 = new proto.jspb.test.Empty([]); 87ffe3c632Sopenharmony_ci var empty2 = new proto.jspb.test.Empty([]); 88ffe3c632Sopenharmony_ci assertObjectEquals({}, empty1.toObject()); 89ffe3c632Sopenharmony_ci assertObjectEquals('Message should not be corrupted:', empty2, empty1); 90ffe3c632Sopenharmony_ci }); 91ffe3c632Sopenharmony_ci 92ffe3c632Sopenharmony_ci it('testTopLevelEnum', function() { 93ffe3c632Sopenharmony_ci var response = new proto.jspb.test.EnumContainer([]); 94ffe3c632Sopenharmony_ci response.setOuterEnum(proto.jspb.test.OuterEnum.FOO); 95ffe3c632Sopenharmony_ci assertEquals(proto.jspb.test.OuterEnum.FOO, response.getOuterEnum()); 96ffe3c632Sopenharmony_ci }); 97ffe3c632Sopenharmony_ci 98ffe3c632Sopenharmony_ci it('testByteStrings', function() { 99ffe3c632Sopenharmony_ci var data = new proto.jspb.test.DefaultValues([]); 100ffe3c632Sopenharmony_ci data.setBytesField('some_bytes'); 101ffe3c632Sopenharmony_ci assertEquals('some_bytes', data.getBytesField()); 102ffe3c632Sopenharmony_ci }); 103ffe3c632Sopenharmony_ci 104ffe3c632Sopenharmony_ci it('testComplexConversion', function() { 105ffe3c632Sopenharmony_ci var data1 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; 106ffe3c632Sopenharmony_ci var data2 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; 107ffe3c632Sopenharmony_ci var foo = new proto.jspb.test.Complex(data1); 108ffe3c632Sopenharmony_ci var bar = new proto.jspb.test.Complex(data2); 109ffe3c632Sopenharmony_ci var result = foo.toObject(); 110ffe3c632Sopenharmony_ci assertObjectEquals({ 111ffe3c632Sopenharmony_ci aString: 'a', 112ffe3c632Sopenharmony_ci anOutOfOrderBool: 1, 113ffe3c632Sopenharmony_ci aNestedMessage: { 114ffe3c632Sopenharmony_ci anInt: 11 115ffe3c632Sopenharmony_ci }, 116ffe3c632Sopenharmony_ci aRepeatedMessageList: [{anInt: 22}, {anInt: 33}], 117ffe3c632Sopenharmony_ci aRepeatedStringList: ['s1', 's2'] 118ffe3c632Sopenharmony_ci }, result); 119ffe3c632Sopenharmony_ci 120ffe3c632Sopenharmony_ci // Now test with the jspb instances included. 121ffe3c632Sopenharmony_ci result = foo.toObject(true /* opt_includeInstance */); 122ffe3c632Sopenharmony_ci assertObjectEquals({ 123ffe3c632Sopenharmony_ci aString: 'a', 124ffe3c632Sopenharmony_ci anOutOfOrderBool: 1, 125ffe3c632Sopenharmony_ci aNestedMessage: { 126ffe3c632Sopenharmony_ci anInt: 11, 127ffe3c632Sopenharmony_ci $jspbMessageInstance: foo.getANestedMessage() 128ffe3c632Sopenharmony_ci }, 129ffe3c632Sopenharmony_ci aRepeatedMessageList: [ 130ffe3c632Sopenharmony_ci {anInt: 22, $jspbMessageInstance: foo.getARepeatedMessageList()[0]}, 131ffe3c632Sopenharmony_ci {anInt: 33, $jspbMessageInstance: foo.getARepeatedMessageList()[1]} 132ffe3c632Sopenharmony_ci ], 133ffe3c632Sopenharmony_ci aRepeatedStringList: ['s1', 's2'], 134ffe3c632Sopenharmony_ci $jspbMessageInstance: foo 135ffe3c632Sopenharmony_ci }, result); 136ffe3c632Sopenharmony_ci 137ffe3c632Sopenharmony_ci }); 138ffe3c632Sopenharmony_ci 139ffe3c632Sopenharmony_ci it('testMissingFields', function() { 140ffe3c632Sopenharmony_ci var foo = new proto.jspb.test.Complex([ 141ffe3c632Sopenharmony_ci undefined, undefined, undefined, [], 142ffe3c632Sopenharmony_ci undefined, undefined, undefined, undefined]); 143ffe3c632Sopenharmony_ci var bar = new proto.jspb.test.Complex([ 144ffe3c632Sopenharmony_ci undefined, undefined, undefined, [], 145ffe3c632Sopenharmony_ci undefined, undefined, undefined, undefined]); 146ffe3c632Sopenharmony_ci var result = foo.toObject(); 147ffe3c632Sopenharmony_ci assertObjectEquals({ 148ffe3c632Sopenharmony_ci aString: undefined, 149ffe3c632Sopenharmony_ci anOutOfOrderBool: undefined, 150ffe3c632Sopenharmony_ci aNestedMessage: { 151ffe3c632Sopenharmony_ci anInt: undefined 152ffe3c632Sopenharmony_ci }, 153ffe3c632Sopenharmony_ci // Note: JsPb converts undefined repeated fields to empty arrays. 154ffe3c632Sopenharmony_ci aRepeatedMessageList: [], 155ffe3c632Sopenharmony_ci aRepeatedStringList: [] 156ffe3c632Sopenharmony_ci }, result); 157ffe3c632Sopenharmony_ci 158ffe3c632Sopenharmony_ci }); 159ffe3c632Sopenharmony_ci 160ffe3c632Sopenharmony_ci it('testNestedComplexMessage', function() { 161ffe3c632Sopenharmony_ci // Instantiate the message and set a unique field, just to ensure that we 162ffe3c632Sopenharmony_ci // are not getting jspb.test.Complex instead. 163ffe3c632Sopenharmony_ci var msg = new proto.jspb.test.OuterMessage.Complex(); 164ffe3c632Sopenharmony_ci msg.setInnerComplexField(5); 165ffe3c632Sopenharmony_ci }); 166ffe3c632Sopenharmony_ci 167ffe3c632Sopenharmony_ci it('testSpecialCases', function() { 168ffe3c632Sopenharmony_ci // Note: Some property names are reserved in JavaScript. 169ffe3c632Sopenharmony_ci // These names are converted to the Js property named pb_<reserved_name>. 170ffe3c632Sopenharmony_ci var special = 171ffe3c632Sopenharmony_ci new proto.jspb.test.SpecialCases(['normal', 'default', 'function', 172ffe3c632Sopenharmony_ci 'var']); 173ffe3c632Sopenharmony_ci var result = special.toObject(); 174ffe3c632Sopenharmony_ci assertObjectEquals({ 175ffe3c632Sopenharmony_ci normal: 'normal', 176ffe3c632Sopenharmony_ci pb_default: 'default', 177ffe3c632Sopenharmony_ci pb_function: 'function', 178ffe3c632Sopenharmony_ci pb_var: 'var' 179ffe3c632Sopenharmony_ci }, result); 180ffe3c632Sopenharmony_ci }); 181ffe3c632Sopenharmony_ci 182ffe3c632Sopenharmony_ci it('testDefaultValues', function() { 183ffe3c632Sopenharmony_ci var defaultString = "default<>\'\"abc"; 184ffe3c632Sopenharmony_ci var response = new proto.jspb.test.DefaultValues(); 185ffe3c632Sopenharmony_ci 186ffe3c632Sopenharmony_ci // Test toObject 187ffe3c632Sopenharmony_ci var expectedObject = { 188ffe3c632Sopenharmony_ci stringField: defaultString, 189ffe3c632Sopenharmony_ci boolField: true, 190ffe3c632Sopenharmony_ci intField: 11, 191ffe3c632Sopenharmony_ci enumField: 13, 192ffe3c632Sopenharmony_ci emptyField: '', 193ffe3c632Sopenharmony_ci bytesField: 'bW9v' 194ffe3c632Sopenharmony_ci }; 195ffe3c632Sopenharmony_ci assertObjectEquals(expectedObject, response.toObject()); 196ffe3c632Sopenharmony_ci 197ffe3c632Sopenharmony_ci 198ffe3c632Sopenharmony_ci // Test getters 199ffe3c632Sopenharmony_ci response = new proto.jspb.test.DefaultValues(); 200ffe3c632Sopenharmony_ci assertEquals(defaultString, response.getStringField()); 201ffe3c632Sopenharmony_ci assertEquals(true, response.getBoolField()); 202ffe3c632Sopenharmony_ci assertEquals(11, response.getIntField()); 203ffe3c632Sopenharmony_ci assertEquals(13, response.getEnumField()); 204ffe3c632Sopenharmony_ci assertEquals('', response.getEmptyField()); 205ffe3c632Sopenharmony_ci assertEquals('bW9v', response.getBytesField()); 206ffe3c632Sopenharmony_ci 207ffe3c632Sopenharmony_ci function makeDefault(values) { 208ffe3c632Sopenharmony_ci return new proto.jspb.test.DefaultValues(values); 209ffe3c632Sopenharmony_ci } 210ffe3c632Sopenharmony_ci 211ffe3c632Sopenharmony_ci // Test with undefined values, 212ffe3c632Sopenharmony_ci // Use push to workaround IE treating undefined array elements as holes. 213ffe3c632Sopenharmony_ci response = makeDefault([undefined, undefined, undefined, undefined]); 214ffe3c632Sopenharmony_ci assertEquals(defaultString, response.getStringField()); 215ffe3c632Sopenharmony_ci assertEquals(true, response.getBoolField()); 216ffe3c632Sopenharmony_ci assertEquals(11, response.getIntField()); 217ffe3c632Sopenharmony_ci assertEquals(13, response.getEnumField()); 218ffe3c632Sopenharmony_ci assertFalse(response.hasStringField()); 219ffe3c632Sopenharmony_ci assertFalse(response.hasBoolField()); 220ffe3c632Sopenharmony_ci assertFalse(response.hasIntField()); 221ffe3c632Sopenharmony_ci assertFalse(response.hasEnumField()); 222ffe3c632Sopenharmony_ci 223ffe3c632Sopenharmony_ci // Test with null values, as would be returned by a JSON serializer. 224ffe3c632Sopenharmony_ci response = makeDefault([null, null, null, null]); 225ffe3c632Sopenharmony_ci assertEquals(defaultString, response.getStringField()); 226ffe3c632Sopenharmony_ci assertEquals(true, response.getBoolField()); 227ffe3c632Sopenharmony_ci assertEquals(11, response.getIntField()); 228ffe3c632Sopenharmony_ci assertEquals(13, response.getEnumField()); 229ffe3c632Sopenharmony_ci assertFalse(response.hasStringField()); 230ffe3c632Sopenharmony_ci assertFalse(response.hasBoolField()); 231ffe3c632Sopenharmony_ci assertFalse(response.hasIntField()); 232ffe3c632Sopenharmony_ci assertFalse(response.hasEnumField()); 233ffe3c632Sopenharmony_ci 234ffe3c632Sopenharmony_ci // Test with false-like values. 235ffe3c632Sopenharmony_ci response = makeDefault(['', false, 0, 0]); 236ffe3c632Sopenharmony_ci assertEquals('', response.getStringField()); 237ffe3c632Sopenharmony_ci assertEquals(false, response.getBoolField()); 238ffe3c632Sopenharmony_ci assertEquals(true, response.getIntField() == 0); 239ffe3c632Sopenharmony_ci assertEquals(true, response.getEnumField() == 0); 240ffe3c632Sopenharmony_ci assertTrue(response.hasStringField()); 241ffe3c632Sopenharmony_ci assertTrue(response.hasBoolField()); 242ffe3c632Sopenharmony_ci assertTrue(response.hasIntField()); 243ffe3c632Sopenharmony_ci assertTrue(response.hasEnumField()); 244ffe3c632Sopenharmony_ci 245ffe3c632Sopenharmony_ci // Test that clearing the values reverts them to the default state. 246ffe3c632Sopenharmony_ci response = makeDefault(['blah', false, 111, 77]); 247ffe3c632Sopenharmony_ci response.clearStringField(); response.clearBoolField(); 248ffe3c632Sopenharmony_ci response.clearIntField(); response.clearEnumField(); 249ffe3c632Sopenharmony_ci assertEquals(defaultString, response.getStringField()); 250ffe3c632Sopenharmony_ci assertEquals(true, response.getBoolField()); 251ffe3c632Sopenharmony_ci assertEquals(11, response.getIntField()); 252ffe3c632Sopenharmony_ci assertEquals(13, response.getEnumField()); 253ffe3c632Sopenharmony_ci assertFalse(response.hasStringField()); 254ffe3c632Sopenharmony_ci assertFalse(response.hasBoolField()); 255ffe3c632Sopenharmony_ci assertFalse(response.hasIntField()); 256ffe3c632Sopenharmony_ci assertFalse(response.hasEnumField()); 257ffe3c632Sopenharmony_ci 258ffe3c632Sopenharmony_ci // Test that setFoo(null) clears the values. 259ffe3c632Sopenharmony_ci response = makeDefault(['blah', false, 111, 77]); 260ffe3c632Sopenharmony_ci response.setStringField(null); response.setBoolField(null); 261ffe3c632Sopenharmony_ci response.setIntField(undefined); response.setEnumField(undefined); 262ffe3c632Sopenharmony_ci assertEquals(defaultString, response.getStringField()); 263ffe3c632Sopenharmony_ci assertEquals(true, response.getBoolField()); 264ffe3c632Sopenharmony_ci assertEquals(11, response.getIntField()); 265ffe3c632Sopenharmony_ci assertEquals(13, response.getEnumField()); 266ffe3c632Sopenharmony_ci assertFalse(response.hasStringField()); 267ffe3c632Sopenharmony_ci assertFalse(response.hasBoolField()); 268ffe3c632Sopenharmony_ci assertFalse(response.hasIntField()); 269ffe3c632Sopenharmony_ci assertFalse(response.hasEnumField()); 270ffe3c632Sopenharmony_ci }); 271ffe3c632Sopenharmony_ci 272ffe3c632Sopenharmony_ci it('testMessageRegistration', function() { 273ffe3c632Sopenharmony_ci // goog.require(SomeResponse) will include its library, which will in 274ffe3c632Sopenharmony_ci // turn add SomeResponse to the message registry. 275ffe3c632Sopenharmony_ci assertEquals(jspb.Message.registry_['res'], proto.jspb.test.SomeResponse); 276ffe3c632Sopenharmony_ci }); 277ffe3c632Sopenharmony_ci 278ffe3c632Sopenharmony_ci it('testClearFields', function() { 279ffe3c632Sopenharmony_ci var data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; 280ffe3c632Sopenharmony_ci var foo = new proto.jspb.test.OptionalFields(data); 281ffe3c632Sopenharmony_ci foo.clearAString(); 282ffe3c632Sopenharmony_ci foo.clearABool(); 283ffe3c632Sopenharmony_ci foo.clearANestedMessage(); 284ffe3c632Sopenharmony_ci foo.clearARepeatedMessageList(); 285ffe3c632Sopenharmony_ci foo.clearARepeatedStringList(); 286ffe3c632Sopenharmony_ci assertEquals('', foo.getAString()); 287ffe3c632Sopenharmony_ci assertEquals(false, foo.getABool()); 288ffe3c632Sopenharmony_ci assertUndefined(foo.getANestedMessage()); 289ffe3c632Sopenharmony_ci assertFalse(foo.hasAString()); 290ffe3c632Sopenharmony_ci assertFalse(foo.hasABool()); 291ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedMessageList()); 292ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedStringList()); 293ffe3c632Sopenharmony_ci // NOTE: We want the missing fields in 'expected' to be undefined, 294ffe3c632Sopenharmony_ci // but we actually get a sparse array instead. We could use something 295ffe3c632Sopenharmony_ci // like [1,undefined,2] to avoid this, except that this is still 296ffe3c632Sopenharmony_ci // sparse on IE. No comment... 297ffe3c632Sopenharmony_ci var expected = [,,, [], []]; 298ffe3c632Sopenharmony_ci expected[0] = expected[1] = expected[2] = undefined; 299ffe3c632Sopenharmony_ci assertObjectEquals(expected, foo.toArray()); 300ffe3c632Sopenharmony_ci 301ffe3c632Sopenharmony_ci // Test set(null). We could deprecated this in favor of clear(), but 302ffe3c632Sopenharmony_ci // it's also convenient to have. 303ffe3c632Sopenharmony_ci data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; 304ffe3c632Sopenharmony_ci foo = new proto.jspb.test.OptionalFields(data); 305ffe3c632Sopenharmony_ci foo.setAString(null); 306ffe3c632Sopenharmony_ci foo.setABool(null); 307ffe3c632Sopenharmony_ci foo.setANestedMessage(null); 308ffe3c632Sopenharmony_ci foo.setARepeatedMessageList(null); 309ffe3c632Sopenharmony_ci foo.setARepeatedStringList(null); 310ffe3c632Sopenharmony_ci assertEquals('', foo.getAString()); 311ffe3c632Sopenharmony_ci assertEquals(false, foo.getABool()); 312ffe3c632Sopenharmony_ci assertNull(foo.getANestedMessage()); 313ffe3c632Sopenharmony_ci assertFalse(foo.hasAString()); 314ffe3c632Sopenharmony_ci assertFalse(foo.hasABool()); 315ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedMessageList()); 316ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedStringList()); 317ffe3c632Sopenharmony_ci assertObjectEquals([null, null, null, [], []], foo.toArray()); 318ffe3c632Sopenharmony_ci 319ffe3c632Sopenharmony_ci // Test set(undefined). Again, not something we really need, and not 320ffe3c632Sopenharmony_ci // supported directly by our typing, but it should 'do the right thing'. 321ffe3c632Sopenharmony_ci data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; 322ffe3c632Sopenharmony_ci foo = new proto.jspb.test.OptionalFields(data); 323ffe3c632Sopenharmony_ci foo.setAString(undefined); 324ffe3c632Sopenharmony_ci foo.setABool(undefined); 325ffe3c632Sopenharmony_ci foo.setANestedMessage(undefined); 326ffe3c632Sopenharmony_ci foo.setARepeatedMessageList(undefined); 327ffe3c632Sopenharmony_ci foo.setARepeatedStringList(undefined); 328ffe3c632Sopenharmony_ci assertEquals('', foo.getAString()); 329ffe3c632Sopenharmony_ci assertEquals(false, foo.getABool()); 330ffe3c632Sopenharmony_ci assertUndefined(foo.getANestedMessage()); 331ffe3c632Sopenharmony_ci assertFalse(foo.hasAString()); 332ffe3c632Sopenharmony_ci assertFalse(foo.hasABool()); 333ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedMessageList()); 334ffe3c632Sopenharmony_ci assertObjectEquals([], foo.getARepeatedStringList()); 335ffe3c632Sopenharmony_ci expected = [,,, [], []]; 336ffe3c632Sopenharmony_ci expected[0] = expected[1] = expected[2] = undefined; 337ffe3c632Sopenharmony_ci assertObjectEquals(expected, foo.toArray()); 338ffe3c632Sopenharmony_ci }); 339ffe3c632Sopenharmony_ci 340ffe3c632Sopenharmony_ci it('testDifferenceRawObject', function() { 341ffe3c632Sopenharmony_ci var p1 = new proto.jspb.test.HasExtensions(['hi', 'diff', {}]); 342ffe3c632Sopenharmony_ci var p2 = new proto.jspb.test.HasExtensions(['hi', 'what', 343ffe3c632Sopenharmony_ci {1000: 'unique'}]); 344ffe3c632Sopenharmony_ci var diff = /** @type {proto.jspb.test.HasExtensions} */ 345ffe3c632Sopenharmony_ci (jspb.Message.difference(p1, p2)); 346ffe3c632Sopenharmony_ci assertEquals('', diff.getStr1()); 347ffe3c632Sopenharmony_ci assertEquals('what', diff.getStr2()); 348ffe3c632Sopenharmony_ci assertEquals('', diff.getStr3()); 349ffe3c632Sopenharmony_ci assertEquals('unique', diff.extensionObject_[1000]); 350ffe3c632Sopenharmony_ci }); 351ffe3c632Sopenharmony_ci 352ffe3c632Sopenharmony_ci it('testEqualsSimple', function() { 353ffe3c632Sopenharmony_ci var s1 = new proto.jspb.test.Simple1(['hi']); 354ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(s1, new proto.jspb.test.Simple1(['hi']))); 355ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(s1, new proto.jspb.test.Simple1(['bye']))); 356ffe3c632Sopenharmony_ci var s1b = new proto.jspb.test.Simple1(['hi', ['hello']]); 357ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(s1b, 358ffe3c632Sopenharmony_ci new proto.jspb.test.Simple1(['hi', ['hello']]))); 359ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(s1b, 360ffe3c632Sopenharmony_ci new proto.jspb.test.Simple1(['hi', ['hello', undefined, 361ffe3c632Sopenharmony_ci undefined, undefined]]))); 362ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(s1b, 363ffe3c632Sopenharmony_ci new proto.jspb.test.Simple1(['no', ['hello']]))); 364ffe3c632Sopenharmony_ci // Test with messages of different types 365ffe3c632Sopenharmony_ci var s2 = new proto.jspb.test.Simple2(['hi']); 366ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(s1, s2)); 367ffe3c632Sopenharmony_ci }); 368ffe3c632Sopenharmony_ci 369ffe3c632Sopenharmony_ci it('testEquals_softComparison', function() { 370ffe3c632Sopenharmony_ci var s1 = new proto.jspb.test.Simple1(['hi', [], null]); 371ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(s1, 372ffe3c632Sopenharmony_ci new proto.jspb.test.Simple1(['hi', []]))); 373ffe3c632Sopenharmony_ci 374ffe3c632Sopenharmony_ci var s1b = new proto.jspb.test.Simple1(['hi', [], true]); 375ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(s1b, 376ffe3c632Sopenharmony_ci new proto.jspb.test.Simple1(['hi', [], 1]))); 377ffe3c632Sopenharmony_ci }); 378ffe3c632Sopenharmony_ci 379ffe3c632Sopenharmony_ci it('testEqualsComplex', function() { 380ffe3c632Sopenharmony_ci var data1 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; 381ffe3c632Sopenharmony_ci var data2 = ['a',,, [, 11], [[, 22], [, 34]],, ['s1', 's2'],, 1]; 382ffe3c632Sopenharmony_ci var data3 = ['a',,, [, 11], [[, 22]],, ['s1', 's2'],, 1]; 383ffe3c632Sopenharmony_ci var data4 = ['hi']; 384ffe3c632Sopenharmony_ci var c1a = new proto.jspb.test.Complex(data1); 385ffe3c632Sopenharmony_ci var c1b = new proto.jspb.test.Complex(data1); 386ffe3c632Sopenharmony_ci var c2 = new proto.jspb.test.Complex(data2); 387ffe3c632Sopenharmony_ci var c3 = new proto.jspb.test.Complex(data3); 388ffe3c632Sopenharmony_ci var s1 = new proto.jspb.test.Simple1(data4); 389ffe3c632Sopenharmony_ci 390ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals(c1a, c1b)); 391ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(c1a, c2)); 392ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(c2, c3)); 393ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals(c1a, s1)); 394ffe3c632Sopenharmony_ci }); 395ffe3c632Sopenharmony_ci 396ffe3c632Sopenharmony_ci it('testEqualsExtensionsConstructed', function() { 397ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 398ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([]), 399ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([{}]) 400ffe3c632Sopenharmony_ci )); 401ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 402ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), 403ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]) 404ffe3c632Sopenharmony_ci )); 405ffe3c632Sopenharmony_ci assertFalse(jspb.Message.equals( 406ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), 407ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'b'}]}]) 408ffe3c632Sopenharmony_ci )); 409ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 410ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]), 411ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]) 412ffe3c632Sopenharmony_ci )); 413ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 414ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]), 415ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([,,, {100: [{200: 'a'}]}]) 416ffe3c632Sopenharmony_ci )); 417ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 418ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([,,, {100: [{200: 'a'}]}]), 419ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]) 420ffe3c632Sopenharmony_ci )); 421ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 422ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), 423ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi',,, {100: [{200: 'a'}]}]) 424ffe3c632Sopenharmony_ci )); 425ffe3c632Sopenharmony_ci assertTrue(jspb.Message.equals( 426ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi',,, {100: [{200: 'a'}]}]), 427ffe3c632Sopenharmony_ci new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]) 428ffe3c632Sopenharmony_ci )); 429ffe3c632Sopenharmony_ci }); 430ffe3c632Sopenharmony_ci 431ffe3c632Sopenharmony_ci it('testEqualsExtensionsUnconstructed', function() { 432ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields([], [{}])); 433ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields([,,, {}], [])); 434ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields([,,, {}], [,, {}])); 435ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 436ffe3c632Sopenharmony_ci ['hi', {100: [{200: 'a'}]}], ['hi', {100: [{200: 'a'}]}])); 437ffe3c632Sopenharmony_ci assertFalse(jspb.Message.compareFields( 438ffe3c632Sopenharmony_ci ['hi', {100: [{200: 'a'}]}], ['hi', {100: [{200: 'b'}]}])); 439ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 440ffe3c632Sopenharmony_ci [{100: [{200: 'a'}]}], [{100: [{200: 'a'}]}])); 441ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 442ffe3c632Sopenharmony_ci [{100: [{200: 'a'}]}], [,,, {100: [{200: 'a'}]}])); 443ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 444ffe3c632Sopenharmony_ci [,,, {100: [{200: 'a'}]}], [{100: [{200: 'a'}]}])); 445ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 446ffe3c632Sopenharmony_ci ['hi', {100: [{200: 'a'}]}], ['hi',,, {100: [{200: 'a'}]}])); 447ffe3c632Sopenharmony_ci assertTrue(jspb.Message.compareFields( 448ffe3c632Sopenharmony_ci ['hi',,, {100: [{200: 'a'}]}], ['hi', {100: [{200: 'a'}]}])); 449ffe3c632Sopenharmony_ci }); 450ffe3c632Sopenharmony_ci 451ffe3c632Sopenharmony_ci it('testToMap', function() { 452ffe3c632Sopenharmony_ci var p1 = new proto.jspb.test.Simple1(['k', ['v']]); 453ffe3c632Sopenharmony_ci var p2 = new proto.jspb.test.Simple1(['k1', ['v1', 'v2']]); 454ffe3c632Sopenharmony_ci var soymap = jspb.Message.toMap([p1, p2], 455ffe3c632Sopenharmony_ci proto.jspb.test.Simple1.prototype.getAString, 456ffe3c632Sopenharmony_ci proto.jspb.test.Simple1.prototype.toObject); 457ffe3c632Sopenharmony_ci assertEquals('k', soymap['k'].aString); 458ffe3c632Sopenharmony_ci assertArrayEquals(['v'], soymap['k'].aRepeatedStringList); 459ffe3c632Sopenharmony_ci var protomap = jspb.Message.toMap([p1, p2], 460ffe3c632Sopenharmony_ci proto.jspb.test.Simple1.prototype.getAString); 461ffe3c632Sopenharmony_ci assertEquals('k', protomap['k'].getAString()); 462ffe3c632Sopenharmony_ci assertArrayEquals(['v'], protomap['k'].getARepeatedStringList()); 463ffe3c632Sopenharmony_ci }); 464ffe3c632Sopenharmony_ci 465ffe3c632Sopenharmony_ci it('testClone', function() { 466ffe3c632Sopenharmony_ci var supportsUint8Array = 467ffe3c632Sopenharmony_ci !goog.userAgent.IE || goog.userAgent.isVersionOrHigher('10'); 468ffe3c632Sopenharmony_ci var original = new proto.jspb.test.TestClone(); 469ffe3c632Sopenharmony_ci original.setStr('v1'); 470ffe3c632Sopenharmony_ci var simple1 = new proto.jspb.test.Simple1(['x1', ['y1', 'z1']]); 471ffe3c632Sopenharmony_ci var simple2 = new proto.jspb.test.Simple1(['x2', ['y2', 'z2']]); 472ffe3c632Sopenharmony_ci var simple3 = new proto.jspb.test.Simple1(['x3', ['y3', 'z3']]); 473ffe3c632Sopenharmony_ci original.setSimple1(simple1); 474ffe3c632Sopenharmony_ci original.setSimple2List([simple2, simple3]); 475ffe3c632Sopenharmony_ci var bytes1 = supportsUint8Array ? new Uint8Array([1, 2, 3]) : '123'; 476ffe3c632Sopenharmony_ci original.setBytesField(bytes1); 477ffe3c632Sopenharmony_ci var extension = new proto.jspb.test.CloneExtension(); 478ffe3c632Sopenharmony_ci extension.setExt('e1'); 479ffe3c632Sopenharmony_ci original.setExtension(proto.jspb.test.IsExtension.extField, extension); 480ffe3c632Sopenharmony_ci var clone = original.cloneMessage(); 481ffe3c632Sopenharmony_ci assertArrayEquals(['v1',, ['x1', ['y1', 'z1']],, 482ffe3c632Sopenharmony_ci [['x2', ['y2', 'z2']], ['x3', ['y3', 'z3']]], bytes1,, { 100: [, 'e1'] }], 483ffe3c632Sopenharmony_ci clone.toArray()); 484ffe3c632Sopenharmony_ci clone.setStr('v2'); 485ffe3c632Sopenharmony_ci var simple4 = new proto.jspb.test.Simple1(['a1', ['b1', 'c1']]); 486ffe3c632Sopenharmony_ci var simple5 = new proto.jspb.test.Simple1(['a2', ['b2', 'c2']]); 487ffe3c632Sopenharmony_ci var simple6 = new proto.jspb.test.Simple1(['a3', ['b3', 'c3']]); 488ffe3c632Sopenharmony_ci clone.setSimple1(simple4); 489ffe3c632Sopenharmony_ci clone.setSimple2List([simple5, simple6]); 490ffe3c632Sopenharmony_ci if (supportsUint8Array) { 491ffe3c632Sopenharmony_ci clone.getBytesField()[0] = 4; 492ffe3c632Sopenharmony_ci assertObjectEquals(bytes1, original.getBytesField()); 493ffe3c632Sopenharmony_ci } 494ffe3c632Sopenharmony_ci var bytes2 = supportsUint8Array ? new Uint8Array([4, 5, 6]) : '456'; 495ffe3c632Sopenharmony_ci clone.setBytesField(bytes2); 496ffe3c632Sopenharmony_ci var newExtension = new proto.jspb.test.CloneExtension(); 497ffe3c632Sopenharmony_ci newExtension.setExt('e2'); 498ffe3c632Sopenharmony_ci clone.setExtension(proto.jspb.test.CloneExtension.extField, newExtension); 499ffe3c632Sopenharmony_ci assertArrayEquals(['v2',, ['a1', ['b1', 'c1']],, 500ffe3c632Sopenharmony_ci [['a2', ['b2', 'c2']], ['a3', ['b3', 'c3']]], bytes2,, { 100: [, 'e2'] }], 501ffe3c632Sopenharmony_ci clone.toArray()); 502ffe3c632Sopenharmony_ci assertArrayEquals(['v1',, ['x1', ['y1', 'z1']],, 503ffe3c632Sopenharmony_ci [['x2', ['y2', 'z2']], ['x3', ['y3', 'z3']]], bytes1,, { 100: [, 'e1'] }], 504ffe3c632Sopenharmony_ci original.toArray()); 505ffe3c632Sopenharmony_ci }); 506ffe3c632Sopenharmony_ci 507ffe3c632Sopenharmony_ci it('testCopyInto', function() { 508ffe3c632Sopenharmony_ci var supportsUint8Array = 509ffe3c632Sopenharmony_ci !goog.userAgent.IE || goog.userAgent.isVersionOrHigher('10'); 510ffe3c632Sopenharmony_ci var original = new proto.jspb.test.TestClone(); 511ffe3c632Sopenharmony_ci original.setStr('v1'); 512ffe3c632Sopenharmony_ci var dest = new proto.jspb.test.TestClone(); 513ffe3c632Sopenharmony_ci dest.setStr('override'); 514ffe3c632Sopenharmony_ci var simple1 = new proto.jspb.test.Simple1(['x1', ['y1', 'z1']]); 515ffe3c632Sopenharmony_ci var simple2 = new proto.jspb.test.Simple1(['x2', ['y2', 'z2']]); 516ffe3c632Sopenharmony_ci var simple3 = new proto.jspb.test.Simple1(['x3', ['y3', 'z3']]); 517ffe3c632Sopenharmony_ci var destSimple1 = new proto.jspb.test.Simple1(['ox1', ['oy1', 'oz1']]); 518ffe3c632Sopenharmony_ci var destSimple2 = new proto.jspb.test.Simple1(['ox2', ['oy2', 'oz2']]); 519ffe3c632Sopenharmony_ci var destSimple3 = new proto.jspb.test.Simple1(['ox3', ['oy3', 'oz3']]); 520ffe3c632Sopenharmony_ci original.setSimple1(simple1); 521ffe3c632Sopenharmony_ci original.setSimple2List([simple2, simple3]); 522ffe3c632Sopenharmony_ci dest.setSimple1(destSimple1); 523ffe3c632Sopenharmony_ci dest.setSimple2List([destSimple2, destSimple3]); 524ffe3c632Sopenharmony_ci var bytes1 = supportsUint8Array ? new Uint8Array([1, 2, 3]) : '123'; 525ffe3c632Sopenharmony_ci var bytes2 = supportsUint8Array ? new Uint8Array([4, 5, 6]) : '456'; 526ffe3c632Sopenharmony_ci original.setBytesField(bytes1); 527ffe3c632Sopenharmony_ci dest.setBytesField(bytes2); 528ffe3c632Sopenharmony_ci var extension = new proto.jspb.test.CloneExtension(); 529ffe3c632Sopenharmony_ci extension.setExt('e1'); 530ffe3c632Sopenharmony_ci original.setExtension(proto.jspb.test.CloneExtension.extField, extension); 531ffe3c632Sopenharmony_ci 532ffe3c632Sopenharmony_ci jspb.Message.copyInto(original, dest); 533ffe3c632Sopenharmony_ci assertArrayEquals(original.toArray(), dest.toArray()); 534ffe3c632Sopenharmony_ci assertEquals('x1', dest.getSimple1().getAString()); 535ffe3c632Sopenharmony_ci assertEquals('e1', 536ffe3c632Sopenharmony_ci dest.getExtension(proto.jspb.test.CloneExtension.extField).getExt()); 537ffe3c632Sopenharmony_ci dest.getSimple1().setAString('new value'); 538ffe3c632Sopenharmony_ci assertNotEquals(dest.getSimple1().getAString(), 539ffe3c632Sopenharmony_ci original.getSimple1().getAString()); 540ffe3c632Sopenharmony_ci if (supportsUint8Array) { 541ffe3c632Sopenharmony_ci dest.getBytesField()[0] = 7; 542ffe3c632Sopenharmony_ci assertObjectEquals(bytes1, original.getBytesField()); 543ffe3c632Sopenharmony_ci assertObjectEquals(new Uint8Array([7, 2, 3]), dest.getBytesField()); 544ffe3c632Sopenharmony_ci } else { 545ffe3c632Sopenharmony_ci dest.setBytesField('789'); 546ffe3c632Sopenharmony_ci assertObjectEquals(bytes1, original.getBytesField()); 547ffe3c632Sopenharmony_ci assertObjectEquals('789', dest.getBytesField()); 548ffe3c632Sopenharmony_ci } 549ffe3c632Sopenharmony_ci dest.getExtension(proto.jspb.test.CloneExtension.extField). 550ffe3c632Sopenharmony_ci setExt('new value'); 551ffe3c632Sopenharmony_ci assertNotEquals( 552ffe3c632Sopenharmony_ci dest.getExtension(proto.jspb.test.CloneExtension.extField).getExt(), 553ffe3c632Sopenharmony_ci original.getExtension( 554ffe3c632Sopenharmony_ci proto.jspb.test.CloneExtension.extField).getExt()); 555ffe3c632Sopenharmony_ci }); 556ffe3c632Sopenharmony_ci 557ffe3c632Sopenharmony_ci it('testCopyInto_notSameType', function() { 558ffe3c632Sopenharmony_ci var a = new proto.jspb.test.TestClone(); 559ffe3c632Sopenharmony_ci var b = new proto.jspb.test.Simple1(['str', ['s1', 's2']]); 560ffe3c632Sopenharmony_ci 561ffe3c632Sopenharmony_ci var e = assertThrows(function() { 562ffe3c632Sopenharmony_ci jspb.Message.copyInto(a, b); 563ffe3c632Sopenharmony_ci }); 564ffe3c632Sopenharmony_ci assertContains('should have the same type', e.message); 565ffe3c632Sopenharmony_ci }); 566ffe3c632Sopenharmony_ci 567ffe3c632Sopenharmony_ci it('testExtensions', function() { 568ffe3c632Sopenharmony_ci var extension1 = new proto.jspb.test.IsExtension(['ext1field']); 569ffe3c632Sopenharmony_ci var extension2 = new proto.jspb.test.Simple1(['str', ['s1', 's2']]); 570ffe3c632Sopenharmony_ci var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); 571ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IsExtension.extField, extension1); 572ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.simple, 573ffe3c632Sopenharmony_ci extension2); 574ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.str, 'xyzzy'); 575ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.repeatedStrList, 576ffe3c632Sopenharmony_ci ['a', 'b']); 577ffe3c632Sopenharmony_ci var s1 = new proto.jspb.test.Simple1(['foo', ['s1', 's2']]); 578ffe3c632Sopenharmony_ci var s2 = new proto.jspb.test.Simple1(['bar', ['t1', 't2']]); 579ffe3c632Sopenharmony_ci extendable.setExtension( 580ffe3c632Sopenharmony_ci proto.jspb.test.IndirectExtension.repeatedSimpleList, 581ffe3c632Sopenharmony_ci [s1, s2]); 582ffe3c632Sopenharmony_ci assertObjectEquals(extension1, 583ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IsExtension.extField)); 584ffe3c632Sopenharmony_ci assertObjectEquals(extension2, 585ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IndirectExtension.simple)); 586ffe3c632Sopenharmony_ci assertObjectEquals('xyzzy', 587ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IndirectExtension.str)); 588ffe3c632Sopenharmony_ci assertObjectEquals(['a', 'b'], extendable.getExtension( 589ffe3c632Sopenharmony_ci proto.jspb.test.IndirectExtension.repeatedStrList)); 590ffe3c632Sopenharmony_ci assertObjectEquals([s1, s2], extendable.getExtension( 591ffe3c632Sopenharmony_ci proto.jspb.test.IndirectExtension.repeatedSimpleList)); 592ffe3c632Sopenharmony_ci // Not supported yet, but it should work... 593ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.simple, null); 594ffe3c632Sopenharmony_ci assertNull( 595ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IndirectExtension.simple)); 596ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.str, null); 597ffe3c632Sopenharmony_ci assertNull(extendable.getExtension(proto.jspb.test.IndirectExtension.str)); 598ffe3c632Sopenharmony_ci 599ffe3c632Sopenharmony_ci 600ffe3c632Sopenharmony_ci // Extension fields with jspb.ignore = true are ignored. 601ffe3c632Sopenharmony_ci assertUndefined(proto.jspb.test.IndirectExtension['ignored']); 602ffe3c632Sopenharmony_ci assertUndefined(proto.jspb.test.HasExtensions['ignoredFloating']); 603ffe3c632Sopenharmony_ci }); 604ffe3c632Sopenharmony_ci 605ffe3c632Sopenharmony_ci it('testFloatingExtensions', function() { 606ffe3c632Sopenharmony_ci // From an autogenerated container. 607ffe3c632Sopenharmony_ci var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); 608ffe3c632Sopenharmony_ci var extension = new proto.jspb.test.Simple1(['foo', ['s1', 's2']]); 609ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.simple1, extension); 610ffe3c632Sopenharmony_ci assertObjectEquals(extension, 611ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.simple1)); 612ffe3c632Sopenharmony_ci 613ffe3c632Sopenharmony_ci // From _lib mode. 614ffe3c632Sopenharmony_ci extension = new proto.jspb.test.ExtensionMessage(['s1']); 615ffe3c632Sopenharmony_ci extendable = new proto.jspb.test.TestExtensionsMessage([16]); 616ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.floatingMsgField, extension); 617ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.floatingStrField, 's2'); 618ffe3c632Sopenharmony_ci assertObjectEquals(extension, 619ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.floatingMsgField)); 620ffe3c632Sopenharmony_ci assertObjectEquals('s2', 621ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.floatingStrField)); 622ffe3c632Sopenharmony_ci assertNotUndefined(proto.jspb.exttest.floatingMsgField); 623ffe3c632Sopenharmony_ci assertNotUndefined(proto.jspb.exttest.floatingMsgFieldTwo); 624ffe3c632Sopenharmony_ci assertNotUndefined(proto.jspb.exttest.beta.floatingStrField); 625ffe3c632Sopenharmony_ci }); 626ffe3c632Sopenharmony_ci 627ffe3c632Sopenharmony_ci it('testToObject_extendedObject', function() { 628ffe3c632Sopenharmony_ci var extension1 = new proto.jspb.test.IsExtension(['ext1field']); 629ffe3c632Sopenharmony_ci var extension2 = new proto.jspb.test.Simple1(['str', ['s1', 's2'], true]); 630ffe3c632Sopenharmony_ci var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); 631ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IsExtension.extField, extension1); 632ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.simple, 633ffe3c632Sopenharmony_ci extension2); 634ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.str, 'xyzzy'); 635ffe3c632Sopenharmony_ci extendable.setExtension(proto.jspb.test.IndirectExtension.repeatedStrList, 636ffe3c632Sopenharmony_ci ['a', 'b']); 637ffe3c632Sopenharmony_ci var s1 = new proto.jspb.test.Simple1(['foo', ['s1', 's2'], true]); 638ffe3c632Sopenharmony_ci var s2 = new proto.jspb.test.Simple1(['bar', ['t1', 't2'], false]); 639ffe3c632Sopenharmony_ci extendable.setExtension( 640ffe3c632Sopenharmony_ci proto.jspb.test.IndirectExtension.repeatedSimpleList, 641ffe3c632Sopenharmony_ci [s1, s2]); 642ffe3c632Sopenharmony_ci assertObjectEquals({ 643ffe3c632Sopenharmony_ci str1: 'v1', str2: 'v2', str3: 'v3', 644ffe3c632Sopenharmony_ci extField: { ext1: 'ext1field' }, 645ffe3c632Sopenharmony_ci simple: { 646ffe3c632Sopenharmony_ci aString: 'str', aRepeatedStringList: ['s1', 's2'], aBoolean: true 647ffe3c632Sopenharmony_ci }, 648ffe3c632Sopenharmony_ci str: 'xyzzy', 649ffe3c632Sopenharmony_ci repeatedStrList: ['a', 'b'], 650ffe3c632Sopenharmony_ci repeatedSimpleList: [ 651ffe3c632Sopenharmony_ci { aString: 'foo', aRepeatedStringList: ['s1', 's2'], aBoolean: true}, 652ffe3c632Sopenharmony_ci { aString: 'bar', aRepeatedStringList: ['t1', 't2'], aBoolean: false} 653ffe3c632Sopenharmony_ci ] 654ffe3c632Sopenharmony_ci }, extendable.toObject()); 655ffe3c632Sopenharmony_ci 656ffe3c632Sopenharmony_ci // Now, with instances included. 657ffe3c632Sopenharmony_ci assertObjectEquals({ 658ffe3c632Sopenharmony_ci str1: 'v1', str2: 'v2', str3: 'v3', 659ffe3c632Sopenharmony_ci extField: { 660ffe3c632Sopenharmony_ci ext1: 'ext1field', 661ffe3c632Sopenharmony_ci $jspbMessageInstance: 662ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IsExtension.extField) 663ffe3c632Sopenharmony_ci }, 664ffe3c632Sopenharmony_ci simple: { 665ffe3c632Sopenharmony_ci aString: 'str', 666ffe3c632Sopenharmony_ci aRepeatedStringList: ['s1', 's2'], 667ffe3c632Sopenharmony_ci aBoolean: true, 668ffe3c632Sopenharmony_ci $jspbMessageInstance: 669ffe3c632Sopenharmony_ci extendable.getExtension(proto.jspb.test.IndirectExtension.simple) 670ffe3c632Sopenharmony_ci }, 671ffe3c632Sopenharmony_ci str: 'xyzzy', 672ffe3c632Sopenharmony_ci repeatedStrList: ['a', 'b'], 673ffe3c632Sopenharmony_ci repeatedSimpleList: [{ 674ffe3c632Sopenharmony_ci aString: 'foo', 675ffe3c632Sopenharmony_ci aRepeatedStringList: ['s1', 's2'], 676ffe3c632Sopenharmony_ci aBoolean: true, 677ffe3c632Sopenharmony_ci $jspbMessageInstance: s1 678ffe3c632Sopenharmony_ci }, { 679ffe3c632Sopenharmony_ci aString: 'bar', 680ffe3c632Sopenharmony_ci aRepeatedStringList: ['t1', 't2'], 681ffe3c632Sopenharmony_ci aBoolean: false, 682ffe3c632Sopenharmony_ci $jspbMessageInstance: s2 683ffe3c632Sopenharmony_ci }], 684ffe3c632Sopenharmony_ci $jspbMessageInstance: extendable 685ffe3c632Sopenharmony_ci }, extendable.toObject(true /* opt_includeInstance */)); 686ffe3c632Sopenharmony_ci }); 687ffe3c632Sopenharmony_ci 688ffe3c632Sopenharmony_ci it('testInitialization_emptyArray', function() { 689ffe3c632Sopenharmony_ci var msg = new proto.jspb.test.HasExtensions([]); 690ffe3c632Sopenharmony_ci if (jspb.Message.MINIMIZE_MEMORY_ALLOCATIONS) { 691ffe3c632Sopenharmony_ci assertArrayEquals([], msg.toArray()); 692ffe3c632Sopenharmony_ci } else { 693ffe3c632Sopenharmony_ci // Extension object is created past all regular fields. 694ffe3c632Sopenharmony_ci assertArrayEquals([,,, {}], msg.toArray()); 695ffe3c632Sopenharmony_ci } 696ffe3c632Sopenharmony_ci }); 697ffe3c632Sopenharmony_ci 698ffe3c632Sopenharmony_ci it('testInitialization_justExtensionObject', function() { 699ffe3c632Sopenharmony_ci var msg = new proto.jspb.test.Empty([{1: 'hi'}]); 700ffe3c632Sopenharmony_ci // The extensionObject is not moved from its original location. 701ffe3c632Sopenharmony_ci assertArrayEquals([{1: 'hi'}], msg.toArray()); 702ffe3c632Sopenharmony_ci }); 703ffe3c632Sopenharmony_ci 704ffe3c632Sopenharmony_ci it('testInitialization_incompleteList', function() { 705ffe3c632Sopenharmony_ci var msg = new proto.jspb.test.Empty([1, {4: 'hi'}]); 706ffe3c632Sopenharmony_ci // The extensionObject is not moved from its original location. 707ffe3c632Sopenharmony_ci assertArrayEquals([1, {4: 'hi'}], msg.toArray()); 708ffe3c632Sopenharmony_ci }); 709ffe3c632Sopenharmony_ci 710ffe3c632Sopenharmony_ci it('testInitialization_forwardCompatible', function() { 711ffe3c632Sopenharmony_ci var msg = new proto.jspb.test.Empty([1, 2, 3, {1: 'hi'}]); 712ffe3c632Sopenharmony_ci assertArrayEquals([1, 2, 3, {1: 'hi'}], msg.toArray()); 713ffe3c632Sopenharmony_ci }); 714ffe3c632Sopenharmony_ci 715ffe3c632Sopenharmony_ci it('testExtendedMessageEnsureObject', function() { 716ffe3c632Sopenharmony_ci var data = new proto.jspb.test.HasExtensions(['str1', 717ffe3c632Sopenharmony_ci {'a_key': 'an_object'}]); 718ffe3c632Sopenharmony_ci assertEquals('an_object', data.extensionObject_['a_key']); 719ffe3c632Sopenharmony_ci }); 720ffe3c632Sopenharmony_ci 721ffe3c632Sopenharmony_ci it('testToObject_hasExtensionField', function() { 722ffe3c632Sopenharmony_ci var data = new proto.jspb.test.HasExtensions(['str1', {100: ['ext1']}]); 723ffe3c632Sopenharmony_ci var obj = data.toObject(); 724ffe3c632Sopenharmony_ci assertEquals('str1', obj.str1); 725ffe3c632Sopenharmony_ci assertEquals('ext1', obj.extField.ext1); 726ffe3c632Sopenharmony_ci }); 727ffe3c632Sopenharmony_ci 728ffe3c632Sopenharmony_ci it('testGetExtension', function() { 729ffe3c632Sopenharmony_ci var data = new proto.jspb.test.HasExtensions(['str1', {100: ['ext1']}]); 730ffe3c632Sopenharmony_ci assertEquals('str1', data.getStr1()); 731ffe3c632Sopenharmony_ci var extension = data.getExtension(proto.jspb.test.IsExtension.extField); 732ffe3c632Sopenharmony_ci assertNotNull(extension); 733ffe3c632Sopenharmony_ci assertEquals('ext1', extension.getExt1()); 734ffe3c632Sopenharmony_ci }); 735ffe3c632Sopenharmony_ci 736ffe3c632Sopenharmony_ci it('testSetExtension', function() { 737ffe3c632Sopenharmony_ci var data = new proto.jspb.test.HasExtensions(); 738ffe3c632Sopenharmony_ci var extensionMessage = new proto.jspb.test.IsExtension(['is_extension']); 739ffe3c632Sopenharmony_ci data.setExtension(proto.jspb.test.IsExtension.extField, extensionMessage); 740ffe3c632Sopenharmony_ci var obj = data.toObject(); 741ffe3c632Sopenharmony_ci assertNotNull( 742ffe3c632Sopenharmony_ci data.getExtension(proto.jspb.test.IsExtension.extField)); 743ffe3c632Sopenharmony_ci assertEquals('is_extension', obj.extField.ext1); 744ffe3c632Sopenharmony_ci }); 745ffe3c632Sopenharmony_ci 746ffe3c632Sopenharmony_ci /** 747ffe3c632Sopenharmony_ci * Note that group is long deprecated, we only support it because JsPb has 748ffe3c632Sopenharmony_ci * a goal of being able to generate JS classes for all proto descriptors. 749ffe3c632Sopenharmony_ci */ 750ffe3c632Sopenharmony_ci it('testGroups', function() { 751ffe3c632Sopenharmony_ci var group = new proto.jspb.test.TestGroup(); 752ffe3c632Sopenharmony_ci var someGroup = new proto.jspb.test.TestGroup.RepeatedGroup(); 753ffe3c632Sopenharmony_ci someGroup.setId('g1'); 754ffe3c632Sopenharmony_ci someGroup.setSomeBoolList([true, false]); 755ffe3c632Sopenharmony_ci group.setRepeatedGroupList([someGroup]); 756ffe3c632Sopenharmony_ci var groups = group.getRepeatedGroupList(); 757ffe3c632Sopenharmony_ci assertEquals('g1', groups[0].getId()); 758ffe3c632Sopenharmony_ci assertObjectEquals([true, false], groups[0].getSomeBoolList()); 759ffe3c632Sopenharmony_ci assertObjectEquals({id: 'g1', someBoolList: [true, false]}, 760ffe3c632Sopenharmony_ci groups[0].toObject()); 761ffe3c632Sopenharmony_ci assertObjectEquals({ 762ffe3c632Sopenharmony_ci repeatedGroupList: [{id: 'g1', someBoolList: [true, false]}], 763ffe3c632Sopenharmony_ci requiredGroup: {id: undefined}, 764ffe3c632Sopenharmony_ci optionalGroup: undefined, 765ffe3c632Sopenharmony_ci requiredSimple: {aRepeatedStringList: [], aString: undefined}, 766ffe3c632Sopenharmony_ci optionalSimple: undefined, 767ffe3c632Sopenharmony_ci id: undefined 768ffe3c632Sopenharmony_ci }, group.toObject()); 769ffe3c632Sopenharmony_ci var group1 = new proto.jspb.test.TestGroup1(); 770ffe3c632Sopenharmony_ci group1.setGroup(someGroup); 771ffe3c632Sopenharmony_ci assertEquals(someGroup, group1.getGroup()); 772ffe3c632Sopenharmony_ci }); 773ffe3c632Sopenharmony_ci 774ffe3c632Sopenharmony_ci it('testNonExtensionFieldsAfterExtensionRange', function() { 775ffe3c632Sopenharmony_ci var data = [{'1': 'a_string'}]; 776ffe3c632Sopenharmony_ci var message = new proto.jspb.test.Complex(data); 777ffe3c632Sopenharmony_ci assertArrayEquals([], message.getARepeatedStringList()); 778ffe3c632Sopenharmony_ci }); 779ffe3c632Sopenharmony_ci 780ffe3c632Sopenharmony_ci it('testReservedGetterNames', function() { 781ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestReservedNames(); 782ffe3c632Sopenharmony_ci message.setExtension$(11); 783ffe3c632Sopenharmony_ci message.setExtension(proto.jspb.test.TestReservedNamesExtension.foo, 12); 784ffe3c632Sopenharmony_ci assertEquals(11, message.getExtension$()); 785ffe3c632Sopenharmony_ci assertEquals(12, message.getExtension( 786ffe3c632Sopenharmony_ci proto.jspb.test.TestReservedNamesExtension.foo)); 787ffe3c632Sopenharmony_ci assertObjectEquals({extension: 11, foo: 12}, message.toObject()); 788ffe3c632Sopenharmony_ci }); 789ffe3c632Sopenharmony_ci 790ffe3c632Sopenharmony_ci it('testInitializeMessageWithUnsetOneof', function() { 791ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof([]); 792ffe3c632Sopenharmony_ci assertEquals( 793ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase. 794ffe3c632Sopenharmony_ci PARTIAL_ONEOF_NOT_SET, 795ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 796ffe3c632Sopenharmony_ci assertEquals( 797ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase. 798ffe3c632Sopenharmony_ci RECURSIVE_ONEOF_NOT_SET, 799ffe3c632Sopenharmony_ci message.getRecursiveOneofCase()); 800ffe3c632Sopenharmony_ci }); 801ffe3c632Sopenharmony_ci 802ffe3c632Sopenharmony_ci it('testInitializeMessageWithSingleValueSetInOneof', function() { 803ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof([,, 'x']); 804ffe3c632Sopenharmony_ci 805ffe3c632Sopenharmony_ci assertEquals('x', message.getPone()); 806ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 807ffe3c632Sopenharmony_ci assertEquals( 808ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, 809ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 810ffe3c632Sopenharmony_ci }); 811ffe3c632Sopenharmony_ci 812ffe3c632Sopenharmony_ci it('testKeepsLastWireValueSetInUnion_multipleValues', function() { 813ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof([,, 'x',, 'y']); 814ffe3c632Sopenharmony_ci 815ffe3c632Sopenharmony_ci assertEquals('', message.getPone()); 816ffe3c632Sopenharmony_ci assertEquals('y', message.getPthree()); 817ffe3c632Sopenharmony_ci assertEquals( 818ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PTHREE, 819ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 820ffe3c632Sopenharmony_ci }); 821ffe3c632Sopenharmony_ci 822ffe3c632Sopenharmony_ci it('testSettingOneofFieldClearsOthers', function() { 823ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 824ffe3c632Sopenharmony_ci assertEquals('', message.getPone()); 825ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 826ffe3c632Sopenharmony_ci assertFalse(message.hasPone()); 827ffe3c632Sopenharmony_ci assertFalse(message.hasPthree()); 828ffe3c632Sopenharmony_ci 829ffe3c632Sopenharmony_ci message.setPone('hi'); 830ffe3c632Sopenharmony_ci assertEquals('hi', message.getPone()); 831ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 832ffe3c632Sopenharmony_ci assertTrue(message.hasPone()); 833ffe3c632Sopenharmony_ci assertFalse(message.hasPthree()); 834ffe3c632Sopenharmony_ci 835ffe3c632Sopenharmony_ci message.setPthree('bye'); 836ffe3c632Sopenharmony_ci assertEquals('', message.getPone()); 837ffe3c632Sopenharmony_ci assertEquals('bye', message.getPthree()); 838ffe3c632Sopenharmony_ci assertFalse(message.hasPone()); 839ffe3c632Sopenharmony_ci assertTrue(message.hasPthree()); 840ffe3c632Sopenharmony_ci }); 841ffe3c632Sopenharmony_ci 842ffe3c632Sopenharmony_ci it('testSettingOneofFieldDoesNotClearFieldsFromOtherUnions', function() { 843ffe3c632Sopenharmony_ci var other = new proto.jspb.test.TestMessageWithOneof; 844ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 845ffe3c632Sopenharmony_ci assertEquals('', message.getPone()); 846ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 847ffe3c632Sopenharmony_ci assertUndefined(message.getRone()); 848ffe3c632Sopenharmony_ci assertFalse(message.hasPone()); 849ffe3c632Sopenharmony_ci assertFalse(message.hasPthree()); 850ffe3c632Sopenharmony_ci 851ffe3c632Sopenharmony_ci message.setPone('hi'); 852ffe3c632Sopenharmony_ci message.setRone(other); 853ffe3c632Sopenharmony_ci assertEquals('hi', message.getPone()); 854ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 855ffe3c632Sopenharmony_ci assertEquals(other, message.getRone()); 856ffe3c632Sopenharmony_ci assertTrue(message.hasPone()); 857ffe3c632Sopenharmony_ci assertFalse(message.hasPthree()); 858ffe3c632Sopenharmony_ci 859ffe3c632Sopenharmony_ci message.setPthree('bye'); 860ffe3c632Sopenharmony_ci assertEquals('', message.getPone()); 861ffe3c632Sopenharmony_ci assertEquals('bye', message.getPthree()); 862ffe3c632Sopenharmony_ci assertEquals(other, message.getRone()); 863ffe3c632Sopenharmony_ci assertFalse(message.hasPone()); 864ffe3c632Sopenharmony_ci assertTrue(message.hasPthree()); 865ffe3c632Sopenharmony_ci }); 866ffe3c632Sopenharmony_ci 867ffe3c632Sopenharmony_ci it('testUnsetsOneofCaseWhenFieldIsCleared', function() { 868ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 869ffe3c632Sopenharmony_ci assertEquals( 870ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase. 871ffe3c632Sopenharmony_ci PARTIAL_ONEOF_NOT_SET, 872ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 873ffe3c632Sopenharmony_ci 874ffe3c632Sopenharmony_ci message.setPone('hi'); 875ffe3c632Sopenharmony_ci assertEquals( 876ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, 877ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 878ffe3c632Sopenharmony_ci 879ffe3c632Sopenharmony_ci message.clearPone(); 880ffe3c632Sopenharmony_ci assertEquals( 881ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase. 882ffe3c632Sopenharmony_ci PARTIAL_ONEOF_NOT_SET, 883ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 884ffe3c632Sopenharmony_ci }); 885ffe3c632Sopenharmony_ci 886ffe3c632Sopenharmony_ci it('testMessageWithDefaultOneofValues', function() { 887ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 888ffe3c632Sopenharmony_ci assertEquals(1234, message.getAone()); 889ffe3c632Sopenharmony_ci assertEquals(0, message.getAtwo()); 890ffe3c632Sopenharmony_ci assertEquals( 891ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase 892ffe3c632Sopenharmony_ci .DEFAULT_ONEOF_A_NOT_SET, 893ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 894ffe3c632Sopenharmony_ci 895ffe3c632Sopenharmony_ci message.setAone(567); 896ffe3c632Sopenharmony_ci assertEquals(567, message.getAone()); 897ffe3c632Sopenharmony_ci assertEquals(0, message.getAtwo()); 898ffe3c632Sopenharmony_ci assertEquals( 899ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.AONE, 900ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 901ffe3c632Sopenharmony_ci 902ffe3c632Sopenharmony_ci message.setAtwo(890); 903ffe3c632Sopenharmony_ci assertEquals(1234, message.getAone()); 904ffe3c632Sopenharmony_ci assertEquals(890, message.getAtwo()); 905ffe3c632Sopenharmony_ci assertEquals( 906ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, 907ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 908ffe3c632Sopenharmony_ci 909ffe3c632Sopenharmony_ci message.clearAtwo(); 910ffe3c632Sopenharmony_ci assertEquals(1234, message.getAone()); 911ffe3c632Sopenharmony_ci assertEquals(0, message.getAtwo()); 912ffe3c632Sopenharmony_ci assertEquals( 913ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase 914ffe3c632Sopenharmony_ci .DEFAULT_ONEOF_A_NOT_SET, 915ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 916ffe3c632Sopenharmony_ci }); 917ffe3c632Sopenharmony_ci 918ffe3c632Sopenharmony_ci it('testMessageWithDefaultOneofValues_defaultNotOnFirstField', function() { 919ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 920ffe3c632Sopenharmony_ci assertEquals(0, message.getBone()); 921ffe3c632Sopenharmony_ci assertEquals(1234, message.getBtwo()); 922ffe3c632Sopenharmony_ci assertFalse(message.hasBone()); 923ffe3c632Sopenharmony_ci assertFalse(message.hasBtwo()); 924ffe3c632Sopenharmony_ci assertEquals( 925ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase 926ffe3c632Sopenharmony_ci .DEFAULT_ONEOF_B_NOT_SET, 927ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 928ffe3c632Sopenharmony_ci 929ffe3c632Sopenharmony_ci message.setBone(2); 930ffe3c632Sopenharmony_ci assertEquals(2, message.getBone()); 931ffe3c632Sopenharmony_ci assertEquals(1234, message.getBtwo()); 932ffe3c632Sopenharmony_ci assertTrue(message.hasBone()); 933ffe3c632Sopenharmony_ci assertFalse(message.hasBtwo()); 934ffe3c632Sopenharmony_ci assertEquals( 935ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BONE, 936ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 937ffe3c632Sopenharmony_ci 938ffe3c632Sopenharmony_ci message.setBtwo(3); 939ffe3c632Sopenharmony_ci assertEquals(0, message.getBone()); 940ffe3c632Sopenharmony_ci assertFalse(message.hasBone()); 941ffe3c632Sopenharmony_ci assertTrue(message.hasBtwo()); 942ffe3c632Sopenharmony_ci assertEquals(3, message.getBtwo()); 943ffe3c632Sopenharmony_ci assertEquals( 944ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, 945ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 946ffe3c632Sopenharmony_ci 947ffe3c632Sopenharmony_ci message.clearBtwo(); 948ffe3c632Sopenharmony_ci assertEquals(0, message.getBone()); 949ffe3c632Sopenharmony_ci assertFalse(message.hasBone()); 950ffe3c632Sopenharmony_ci assertFalse(message.hasBtwo()); 951ffe3c632Sopenharmony_ci assertEquals(1234, message.getBtwo()); 952ffe3c632Sopenharmony_ci assertEquals( 953ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase 954ffe3c632Sopenharmony_ci .DEFAULT_ONEOF_B_NOT_SET, 955ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 956ffe3c632Sopenharmony_ci }); 957ffe3c632Sopenharmony_ci 958ffe3c632Sopenharmony_ci it('testInitializeMessageWithOneofDefaults', function() { 959ffe3c632Sopenharmony_ci var message = 960ffe3c632Sopenharmony_ci new proto.jspb.test.TestMessageWithOneof(new Array(9).concat(567)); 961ffe3c632Sopenharmony_ci assertEquals(567, message.getAone()); 962ffe3c632Sopenharmony_ci assertEquals(0, message.getAtwo()); 963ffe3c632Sopenharmony_ci assertEquals( 964ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.AONE, 965ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 966ffe3c632Sopenharmony_ci 967ffe3c632Sopenharmony_ci message = 968ffe3c632Sopenharmony_ci new proto.jspb.test.TestMessageWithOneof(new Array(10).concat(890)); 969ffe3c632Sopenharmony_ci assertEquals(1234, message.getAone()); 970ffe3c632Sopenharmony_ci assertEquals(890, message.getAtwo()); 971ffe3c632Sopenharmony_ci assertEquals( 972ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, 973ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 974ffe3c632Sopenharmony_ci 975ffe3c632Sopenharmony_ci message = 976ffe3c632Sopenharmony_ci new proto.jspb.test.TestMessageWithOneof(new Array(9).concat(567, 890)); 977ffe3c632Sopenharmony_ci assertEquals(1234, message.getAone()); 978ffe3c632Sopenharmony_ci assertEquals(890, message.getAtwo()); 979ffe3c632Sopenharmony_ci assertEquals( 980ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, 981ffe3c632Sopenharmony_ci message.getDefaultOneofACase()); 982ffe3c632Sopenharmony_ci }); 983ffe3c632Sopenharmony_ci 984ffe3c632Sopenharmony_ci it('testInitializeMessageWithOneofDefaults_defaultNotSetOnFirstField', 985ffe3c632Sopenharmony_ci function() { 986ffe3c632Sopenharmony_ci var message; 987ffe3c632Sopenharmony_ci 988ffe3c632Sopenharmony_ci message = 989ffe3c632Sopenharmony_ci new proto.jspb.test.TestMessageWithOneof(new Array(11).concat(567)); 990ffe3c632Sopenharmony_ci assertEquals(567, message.getBone()); 991ffe3c632Sopenharmony_ci assertEquals(1234, message.getBtwo()); 992ffe3c632Sopenharmony_ci assertEquals( 993ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BONE, 994ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 995ffe3c632Sopenharmony_ci 996ffe3c632Sopenharmony_ci message = 997ffe3c632Sopenharmony_ci new proto.jspb.test.TestMessageWithOneof(new Array(12).concat(890)); 998ffe3c632Sopenharmony_ci assertEquals(0, message.getBone()); 999ffe3c632Sopenharmony_ci assertEquals(890, message.getBtwo()); 1000ffe3c632Sopenharmony_ci assertEquals( 1001ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, 1002ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 1003ffe3c632Sopenharmony_ci 1004ffe3c632Sopenharmony_ci message = new proto.jspb.test.TestMessageWithOneof( 1005ffe3c632Sopenharmony_ci new Array(11).concat(567, 890)); 1006ffe3c632Sopenharmony_ci assertEquals(0, message.getBone()); 1007ffe3c632Sopenharmony_ci assertEquals(890, message.getBtwo()); 1008ffe3c632Sopenharmony_ci assertEquals( 1009ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, 1010ffe3c632Sopenharmony_ci message.getDefaultOneofBCase()); 1011ffe3c632Sopenharmony_ci }); 1012ffe3c632Sopenharmony_ci 1013ffe3c632Sopenharmony_ci it('testOneofContainingAnotherMessage', function() { 1014ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 1015ffe3c632Sopenharmony_ci assertEquals( 1016ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase. 1017ffe3c632Sopenharmony_ci RECURSIVE_ONEOF_NOT_SET, 1018ffe3c632Sopenharmony_ci message.getRecursiveOneofCase()); 1019ffe3c632Sopenharmony_ci 1020ffe3c632Sopenharmony_ci var other = new proto.jspb.test.TestMessageWithOneof; 1021ffe3c632Sopenharmony_ci message.setRone(other); 1022ffe3c632Sopenharmony_ci assertEquals(other, message.getRone()); 1023ffe3c632Sopenharmony_ci assertEquals('', message.getRtwo()); 1024ffe3c632Sopenharmony_ci assertEquals( 1025ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase.RONE, 1026ffe3c632Sopenharmony_ci message.getRecursiveOneofCase()); 1027ffe3c632Sopenharmony_ci 1028ffe3c632Sopenharmony_ci message.setRtwo('hi'); 1029ffe3c632Sopenharmony_ci assertUndefined(message.getRone()); 1030ffe3c632Sopenharmony_ci assertEquals('hi', message.getRtwo()); 1031ffe3c632Sopenharmony_ci assertEquals( 1032ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase.RTWO, 1033ffe3c632Sopenharmony_ci message.getRecursiveOneofCase()); 1034ffe3c632Sopenharmony_ci }); 1035ffe3c632Sopenharmony_ci 1036ffe3c632Sopenharmony_ci it('testQueryingOneofCaseEnsuresOnlyOneFieldIsSetInUnderlyingArray', 1037ffe3c632Sopenharmony_ci function() { 1038ffe3c632Sopenharmony_ci var message = new proto.jspb.test.TestMessageWithOneof; 1039ffe3c632Sopenharmony_ci message.setPone('x'); 1040ffe3c632Sopenharmony_ci assertEquals('x', message.getPone()); 1041ffe3c632Sopenharmony_ci assertEquals('', message.getPthree()); 1042ffe3c632Sopenharmony_ci assertEquals( 1043ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, 1044ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 1045ffe3c632Sopenharmony_ci 1046ffe3c632Sopenharmony_ci var array = message.toArray(); 1047ffe3c632Sopenharmony_ci assertEquals('x', array[2]); 1048ffe3c632Sopenharmony_ci assertUndefined(array[4]); 1049ffe3c632Sopenharmony_ci array[4] = 'y'; 1050ffe3c632Sopenharmony_ci 1051ffe3c632Sopenharmony_ci assertEquals( 1052ffe3c632Sopenharmony_ci proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PTHREE, 1053ffe3c632Sopenharmony_ci message.getPartialOneofCase()); 1054ffe3c632Sopenharmony_ci assertUndefined(array[2]); 1055ffe3c632Sopenharmony_ci assertEquals('y', array[4]); 1056ffe3c632Sopenharmony_ci }); 1057ffe3c632Sopenharmony_ci 1058ffe3c632Sopenharmony_ci it('testFloatingPointFieldsSupportNan', function() { 1059ffe3c632Sopenharmony_ci var assertNan = function(x) { 1060ffe3c632Sopenharmony_ci assertTrue( 1061ffe3c632Sopenharmony_ci 'Expected ' + x + ' (' + goog.typeOf(x) + ') to be NaN.', 1062ffe3c632Sopenharmony_ci typeof x === 'number' && isNaN(x)); 1063ffe3c632Sopenharmony_ci }; 1064ffe3c632Sopenharmony_ci 1065ffe3c632Sopenharmony_ci var message = new proto.jspb.test.FloatingPointFields([ 1066ffe3c632Sopenharmony_ci 'NaN', 'NaN', ['NaN', 'NaN'], 'NaN', 1067ffe3c632Sopenharmony_ci 'NaN', 'NaN', ['NaN', 'NaN'], 'NaN' 1068ffe3c632Sopenharmony_ci ]); 1069ffe3c632Sopenharmony_ci assertNan(message.getOptionalFloatField()); 1070ffe3c632Sopenharmony_ci assertNan(message.getRequiredFloatField()); 1071ffe3c632Sopenharmony_ci assertNan(message.getRepeatedFloatFieldList()[0]); 1072ffe3c632Sopenharmony_ci assertNan(message.getRepeatedFloatFieldList()[1]); 1073ffe3c632Sopenharmony_ci assertNan(message.getDefaultFloatField()); 1074ffe3c632Sopenharmony_ci assertNan(message.getOptionalDoubleField()); 1075ffe3c632Sopenharmony_ci assertNan(message.getRequiredDoubleField()); 1076ffe3c632Sopenharmony_ci assertNan(message.getRepeatedDoubleFieldList()[0]); 1077ffe3c632Sopenharmony_ci assertNan(message.getRepeatedDoubleFieldList()[1]); 1078ffe3c632Sopenharmony_ci assertNan(message.getDefaultDoubleField()); 1079ffe3c632Sopenharmony_ci }); 1080ffe3c632Sopenharmony_ci 1081ffe3c632Sopenharmony_ci}); 1082