@Test
public void testEquals() {

    final Severity severity = Severity.MINOR;
    final PackageId packId = PackageId.fromString("my_pack");
    final String description = "some description";
    final Violation violation = new Violation() {
        @Override
        public Severity getSeverity() {
            return severity;
        }
        @Override
        public Collection<PackageId> getPackages() {
            return Collections.singletonList(packId);
        }
        @Override
        public String getDescription() {
            return description;
        }
    };
    final JsonObject json = violation.toJson();
    final SimpleViolation simpleViolation = SimpleViolation.fromJson(json);
    assertNotEquals("SimpleViolation not equal to Violation", simpleViolation, violation);
    final SimpleViolation simpleViolationCopy = SimpleViolation.fromReported(violation);
    assertEquals("SimpleViolation equal to copy SimpleViolation", simpleViolation, simpleViolationCopy);
    // also hashCode
    assertNotEquals("SimpleViolation hashCode not equal to Violation hashCode",
            simpleViolation.hashCode(), violation.hashCode());
    assertEquals("SimpleViolation hashCode equal to copy SimpleViolation hashCode",
            simpleViolation.hashCode(), simpleViolationCopy.hashCode());
}