Package org.openiaml.model.tests.eclipse.actions

Source Code of org.openiaml.model.tests.eclipse.actions.DeleteGeneratedElements

/**
*
*/
package org.openiaml.model.tests.eclipse.actions;

import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
import org.openiaml.model.diagram.helpers.GeneratedElementDeleter;
import org.openiaml.model.diagram.helpers.GeneratedElementHandler;
import org.openiaml.model.model.GeneratedElement;
import org.openiaml.model.model.ModelPackage;

/**
*
*
* @author jmwright
*
*/
public class DeleteGeneratedElements extends AbstractActionTestCase<IFile> {

  @Override
  public String getModel() {
    return "DeleteGeneratedElements.iaml";
  }

  protected DiagramDocumentEditor editor_page;
  protected DiagramDocumentEditor editor_target;

  /**
   * Test the initial model.
   *
   * @throws Exception
   */
  public void testInitial() throws Exception {
    initializeModelFile();

    // open page
    ShapeNodeEditPart page = assertHasFrame(editor, "container");
    editor_page = openDiagram(page);
    assertEditorFrame(editor_page);

    // there should be six children
    assertEditorHasChildren(6, editor_page);
    ShapeNodeEditPart target = assertHasInputTextField(editor_page, "target", false);
    assertGenerated(target);
    ShapeNodeEditPart unrelated = assertHasInputTextField(editor_page, "unrelated", false);
    assertGenerated(unrelated);

    ShapeNodeEditPart edit = assertHasEvent(editor_page, true, ModelPackage.eINSTANCE.getChangeable_OnChange());
    assertGenerated(edit);
    ShapeNodeEditPart incoming = assertHasOperation(editor_page, "incoming", false);
    assertNotGenerated(incoming);
    assertHasECARule(editor_page, edit, incoming, "run out");

    ShapeNodeEditPart outgoing = assertHasEvent(editor_page, false, ModelPackage.eINSTANCE.getAccessible_OnAccess());
    assertNotGenerated(outgoing);
    ShapeNodeEditPart update = assertHasOperation(editor_page, "update", true);
    assertGenerated(update);
    assertHasECARule(editor_page, outgoing, update, "run in");

    // open the target
    //editor_target = openDiagram(target);

    // there should be 7 children (why??)
    /*
    assertEditorHasChildren(7, editor_target);
    editor_target.close(false);
    */

    editor_target = openDiagram(unrelated);
    assertEditorHasChildren(5, editor_target);

  }

  /**
   * Deleting an element which is being used by others should
   * show a message box.
   * @throws Exception
   */
  public void testDeleteConfirm() throws Exception {
    initializeModelFile();

    // open page
    ShapeNodeEditPart page = assertHasFrame(editor, "container");
    editor_page = openDiagram(page);
    assertEditorFrame(editor_page);

    // there should be six children
    assertEditorHasChildren(6, editor_page);
    ShapeNodeEditPart target = assertHasInputTextField(editor_page, "target", false);
    assertGenerated(target);

    // sadly, I don't know how to emulate selecting the element
    // and deleting it.
    /*
     the following code throws:

      java.lang.NullPointerException
      at org.eclipse.emf.workspace.AbstractEMFOperation.createTransaction(AbstractEMFOperation.java:447)
      at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:134)
      at org.eclipse.gmf.runtime.diagram.ui.internal.actions.PromptingDeleteAction.run(PromptingDeleteAction.java:159)
      at org.openiaml.model.diagram.visual.part.IamlDiagramEditor$MyDeleteAction.run(IamlDiagramEditor.java:180)
    */
    /*
      MyDeleteAction action = ((IamlDiagramEditor) editor_page).new MyDeleteAction(editor_page);
      action.selectionChanged(editor_page, new StructuredSelection(target));
      action.run();
     */

    // so we are limited to unit testing the helper objects
  }

  /**
   * Unit test the element handler.
   *
   * @throws Exception
   */
  public void testHandler() throws Exception {
    initializeModelFile();

    // open page
    ShapeNodeEditPart page = assertHasFrame(editor, "container");
    editor_page = openDiagram(page);
    assertEditorFrame(editor_page);

    // there should be six children
    assertEditorHasChildren(6, editor_page);
    ShapeNodeEditPart target = assertHasInputTextField(editor_page, "target", false);
    assertGenerated(target);

    GeneratedElementHandler handler = new GeneratedElementHandler(target);
    assertTrue("we should have incoming edges", handler.needsConfirmation());
    assertEquals("There should only be one element to confirm", 1, handler.getConfirmationElements().size());
    GeneratedElement toConfirm = (GeneratedElement) handler.getConfirmationElements().get(0);

    assertEqualsOneOf(new String[] {
        "The generated element 'InputTextField 'target'' contains elements which are connected to non-generated elements:\n\n" +
        "EventTrigger onChange\n" +
        "CompositeOperation 'update'\n\n" +
        "Deleting 'InputTextField 'target'' will also delete these generated elements, currently in use:\n\n" +
        "CompositeOperation 'update'\n" +
        "EventTrigger onChange",

        // swap Event/Operation around
        "The generated element 'InputTextField 'target'' contains elements which are connected to non-generated elements:\n\n" +
        "CompositeOperation 'update'\n" +
        "EventTrigger onChange\n\n" +
        "Deleting 'InputTextField 'target'' will also delete these generated elements, currently in use:\n\n" +
        "CompositeOperation 'update'\n" +
        "EventTrigger onChange"   
    }, handler.getConfirmationMessage(toConfirm));
  }

  public void testDeletedElements() throws Exception {
    initializeModelFile();

    // open page
    ShapeNodeEditPart page = assertHasFrame(editor, "container");
    editor_page = openDiagram(page);
    assertEditorFrame(editor_page);

    // there should be six children
    assertEditorHasChildren(6, editor_page);
    ShapeNodeEditPart target = assertHasInputTextField(editor_page, "target", false);
    assertGenerated(target);

    GeneratedElementHandler handler = new GeneratedElementHandler(target);
    List<EObject> toDelete = handler.getOtherElementsToDelete();

    // there should be two other elements that are important to delete
    assertEquals(2, toDelete.size());

    ShapeNodeEditPart edit = assertHasEvent(editor_page, true, ModelPackage.eINSTANCE.getChangeable_OnChange());
    assertGenerated(edit);
    ShapeNodeEditPart update = assertHasOperation(editor_page, "update", true);
    assertGenerated(update);
    assertContains(edit.resolveSemanticElement(), toDelete);
    assertContains(update.resolveSemanticElement(), toDelete);

    // get ALL related elements to also
    GeneratedElementDeleter deleter = new GeneratedElementDeleter((GeneratedElement) target.resolveSemanticElement());

    assertGreaterEq(6, deleter.getElementsToDelete().size());
  }

  /**
   * Close loaded editors.
   * @throws Exception
   */
  @Override
  public void tearDown() throws Exception {

    if (editor_target != null)
      editor_target.close(false);

    if (editor_page != null)
      editor_page.close(false);

    super.tearDown();
  }

}
TOP

Related Classes of org.openiaml.model.tests.eclipse.actions.DeleteGeneratedElements

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.