/******************************************************************************* * Copyright (c) 2009, 2016 Alena Laskavaia * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alena Laskavaia - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.codan.core.internal.checkers; import org.eclipse.cdt.codan.core.test.CheckerTestCase; import org.eclipse.cdt.codan.internal.core.model.CodanProblemMarker; import org.eclipse.core.resources.IMarker; /** * Test for {@see AssignmentInConditionChecker} class */ public class AssignmentInConditionCheckerTest extends CheckerTestCase { @Override public void setUp() throws Exception { super.setUp(); enableProblems("org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem"); } // main() { // int a=1,b=3; // if (a=b) b=4; // error here on line 3 // } public void test_basic() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(3); } // main() { // int a=1,b=3; // // if ((a=b)) b--; // no error // } public void test_fixed() throws Exception { loadCodeAndRun(getAboveComment()); checkNoErrors(); } // main() { // int a=1,b=3; // if ((a=b)!=0) b=4; // no error here on line 3 // } public void test3() throws Exception { loadCodeAndRun(getAboveComment()); checkNoErrors(); } // main() { // int i,a[10]; // if (a[i]=0) b=4; // no error here on line 3 // } public void test_array() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(3); } // main() { // int i,b=3; // for (i = 0; i=b; i++) { // here // } // } public void test_for() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(3); } // main() { // int i,b=3; // while (i=b) { // here // } // } public void test_while() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(3); } // main() { // int i,b=3; // (i=b)?i++:b++; // here // } public void test_tri() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(3); } // main() { // int a=1,b=3; // if (a=b) b=4; // error here on line 3 // } public void test_basic_params() throws Exception { loadCodeAndRun(getAboveComment()); IMarker marker = checkErrorLine(3); String arg = CodanProblemMarker.getProblemArgument(marker, 0); assertEquals("a=b", arg); //$NON-NLS-1$ } // main() { // int i; // while (i=b()) { // @suppress("Assignment in condition") // } // } public void test_while2supp() throws Exception { loadCodeAndRun(getAboveComment()); checkNoErrors(); } // main() { // int i; // while (i=b()) { /* @suppress("Assignment in condition") */ // } // } public void test_while3supp() throws Exception { loadCodeAndRun(getAboveComment()); checkNoErrors(); } // #define LOOP() while (i=b() /* @suppress("Assignment in condition") */ ) { } // main() { // int i; // LOOP(); // } public void test_whileMacroSupp() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(4); // TODO: suppression does not work in macro body now } // #define LOOP() while (i=b()) { } // main() { // int i; // LOOP(); // err // } public void test_whileMacro() throws Exception { loadCodeAndRun(getAboveComment()); checkErrorLine(4); } }