package com.aptana.rdt.internal.core.parser.warnings; import java.util.Map; import org.rubypeople.rdt.core.RubyCore; import org.rubypeople.rdt.core.parser.warnings.RubyLintVisitor; import com.aptana.rdt.AptanaRDTPlugin; import com.aptana.rdt.internal.parser.warnings.TooManyArgumentsVisitor; public class TC_CodeComplexityTooManyArguments extends WarningVisitorTest { private static final int MAX_ARGS; static { Map<String,String> options = AptanaRDTPlugin.getDefault().getOptions(); int max; try { max = Integer.parseInt((String) options.get(AptanaRDTPlugin.COMPILER_PB_MAX_ARGUMENTS)); }catch (NumberFormatException e) { max = TooManyArgumentsVisitor.DEFAULT_MAX_ARGS; } MAX_ARGS = max; } @Override protected RubyLintVisitor createVisitor(String code) { return new TooManyArgumentsVisitor(code){ @Override protected String getSeverity() { return RubyCore.WARNING; } }; } // TODO Add tests for max branches // TODO Add tests for max method params // TODO Add tests for max locals // TODO Add tests for max returns public void testTooManyArgs() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("def method("); for (int i = 1; i <= MAX_ARGS + 1; i++) { buffer.append(" arg_"); buffer.append(i); if (i < MAX_ARGS + 1) {buffer.append(',');} } buffer.append(")\n end\n"); parse(buffer.toString()); assertEquals(1, numberOfProblems()); } public void testEqualToMaxArgs() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("def method("); for (int i = 1; i <= MAX_ARGS; i++) { buffer.append(" arg_"); buffer.append(i); if (i < MAX_ARGS) {buffer.append(", ");} } buffer.append(")\n end\n"); parse(buffer.toString()); assertEquals(0, numberOfProblems()); } public void testLessThanMaxArgs() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("def method("); for (int i = 1; i <= MAX_ARGS - 1; i++) { buffer.append(" arg_"); buffer.append(i); if (i < MAX_ARGS - 1) {buffer.append(',');} } buffer.append(")\n end\n"); parse(buffer.toString()); assertEquals(0, numberOfProblems()); } }