| /***************************************************************************** |
| * Copyright (c) 2015 Christian W. Damus 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: |
| * Christian W. Damus - Initial API and implementation |
| * |
| *****************************************************************************/ |
| |
| package org.eclipse.papyrus.uml.profile.service; |
| |
| import static org.hamcrest.CoreMatchers.notNullValue; |
| import static org.hamcrest.CoreMatchers.nullValue; |
| import static org.hamcrest.MatcherAssert.assertThat; |
| |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; |
| import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; |
| import org.eclipse.papyrus.junit.utils.rules.PluginResource; |
| import org.eclipse.papyrus.uml.profile.tests.DialogInteractionKind; |
| import org.eclipse.papyrus.uml.profile.tests.DialogInteractionMode; |
| import org.eclipse.papyrus.uml.profile.tests.DialogInteractionRule; |
| import org.eclipse.uml2.uml.Class; |
| import org.eclipse.uml2.uml.Stereotype; |
| import org.junit.Rule; |
| import org.junit.Test; |
| |
| /** |
| * Regression tests for the {@link ReapplyProfilesService} class. |
| */ |
| public class ReapplyProfilesServiceTest extends AbstractPapyrusTest { |
| @Rule |
| public final DialogInteractionRule dialog = new DialogInteractionRule(); |
| |
| @Rule |
| public final PapyrusEditorFixture editor = new PapyrusEditorFixture(); |
| |
| /** |
| * A control test, as it were, for up-to-date application of an UML2-style |
| * profile (one that does not have the Papyrus versioning annotation). |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.NONE) |
| @PluginResource("resources/uml2/up-to-date.di") |
| public void upToDateModelDoesNotPromptForMigration_uml2() { |
| dialog.assertInteraction(); |
| } |
| |
| /** |
| * Test migration of an out-of-date application of an UML2-style |
| * profile (on that does not have the Papyrus versioning annotation). |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.OK) |
| @PluginResource("resources/uml2/out-of-date.di") |
| public void outOfDateModelDoMigration_uml2() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration occurred |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was not migrated", meta.getEStructuralFeature("tag"), notNullValue()); |
| } |
| |
| /** |
| * Test skipping migration of an out-of-date application of an UML2-style |
| * profile (on that does not have the Papyrus versioning annotation). |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.CANCEL) |
| @PluginResource("resources/uml2/out-of-date.di") |
| public void outOfDateModelSkipMigration_uml2() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration did not occur |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was migrated", meta.getEStructuralFeature("tag"), nullValue()); |
| } |
| |
| /** |
| * A control test, as it were, for up-to-date application of a Papyrus-style |
| * profile (one that has the Papyrus versioning annotation). |
| * This profile also uses the a different namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.NONE) |
| @PluginResource("resources/papyrus/up-to-date.di") |
| public void upToDateModelDoesNotPromptForMigration_papyrus() { |
| dialog.assertInteraction(); |
| } |
| |
| /** |
| * Test migration of an out-of-date application of a Papyrus-style |
| * profile (on that has the Papyrus versioning annotation). |
| * This profile also uses the a different namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.OK) |
| @PluginResource("resources/papyrus/out-of-date.di") |
| public void outOfDateModelDoMigration_papyrus() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration occurred |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was not migrated", meta.getEStructuralFeature("tag"), notNullValue()); |
| } |
| |
| /** |
| * Test skipping migration of an out-of-date application of a Papyrus-style |
| * profile (on that has the Papyrus versioning annotation). |
| * This profile also uses the a different namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.CANCEL) |
| @PluginResource("resources/papyrus/out-of-date.di") |
| public void outOfDateModelSkipMigration_papyrus() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration did not occur |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was migrated", meta.getEStructuralFeature("tag"), nullValue()); |
| } |
| |
| /** |
| * A control test, as it were, for up-to-date application of a |
| * registered dynamic profile. |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.NONE) |
| @PluginResource("resources/dynamic/up-to-date.di") |
| public void upToDateModelDoesNotPromptForMigration_dynamic() { |
| dialog.assertInteraction(); |
| } |
| |
| /** |
| * Test migration of an out-of-date application of a |
| * registered dynamic profile. |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.OK) |
| @PluginResource("resources/dynamic/out-of-date.di") |
| public void outOfDateModelDoMigration_dynamic() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration occurred |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was not migrated", meta.getEStructuralFeature("tag"), notNullValue()); |
| } |
| |
| /** |
| * Test skipping migration of an out-of-date application of a |
| * registered dynamic profile. |
| * This profile also uses the same namespace URI for every version. |
| */ |
| @Test |
| @DialogInteractionMode(DialogInteractionKind.CANCEL) |
| @PluginResource("resources/dynamic/out-of-date.di") |
| public void outOfDateModelSkipMigration_dynamic() { |
| dialog.assertInteraction(); |
| |
| // Now check that the migration did not occur |
| EObject thing = requireFooThing(); |
| EClass meta = thing.eClass(); |
| assertThat("Profile application was migrated", meta.getEStructuralFeature("tag"), nullValue()); |
| } |
| |
| // |
| // Test framework |
| // |
| |
| Class getFoo() { |
| return (Class) editor.getModel().getOwnedType("Foo"); |
| } |
| |
| Stereotype getThing() { |
| return editor.getModel().getAppliedProfile("stuff").getOwnedStereotype("Thing"); |
| } |
| |
| EObject requireFooThing() { |
| EObject result = getFoo().getStereotypeApplication(getThing()); |
| assertThat("Foo does not have stereotype <<thing>>", result, notNullValue()); |
| return result; |
| } |
| } |