|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.api.debugger.jpda; import java.net.URL; import java.io.IOException; import com.sun.jdi.connect.IllegalConnectorArgumentsException; /** * Tests line breakpoints at various places. * * @author Maros Sandor */ public class LineBreakpointTest extends DebuggerJPDAApiTestBase { private JPDASupport support; private JPDADebugger debugger; private String urlString; public LineBreakpointTest(String s) { super(s); } protected void setUp() throws Exception { super.setUp(); ClassLoader cl = this.getClass().getClassLoader(); URL url = cl.getResource("basic/LineBreakpointApp.class"); urlString = url.toString(); } public void testConditionalBreakpoint() throws Exception { doTestBreakpointComplete(33, "x==22", DebuggerConstants.CONDITION_FALSE); doTestBreakpointComplete(34, "x==60", DebuggerConstants.CONDITION_TRUE); } public void testMultipleLineBreakpoints() throws Exception { try { LineBreakpoint lb1 = LineBreakpoint.create(urlString, 26); LineBreakpoint lb2 = LineBreakpoint.create(urlString, 31); LineBreakpoint lb3 = LineBreakpoint.create(urlString, 103); LineBreakpoint lb4 = LineBreakpoint.create(urlString, 86); LineBreakpoint lb5 = LineBreakpoint.create(urlString, 35); dm.addBreakpoint(lb1); dm.addBreakpoint(lb2); dm.addBreakpoint(lb3); dm.addBreakpoint(lb4); dm.addBreakpoint(lb5); TestBreakpointListener tb1 = new TestBreakpointListener(lb1); lb1.addJPDABreakpointListener(tb1); TestBreakpointListener tb2 = new TestBreakpointListener(lb2); lb2.addJPDABreakpointListener(tb2); TestBreakpointListener tb3 = new TestBreakpointListener(lb3); lb3.addJPDABreakpointListener(tb3); TestBreakpointListener tb4 = new TestBreakpointListener(lb4); lb4.addJPDABreakpointListener(tb4); TestBreakpointListener tb5 = new TestBreakpointListener(lb5); lb5.addJPDABreakpointListener(tb5); support = JPDASupport.listen("basic.LineBreakpointApp", false); debugger = support.getDebugger(); support.waitState(DebuggerConstants.STATE_STOPPED, 10000); // 1st breakpoint hit assertEquals("Debugger stopped at wrong line", lb1.getLineNumber(), debugger.getCurrentCallStackFrame().getLineNumber(null)); support.doContinue(); support.waitState(DebuggerConstants.STATE_STOPPED, 10000); // 2nd breakpoint hit assertEquals("Debugger stopped at wrong line", lb2.getLineNumber(), debugger.getCurrentCallStackFrame().getLineNumber(null)); support.doContinue(); support.waitState(DebuggerConstants.STATE_STOPPED, 10000); // 3rd breakpoint hit assertEquals("Debugger stopped at wrong line", lb3.getLineNumber(), debugger.getCurrentCallStackFrame().getLineNumber(null)); support.doContinue(); support.waitState(DebuggerConstants.STATE_STOPPED, 10000); // 4th breakpoint hit assertEquals("Debugger stopped at wrong line", lb4.getLineNumber(), debugger.getCurrentCallStackFrame().getLineNumber(null)); support.doContinue(); support.waitState(DebuggerConstants.STATE_STOPPED, 10000); // 5th breakpoint hit assertEquals("Debugger stopped at wrong line", lb5.getLineNumber(), debugger.getCurrentCallStackFrame().getLineNumber(null)); tb1.assertFailure(); tb2.assertFailure(); tb3.assertFailure(); tb4.assertFailure(); tb5.assertFailure(); dm.removeBreakpoint(lb1); dm.removeBreakpoint(lb2); dm.removeBreakpoint(lb3); dm.removeBreakpoint(lb4); dm.removeBreakpoint(lb5); support.doContinue(); support.waitDisconnected(5000); } finally { support.doFinish(); } } public void testStaticBlockBreakpoint() throws Exception { doTestBreakpointComplete(23); doTestBreakpointComplete(26); } public void testStaticInnerClassBreakpoint() throws Exception { doTestBreakpointComplete(69); doTestBreakpointComplete(72); doTestBreakpointComplete(86); } public void testMainLineBreakpoint() throws Exception { doTestBreakpointComplete(30); } public void testConstructorLineBreakpoint() throws Exception { doTestBreakpointComplete(45); } public void testInnerLineBreakpoint() throws Exception { doTestBreakpointComplete(96); doTestBreakpointComplete(99); doTestBreakpointComplete(107); } private void doTestBreakpointComplete(int line, String condition, int conditionResult) throws IOException, IllegalConnectorArgumentsException, DebuggerStartException { try { LineBreakpoint lb = doTestBreakpoint(line, condition, conditionResult); if (condition == null || conditionResult == DebuggerConstants.CONDITION_TRUE) { support.doContinue(); support.waitDisconnected(5000); } dm.removeBreakpoint(lb); } finally { support.doFinish(); } } private void doTestBreakpointComplete(int line) throws IOException, IllegalConnectorArgumentsException, DebuggerStartException { doTestBreakpointComplete(line, null, DebuggerConstants.CONDITION_NONE); } private LineBreakpoint doTestBreakpoint(int line, String condition, int conditionResult) throws IOException, IllegalConnectorArgumentsException, DebuggerStartException { LineBreakpoint lb = LineBreakpoint.create(urlString, line); lb.setCondition(condition); TestBreakpointListener tbl = new TestBreakpointListener(lb, conditionResult); lb.addJPDABreakpointListener(tbl); dm.addBreakpoint(lb); support = JPDASupport.listen("basic.LineBreakpointApp", false); debugger = support.getDebugger(); if (condition == null || conditionResult == DebuggerConstants.CONDITION_TRUE) { support.waitState(DebuggerConstants.STATE_STOPPED, 5000); } else { support.waitState(DebuggerConstants.STATE_DISCONNECTED, 5000); } tbl.assertFailure(); return lb; } private class TestBreakpointListener implements JPDABreakpointListener { private LineBreakpoint bpt; private int conditionResult; private JPDABreakpointEvent event; private AssertionError failure; public TestBreakpointListener(LineBreakpoint bpt) { this(bpt, DebuggerConstants.CONDITION_NONE); } public TestBreakpointListener(LineBreakpoint bpt, int conditionResult) { this.bpt = bpt; this.conditionResult = conditionResult; } public void breakpointReached(JPDABreakpointEvent event) { try { checkEvent(event); } catch (AssertionError e) { failure = e; } catch (Throwable e) { failure = new AssertionError(e); } } private void checkEvent(JPDABreakpointEvent event) { this.event = event; assertEquals("Breakpoint event: Wrong source", bpt, event.getSource()); assertNotNull("Breakpoint event: Context thread is null", event.getThread()); int result = event.getConditionResult(); if (result == DebuggerConstants.CONDITION_FAILED && conditionResult != DebuggerConstants.CONDITION_FAILED) { failure = new AssertionError(event.getConditionException()); } else if (result != conditionResult) { failure = new AssertionError("Unexpected breakpoint condition result: " + result); } } public void assertFailure() { if (event == null) throw new AssertionError("Breakpoint was not hit (listener was not notified)"); if (failure != null) throw failure; } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.