/** 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());
  }
Пример #2
0
 /**
  * Try creating a stereotype for every modelelement type.
  *
  * @param f the factory containing the creation function for all the given metamodel element names
  * @param names the metamodel element names
  */
 public static void isValidStereoType(Object f, Iterable<String> names) {
   try {
     Object ns = Model.getModelManagementFactory().createPackage();
     Object clazz = Model.getCoreFactory().buildClass(ns);
     Object stereo1 = Model.getExtensionMechanismsFactory().buildStereotype(clazz, "test1", ns);
     for (String name : names) {
       Method m = findMethod(f.getClass(), Factory.class, "create" + name, new Class[] {});
       if (m == null) {
         TestCase.fail("Failed to find method create" + name);
       }
       Object base = m.invoke(f, new Object[] {});
       if (Model.getFacade().isAModelElement(base)) {
         Object stereo2 = Model.getExtensionMechanismsFactory().buildStereotype(base, "test2", ns);
         TestCase.assertTrue(
             "Unexpected invalid stereotype",
             Model.getExtensionMechanismsHelper().isValidStereotype(base, stereo2));
         if (!(Model.getFacade().isAClass(base))) {
           TestCase.assertTrue(
               "Stereotype with base class of Class" + " incorrectly allowed for this metaclass",
               !Model.getExtensionMechanismsHelper().isValidStereotype(base, stereo1));
         } else {
           Object inter = Model.getCoreFactory().createInterface();
           Object stereo3 =
               Model.getExtensionMechanismsFactory().buildStereotype(inter, "test3", ns);
           TestCase.assertTrue(
               "Unexpected invalid stereotype",
               !Model.getExtensionMechanismsHelper().isValidStereotype(base, stereo3));
         }
       }
     }
   } catch (Exception ex) {
     ex.printStackTrace();
     TestCase.fail("Exception during test metaModelnameCorrect. Message: " + ex.getMessage());
   }
 }
Пример #3
0
 /** Test if adding a client to a binary dependency actually increases the client count. */
 public void testAddClient() {
   Object model = Model.getModelManagementFactory().createModel();
   Object class1 = Model.getCoreFactory().buildClass(model);
   Object class2 = Model.getCoreFactory().buildClass(model);
   Object dep = Model.getCoreFactory().buildDependency(class1, class2);
   Object class3 = Model.getCoreFactory().buildClass(model);
   Model.getCoreHelper().addClient(dep, class3);
   Collection clients = Model.getFacade().getClients(dep);
   assertEquals(2, Model.getFacade().getClients(dep).size());
   Iterator it = clients.iterator();
   assertEquals(class1, it.next());
   assertEquals(class3, it.next());
 }
  /** 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());
  }
Пример #5
0
  /** Test the getFirstSharedNamespace method for correctness and, optionally, performance. */
  public void testGetFirstSharedNamespace() {
    Object model = Model.getModelManagementFactory().createModel();
    CoreFactory cf = Model.getCoreFactory();

    // Build namespace hierarchy like this:
    //   g     a
    //         /\
    //        b  c
    //           /\
    //          d  e f

    Object a = cf.buildClass("a", model);
    Object b = cf.buildClass("b", a);
    Object c = cf.buildClass("c", a);
    Object d = cf.buildClass("d", c);
    Object e = cf.buildClass("e", c);
    Object f = cf.buildClass("f", c);
    Object g = cf.buildClass();

    CoreHelper ch = Model.getCoreHelper();

    assertEquals("Got wrong namespace for first shared", a, ch.getFirstSharedNamespace(b, e));
    assertEquals("Got wrong namespace for first shared", c, ch.getFirstSharedNamespace(d, e));
    assertEquals("Got wrong namespace for first shared", a, ch.getFirstSharedNamespace(a, e));
    assertEquals("Got wrong namespace for first shared", a, ch.getFirstSharedNamespace(a, c));
    assertEquals("Got wrong namespace for first shared", a, ch.getFirstSharedNamespace(b, c));
    assertNull(
        "getFirstSharedNamespace didn't return null" + " when none shared",
        ch.getFirstSharedNamespace(g, a));

    // Try changing namespace of element and make sure results track
    assertEquals("Got wrong namespace for first shared", c, ch.getFirstSharedNamespace(d, f));
    ch.setNamespace(f, b);
    ch.setNamespace(g, f);
    assertEquals("Got wrong namespace after setNamespace", a, ch.getFirstSharedNamespace(d, f));
    assertEquals("Got wrong namespace after setNamespace", a, ch.getFirstSharedNamespace(g, e));

    if (PERFORMANCE_TEST) {
      List children = new ArrayList();
      Object root = cf.buildClass();
      children.add(root);
      createChildren(children, root, 0, NAMESPACE_LEVELS, CHILDREN_PER_NAMESPACE);
      // Tree is created depth first, so this should be at the bottom
      Object base = children.get(NAMESPACE_LEVELS);
      long startTime = System.currentTimeMillis();
      int i;
      for (i = 0; i < children.size(); i++) {
        Object o = ch.getFirstSharedNamespace(base, children.get(i));
        if (i % 100 == 0) {
          // Check periodically to see if we've exceeded time limit
          if ((System.currentTimeMillis() - startTime) > TIME_LIMIT) {
            break;
          }
        }
      }
      long endTime = System.currentTimeMillis();
      System.out.println(
          "Iterations: " + i + ", time: " + (endTime - startTime) / 1.0e3 + " seconds.");
      System.out.println(
          "Average time for getFirstSharedNameSpace = "
              + (endTime - startTime) * 1.0 / i
              + " millisecs searching in "
              + children.size()
              + " total elements.");
    }
  }