### Question:
EmptyListOrStructureDefinitionViolation implements RecordStructureViolation { @Override public int hashCode() { return new HashCodeBuilder().append(recordStructureName.toLowerCase(Locale.US)) .append(fieldName.toLowerCase(Locale.US)).append(lineNumber).toHashCode(); } EmptyListOrStructureDefinitionViolation(final String recordStructureName, final String fieldName,
            final Integer lineNumber); @Override boolean equals(final Object obj); @Override String getRecordStructureName(); String getFieldName(); @Override Integer getLineNumber(); @Override String getViolationDescription(); @Override String getViolationExplanation(); @Override ViolationId getViolationId(); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testEqualsCaseInsensitiveFieldName() { final String recordStructureName = "record"; final EmptyListOrStructureDefinitionViolation first = new EmptyListOrStructureDefinitionViolation( recordStructureName, fieldName, null); final EmptyListOrStructureDefinitionViolation second = new EmptyListOrStructureDefinitionViolation( recordStructureName, StringUtils.swapCase(fieldName), null); assertThat(first).isEqualTo(second); assertThat(second).isEqualTo(first); assertThat(first.hashCode()).isEqualTo(second.hashCode()); }