/** * 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; import org.eclipse.xtext.junit4.InjectWith; import org.eclipse.xtext.junit4.XtextRunner; import org.junit.Assert; import org.junit.runner.RunWith; import org.yakindu.sct.model.sgraph.State; import org.yakindu.sct.model.sgraph.Statechart; import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource; import org.yakindu.sct.test.models.TestModelInjectorProvider; /** * Base test class for state based refactorings. * * @author thomas kutz - Initial contribution and API * */ @RunWith(XtextRunner.class) @InjectWith(TestModelInjectorProvider.class) public abstract class StateBasedRefactoringTest extends RefactoringTest { protected void testRefactoringOnState(String pathToInitialSct, String pathToExpectedSct, String stateName) { Statechart initial = models.loadStatechartFromResource(pathToInitialSct); State state = getStateByName(initial, stateName); AbstractRefactoring<?> refactoring = getRefactoring(state); AbstractSCTResource initialRes = (AbstractSCTResource) initial.eResource(); initialRes.setSerializerEnabled(true); refactoring.internalExecute(); initialRes.setSerializerEnabled(false); initialRes.linkSpecificationElements(); Statechart expected = models.loadStatechartFromResource(pathToExpectedSct); compareStatecharts(initial, expected); } protected void testRefactoringIsExecutableOnState(String pathToInitialSct, String pathToExpectedSct, String stateName, boolean expectedResult) { Statechart initial = models.loadStatechartFromResource(pathToInitialSct); State state = getStateByName(initial, stateName); AbstractRefactoring<?> refactoring = getRefactoring(state); if (expectedResult) { Assert.assertTrue("Refactoring on state '" + stateName + "' was not executable, although it should be.", refactoring.isExecutable()); } else { Assert.assertFalse("Refactoring on state '" + stateName + "' was executable, although it should not be.", refactoring.isExecutable()); } } protected abstract AbstractRefactoring<?> getRefactoring(State state); }