diff options
Diffstat (limited to 'tests/plugins/org.eclipse.tcf.debug.test/src/org/eclipse/tcf/debug/test/LineNumbersCMTest.java')
-rw-r--r-- | tests/plugins/org.eclipse.tcf.debug.test/src/org/eclipse/tcf/debug/test/LineNumbersCMTest.java | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/plugins/org.eclipse.tcf.debug.test/src/org/eclipse/tcf/debug/test/LineNumbersCMTest.java b/tests/plugins/org.eclipse.tcf.debug.test/src/org/eclipse/tcf/debug/test/LineNumbersCMTest.java new file mode 100644 index 000000000..5cbf96066 --- /dev/null +++ b/tests/plugins/org.eclipse.tcf.debug.test/src/org/eclipse/tcf/debug/test/LineNumbersCMTest.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.debug.test; + +import java.math.BigInteger; +import java.util.concurrent.ExecutionException; + +import org.eclipse.tcf.debug.test.util.Transaction; +import org.eclipse.tcf.services.ILineNumbers.CodeArea; +import org.junit.Assert; + +public class LineNumbersCMTest extends AbstractCMTest { + + public void testLineNumbersCMResetOnContextRemove() throws Exception { + final TestProcessInfo processInfo = startProcess("tcf_test_func0"); + + // Retrieve the current PC for use later + final String pc = new Transaction<String>() { + @Override + protected String process() throws InvalidCacheException, ExecutionException { + return validate(fRunControlCM.getState(processInfo.fThreadId)).pc; + } + }.get(); + + final BigInteger pcNumber = new BigInteger(pc); + final BigInteger pcNumberPlusOne = pcNumber.add(BigInteger.valueOf(1)); + + // Retrieve the line number for current PC. + final CodeArea[] pcCodeAreas = new Transaction<CodeArea[]>() { + @Override + protected CodeArea[] process() throws InvalidCacheException, ExecutionException { + CodeArea[] areas = validate(fLineNumbersCM.mapToSource(processInfo.fProcessId, pcNumber, pcNumberPlusOne)); + Assert.assertNotNull(areas); + Assert.assertTrue(areas.length != 0); + + areas = validate(fLineNumbersCM.mapToSource(processInfo.fThreadId, pcNumber, pcNumberPlusOne)); + Assert.assertNotNull(areas); + Assert.assertTrue(areas.length != 0); + + CodeArea[] areas2 = validate(fLineNumbersCM.mapToMemory(processInfo.fProcessId, areas[0].file, areas[0].start_line, areas[0].start_column)); + Assert.assertNotNull(areas2); + Assert.assertTrue(areas2.length != 0); + + areas2 = validate(fLineNumbersCM.mapToMemory(processInfo.fThreadId, areas[0].file, areas[0].start_line, areas[0].start_column)); + Assert.assertNotNull(areas2); + Assert.assertTrue(areas2.length != 0); + + return areas; + } + }.get(); + + // End test, check that all caches were reset and now return an error. + new Transaction<String>() { + @Override + protected String process() throws InvalidCacheException, ExecutionException { + validate( fDiagnosticsCM.cancelTest(processInfo.fTestId, this) ); + validate( fRunControlCM.waitForContextRemoved(processInfo.fProcessId, this) ); + try { + validate(fLineNumbersCM.mapToSource(processInfo.fProcessId, pcNumber, pcNumberPlusOne)); + Assert.fail("Expected error"); + } catch (ExecutionException e) {} + try { + validate(fLineNumbersCM.mapToSource(processInfo.fThreadId, pcNumber, pcNumberPlusOne)); + Assert.fail("Expected error"); + } catch (ExecutionException e) {} + try { + CodeArea[] areas3 = validate(fLineNumbersCM.mapToMemory(processInfo.fProcessId, pcCodeAreas[0].file, pcCodeAreas[0].start_line, pcCodeAreas[0].start_column)); + Assert.fail("Expected error"); + } catch (ExecutionException e) {} + try { + validate(fLineNumbersCM.mapToMemory(processInfo.fThreadId, pcCodeAreas[0].file, pcCodeAreas[0].start_line, pcCodeAreas[0].start_column)); + Assert.fail("Expected error"); + } catch (ExecutionException e) {} + + return null; + } + }.get(); + } + +} |