/*******************************************************************************
* Copyright (c) 2009, 2010 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.param.IProblemPreference;
import org.eclipse.cdt.codan.core.test.CheckerTestCase;
import org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectChecker;
import org.eclipse.core.resources.IMarker;
import java.io.File;
import java.io.IOException;
/**
* Test for {@see StatementHasNoEffectChecker} class
*
*/
public class StatementHasNoEffectCheckerTest extends CheckerTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
enableProblems(StatementHasNoEffectChecker.ER_ID);
}
// main() {
// int a;
// +a; // error here on line 3
// }
public void testUnaryExpression() throws IOException {
loadCodeAndRun(getAboveComment());
checkErrorLine(3);
}
// main() {
// int a,b;
//
// b+a; // error here on line 4
// }
public void testBinaryExpression() {
loadCodeAndRun(getAboveComment());
checkErrorLine(4);
}
// main() {
// int a,b;
//
// a=b+a; // no error here
// }
public void testNormalAssignment() {
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
// main() {
// int a,b;
//
// (a=b); // no errors here
// a+=b;
// a<<=b;
// a-=b;
// a++;
// b--;
// --a;
// ++b;
// a%=2;
// a>>=2;
// }
public void testFalsePositives() {
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
// main() {
// int a;
// a; // error here on line 3
// }
public void testIdExpression() {
loadCodeAndRun(getAboveComment());
checkErrorLine(3);
}
// main() {
// int a=({foo();a;}); // no error here on line 2
// }
public void testGNUExpressionCompoundStmt() {
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
/* first file */
// main() {
// int a;
// +a; // error here on line 3
// }
/* second file */
// foo() {
// int a;
//
// +a; // error here on line 4
// }
/* this test is using two files */
public void test2FilesUnaryExpression() throws IOException {
CharSequence[] code = getContents(2);
File f1 = loadcode(code[0].toString());
File f2 = loadcode(code[1].toString());
runOnProject();
checkErrorLine(f1, 3);
checkErrorLine(f2, 4);
}
// main() {
// for (a=b;a;a=a->next);
// }
public void testForTestExpression() {
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
// void main() {
// bool a;
// class c {};
// c z;
// (a = z.foo(1)) || (a = z.foo(2));
// }
public void testLazyEvalHack() {
loadCodeAndRunCpp(getAboveComment());
checkNoErrors();
}
// main() {
// A a,b;
//
// b+=a; // error here on line 4
// }
public void testOverloadedBinaryExpression() {
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
//#define FUNC(a) a
// main() {
// int a;
// FUNC(a); // error by default
// }
public void testInMacro() {
IProblemPreference macro = getPreference(StatementHasNoEffectChecker.ER_ID, StatementHasNoEffectChecker.PARAM_MACRO_ID);
macro.setValue(Boolean.TRUE);
loadCodeAndRun(getAboveComment());
checkErrorLine(4);
}
//#define FUNC(a) a
// main() {
// int x;
// FUNC(x); // error
// }
public void testMessageInMacro() throws IOException {
loadCodeAndRun(getAboveComment());
IMarker m = checkErrorLine(4);
assertMessageMatch("'FUNC(x)'", m); //$NON-NLS-1$
}
//#define FUNC(a) a
// main() {
// int a;
// FUNC(a); // no error if macro exp turned off
// }
public void testInMacroParamOff() {
IProblemPreference macro = getPreference(StatementHasNoEffectChecker.ER_ID, StatementHasNoEffectChecker.PARAM_MACRO_ID);
macro.setValue(Boolean.FALSE);
loadCodeAndRun(getAboveComment());
checkNoErrors();
}
// main() {
// int a;
// +a; // error here on line 3
// }
public void testMessage() throws IOException {
loadCodeAndRun(getAboveComment());
IMarker m = checkErrorLine(3);
assertMessageMatch("'\\+a'", m); //$NON-NLS-1$
}
}