@Test
  public void testGetSuggestedSelectionForProject() throws Exception {
    beforeGetSuggestedSelection();
    type.createAttributeDefinition("Name");
    List<IAttributeDefinition> res = getSuggestedSelection(type, Project.class);

    assertEqualsAsSet(null, type.getAttributeDefinitions(), res);
  }
  @Test
  public void testFlattenSelection() throws Exception {
    beforeFlattenSelection();
    final MockAttributeDefinition tokenB = new MockAttributeDefinition("Token0", type);
    final MockAttributeDefinition superTokenB = new MockAttributeDefinition("Token-1", superType);
    final MockAttributeDefinition subTokenB = new MockAttributeDefinition("Token-2", subType);

    final MockAttributeDefinition superToken = new MockAttributeDefinition("Token1", superType);
    final MockAttributeDefinition token = new MockAttributeDefinition("Token2", type);
    final MockAttributeDefinition subToken = new MockAttributeDefinition("Token3", subType);
    final MockAttributeDefinition wrongToken = new MockAttributeDefinition("Tooken4", wrongType);
    final MockAttributeDefinition basedToken = new MockAttributeDefinition("Tooken6", type, tokenB);
    final MockAttributeDefinition basedWrongToken =
        new MockAttributeDefinition("Tooken7", wrongType, tokenB);
    final MockAttributeDefinition wrongBasedToken =
        new MockAttributeDefinition("Tooken8", type, wrongToken);
    final MockAttributeDefinition superBasedToken =
        new MockAttributeDefinition("Tooken9", subType, superTokenB);
    final MockAttributeDefinition subBasedToken =
        new MockAttributeDefinition("Tooken10", subType, subTokenB);
    final List<IAttributeDefinition> orig = new LinkedList<IAttributeDefinition>();
    orig.add(superToken);
    orig.add(token);
    orig.add(subToken);
    orig.add(wrongToken);
    orig.add(basedToken);
    orig.add(basedWrongToken);
    orig.add(wrongBasedToken);
    orig.add(superBasedToken);
    orig.add(subBasedToken);

    AttributeSelection res = flattenSelection(type, orig);

    AttributeSelection expected = new AttributeSelection();
    expected.addAll(orig);
    expected.add(expected.indexOf(superToken), type.getAttributeDefinition(superToken.getName()));
    expected.remove(superToken);
    expected.remove(wrongToken);
    expected.remove(basedWrongToken);
    expected.add(
        expected.indexOf(superBasedToken), type.getAttributeDefinition(superBasedToken.getName()));
    expected.remove(superBasedToken);
    expected.remove(subBasedToken);
    expected.add(subTokenB);

    assertEqualsAsSet(null, expected, res);
  }
  @Test
  public void testFlattenSelectionSuperToken() throws Exception {
    beforeFlattenSelection();
    final MockAttributeDefinition superToken = new MockAttributeDefinition("Token1", superType);
    final List<IAttributeDefinition> orig = new LinkedList<IAttributeDefinition>();
    orig.add(superToken);
    type.putAttributeDefinition(superToken, "Token1");

    AttributeSelection res = flattenSelection(type, orig);

    assertEqualsAsSet(null, Arrays.asList(superToken), res);
  }