diff options
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/proto2/textformatserializer_test.js')
-rw-r--r-- | contexts/data/lib/closure-library/closure/goog/proto2/textformatserializer_test.js | 628 |
1 files changed, 0 insertions, 628 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/proto2/textformatserializer_test.js b/contexts/data/lib/closure-library/closure/goog/proto2/textformatserializer_test.js deleted file mode 100644 index b6ab9cb..0000000 --- a/contexts/data/lib/closure-library/closure/goog/proto2/textformatserializer_test.js +++ /dev/null @@ -1,628 +0,0 @@ -// Copyright 2012 The Closure Library Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS-IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * @fileoverview Unit tests for goog.proto2.TextFormatSerializer - * - */ - -goog.provide('goog.proto2.TextFormatSerializerTest'); - -goog.require('goog.proto2.TextFormatSerializer'); -goog.require('goog.testing.jsunit'); -goog.require('goog.testing.recordFunction'); -goog.require('proto2.TestAllTypes'); - -goog.setTestOnly('goog.proto2.TextFormatSerializerTest'); - -function testSerialization() { - var message = new proto2.TestAllTypes(); - - // Set the fields. - // Singular. - message.setOptionalInt32(101); - message.setOptionalUint32(103); - message.setOptionalSint32(105); - message.setOptionalFixed32(107); - message.setOptionalSfixed32(109); - message.setOptionalInt64('102'); - 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 text format. - var simplified = new goog.proto2.TextFormatSerializer().serialize(message); - var expected = 'optional_int32: 101\n' + - 'optional_int64: 102\n' + - 'optional_uint32: 103\n' + - 'optional_sint32: 105\n' + - 'optional_fixed32: 107\n' + - 'optional_sfixed32: 109\n' + - 'optional_float: 111.5\n' + - 'optional_double: 112.5\n' + - 'optional_bool: true\n' + - 'optional_string: "test"\n' + - 'optional_bytes: "abcd"\n' + - 'optionalgroup {\n' + - ' a: 111\n' + - '}\n' + - 'optional_nested_message {\n' + - ' b: 112\n' + - '}\n' + - 'optional_nested_enum: FOO\n' + - 'repeated_int32: 201\n' + - 'repeated_int32: 202\n'; - - assertEquals(expected, simplified); -} - -function testSerializationOfUnknown() { - var nestedUnknown = new proto2.TestAllTypes(); - var message = new proto2.TestAllTypes(); - - // Set the fields. - // Known. - message.setOptionalInt32(101); - message.addRepeatedInt32(201); - message.addRepeatedInt32(202); - - nestedUnknown.addRepeatedInt32(301); - nestedUnknown.addRepeatedInt32(302); - - // Unknown. - message.setUnknown(1000, 301); - message.setUnknown(1001, 302); - message.setUnknown(1002, 'hello world'); - message.setUnknown(1002, nestedUnknown); - - nestedUnknown.setUnknown(2000, 401); - - // Serialize. - var simplified = new goog.proto2.TextFormatSerializer().serialize(message); - var expected = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'repeated_int32: 202\n' + - '1000: 301\n' + - '1001: 302\n' + - '1002 {\n' + - ' repeated_int32: 301\n' + - ' repeated_int32: 302\n' + - ' 2000: 401\n' + - '}'; - - assertEquals(expected, simplified); -} - -/** - * Asserts that the given string value parses into the given set of tokens. - * @param {string} value The string value to parse. - * @param {Array.<Object> | Object} tokens The tokens to check against. If not - * an array, a single token is expected. - * @param {boolean=} opt_ignoreWhitespace Whether whitespace tokens should be - * skipped by the tokenizer. - */ -function assertTokens(value, tokens, opt_ignoreWhitespace) { - var tokenizer = new goog.proto2.TextFormatSerializer.Tokenizer_( - value, opt_ignoreWhitespace); - var tokensFound = []; - - while (tokenizer.next()) { - tokensFound.push(tokenizer.getCurrent()); - } - - if (goog.typeOf(tokens) != 'array') { - tokens = [tokens]; - } - - assertEquals(tokens.length, tokensFound.length); - for (var i = 0; i < tokens.length; ++i) { - assertToken(tokens[i], tokensFound[i]); - } -} - -function assertToken(expected, found) { - assertEquals(expected.type, found.type); - if (expected.value) { - assertEquals(expected.value, found.value); - } -} - -function testTokenizer() { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens('{ 123 }', [ - { type: types.OPEN_BRACE }, - { type: types.WHITESPACE, value: ' ' }, - { type: types.NUMBER, value: '123' }, - { type: types.WHITESPACE, value: ' '}, - { type: types.CLOSE_BRACE } - ]); -} - -function testTokenizerNoWhitespace() { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens('{ "hello world" }', [ - { type: types.OPEN_BRACE }, - { type: types.STRING, value: '"hello world"' }, - { type: types.CLOSE_BRACE } - ], true); -} - - -function assertIdentifier(identifier) { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens(identifier, { type: types.IDENTIFIER, value: identifier }); -} - -function assertComment(comment) { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens(comment, { type: types.COMMENT, value: comment }); -} - -function assertString(str) { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens(str, { type: types.STRING, value: str }); -} - -function assertNumber(num) { - num = num.toString(); - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens(num, { type: types.NUMBER, value: num }); -} - -function testTokenizerSingleTokens() { - var types = goog.proto2.TextFormatSerializer.Tokenizer_.TokenTypes; - assertTokens('{', { type: types.OPEN_BRACE }); - assertTokens('}', { type: types.CLOSE_BRACE }); - assertTokens('<', { type: types.OPEN_TAG }); - assertTokens('>', { type: types.CLOSE_TAG }); - assertTokens(':', { type: types.COLON }); - assertTokens(',', { type: types.COMMA }); - assertTokens(';', { type: types.SEMI }); - - assertIdentifier('abcd'); - assertIdentifier('Abcd'); - assertIdentifier('ABcd'); - assertIdentifier('ABcD'); - assertIdentifier('a123nc'); - assertIdentifier('a45_bC'); - assertIdentifier('A45_bC'); - - assertIdentifier('inf'); - assertIdentifier('infinity'); - assertIdentifier('nan'); - - assertNumber(0); - assertNumber(10); - assertNumber(123); - assertNumber(1234); - assertNumber(123.56); - assertNumber(-124); - assertNumber(-1234); - assertNumber(-123.56); - assertNumber('123f'); - assertNumber('123.6f'); - assertNumber('-123f'); - assertNumber('-123.8f'); - assertNumber('0x1234'); - assertNumber('0x12ac34'); - assertNumber('0x49e281db686fb'); - - assertString('""'); - assertString('"hello world"'); - assertString('"hello # world"'); - assertString('"hello #\\" world"'); - assertString('"|"'); - assertString('"\\"\\""'); - assertString('"\\"foo\\""'); - assertString('"\\"foo\\" and \\"bar\\""'); - assertString('"foo \\"and\\" bar"'); - - assertComment('# foo bar baz'); - assertComment('# foo ## bar baz'); - assertComment('# foo "bar" baz'); -} - -function testSerializationOfStringWithQuotes() { - var nestedUnknown = new proto2.TestAllTypes(); - var message = new proto2.TestAllTypes(); - message.setOptionalString('hello "world"'); - - // Serialize. - var simplified = new goog.proto2.TextFormatSerializer().serialize(message); - var expected = 'optional_string: "hello \\"world\\""\n'; - assertEquals(expected, simplified); -} - -function testDeserialization() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(202, message.getRepeatedInt32(1)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationOfList() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: [201, 202]\n' + - 'optional_float: 123.4'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationOfIntegerAsHexadecimalString() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 0x1\n' + - 'optional_sint32: 0xf\n' + - 'optional_uint32: 0xffffffff\n' + - 'repeated_int32: [0x0, 0xff]\n'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(1, message.getOptionalInt32()); - assertEquals(15, message.getOptionalSint32()); - assertEquals(4294967295, message.getOptionalUint32()); - assertEquals(0, message.getRepeatedInt32(0)); - assertEquals(255, message.getRepeatedInt32(1)); -} - -function testDeserializationOfInt64AsHexadecimalString() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int64: 0xf'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals('0xf', message.getOptionalInt64()); -} - -function testDeserializationOfZeroFalseAndEmptyString() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 0\n' + - 'optional_bool: false\n' + - 'optional_string: ""'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(0, message.getOptionalInt32()); - assertEquals(false, message.getOptionalBool()); - assertEquals('', message.getOptionalString()); -} - -function testDeserializationSkipUnknown() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'some_unknown: true\n' + - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - var parser = new goog.proto2.TextFormatSerializer.Parser(); - assertTrue(parser.parse(message, value, true)); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(202, message.getRepeatedInt32(1)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationSkipUnknownList() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'some_unknown: [true, 1, 201, "hello"]\n' + - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - var parser = new goog.proto2.TextFormatSerializer.Parser(); - assertTrue(parser.parse(message, value, true)); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(202, message.getRepeatedInt32(1)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationSkipUnknownNested() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'some_unknown: <\n' + - ' a: 1\n' + - ' b: 2\n' + - '>\n' + - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - var parser = new goog.proto2.TextFormatSerializer.Parser(); - assertTrue(parser.parse(message, value, true)); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(202, message.getRepeatedInt32(1)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationSkipUnknownNestedInvalid() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'some_unknown: <\n' + - ' a: \n' + // Missing value. - ' b: 2\n' + - '>\n' + - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - var parser = new goog.proto2.TextFormatSerializer.Parser(); - assertFalse(parser.parse(message, value, true)); -} - -function testDeserializationSkipUnknownNestedInvalid2() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'repeated_int32: 201\n' + - 'some_unknown: <\n' + - ' a: 2\n' + - ' b: 2\n' + - '}\n' + // Delimiter mismatch - 'repeated_int32: 202\n' + - 'optional_float: 123.4'; - - var parser = new goog.proto2.TextFormatSerializer.Parser(); - assertFalse(parser.parse(message, value, true)); -} - - -function testDeserializationLegacyFormat() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101,\n' + - 'repeated_int32: 201,\n' + - 'repeated_int32: 202;\n' + - 'optional_float: 123.4'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(201, message.getRepeatedInt32(0)); - assertEquals(202, message.getRepeatedInt32(1)); - assertEquals(123.4, message.getOptionalFloat()); -} - -function testDeserializationVariedNumbers() { - var message = new proto2.TestAllTypes(); - var value = ( - 'repeated_int32: 23\n' + - 'repeated_int32: -3\n' + - 'repeated_int32: 0xdeadbeef\n' + - 'repeated_float: 123.0\n' + - 'repeated_float: -3.27\n' + - 'repeated_float: -35.5f\n' - ); - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(23, message.getRepeatedInt32(0)); - assertEquals(-3, message.getRepeatedInt32(1)); - assertEquals(3735928559, message.getRepeatedInt32(2)); - assertEquals(123.0, message.getRepeatedFloat(0)); - assertEquals(-3.27, message.getRepeatedFloat(1)); - assertEquals(-35.5, message.getRepeatedFloat(2)); -} - -function testParseNumericalConstant() { - var parseNumericalConstant = - goog.proto2.TextFormatSerializer.Parser.parseNumericalConstant_; - - assertEquals(Infinity, parseNumericalConstant('inf')); - assertEquals(Infinity, parseNumericalConstant('inff')); - assertEquals(Infinity, parseNumericalConstant('infinity')); - assertEquals(Infinity, parseNumericalConstant('infinityf')); - assertEquals(Infinity, parseNumericalConstant('Infinityf')); - - assertEquals(-Infinity, parseNumericalConstant('-inf')); - assertEquals(-Infinity, parseNumericalConstant('-inff')); - assertEquals(-Infinity, parseNumericalConstant('-infinity')); - assertEquals(-Infinity, parseNumericalConstant('-infinityf')); - assertEquals(-Infinity, parseNumericalConstant('-Infinity')); - - assertNull(parseNumericalConstant('-infin')); - assertNull(parseNumericalConstant('infin')); - assertNull(parseNumericalConstant('-infinite')); - - assertNull(parseNumericalConstant('-infin')); - assertNull(parseNumericalConstant('infin')); - assertNull(parseNumericalConstant('-infinite')); - - assertTrue(isNaN(parseNumericalConstant('Nan'))); - assertTrue(isNaN(parseNumericalConstant('NaN'))); - assertTrue(isNaN(parseNumericalConstant('NAN'))); - assertTrue(isNaN(parseNumericalConstant('nan'))); - assertTrue(isNaN(parseNumericalConstant('nanf'))); - assertTrue(isNaN(parseNumericalConstant('NaNf'))); - - assertEquals(Number.POSITIVE_INFINITY, parseNumericalConstant('infinity')); - assertEquals(Number.NEGATIVE_INFINITY, parseNumericalConstant('-inf')); - assertEquals(Number.NEGATIVE_INFINITY, parseNumericalConstant('-infinity')); - - assertNull(parseNumericalConstant('na')); - assertNull(parseNumericalConstant('-nan')); - assertNull(parseNumericalConstant('none')); -} - -function testDeserializationOfNumericalConstants() { - - var message = new proto2.TestAllTypes(); - var value = ( - 'repeated_float: inf\n' + - 'repeated_float: -inf\n' + - 'repeated_float: nan\n' + - 'repeated_float: 300.2\n' - ); - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(Infinity, message.getRepeatedFloat(0)); - assertEquals(-Infinity, message.getRepeatedFloat(1)); - assertTrue(isNaN(message.getRepeatedFloat(2))); - assertEquals(300.2, message.getRepeatedFloat(3)); -} - -function testGetNumberFromString() { - var getNumberFromString = - goog.proto2.TextFormatSerializer.Parser.getNumberFromString_; - - assertEquals(3735928559, getNumberFromString('0xdeadbeef')); - assertEquals(4276215469, getNumberFromString('0xFEE1DEAD')); - assertEquals(123.1, getNumberFromString('123.1')); - assertEquals(123.0, getNumberFromString('123.0')); - assertEquals(-29.3, getNumberFromString('-29.3f')); - assertEquals(23, getNumberFromString('23')); - assertEquals(-3, getNumberFromString('-3')); - assertEquals(-3.27, getNumberFromString('-3.27')); - - assertThrows(goog.partial(getNumberFromString, 'cat')); - assertThrows(goog.partial(getNumberFromString, 'NaN')); - assertThrows(goog.partial(getNumberFromString, 'inf')); -} - -function testDeserializationError() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int33: 101\n'; - var result = - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - assertEquals(result, 'Unknown field: optional_int33'); -} - -function testNestedDeserialization() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'optional_nested_message: {\n' + - ' b: 301\n' + - '}'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(301, message.getOptionalNestedMessage().getB()); -} - -function testNestedDeserializationLegacyFormat() { - var message = new proto2.TestAllTypes(); - var value = 'optional_int32: 101\n' + - 'optional_nested_message: <\n' + - ' b: 301\n' + - '>'; - - new goog.proto2.TextFormatSerializer().deserializeTo(message, value); - - assertEquals(101, message.getOptionalInt32()); - assertEquals(301, message.getOptionalNestedMessage().getB()); -} - -function testBidirectional() { - 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); - message.addRepeatedString('hello "world"'); - - // Serialize the message to text form. - var serializer = new goog.proto2.TextFormatSerializer(); - var textform = serializer.serialize(message); - - // Create a copy and deserialize into the copy. - var copy = new proto2.TestAllTypes(); - serializer.deserializeTo(copy, textform); - - // Assert that the messages are structurally equivalent. - assertTrue(copy.equals(message)); -} - - -function testBidirectional64BitNumber() { - var message = new proto2.TestAllTypes(); - message.setOptionalInt64Number(10000000); - message.setOptionalInt64String('200000000000000000'); - - // Serialize the message to text form. - var serializer = new goog.proto2.TextFormatSerializer(); - var textform = serializer.serialize(message); - - // Create a copy and deserialize into the copy. - var copy = new proto2.TestAllTypes(); - serializer.deserializeTo(copy, textform); - - // Assert that the messages are structurally equivalent. - assertTrue(copy.equals(message)); -} |