/* * Copyright 2003-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.generator.test; import jetbrains.mps.project.Project; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.smodel.SNodeUtil; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SNodeAccessUtil; import org.junit.After; import org.junit.Assert; import org.junit.Test; import java.io.File; import java.io.IOException; /** * Evgeny Gryaznov, Oct 4, 2010 */ public class IncrementalGenerationTest extends GenerationTestBase { private Project myProject; @After public void tearDown() throws Exception { if (myProject != null) { cleanup(myProject); } } /** * Passes (with IllegalStateException: Event outside of a command and TestModule$TestSModelDescriptor !instanceof EditableSModel). */ @Test public void testIncSolution1() throws IOException { myProject = loadProject(new File(System.getProperty("user.dir") + "/languages/languageDesign/generator")); SModel descr = findModel(myProject, "test_Closure"); doTestIncrementalGeneration(myProject, descr, new ModelChangeRunnable() { @Override public void run(SModel descr) { SModel model = descr; SNode root = SModelOperations.getRootByName(model,"User"); Assert.assertNotNull("No root in model", root); SNode found = null; for(SNode md : root.getChildren("member")) { if(md.getName().equals("testRename2") && md.getConcept().getQualifiedName().equals("jetbrains.mps.baseLanguage.structure.InstanceMethodDeclaration")) { found = md; } } Assert.assertNotNull("no method in class", found); SNodeAccessUtil.setProperty(found, SNodeUtil.property_INamedConcept_name, "testRename3"); } }); } /** * Fails with diff: ConceptMethodCallUtils tells whether to use reflection for non-virtual method based on module instanceof Solution * However, during test, j.m.ide.actions is inside TestModule, which is not a Solution, hence calls to non-virtual methods are generated differently. */ @Test public void testIdeActions() throws IOException { myProject = loadProject(new File(System.getProperty("user.dir"))); SModel descr = findModel(myProject, "jetbrains.mps.ide.actions"); doTestIncrementalGeneration(myProject, descr, new ModelChangeRunnable() { @Override public void run(SModel descr) { SModel model = descr; SNode root = SModelOperations.getRootByName(model, "GoToFile"); Assert.assertNotNull("No root in model", root); SNodeAccessUtil.setProperty(root, SNodeUtil.property_INamedConcept_name, "GoToFile2"); } }); } /** * Passes when runs alone, (with CCE in SNode.setProperty due to TestModule$TestSModelDescriptor !instanceof EditableSModel) */ @Test public void testBaseLanguageStructure() throws IOException { myProject = loadProject(new File(System.getProperty("user.dir"))); SModel descr = findModel(myProject, "jetbrains.mps.baseLanguage.structure"); doTestIncrementalGeneration(myProject, descr, new ModelChangeRunnable() { @Override public void run(SModel descr) { SModel model = descr; SNode root = SModelOperations.getRootByName(model,"Expression"); Assert.assertNotNull("No root in model", root); SNodeAccessUtil.setProperty(root, SNodeUtil.property_INamedConcept_name, "ReExpression"); } }); } /** * Fails with UnsupportedOperationException in SModelBase.removeRootNode */ @Test public void testBaseLanguageEditor() throws IOException { myProject = loadProject(new File(System.getProperty("user.dir"))); SModel descr = findModel(myProject, "jetbrains.mps.baseLanguage.editor"); doTestIncrementalGeneration(myProject, descr, new ModelChangeRunnable() { @Override public void run(SModel descr) { SModel model = descr; SNode root = SModelOperations.getRootByName(model, "StatementList_Editor"); Assert.assertNotNull("No root in model", root); descr.removeRootNode(root); } }); } }