|  | @@ -3361,6 +3361,7 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |        TestAllTypesNano.BAR,
 | 
	
		
			
				|  |  |        TestAllTypesNano.BAZ
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  | +    message.setOneofUint32(3);
 | 
	
		
			
				|  |  |      return message;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3559,6 +3560,85 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |          new NanoReferenceTypes.TestAllTypesNano(), MessageNano.toByteArray(m7))));
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  private static TestAllTypesNano generateMessageForOneof(int caseNumber) {
 | 
	
		
			
				|  |  | +    TestAllTypesNano result = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    TestAllTypesNano.NestedMessage nested =
 | 
	
		
			
				|  |  | +        new TestAllTypesNano.NestedMessage();
 | 
	
		
			
				|  |  | +    nested.bb = 2;
 | 
	
		
			
				|  |  | +    switch (caseNumber) {
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofUint32(1);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofEnum(TestAllTypesNano.BAR);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofNestedMessage(nested);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofBytes(new byte[] {1, 2});
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofString("hello");
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER:
 | 
	
		
			
				|  |  | +        result.setOneofFixed64(-1L);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      default:
 | 
	
		
			
				|  |  | +        throw new RuntimeException("unexpected case number: " + caseNumber);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return result;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  public void testOneofHashCodeEquals() throws Exception {
 | 
	
		
			
				|  |  | +    TestAllTypesNano m1 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m1, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_UINT32_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m1.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestAllTypesNano m2 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m2, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_ENUM_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m2.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestAllTypesNano m3 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m3, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_NESTED_MESSAGE_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m3.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestAllTypesNano m4 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m4, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_BYTES_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m4.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestAllTypesNano m5 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m5, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_STRING_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m5.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestAllTypesNano m6 = generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER);
 | 
	
		
			
				|  |  | +    assertEquals(m6, generateMessageForOneof(
 | 
	
		
			
				|  |  | +        TestAllTypesNano.ONEOF_FIXED64_FIELD_NUMBER));
 | 
	
		
			
				|  |  | +    assertFalse(m6.equals(new TestAllTypesNano()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Map<TestAllTypesNano, Integer> map =
 | 
	
		
			
				|  |  | +        new HashMap<TestAllTypesNano, Integer>();
 | 
	
		
			
				|  |  | +    map.put(m1, 1);
 | 
	
		
			
				|  |  | +    map.put(m2, 2);
 | 
	
		
			
				|  |  | +    map.put(m3, 3);
 | 
	
		
			
				|  |  | +    map.put(m4, 4);
 | 
	
		
			
				|  |  | +    map.put(m5, 5);
 | 
	
		
			
				|  |  | +    map.put(m6, 6);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    assertEquals(6, map.size());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    public void testNullRepeatedFields() throws Exception {
 | 
	
		
			
				|  |  |      // Check that serialization after explicitly setting a repeated field
 | 
	
		
			
				|  |  |      // to null doesn't NPE.
 |