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

http://github.com/tomahawk-player/tomahawk · Java · 185 lines · 123 code · 22 blank · 40 comment · 9 complexity · 808f7ee38a834c5f2f05ccbb890226ed 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. package com.google.protobuf;
  31. import protobuf_unittest.Vehicle;
  32. import protobuf_unittest.Wheel;
  33. import junit.framework.TestCase;
  34. import java.util.List;
  35. import java.util.ArrayList;
  36. /**
  37. * Test cases that exercise end-to-end use cases involving
  38. * {@link SingleFieldBuilder} and {@link RepeatedFieldBuilder}.
  39. *
  40. * @author jonp@google.com (Jon Perlow)
  41. */
  42. public class NestedBuildersTest extends TestCase {
  43. public void testMessagesAndBuilders() {
  44. Vehicle.Builder vehicleBuilder = Vehicle.newBuilder();
  45. vehicleBuilder.addWheelBuilder()
  46. .setRadius(4)
  47. .setWidth(1);
  48. vehicleBuilder.addWheelBuilder()
  49. .setRadius(4)
  50. .setWidth(2);
  51. vehicleBuilder.addWheelBuilder()
  52. .setRadius(4)
  53. .setWidth(3);
  54. vehicleBuilder.addWheelBuilder()
  55. .setRadius(4)
  56. .setWidth(4);
  57. vehicleBuilder.getEngineBuilder()
  58. .setLiters(10);
  59. Vehicle vehicle = vehicleBuilder.build();
  60. assertEquals(4, vehicle.getWheelCount());
  61. for (int i = 0; i < 4; i++) {
  62. Wheel wheel = vehicle.getWheel(i);
  63. assertEquals(4, wheel.getRadius());
  64. assertEquals(i + 1, wheel.getWidth());
  65. }
  66. assertEquals(10, vehicle.getEngine().getLiters());
  67. for (int i = 0; i < 4; i++) {
  68. vehicleBuilder.getWheelBuilder(i)
  69. .setRadius(5)
  70. .setWidth(i + 10);
  71. }
  72. vehicleBuilder.getEngineBuilder().setLiters(20);
  73. vehicle = vehicleBuilder.build();
  74. for (int i = 0; i < 4; i++) {
  75. Wheel wheel = vehicle.getWheel(i);
  76. assertEquals(5, wheel.getRadius());
  77. assertEquals(i + 10, wheel.getWidth());
  78. }
  79. assertEquals(20, vehicle.getEngine().getLiters());
  80. assertTrue(vehicle.hasEngine());
  81. }
  82. public void testMessagesAreCached() {
  83. Vehicle.Builder vehicleBuilder = Vehicle.newBuilder();
  84. vehicleBuilder.addWheelBuilder()
  85. .setRadius(1)
  86. .setWidth(2);
  87. vehicleBuilder.addWheelBuilder()
  88. .setRadius(3)
  89. .setWidth(4);
  90. vehicleBuilder.addWheelBuilder()
  91. .setRadius(5)
  92. .setWidth(6);
  93. vehicleBuilder.addWheelBuilder()
  94. .setRadius(7)
  95. .setWidth(8);
  96. // Make sure messages are cached.
  97. List<Wheel> wheels = new ArrayList<Wheel>(vehicleBuilder.getWheelList());
  98. for (int i = 0; i < wheels.size(); i++) {
  99. assertSame(wheels.get(i), vehicleBuilder.getWheel(i));
  100. }
  101. // Now get builders and check they didn't change.
  102. for (int i = 0; i < wheels.size(); i++) {
  103. vehicleBuilder.getWheel(i);
  104. }
  105. for (int i = 0; i < wheels.size(); i++) {
  106. assertSame(wheels.get(i), vehicleBuilder.getWheel(i));
  107. }
  108. // Change just one
  109. vehicleBuilder.getWheelBuilder(3)
  110. .setRadius(20).setWidth(20);
  111. // Now get wheels and check that only that one changed
  112. for (int i = 0; i < wheels.size(); i++) {
  113. if (i < 3) {
  114. assertSame(wheels.get(i), vehicleBuilder.getWheel(i));
  115. } else {
  116. assertNotSame(wheels.get(i), vehicleBuilder.getWheel(i));
  117. }
  118. }
  119. }
  120. public void testRemove_WithNestedBuilders() {
  121. Vehicle.Builder vehicleBuilder = Vehicle.newBuilder();
  122. vehicleBuilder.addWheelBuilder()
  123. .setRadius(1)
  124. .setWidth(1);
  125. vehicleBuilder.addWheelBuilder()
  126. .setRadius(2)
  127. .setWidth(2);
  128. vehicleBuilder.removeWheel(0);
  129. assertEquals(1, vehicleBuilder.getWheelCount());
  130. assertEquals(2, vehicleBuilder.getWheel(0).getRadius());
  131. }
  132. public void testRemove_WithNestedMessages() {
  133. Vehicle.Builder vehicleBuilder = Vehicle.newBuilder();
  134. vehicleBuilder.addWheel(Wheel.newBuilder()
  135. .setRadius(1)
  136. .setWidth(1));
  137. vehicleBuilder.addWheel(Wheel.newBuilder()
  138. .setRadius(2)
  139. .setWidth(2));
  140. vehicleBuilder.removeWheel(0);
  141. assertEquals(1, vehicleBuilder.getWheelCount());
  142. assertEquals(2, vehicleBuilder.getWheel(0).getRadius());
  143. }
  144. public void testMerge() {
  145. Vehicle vehicle1 = Vehicle.newBuilder()
  146. .addWheel(Wheel.newBuilder().setRadius(1).build())
  147. .addWheel(Wheel.newBuilder().setRadius(2).build())
  148. .build();
  149. Vehicle vehicle2 = Vehicle.newBuilder()
  150. .mergeFrom(vehicle1)
  151. .build();
  152. // List should be the same -- no allocation
  153. assertSame(vehicle1.getWheelList(), vehicle2.getWheelList());
  154. Vehicle vehicle3 = vehicle1.toBuilder().build();
  155. assertSame(vehicle1.getWheelList(), vehicle3.getWheelList());
  156. }
  157. public void testGettingBuilderMarksFieldAsHaving() {
  158. Vehicle.Builder vehicleBuilder = Vehicle.newBuilder();
  159. vehicleBuilder.getEngineBuilder();
  160. Vehicle vehicle = vehicleBuilder.buildPartial();
  161. assertTrue(vehicle.hasEngine());
  162. }
  163. }