Assert.assertFalse(builder.hasFriends());
Assert.assertNull(builder.getFriends());
Assert.assertFalse(builder.hasLanguages());
Assert.assertNull(builder.getLanguages());
Person person = builder.build();
Assert.assertEquals("James Gosling", person.getName().toString());
Assert.assertEquals(new Integer(1955), person.getYearOfBirth());
Assert.assertEquals("US", person.getCountry().toString()); // country should default to "US"
Assert.assertEquals("CA", person.getState().toString());
Assert.assertNotNull(person.getFriends()); // friends should default to an empty list
Assert.assertEquals(0, person.getFriends().size());
Assert.assertNotNull(person.getLanguages()); // Languages should now be "English" and "Java"
Assert.assertEquals(2, person.getLanguages().size());
Assert.assertEquals("English", person.getLanguages().get(0).toString());
Assert.assertEquals("Java", person.getLanguages().get(1).toString());
// Test copy constructors:
Assert.assertEquals(builder, Person.newBuilder(builder));
Assert.assertEquals(person, Person.newBuilder(person).build());
Person.Builder builderCopy = Person.newBuilder(person);
Assert.assertEquals("James Gosling", builderCopy.getName().toString());
Assert.assertEquals(new Integer(1955), builderCopy.getYearOfBirth());
Assert.assertEquals("US", builderCopy.getCountry().toString()); // country should default to "US"
Assert.assertEquals("CA", builderCopy.getState().toString());
Assert.assertNotNull(builderCopy.getFriends()); // friends should default to an empty list
Assert.assertEquals(0, builderCopy.getFriends().size());
// Test clearing fields:
builderCopy.clearFriends().clearCountry();
Assert.assertFalse(builderCopy.hasFriends());
Assert.assertFalse(builderCopy.hasCountry());
Assert.assertNull(builderCopy.getFriends());
Assert.assertNull(builderCopy.getCountry());
Person person2 = builderCopy.build();
Assert.assertNotNull(person2.getFriends());
Assert.assertTrue(person2.getFriends().isEmpty());
}