PageRenderTime 37ms CodeModel.GetById 12ms app.highlight 18ms RepoModel.GetById 1ms app.codeStats 1ms

/thirdparty/breakpad/third_party/protobuf/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java

http://github.com/tomahawk-player/tomahawk
Java | 115 lines | 56 code | 15 blank | 44 comment | 0 complexity | b3b7692231d3fde14092032f56fa01e7 MD5 | raw file
  1// Protocol Buffers - Google's data interchange format
  2// Copyright 2008 Google Inc.  All rights reserved.
  3// http://code.google.com/p/protobuf/
  4//
  5// Redistribution and use in source and binary forms, with or without
  6// modification, are permitted provided that the following conditions are
  7// met:
  8//
  9//     * Redistributions of source code must retain the above copyright
 10// notice, this list of conditions and the following disclaimer.
 11//     * Redistributions in binary form must reproduce the above
 12// copyright notice, this list of conditions and the following disclaimer
 13// in the documentation and/or other materials provided with the
 14// distribution.
 15//     * Neither the name of Google Inc. nor the names of its
 16// contributors may be used to endorse or promote products derived from
 17// this software without specific prior written permission.
 18//
 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 30
 31package com.google.protobuf;
 32
 33
 34import protobuf_unittest.UnittestProto;
 35
 36import junit.framework.TestCase;
 37
 38import java.io.IOException;
 39
 40/**
 41 * Tests to make sure the lazy conversion of UTF8-encoded byte arrays to
 42 * strings works correctly.
 43 *
 44 * @author jonp@google.com (Jon Perlow)
 45 */
 46public class LazyStringEndToEndTest extends TestCase {
 47
 48  private static ByteString TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8 =
 49      ByteString.copyFrom(new byte[] {
 50          114, 4, -1, 0, -1, 0, -30, 2, 4, -1,
 51          0, -1, 0, -30, 2, 4, -1, 0, -1, 0, });
 52
 53  /**
 54   * Tests that an invalid UTF8 string will roundtrip through a parse
 55   * and serialization.
 56   */
 57  public void testParseAndSerialize() throws InvalidProtocolBufferException {
 58    UnittestProto.TestAllTypes tV2 = UnittestProto.TestAllTypes.parseFrom(
 59        TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8);
 60    ByteString bytes = tV2.toByteString();
 61    assertEquals(TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8, bytes);
 62
 63    tV2.getOptionalString();
 64    bytes = tV2.toByteString();
 65    assertEquals(TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8, bytes);
 66  }
 67
 68  public void testParseAndWrite() throws IOException {
 69    UnittestProto.TestAllTypes tV2 = UnittestProto.TestAllTypes.parseFrom(
 70        TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8);
 71    byte[] sink = new byte[TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8.size()];
 72    CodedOutputStream outputStream = CodedOutputStream.newInstance(sink);
 73    tV2.writeTo(outputStream);
 74    outputStream.flush();
 75    assertEquals(
 76        TEST_ALL_TYPES_SERIALIZED_WITH_ILLEGAL_UTF8,
 77        ByteString.copyFrom(sink));
 78  }
 79
 80  public void testCaching() {
 81    String a = "a";
 82    String b = "b";
 83    String c = "c";
 84    UnittestProto.TestAllTypes proto = UnittestProto.TestAllTypes.newBuilder()
 85        .setOptionalString(a)
 86        .addRepeatedString(b)
 87        .addRepeatedString(c)
 88        .build();
 89
 90    // String should be the one we passed it.
 91    assertSame(a, proto.getOptionalString());
 92    assertSame(b, proto.getRepeatedString(0));
 93    assertSame(c, proto.getRepeatedString(1));
 94
 95
 96    // There's no way to directly observe that the ByteString is cached
 97    // correctly on serialization, but we can observe that it had to recompute
 98    // the string after serialization.
 99    proto.toByteString();
100    String aPrime = proto.getOptionalString();
101    assertNotSame(a, aPrime);
102    assertEquals(a, aPrime);
103    String bPrime = proto.getRepeatedString(0);
104    assertNotSame(b, bPrime);
105    assertEquals(b, bPrime);
106    String cPrime = proto.getRepeatedString(1);
107    assertNotSame(c, cPrime);
108    assertEquals(c, cPrime);
109
110    // And now the string should stay cached.
111    assertSame(aPrime, proto.getOptionalString());
112    assertSame(bPrime, proto.getRepeatedString(0));
113    assertSame(cPrime, proto.getRepeatedString(1));
114  }
115}