blob: 493d01064c39eb30dc7c1263608aed424da5a6b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2015 Alena Laskavaia
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.core.internal.checkers;
import java.io.File;
import org.eclipse.cdt.codan.core.param.IProblemPreference;
import org.eclipse.cdt.codan.core.tests.CheckerTestCase;
import org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectChecker;
import org.eclipse.core.resources.IMarker;
/**
* Test for {@see StatementHasNoEffectChecker} class
*/
public class StatementHasNoEffectCheckerTest extends CheckerTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
enableProblems(StatementHasNoEffectChecker.ER_ID);
}
@Override
public boolean isCpp() {
return true;
}
// int main() {
// int a;
// +a; // error here on line 3
// }
public void testUnaryExpression() throws Exception {
checkSampleAbove();
}
// int main() {
// int a,b;
//
// b+a; // error here on line 4
// }
public void testBinaryExpression() throws Exception {
checkSampleAbove();
}
// int main() {
// int a,b;
//
// a=b+a; // no error here
// }
public void testNormalAssignment() throws Exception {
checkSampleAbove();
}
// int 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() throws Exception {
checkSampleAbove();
}
// int main() {
// int a;
// a; // error here on line 3
// }
public void testIdExpression() throws Exception {
checkSampleAbove();
}
// int main() {
// int a=({foo();a;}); // no error here on line 2
// char *p=({char s[]="Some string";&s[0];}); // no error here on line 3
// }
public void testGNUExpressionCompoundStmtFalsePositives() throws Exception {
checkSampleAbove();
}
// int main() {
// int z=({int a=0; +a; a;}) // error here on line 2
// }
public void testGNUExpressionCompoundStmtInside() throws Exception {
checkSampleAbove();
}
// int main() {
// int a;
// +a; // error here on line 3
// }
// void foo() {
// int a;
//
// +a; // error here on line 4
// }
public void test2FilesUnaryExpression() throws Exception {
/* This test is using two files */
CharSequence[] code = getContents(2);
File f1 = loadcode(code[0].toString());
File f2 = loadcode(code[1].toString());
runOnProject();
checkErrorLine(f1, 3);
checkErrorLine(f2, 4);
}
// int main() {
// for (a=b;a;a=a->next);
// }
public void testForTestExpression() throws Exception {
checkSampleAbove();
}
// void main() {
// bool a;
// class c {};
// c z;
// (a = z.foo(1)) || (a = z.foo(2));
// }
public void testLazyEvalHack() throws Exception {
checkSampleAboveCpp();
}
// int main() {
// A a,b;
//
// b+=a; // no error here on line 4
// }
public void testOverloadedBinaryExpression() throws Exception {
checkSampleAboveCpp();
}
//#define FUNC(a) a
// int main() {
// int a;
// FUNC(a); // error by default
// }
public void testInMacro() throws Exception {
IProblemPreference macro = getPreference(StatementHasNoEffectChecker.ER_ID,
StatementHasNoEffectChecker.PARAM_MACRO_ID);
macro.setValue(Boolean.TRUE);
checkSampleAbove();
}
//#define FUNC(a) a
// int main() {
// int x;
// FUNC(x); // error
// }
public void testMessageInMacro() throws Exception {
loadCodeAndRun(getAboveComment());
IMarker m = checkErrorLine(4);
assertMessageMatch("'FUNC(x)'", m); //$NON-NLS-1$
}
//#define FUNC(a) a
// int main() {
// int a;
// FUNC(a); // no error if macro exp turned off
// }
public void testInMacroParamOff() throws Exception {
IProblemPreference macro = getPreference(StatementHasNoEffectChecker.ER_ID,
StatementHasNoEffectChecker.PARAM_MACRO_ID);
macro.setValue(Boolean.FALSE);
checkSampleAbove();
}
// int main() {
// int a;
// +a; // error here on line 3
// }
public void testMessage() throws Exception {
loadCodeAndRun(getAboveComment());
IMarker m = checkErrorLine(3);
assertMessageMatch("'\\+a'", m); //$NON-NLS-1$
}
// class S {
// int operator*(); // may have side effect
// };
//
// int main() {
// S s;
// *s;
// }
public void testOverloadedOperator_bug399146() throws Exception {
checkSampleAboveCpp();
}
}