blob: c62e1f769813067e3de7c0a074ac2e04e288fe47 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 IBM Corporation and others.
*
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.lrparser.tests;
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
import org.eclipse.cdt.core.dom.lrparser.gnu.GCCLanguage;
import org.eclipse.cdt.core.dom.lrparser.gnu.GPPLanguage;
import org.eclipse.cdt.core.model.ILanguage;
import junit.framework.TestCase;
public class AbstractLRHangingTest extends TestCase {
public AbstractLRHangingTest() {
}
public AbstractLRHangingTest(String name) {
super(name);
}
protected ILanguage getCLanguage() {
return GCCLanguage.getDefault();
}
protected ILanguage getCPPLanguage() {
return GPPLanguage.getDefault();
}
protected void runThreadByLimitedTime(long limitTime, Thread testThread) throws Exception {
testThread.start();
testThread.join(limitTime);
if (testThread.isAlive()) {
testThread.interrupt();
fail("timeout by " + limitTime / 1000 + " seconds"); //$NON-NLS-2$
} else {
// Finished
}
}
// 1mins
public static long THREAD_TIMEOUT_LIMIT = 1 * 60 * 1000;
public static String CONTENT_ASIST_CURSOR = " /*<ctrl-space>*/ ";
private String errMsg = "";
public void resetErrMsg() {
errMsg = "";
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
protected void runTestCase(final String code, final ILanguage language) throws Exception {
Thread testThread = new Thread() {
@Override
public void run() {
String errMsg = "";
resetErrMsg();
String msg = null;
int offset = code.indexOf(CONTENT_ASIST_CURSOR);
int index = 0;
while (offset >= 0) {
IASTCompletionNode node = null;
try {
node = ParseHelper.getCompletionNode(code, language, offset);
} catch (Exception e) {
if (errMsg.length() == 0) {
errMsg = "caught an exception when the code is parsed for cursor number " + index;
} else {
errMsg = errMsg + "\n" + "caught an exception when the code is parsed for cursor number "
+ index;
}
}
if (node == null) {
if (errMsg.length() == 0) {
errMsg = "return completion node is null when the code is parsed for cursor number "
+ index;
} else {
errMsg = errMsg + "\n"
+ "return completion node is null when the code is parsed for cursor number "
+ index;
}
}
offset = code.indexOf(CONTENT_ASIST_CURSOR, offset + 1);
index++;
}
setErrMsg(errMsg);
}
};
runThreadByLimitedTime(THREAD_TIMEOUT_LIMIT, testThread);
if (errMsg.length() > 0) {
//fail(errMsg);
}
}
}