package com.aptana.rdt.internal.core.parser.warnings; import java.util.List; import org.rubypeople.rdt.core.RubyCore; import org.rubypeople.rdt.core.compiler.CategorizedProblem; import org.rubypeople.rdt.core.parser.warnings.RubyLintVisitor; import org.rubypeople.rdt.internal.core.parser.warnings.AbstractRubyLintVisitorTestCase; import com.aptana.rdt.IProblem; import com.aptana.rdt.internal.parser.warnings.AccidentalBooleanAssignmentVisitor; public class AccidentalBooleanAssignmentVisitorTest extends AbstractRubyLintVisitorTestCase { @Override protected RubyLintVisitor createVisitor(String src) { return new AccidentalBooleanAssignmentVisitor(src) { @Override protected String getSeverity() { return RubyCore.WARNING; } }; } public void testSimpleLocalVarAsgnInIfCondition() { String src = "a = 2\nif a = 1\n puts 'hi'\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(9, problems.get(0).getSourceStart()); assertEquals(13, problems.get(0).getSourceEnd()); } public void testSimpleLocalVarAsgnInIfConditionDoesntGenerateWarningIfLocalVarNotAssignedToBefore() { String src = "if a = 1\n puts 'hi'\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(0, problems.size()); } public void testSimpleLocalVarAsgnWithIfModifier() { String src = "a = 2\nputs 'hi' if a = 1"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(19, problems.get(0).getSourceStart()); assertEquals(23, problems.get(0).getSourceEnd()); } public void testSimpleLocalVarAsgnInUnlessCondition() { String src = "a = 2\nunless a = 1\n puts 'hi'\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(13, problems.get(0).getSourceStart()); assertEquals(17, problems.get(0).getSourceEnd()); } public void testSimpleLocalVarAsgnWithUnlessModifier() { String src = "a = 2\nputs 'hi' unless a = 1"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(23, problems.get(0).getSourceStart()); assertEquals(27, problems.get(0).getSourceEnd()); } public void testConstantAssignmentInIfCondition() { String src = "if CONSTANT = 1\n puts 'hi'\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(3, problems.get(0).getSourceStart()); assertEquals(14, problems.get(0).getSourceEnd()); } public void testInstanceVariableAssignmentInIfCondition() { String src = "class Chris\n def method\n if @var = 1\n puts 'hi'\n end\n end\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(32, problems.get(0).getSourceStart()); assertEquals(39, problems.get(0).getSourceEnd()); } public void testClassVariableAssignmentInIfCondition() { String src = "class Chris\n def method\n if @@var = 1\n puts 'hi'\n end\n end\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(32, problems.get(0).getSourceStart()); assertEquals(40, problems.get(0).getSourceEnd()); } public void testSimpleLocalVarAsgnInWhenExpression() { String src = "case var\nwhen @a = 2\nputs 'hi'\nelse\n puts 'yeah'\nend"; List<CategorizedProblem> problems = getProblems(src); assertEquals(1, problems.size()); assertEquals(IProblem.PossibleAccidentalBooleanAssignment, problems.get(0).getID()); assertEquals(14, problems.get(0).getSourceStart()); assertEquals(19, problems.get(0).getSourceEnd()); } public void testNoFalsePositive() { String src = "a = 1"; List<CategorizedProblem> problems = getProblems(src); assertEquals(0, problems.size()); } }