/**
* 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.yakindu.sct.refactoring.test.models.RefactoringTestModels.EXPECTED_STATECHART;
import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.GROUPING_STATES;
import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.INITIAL_STATECHART;
import java.util.List;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.junit.Test;
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.refactoring.refactor.RefactoringTest;
import org.yakindu.sct.test.models.TestModelInjectorProvider;
import com.google.common.collect.Lists;
@RunWith(XtextRunner.class)
@InjectWith(TestModelInjectorProvider.class)
public class GroupStatesIntoCompositeRefactoringTest extends RefactoringTest {
@Test
public void testSemanticalRefactoring() {
Statechart initial = models
.loadStatechartFromResource(GROUPING_STATES + INITIAL_STATECHART);
List<State> states = getStatesByName(initial, Lists.newArrayList("B", "C", "D"));
GroupStatesIntoCompositeRefactoring refactoring = new GroupStatesIntoCompositeRefactoring();
refactoring.contextStates = Lists.newArrayList(states);
AbstractSCTResource initialRes = (AbstractSCTResource) initial.eResource();
initialRes.setSerializerEnabled(true);
refactoring.doSemanticalRefactoring();
initialRes.setSerializerEnabled(false);
initialRes.linkSpecificationElements();
Statechart expected = models
.loadStatechartFromResource(GROUPING_STATES + EXPECTED_STATECHART);
compareStatecharts(initial, expected);
}
protected List<State> getStatesByName(Statechart statechart, List<String> names) {
List<State> allStates = EcoreUtil2.getAllContentsOfType(statechart, State.class);
List<State> result = Lists.newArrayList();
for (State state : allStates) {
if (names.contains(state.getName())) {
result.add(state);
}
}
return result;
}
}