/**
* Copyright (c) 2013 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.refactoring.refactor.impl;
import static org.junit.Assert.fail;
import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.INITIAL_STATECHART;
import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.RENAMING;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.yakindu.base.base.NamedElement;
import org.yakindu.base.types.Event;
import org.yakindu.base.types.Property;
import org.yakindu.sct.model.sgraph.Scope;
import org.yakindu.sct.model.sgraph.Statechart;
import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource;
import org.yakindu.sct.model.stext.stext.InterfaceScope;
import org.yakindu.sct.refactoring.refactor.RefactoringTest;
import org.yakindu.sct.test.models.TestModelInjectorProvider;
import com.google.common.collect.Lists;
/**
* Tests for {@link RenameRefactoring}.
*
* @author thomas kutz - Initial contribution and API
*
*/
@RunWith(XtextRunner.class)
@InjectWith(TestModelInjectorProvider.class)
public class RenameRefactoringTest extends RefactoringTest {
@Test
public void testRenameVariable() {
Statechart initial = models.loadStatechartFromResource(RENAMING + INITIAL_STATECHART);
// get element to rename
Property someVariable = null;
EList<Scope> scopes = initial.getScopes();
for (Scope scope : scopes) {
if (scope instanceof InterfaceScope) {
InterfaceScope iScope = (InterfaceScope) scope;
someVariable = iScope.getVariables().get(0);
}
}
Statechart expected = models.loadStatechartFromResource(RENAMING + "AfterRenamingVariable.sct");
testRenaming(initial, expected, someVariable, "someNewVariableName");
}
@Test
public void testRenameEvent() {
Statechart initial = models.loadStatechartFromResource(RENAMING + INITIAL_STATECHART);
Statechart expected = models.loadStatechartFromResource(RENAMING + "AfterRenamingEvent.sct");
// get element to rename
Event someEvent1 = null;
EList<Scope> scopes = initial.getScopes();
for (Scope scope : scopes) {
if (scope instanceof InterfaceScope) {
InterfaceScope iScope = (InterfaceScope) scope;
for (Event event : iScope.getEvents()) {
if (event.getName().equals("someEvent1")) {
someEvent1 = event;
}
}
}
}
testRenaming(initial, expected, someEvent1, "someNewEventName");
}
@Test
public void testRenameInterface() {
Statechart initial = models.loadStatechartFromResource(RENAMING + INITIAL_STATECHART);
Statechart expected = models.loadStatechartFromResource(RENAMING + "AfterRenamingInterface.sct");
// get element to rename
InterfaceScope someInterface = null;
EList<Scope> scopes = initial.getScopes();
for (Scope scope : scopes) {
if (scope instanceof InterfaceScope) {
someInterface = (InterfaceScope) scope;
}
}
testRenaming(initial, expected, someInterface, "someNewInterfaceName");
}
@Ignore
@Test
public void testNoRenamingIntoExistingName() {
fail("Not yet implemented.");
}
@Test
public void testRenameMultiStatement() {
Statechart initial = models.loadStatechartFromResource(RENAMING + "beforeMultiStatement.sct");
Statechart expected = models.loadStatechartFromResource(RENAMING + "AfterMultiStatement.sct");
// get element to rename
InterfaceScope someInterface = null;
EList<Scope> scopes = initial.getScopes();
for (Scope scope : scopes) {
if (scope instanceof InterfaceScope) {
someInterface = (InterfaceScope) scope;
}
}
testRenaming(initial, expected, someInterface.getVariables().get(0), "y");
}
private void testRenaming(Statechart initial, Statechart expected, NamedElement elementToRename, String newName) {
RenameRefactoring refactoring = new RenameRefactoring();
refactoring.setContextObjects(Lists.newArrayList(elementToRename));
refactoring.setNewName(newName);
AbstractSCTResource initialRes = (AbstractSCTResource) initial.eResource();
initialRes.setSerializerEnabled(true);
refactoring.internalExecute();
initialRes.setSerializerEnabled(false);
initialRes.linkSpecificationElements();
compareStatecharts(initial, expected);
}
}