/*
* Copyright (c) 2010-2012, 2016 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Martin Fluegge - initial API and implementation
*/
package org.eclipse.emf.cdo.dawn.tests.ui.gmf;
import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreCreationWizard;
import org.eclipse.emf.cdo.dawn.helper.DawnEditorHelper;
import org.eclipse.emf.cdo.dawn.ui.composites.CDOResourceNodeChooserComposite.ResourceChooserValidator;
import org.eclipse.emf.cdo.dawn.ui.wizards.DawnCreateNewDiagramResourceWizardPage;
import org.eclipse.emf.cdo.dawn.ui.wizards.DawnCreateNewResourceWizardPage;
import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Text;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author Martin Fluegge
*/
public class DawnCreationWizardTest extends AbstractCDOTest
{
public void testCreationWizardSetWrongDiagramName() throws Exception
{
CDOSession session = openSession();
CDOConnectionUtil.instance.openView(session);
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setVisible(true);
assertNotNull(dawnDiagramModelFilePage);
assertInstanceOf(DawnCreateNewResourceWizardPage.class, dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
assertEquals("", dawnDiagramModelFilePage.getResourcePath());
assertEquals("default", dawnDiagramModelFilePage.getResourceNamePrefix());
assertEquals("dawn://repo1//default.acore_diagram", dawnDiagramModelFilePage.getURI().toString());
callValidatePage(dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
dawnDiagramModelFilePage.setResourceNamePrefix("");
callValidatePage(dawnDiagramModelFilePage);
assertEquals(false, dawnDiagramModelFilePage.isPageComplete());
dawnDiagramModelFilePage.setResourceNamePrefix("myDiagram");
callValidatePage(dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
}
public void testCreationWizardSetWrongSemanticNameWarn_Default() throws Exception
{
CDOSession session = openSession();
CDOConnectionUtil.instance.openView(session);
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
DawnCreateNewResourceWizardPage dawnDomainModelFilePage = (DawnCreateNewResourceWizardPage)dawnDiagramModelFilePage.getNextPage();
dawnDomainModelFilePage.setVisible(true);
callValidatePage(dawnDomainModelFilePage);
assertEquals(true, dawnDomainModelFilePage.isPageComplete());
dawnDomainModelFilePage.setResourceNamePrefix("");
callValidatePage(dawnDomainModelFilePage);
assertEquals("", getResourceText(dawnDomainModelFilePage).getText());
assertEquals(true, dawnDomainModelFilePage.isPageComplete());
dawnDomainModelFilePage.setResourceNamePrefix("something.acore");
callValidatePage(dawnDomainModelFilePage);
assertEquals(true, dawnDomainModelFilePage.isPageComplete());
assertEquals("something.acore", dawnDomainModelFilePage.getDefaultName());
}
public void testCreationWizardSetWrongSemanticNameError() throws Exception
{
CDOSession session = openSession();
CDOConnectionUtil.instance.openView(session);
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
DawnCreateNewResourceWizardPage dawnDomainModelFilePage = (DawnCreateNewResourceWizardPage)dawnDiagramModelFilePage.getNextPage();
dawnDomainModelFilePage.setVisible(true);
dawnDomainModelFilePage.setResourceValidationType(ResourceChooserValidator.VALIDATION_ERROR);
assertEquals(ResourceChooserValidator.VALIDATION_ERROR, dawnDiagramModelFilePage.getResourceValidationType());
dawnDomainModelFilePage.setResourceNamePrefix("");
callValidatePage(dawnDomainModelFilePage);
assertEquals("", getResourceText(dawnDomainModelFilePage).getText());
assertEquals(false, dawnDomainModelFilePage.isPageComplete());
}
public void testCreationWizardCreateAutomaticName() throws Exception
{
{
CDOSession session = openSession();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
transaction.createResource("/default.acore_diagram");
transaction.commit();
transaction.close();
}
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setCreateAutomaticResourceName(true);
dawnDiagramModelFilePage.setVisible(true);
assertEquals("default2.acore_diagram", getResourceText(dawnDiagramModelFilePage).getText());
}
public void testCreationWizardSetExistingResourceError() throws Exception
{
{
CDOSession session = openSession();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
transaction.createResource("/default5.acore_diagram");
transaction.commit();
transaction.close();
}
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setVisible(true);
dawnDiagramModelFilePage.setResourceValidationType(ResourceChooserValidator.VALIDATION_ERROR);
assertEquals(ResourceChooserValidator.VALIDATION_ERROR, dawnDiagramModelFilePage.getResourceValidationType());
dawnDiagramModelFilePage.setResourceNamePrefix("default5.acore_diagram");
assertEquals("default5.acore_diagram", getResourceText(dawnDiagramModelFilePage).getText());
callValidatePage(dawnDiagramModelFilePage);
assertEquals(false, dawnDiagramModelFilePage.isPageComplete());
assertEquals("A resource with the same name already exists!", dawnDiagramModelFilePage.getErrorMessage());
}
public void testCreationWizardSetExistingResourceWarn() throws Exception
{
{
CDOSession session = openSession();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
transaction.createResource("/default5.acore_diagram");
transaction.commit();
transaction.close();
}
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setVisible(true);
dawnDiagramModelFilePage.setResourceValidationType(ResourceChooserValidator.VALIDATION_WARN);
assertEquals(ResourceChooserValidator.VALIDATION_WARN, dawnDiagramModelFilePage.getResourceValidationType());
dawnDiagramModelFilePage.setResourceNamePrefix("default5.acore_diagram");
assertEquals("default5.acore_diagram", getResourceText(dawnDiagramModelFilePage).getText());
callValidatePage(dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
assertEquals("A resource with the same name already exists!", dawnDiagramModelFilePage.getMessage());
}
public void testCreationWizardSetExistingResourceNone() throws Exception
{
{
CDOSession session = openSession();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
transaction.createResource("/default5.acore_diagram");
transaction.commit();
transaction.close();
}
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setVisible(true);
dawnDiagramModelFilePage.setResourceValidationType(ResourceChooserValidator.VALIDATION_NONE);
assertEquals(ResourceChooserValidator.VALIDATION_NONE, dawnDiagramModelFilePage.getResourceValidationType());
dawnDiagramModelFilePage.setResourceNamePrefix("default5.acore_diagram");
assertEquals("default5.acore_diagram", getResourceText(dawnDiagramModelFilePage).getText());
callValidatePage(dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
assertEquals(null, dawnDiagramModelFilePage.getErrorMessage());
}
public void testCreationWizardCreateResources() throws Exception
{
{
CDOSession session = openSession();
ResourceSet resourceSet = new ResourceSetImpl();
session.openTransaction(resourceSet);
final URI uri = URI.createURI("cdo:/folder/dummy");
resourceSet.createResource(uri);
}
DawnAcoreCreationWizard creationWizard = new DawnAcoreCreationWizard();
WizardDialog dialog = new WizardDialog(DawnEditorHelper.getActiveShell(), creationWizard);
dialog.create();
IWizardPage[] pages = creationWizard.getPages();
DawnCreateNewDiagramResourceWizardPage dawnDiagramModelFilePage = (DawnCreateNewDiagramResourceWizardPage)pages[0];
dawnDiagramModelFilePage.setVisible(true);
assertNotNull(dawnDiagramModelFilePage);
assertInstanceOf(DawnCreateNewResourceWizardPage.class, dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
assertEquals("", dawnDiagramModelFilePage.getResourcePath());
assertEquals("default", dawnDiagramModelFilePage.getResourceNamePrefix());
assertEquals("dawn://repo1//default.acore_diagram", dawnDiagramModelFilePage.getURI().toString());
// TODO create a folder here first
// set the resource path as a user would do
dawnDiagramModelFilePage.setResourcePath("/folder");
assertEquals("/folder/", dawnDiagramModelFilePage.getResourcePath());
assertEquals("dawn://repo1//folder//default.acore_diagram", dawnDiagramModelFilePage.getURI().toString());
callValidatePage(dawnDiagramModelFilePage);
assertEquals(true, dawnDiagramModelFilePage.isPageComplete());
DawnCreateNewResourceWizardPage dawnDomainModelFilePage = (DawnCreateNewResourceWizardPage)dawnDiagramModelFilePage.getNextPage();
dawnDiagramModelFilePage.setVisible(false);
dawnDomainModelFilePage.setVisible(true);
callValidatePage(dawnDomainModelFilePage);
assertEquals(true, dawnDomainModelFilePage.isPageComplete());
assertNotNull(dawnDomainModelFilePage);
assertInstanceOf(DawnCreateNewResourceWizardPage.class, dawnDomainModelFilePage);
assertEquals("default.acore", dawnDomainModelFilePage.getDefaultName());
assertEquals("cdo://repo1/folder/default.acore", dawnDomainModelFilePage.getURI().toString());
boolean performFinish = creationWizard.performFinish();
assertEquals(true, performFinish);
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource semanticResource = transaction.getResource("/folder/default.acore");
CDOResource diagramResource = transaction.getResource("/folder/default.acore_diagram");
assertNotNull(diagramResource);
Diagram diagramRoot = (Diagram)diagramResource.getContents().get(0);
assertEquals(semanticResource.getContents().get(0), diagramRoot.getElement());
transaction.close();
}
// cleanup
DawnEditorHelper.getActiveEditor().getSite().getPage().closeAllEditors(false);
}
private void callValidatePage(DawnCreateNewResourceWizardPage page) throws Exception
{
Class<DawnCreateNewResourceWizardPage> clazz = DawnCreateNewResourceWizardPage.class;
java.lang.Class<Object>[] parameterType = null;
Method method = clazz.getDeclaredMethod("validatePage", parameterType);
method.setAccessible(true);
Object[] args = null;
method.invoke(page, args);
}
private Text getResourceText(DawnCreateNewResourceWizardPage dawnDomainModelFilePage) throws Exception
{
Class<DawnCreateNewResourceWizardPage> clazz = DawnCreateNewResourceWizardPage.class;
Field field = clazz.getDeclaredField("resourceText");
field.setAccessible(true);
return (Text)field.get(dawnDomainModelFilePage);
}
}