package org.jetbrains.plugins.ruby.motion; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.testFramework.LightProjectDescriptor; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.ruby.PathUtil; import org.jetbrains.plugins.ruby.RubyVMOptions; import org.jetbrains.plugins.ruby.motion.facet.RubyMotionFacet; import org.jetbrains.plugins.ruby.motion.facet.RubyMotionFacetType; import org.jetbrains.plugins.ruby.motion.symbols.FunctionSymbol; import org.jetbrains.plugins.ruby.motion.symbols.MotionClassSymbol; import org.jetbrains.plugins.ruby.rails.RubyLightProjectDescriptorBase; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.structure.Symbol; import org.jetbrains.plugins.ruby.ruby.sdk.LanguageLevel; import org.jetbrains.plugins.ruby.ruby.testCases.RubyFixtureTestCase; import org.jetbrains.plugins.ruby.ruby.testCases.RubyLightFixtureTestCase; import org.jetbrains.plugins.ruby.ruby.testCases.RubyTestUtil; /** * @author Dennis.Ushakov */ public abstract class RubyMotionLightFixtureTestCase extends RubyLightFixtureTestCase { @Override protected void setUp() throws Exception { super.setUp(); RubyVMOptions.getInstance().forceLanguageLevel(LanguageLevel.RUBY19); } @Override protected void tearDown() throws Exception { RubyVMOptions.resetForcedLanguageLevel(); super.tearDown(); } @Override protected String getTestDataPath() { return PathUtil.getDataPath(getClass()) + "/" + getTestDataRelativePath(); } @Nullable @Override protected LightProjectDescriptor getProjectDescriptor() { return new RubyMotionLightFixtureDescriptor(); } protected PsiFile defaultConfigure() { return myFixture.configureByFiles("app/app_delegate.rb", "Rakefile")[0]; } protected void checkResolveToObjC(final String signature, final String fqn) { final PsiReference ref = findReferenceBySignature(signature); final Symbol symbol = RubyTestUtil.resolveToSymbol(ref); TestCase.assertTrue(symbol instanceof MotionClassSymbol || symbol instanceof FunctionSymbol); TestCase.assertEquals(fqn, symbol.getFQNWithNesting().getFullPath()); } public static class RubyMotionLightFixtureDescriptor extends RubyLightProjectDescriptorBase { @Override public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { prepareSourceRoots(contentEntry); final RubyMotionFacetType facetType = RubyMotionFacetType.getInstance(); RubyFixtureTestCase.addFacetToModule(module, facetType, facetType.createDefaultConfiguration(), "RubyMotion"); RubyMotionFacet.updateMotionLibrary(model); } } }