/** Test cascading delete to make sure dependent elements disappear. */
  public void testDelete() {
    ExtensionMechanismsFactory emFactory = Model.getExtensionMechanismsFactory();
    ExtensionMechanismsHelper emHelper = Model.getExtensionMechanismsHelper();
    Object model = Model.getModelManagementFactory().createModel();
    Model.getModelManagementFactory().setRootModel(model);
    Object stereo = emFactory.buildStereotype("mystereo", model);
    Object td = emFactory.buildTagDefinition("myTD", stereo, null);
    Object tv = emFactory.buildTaggedValue(td, new String[] {"the tag value"});
    Object clazz = Model.getCoreFactory().buildClass("MyClass", model);
    emHelper.addTaggedValue(clazz, tv);

    Collection tvs = Model.getFacade().getTaggedValuesCollection(clazz);
    assertEquals("Wrong number of TaggedValues returned", 1, tvs.size());
    assertTrue("TaggedValue not found", tvs.contains(tv));
    Collection tds =
        Model.getModelManagementHelper()
            .getAllModelElementsOfKind(model, Model.getMetaTypes().getTagDefinition());
    assertEquals("TagDefinition not found", 1, tds.size());

    // Deleting the stereotype should cascade to the TagDefinition,
    // then the TaggedValue
    Model.getUmlFactory().delete(stereo);
    Model.getPump().flushModelEvents();

    tvs = Model.getFacade().getTaggedValuesCollection(clazz);
    assertEquals("TaggedValue not deleted", 0, tvs.size());
    tds =
        Model.getModelManagementHelper()
            .getAllModelElementsOfKind(model, Model.getMetaTypes().getTagDefinition());
    assertEquals("TagDefinition not deleted", 0, tds.size());
  }
  /** Test creation. */
  public void testCreates() {
    CheckUMLModelHelper.createAndRelease(
        Model.getExtensionMechanismsFactory(), getTestableModelElements());

    ExtensionMechanismsFactory emFactory = Model.getExtensionMechanismsFactory();
    Object model = Model.getModelManagementFactory().createModel();
    Object stereo = emFactory.buildStereotype("mystereo1", model);
    try {
      emFactory.buildTagDefinition("myTDx", stereo, model);
      fail("Illegal buildTagDefinition with both sterotype" + " and model didn't throw exception.");
    } catch (IllegalArgumentException e) {
      // Expected
    }
    emFactory.buildTagDefinition("myTD1", stereo, null);
    emFactory.buildTagDefinition("myTD2", stereo, null, "Boolean");
    Collection tds =
        Model.getModelManagementHelper()
            .getAllModelElementsOfKind(model, Model.getMetaTypes().getTagDefinition());
    assertEquals("TagDefinition not deleted", 2, tds.size());
  }