示例#1
0
文件: TestAnchor.java 项目: nzilbb/ag
  @Test
  public void objectAttributes() {
    Anchor a = new Anchor();
    // TODO define before-id hashcode behaviour
    a.setId("123");
    int iStartHashCode = a.hashCode();
    a.setOffset(456.789);
    a.put("foo", "bar");
    int iEndHashCode = a.hashCode();
    assertEquals("Immutable hashcode:", iStartHashCode, iEndHashCode);
    assertEquals("456.789", a.toString());

    assertTrue("Equality reflexive", a.equals(a));
    Anchor a2 = new Anchor();
    assertFalse("equals before id set:", a.equals(a2));
    a2.setId("123");
    a2.setOffset(456.789);
    // no "foo" attribute, to ensure it doesn't contribute to equality
    assertTrue("id defines equality:", a.equals(a2));
    assertTrue("Equality is symmetric:", a2.equals(a));
    assertEquals("Comparable:", 0, a.compareTo(a2));

    a2.setOffset(123.456);
    assertTrue("offset doesn't affect equality:", a.equals(a2));

    a2.setId("different id");
    assertFalse("Different id:", a.equals(a2));
    assertTrue("Compare by offset - 456.123 > 123.456", a.compareTo(a2) > 0);
    a2.setOffset(a.getOffset());
    assertTrue(
        "Comparable: if offsets are equal, comparison is by ID - \"123\" < \"different id\"",
        a.compareTo(a2) < 0);
    a2.setOffset(null);
    assertTrue(
        "Comparable: if left offset is null, comparison is by ID - \"123\" < \"different id\"",
        a.compareTo(a2) < 0);
    assertTrue(
        "Comparable: if right offset is null, comparison is by ID - \"different id\" > \"123\"",
        a2.compareTo(a) > 0);
    a2.setId(a.getId());
    assertTrue("Resetting attribute resets equality:", a.equals(a2));

    LinkedHashMap<String, Object> aMap = new LinkedHashMap<String, Object>();
    aMap.putAll(a);
    assertFalse("A map with the same attributes isn't equal:", a.equals(aMap));
  }