package org.jetbrains.plugins.ruby.motion; import com.intellij.codeInsight.generation.ClassMember; import com.intellij.codeInsight.generation.MemberChooserObjectBase; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ruby.ruby.actions.override.RubyOverrideHandler; import org.jetbrains.plugins.ruby.ruby.codeInsight.OverriddenMethodGenerator; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.Type; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.structure.Symbol; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.structure.SymbolUtil; import org.jetbrains.plugins.ruby.ruby.sdk.LanguageLevel; import java.util.List; /** * @author Dennis.Ushakov */ public class RubyMotionOverrideTest extends RubyMotionLightFixtureTestCase { @Override protected String getTestDataRelativePath() { return "testApp"; } public void testNoParams() throws Exception { myFixture.configureByFiles("app/test_controller.rb", "app/app_delegate.rb", "Rakefile"); doTest("viewDidLoad", "def viewDidLoad\n" + " super\n" + "end"); } public void testOneParam() throws Exception { myFixture.configureByFiles("app/test_controller.rb", "app/app_delegate.rb", "Rakefile"); doTest("addChildViewController:", "def addChildViewController(childController)\n" + " super\n" + "end"); } public void testNamedParam() throws Exception { myFixture.configureByFiles("app/test_controller.rb", "app/app_delegate.rb", "Rakefile"); doTest("setToolbarItems:animated:", "def setToolbarItems(toolbarItems, animated:animated)\n" + " super\n" + "end"); } private void doTest(@NotNull final String name, @NotNull final String result) throws Exception { final Symbol controller = SymbolUtil.findSymbol(getProject(), Type.CLASS, "TestController", null); assertNotNull(controller); final List<ClassMember> list = RubyOverrideHandler.createOverrideMembers(controller, myFixture.getFile()); final StringBuilder namesInClass = new StringBuilder(); for (ClassMember classMember : list) { MemberChooserObjectBase methodMember = (MemberChooserObjectBase)classMember; if (name.equals(methodMember.getText())) { final PsiElement element = OverriddenMethodGenerator.generate(classMember, LanguageLevel.RUBY19); assertNotNull(element); namesInClass.append(element.getText()).append("\n"); } } assertEquals(result, namesInClass.toString().trim()); } }