public void testJoinTableRemoveUniqueConstraint() throws Exception {
    ICompilationUnit cu = this.createTestAssociationOverrideJoinTableWithUniqueConstraints();
    JavaResourceType resourceType = buildJavaResourceType(cu);
    AssociationOverrideAnnotation2_0 associationOverride =
        this.associationOverrideAt(0, resourceType);
    JoinTableAnnotation table = associationOverride.getJoinTable();
    assertEquals("BAR", table.uniqueConstraintAt(0).columnNameAt(0));
    assertEquals("FOO", table.uniqueConstraintAt(1).columnNameAt(0));
    assertEquals("BAZ", table.uniqueConstraintAt(2).columnNameAt(0));
    assertEquals(3, table.getUniqueConstraintsSize());

    table.removeUniqueConstraint(1);
    assertEquals("BAR", table.uniqueConstraintAt(0).columnNameAt(0));
    assertEquals("BAZ", table.uniqueConstraintAt(1).columnNameAt(0));
    assertEquals(2, table.getUniqueConstraintsSize());
    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinTable = @JoinTable(uniqueConstraints = {@UniqueConstraint(columnNames = {\"BAR\"}), @UniqueConstraint(columnNames = {\"BAZ\"})}))",
        cu);

    table.removeUniqueConstraint(0);
    assertEquals("BAZ", table.uniqueConstraintAt(0).columnNameAt(0));
    assertEquals(1, table.getUniqueConstraintsSize());
    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinTable = @JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {\"BAZ\"})))",
        cu);

    table.removeUniqueConstraint(0);
    assertEquals(0, table.getUniqueConstraintsSize());
    assertSourceDoesNotContain("@JoinTable(", cu);
  }
  public void testJoinTableAddUniqueConstraint() throws Exception {
    ICompilationUnit cu = this.createTestAssociationOverrideWithJoinTable();
    JavaResourceType resourceType = buildJavaResourceType(cu);
    AssociationOverrideAnnotation2_0 associationOverride =
        this.associationOverrideAt(0, resourceType);
    JoinTableAnnotation table = associationOverride.getJoinTable();

    table.addUniqueConstraint(0).addColumnName("FOO");
    table.addUniqueConstraint(1);
    table.addUniqueConstraint(0).addColumnName("BAR");

    assertEquals("BAR", table.uniqueConstraintAt(0).columnNameAt(0));
    assertEquals("FOO", table.uniqueConstraintAt(1).columnNameAt(0));
    assertEquals(0, table.uniqueConstraintAt(2).getColumnNamesSize());

    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinTable = @JoinTable(name = \"MY_JOIN_TABLE\", uniqueConstraints = {@UniqueConstraint(columnNames = \"BAR\"),@UniqueConstraint(columnNames = \"FOO\"), @UniqueConstraint}))",
        cu);
  }