final String bazString = "something else, again";
final String fluxString = "yet something ELSE";
final int fooNum = 4;
final int barNum = 5;
SimpleDtoSubTypeImpl dtoA = SimpleDtoSubTypeImpl.make();
SimpleDtoSubTypeImpl dtoB = SimpleDtoSubTypeImpl.make();
checkEqualsAndHashCode(dtoA, dtoB, true);
// test on an object field
dtoA.setName(fooString);
assert(dtoA.hasName());
assertFalse(dtoB.hasName());
checkEqualsAndHashCode(dtoA, dtoB, false);
dtoB.setName(fooString);
checkEqualsAndHashCode(dtoA, dtoB, true);
dtoA.setName(barString);
checkEqualsAndHashCode(dtoA, dtoB, false);
dtoA.setName(fooString);
checkEqualsAndHashCode(dtoA, dtoB, true);
// test on a primitive field
dtoA.setNumber(fooNum);
checkEqualsAndHashCode(dtoA, dtoB, false);
dtoB.setNumber(fooNum);
checkEqualsAndHashCode(dtoA, dtoB, true);
dtoA.setNumber(barNum);
checkEqualsAndHashCode(dtoA, dtoB, false);
dtoA.setNumber(fooNum);
checkEqualsAndHashCode(dtoA, dtoB, true);
// test on a subclass' field
dtoA.setAnotherField(bazString);
checkEqualsAndHashCode(dtoA, dtoB, false);
dtoB.setAnotherField(bazString);
checkEqualsAndHashCode(dtoA, dtoB, true);
dtoA.setAnotherField(fluxString);
checkEqualsAndHashCode(dtoA, dtoB, false);