| /******************************************************************************* |
| * Copyright (c) 2010 IBM Corporation and others. |
| * 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: |
| * 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() { |
| |
| |
| 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); |
| } |
| |
| } |
| |
| |
| |
| |
| |
| |
| |
| } |