sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
336 lines (274 loc) • 10.3 kB
HTML
<html>
<!--
Copyright 2008 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by an Apache 2.0 License.
See the COPYING file for details.
-->
<!--
Author: jschorr@google.com (Joseph Schorr)
-->
<head>
<title>Closure Unit Tests - goog.proto2 - objectserializer.js</title>
<script src="../base.js"></script>
<script>
goog.require('goog.proto2.ObjectSerializer');
goog.require('goog.testing.jsunit');
goog.require('proto2.TestAllTypes');
</script>
</head>
<body>
<script>
function testSerialization() {
var message = new proto2.TestAllTypes();
// Set the fields.
// Singular.
message.setOptionalInt32(101);
message.setOptionalInt64(102);
message.setOptionalUint32(103);
message.setOptionalUint64(104);
message.setOptionalSint32(105);
message.setOptionalSint64(106);
message.setOptionalFixed32(107);
message.setOptionalFixed64(108);
message.setOptionalSfixed32(109);
message.setOptionalSfixed64(110);
message.setOptionalFloat(111.5);
message.setOptionalDouble(112.5);
message.setOptionalBool(true);
message.setOptionalString('test');
message.setOptionalBytes('abcd');
var group = new proto2.TestAllTypes.OptionalGroup();
group.setA(111);
message.setOptionalgroup(group);
var nestedMessage = new proto2.TestAllTypes.NestedMessage();
nestedMessage.setB(112);
message.setOptionalNestedMessage(nestedMessage);
message.setOptionalNestedEnum(proto2.TestAllTypes.NestedEnum.FOO);
// Repeated.
message.addRepeatedInt32(201);
message.addRepeatedInt32(202);
// Serialize to a simplified object.
var simplified = new goog.proto2.ObjectSerializer().serialize(message);
// Assert that everything serialized properly.
assertEquals(101, simplified[1]);
assertEquals(102, simplified[2]);
assertEquals(103, simplified[3]);
assertEquals(104, simplified[4]);
assertEquals(105, simplified[5]);
assertEquals(106, simplified[6]);
assertEquals(107, simplified[7]);
assertEquals(108, simplified[8]);
assertEquals(109, simplified[9]);
assertEquals(110, simplified[10]);
assertEquals(111.5, simplified[11]);
assertEquals(112.5, simplified[12]);
assertEquals(true, simplified[13]);
assertEquals('test', simplified[14]);
assertEquals('abcd', simplified[15]);
assertEquals(111, simplified[16][17]);
assertEquals(112, simplified[18][1]);
assertEquals(proto2.TestAllTypes.NestedEnum.FOO, simplified[21]);
assertEquals(201, simplified[31][0]);
assertEquals(202, simplified[31][1]);
// Serialize to a simplified object (with key as name).
simplified = new goog.proto2.ObjectSerializer(
goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(message);
// Assert that everything serialized properly.
assertEquals(101, simplified['optional_int32']);
assertEquals(102, simplified['optional_int64']);
assertEquals(103, simplified['optional_uint32']);
assertEquals(104, simplified['optional_uint64']);
assertEquals(105, simplified['optional_sint32']);
assertEquals(106, simplified['optional_sint64']);
assertEquals(107, simplified['optional_fixed32']);
assertEquals(108, simplified['optional_fixed64']);
assertEquals(109, simplified['optional_sfixed32']);
assertEquals(110, simplified['optional_sfixed64']);
assertEquals(111.5, simplified['optional_float']);
assertEquals(112.5, simplified['optional_double']);
assertEquals(true, simplified['optional_bool']);
assertEquals('test', simplified['optional_string']);
assertEquals('abcd', simplified['optional_bytes']);
assertEquals(111, simplified['optionalgroup']['a']);
assertEquals(112, simplified['optional_nested_message']['b']);
assertEquals(proto2.TestAllTypes.NestedEnum.FOO,
simplified['optional_nested_enum']);
assertEquals(201, simplified['repeated_int32'][0]);
assertEquals(202, simplified['repeated_int32'][1]);
}
function testSerializationOfUnknown() {
var message = new proto2.TestAllTypes();
// Set the fields.
// Known.
message.setOptionalInt32(101);
message.setOptionalInt64(102);
message.addRepeatedInt32(201);
message.addRepeatedInt32(202);
// Unknown.
message.setUnknown(1000, 301);
message.setUnknown(1001, 302);
// Serialize.
var simplified = new goog.proto2.ObjectSerializer().serialize(message);
assertEquals(101, simplified['1']);
assertEquals(102, simplified['2']);
assertEquals(201, simplified['31'][0]);
assertEquals(202, simplified['31'][1]);
assertEquals(301, simplified['1000']);
assertEquals(302, simplified['1001']);
}
function testDeserializationOfUnknown() {
var simplified = {
1: 101,
2: 102,
1000: 103,
1001: 104
};
var serializer = new goog.proto2.ObjectSerializer();
var message = serializer.deserialize(
proto2.TestAllTypes.getDescriptor(), simplified);
assertNotNull(message);
assertTrue(message.hasOptionalInt32());
assertTrue(message.hasOptionalInt64());
assertEquals(101, message.getOptionalInt32());
assertEquals(102, message.getOptionalInt64());
var count = 0;
message.forEachUnknown(function(tag, value) {
if (tag == 1000) {
assertEquals(103, value);
}
if (tag == 1001) {
assertEquals(104, value);
}
++count;
});
assertEquals(2, count);
};
function testDeserializationRepeated() {
var simplified = {
31: [101, 102],
41: [201.5, 202.5, 203.5],
42: [],
43: [ true, false ],
44: [ 'he', 'llo' ],
46: [ { 47: [101] } , { 47: [102] } ],
48: [ { 1: 201 }, { 1: 202 } ]
}
var serializer = new goog.proto2.ObjectSerializer();
var message = serializer.deserialize(
proto2.TestAllTypes.getDescriptor(), simplified);
assertNotNull(message);
// Ensure the fields are set as expected.
assertTrue(message.hasRepeatedInt32());
assertTrue(message.hasRepeatedFloat());
assertFalse(message.hasRepeatedDouble());
assertTrue(message.hasRepeatedBool());
assertTrue(message.hasRepeatedgroup());
assertTrue(message.hasRepeatedNestedMessage());
// Ensure the counts match.
assertEquals(2, message.repeatedInt32Count());
assertEquals(3, message.repeatedFloatCount());
assertEquals(0, message.repeatedDoubleCount());
assertEquals(2, message.repeatedBoolCount());
assertEquals(2, message.repeatedStringCount());
assertEquals(2, message.repeatedgroupCount());
assertEquals(2, message.repeatedNestedMessageCount());
// Ensure the values match.
assertEquals(101, message.getRepeatedInt32(0));
assertEquals(102, message.getRepeatedInt32(1));
assertEquals(201.5, message.getRepeatedFloat(0));
assertEquals(202.5, message.getRepeatedFloat(1));
assertEquals(203.5, message.getRepeatedFloat(2));
assertEquals(true, message.getRepeatedBool(0));
assertEquals(false, message.getRepeatedBool(1));
assertEquals('he', message.getRepeatedString(0));
assertEquals('llo', message.getRepeatedString(1));
assertEquals(101, message.getRepeatedgroup(0).getA(0));
assertEquals(102, message.getRepeatedgroup(1).getA(0));
assertEquals(201, message.getRepeatedNestedMessage(0).getB());
assertEquals(202, message.getRepeatedNestedMessage(1).getB());
}
function testDeserialization() {
var simplified = {
1: 101,
2: 102,
3: 103,
4: 104,
5: 105,
6: 106,
7: 107,
8: 108,
9: 109,
10: 110,
11: 111.5,
12: 112.5,
13: true,
14: 'test',
15: 'abcd',
16: { 17 : 113 },
18: { 1 : 114 },
21: proto2.TestAllTypes.NestedEnum.FOO
};
var serializer = new goog.proto2.ObjectSerializer();
var message = serializer.deserialize(
proto2.TestAllTypes.getDescriptor(), simplified);
assertNotNull(message);
assertTrue(message.hasOptionalInt32());
assertTrue(message.hasOptionalInt64());
assertTrue(message.hasOptionalUint32());
assertTrue(message.hasOptionalUint64());
assertTrue(message.hasOptionalSint32());
assertTrue(message.hasOptionalSint64());
assertTrue(message.hasOptionalFixed32());
assertTrue(message.hasOptionalFixed64());
assertTrue(message.hasOptionalSfixed32());
assertTrue(message.hasOptionalSfixed64());
assertTrue(message.hasOptionalFloat());
assertTrue(message.hasOptionalDouble());
assertTrue(message.hasOptionalBool());
assertTrue(message.hasOptionalString());
assertTrue(message.hasOptionalBytes());
assertTrue(message.hasOptionalgroup());
assertTrue(message.hasOptionalNestedMessage());
assertTrue(message.hasOptionalNestedEnum());
assertEquals(1, message.optionalInt32Count());
assertEquals(1, message.optionalInt64Count());
assertEquals(1, message.optionalUint32Count());
assertEquals(1, message.optionalUint64Count());
assertEquals(1, message.optionalSint32Count());
assertEquals(1, message.optionalSint64Count());
assertEquals(1, message.optionalFixed32Count());
assertEquals(1, message.optionalFixed64Count());
assertEquals(1, message.optionalSfixed32Count());
assertEquals(1, message.optionalSfixed64Count());
assertEquals(1, message.optionalFloatCount());
assertEquals(1, message.optionalDoubleCount());
assertEquals(1, message.optionalBoolCount());
assertEquals(1, message.optionalStringCount());
assertEquals(1, message.optionalBytesCount());
assertEquals(1, message.optionalgroupCount());
assertEquals(1, message.optionalNestedMessageCount());
assertEquals(1, message.optionalNestedEnumCount());
assertEquals(101, message.getOptionalInt32());
assertEquals(102, message.getOptionalInt64());
assertEquals(103, message.getOptionalUint32());
assertEquals(104, message.getOptionalUint64());
assertEquals(105, message.getOptionalSint32());
assertEquals(106, message.getOptionalSint64());
assertEquals(107, message.getOptionalFixed32());
assertEquals(108, message.getOptionalFixed64());
assertEquals(109, message.getOptionalSfixed32());
assertEquals(110, message.getOptionalSfixed64());
assertEquals(111.5, message.getOptionalFloat());
assertEquals(112.5, message.getOptionalDouble());
assertEquals(true, message.getOptionalBool());
assertEquals('test', message.getOptionalString());
assertEquals('abcd', message.getOptionalBytes());
assertEquals(113, message.getOptionalgroup().getA());
assertEquals(114, message.getOptionalNestedMessage().getB());
assertEquals(proto2.TestAllTypes.NestedEnum.FOO,
message.getOptionalNestedEnum());
}
</script>
</body>
</html>