Debug Project 2.1 Test Matrix
Testers
Committers: Darin Wright
Community: Anyone who wants to help
JRE Grid
The following JREs should be considered when testing. Committers have been assigned a JRE and platform to test on. The community can chose any JRE and platform.
| JDK 1.3.1 | JDK 1.4.2 | IBM 1.3.1 | IBM 1.4.2 | J9 | |
| Win 2000 | |||||
| Win XP | |||||
| Linux | |||||
| Mac | N/A | N/A | N/A |
Feature Testing
Breakpoints
Line Breakpoints
- creation - double-click in ruler, from "Run" menu, and key-binding (Ctrl+Shift+B)
- deletion - from breakpoints view menu & toolbar, from ruler pop-up menu
- show qualified names
- enable/disable - from ruler pop-up, breakpoint view context menu
- suspend VM vs. suspend thread - menu and properties dialog
- hit count - menu and properties dialog, enabled and disabled hit count via properties dialog
- conditions - enabled/disabled, code assist, valid conditions, syntax errors, runtime errors, suspend on 'true' vs. suspend on change, multi-line conditions, simple conditions, conditions that take a long time
- thread restriction
- instance restriction - available in variables view context menu (only when VM supports it).
Exception Breakpoints
- creation - toolbar in breakpoints view, and from "Run..." menu, try to assign keybinding
- deletion
- show qualified names
- enable/disable
- caught vs. uncaught/both
- scoped exceptions - wild card patterns, specific types, specific packages
- suspend VM vs. suspend thread
- hit count
- thread restriction
- instance restriction
Method Breakpoints
- creation - context menu in outliner, and from "Run..." menu, try to assign keybinding
- deletion
- show qualified names
- enable/disable
- entry vs. exit/both
- source and binary methods
- suspend VM vs. suspend thread
- hit count
- thread restriction
- instance restriction
Watchpoints
- creation - context menu in outliner, and from "Run..." menu, try to assign keybinding
- deletion
- show qualified names
- enable/disable
- access vs. modification/both
- primitives, arrays, objects
- suspend VM vs. suspend thread
- hit count
- thread restriction
- instance restriction (note that instance restriction will not work for primitives)
Uncaught Exceptions & Compilation Errors
- all combinations of "suspend on uncaught exceptions" and "suspend on compilation errors"
Stepping
Step tests should be performed in the debug perspective, and in a non-debug perspective, with and without the debug view present. We do not expect stepping to work without the debug view present.
Step Over
- via toolbar, "Run" menu, keybinding
- step over a line that will cause a breakpoint to be hit
- step over a conditional breakpoint - try true and false conditions
- step over a line that takes a long time to execute
- rapid stepping - hold down the step over hotkey
- step over in a non-top stack frame
- "Reuse editor when displaying source code" preference
Step Into
- via toolbar, "Run" menu, keybinding
- rapid stepping - hold down the step into hotkey
- step into a location where a conditional breakpoint is hit - try true and false conditions
- step into in a non-top stack frame (should not be enabled)
Step Return
- via toolbar, "Run" menu, keybinding
- rapid stepping - hold down the step return hotkey
- step return from a method that will cause a breakpoint to be hit
- step return from a method that will take a long time to execute
- step return from a method that will cause a conditional breakpoint to be hit - try true and false conditions
- rapind stepping - hold down the step return hotkey
- step return from a non-top stack frame
Step with Filters
Step with Filters is effectively a "step into", but the location that is stepped into may be filtered. Filters are defined from the "Java > Debug > Step Filters" preference page.
- Step into a filtered location (should act like a step over)
- Step thru a filtered location (i.e. step into a filtered method that will step into a non-filtered method)
- Step into a filtered location that contains a breakpoint
- Step into a filtered location that contains a conditional breakpoint - try true and false conditions
- Rapid stepping - hold down the step with filters hotkey
- try class filters, package filters, wild card filters
- filter static initializers, constructors
- enable and disable step filters
- step with filters from a non-top stack frame (should not be enabled)
Step Into Selection
Step Into Selection steps into the selected method on the current line of execution, in the top stack frame.
- Use context menu and keybinding
- Step into a method that is not the next method to be stepped into, on the current line
- Step into a method that has already been stepped into, on the current line (should cause error)
- Step into a method with the same name/signature as a method on the current line
- Step into a method that is not on the current line (should not work)
- Step into a method that is not in the top stack frame (should not work)
Run to Line
- Use context menu and keybinding
- Run to a line in the current method
- Run to a line in a method further down the stack
- Run to a line that has already been executed (debug the program again - see if it gets hit)
- Run to a line that will never be hit
Show In...
- "Show In..." is offered for stack frames
- shows associated resource (if any) in the resource navigator
Variables
Rendering
- show/hide qualified names
- show/hide static
- show/hide constants
- show/hide type names
- primitive display options - hex, ASCII, unsigned values
- copy selected variables to clipboard
Updating
- update while rapid stepping
- expansion remains while stepping
- expansion and selection is remembered between different stack frames selected in the same thread
- resuming to a breakpoint in a loop remembers expansion and selection
- changed variables render in preference specified color
- change a variable's value - primitives & Strings
Details
- show/hide details area
- use text wrap in details area
- details update while stepping
- create detail formatter from preference page
- create detail formatter from variables view context menu
- edit detail formatter from variables view context menu
Navigation
- open on declared/concrete type/type hierarchy
- inspect a variable
- watch a variable
Watch Items
- Create a watch item before a program starts execution
- Create a watch item while a program is running
- Ensure watch item updates while stepping
- Watch item update when breakpoint suspends all threads
- Add multiple watch items - ensure they all update while stepping
- Create a watch item with compilation errors
- Create a watch item with runtime errors
Launching Framework
Open Launch Dialog
- Pressing run/debug in a new workspace with no launches opens launch dialog
- Using "Run..."/"Debug..." from drop-down menus & Run menu
- Ctrl-Click a launch in the drop down launch history
- Select a debug element in the debug view - context menu should contain launch config name + "..."
Manipulation
- Delete a config
- Rename a config (also updated in history/favorites)
- Duplicate a config
Launch History
- Create a favorite from the preference page
- Create a favorite from the "Common" tab
- Re-order favorites and launch history
- Remove favorites and launch history items
- Import a shared launch configuration (i.e. into the workspace) that is a favorite (from file system or repository) - should show up in favorites
Launching
- Launching from history
- Re-launch last run/debug - hotkeys
- Re-launch from history menu in "Run" menu
- Re-launch from debug view
- Launch history/last launch persistence across workbench invocations
- Perspective switching when launching based on global preferencs
- Perspective switching overridden with launch config specific settings
- "Remove terminated lanches" preferences
- "Build (if required) before launching" preference
- "Save dirty editors" preference - never/prompt/auto
Evaluations (in Debugger)
Display View
- evaluation actions only enabled when a stack frame is selected (in context menu and Run menu)
- keybindings work
- "this" resolves to receiver of selected stack frame
- code assist via keybinding, auto-complete, pop-up menu
- implicit "this" evaluations/code assist
- result is displayed in Display view
- runtime error
- syntax error
Details Area
- evaluation actions only enabled when a stack frame is selected (in context menu and Run menu)
- keybindings work
- "this" resolves to selected variable
- "this" resolves to receiver in stack frame when no variable is selected
- implicit "this" evaluations/code assist
- result is displayed in details area
- runtime error
- syntax error
Java Editor
- for both compilation units (source) and class files (binaries)
- actions enable only when a stack frame is selected and expression is highlighted
- result is displayed in Display view
- runtime error
- syntax error
General Evaluation Support
- boolean expressions
- message sends
- multi-statements
- for loops
- while loops
- variable declarations
- object instantiations
- array instantiations/access
- inspect vs. display vs. execute
- evaluations not supported when debugging in context of external source (i.e. source elements not on the buildpath, just on the source lookup path)
- breakpoints in application code are honored (but nested evaluations are not supported)
Scrapbook
- code assist visibility is that of associated project's classpath
- no "this" context
- variable declarations
- all types of statements
- display vs. inspect vs. execute
- imports
- runtime errors
- syntax errors
- breakpoints are honored in application code
- evaluations/details are disabled at a breakpoint in application code (nested evaluations not supported)
- properties (via context menu on ".jpage" file)
- Working directory
- VM args
- alternate JRE
- open type/type hierarchy via pop-up and keybindings
Java Applications (Configs)
Creation
- default config creation based on navigator selection
- default config creation based on active editor
- default config creation from launch short cut "run/debug as -> Java Application"
Main
- specify a project by typing
- select a project from "browse" button
- specify a non-existant project
- specify no project
- specify a main type via typing
- specify a main type via searching
- specify a non-existant type
- search external jars
- stop in main
Arguments
- program arguments are sent to application
- program arguments with quotes for whitespace
- VM args are sent to application
- VM args with quotes for whitespace
- Working directory - local, workspace relative, default
JRE
- default JRE - should track workspace/project default JRE as it changes
- explicit JRE - remains constant as workspace/project JRE changes
- specification of java vs. javaw
- reference to a deleted/moved JRE
Classpath
- default classpath updates as project's build path changes
- non-default classpath/bootpath
- ordering
- external jars
- external folders
- internal jars
- internal folders
- variables (resolve to internal & external jars)
- containers
Source Lookup
- default source lookup path updates to mirror the config's classpath
- duplicate source file prompting (select option in tab, and ensure there
are duplicates on the source lookup path)
- during a debug session, the source locator remembers which duplicate to use, but re-prompts on subsequent debug sessions
- non-default source lookup
- ordering
- external jars with attached source
- external jars that are simply source archives
- internal jars with attached source
- internal jars that are simply source archives
- external folders
- internal folders
- source root paths within source archives are found automatically
- variables (resolve to internal & external jars)
- containers
Remote Debugging
- specify a project via typing/browsing
- specify a non-existant project
- default source lookup path should track project's build path
- connect to a remote vm
- try suspend="y" and suspend="n"
- try different sockets
- try "localhost" and "127.0.0.1"
- terminate should only be available when the config specifies
Applets
Main
- specify a project via typing/browsing
- specify a non-existant project
- specify an applet class via typing/searching
- specify a class that is not an applet
- specify default applet viewer class
- specify an explicit applet viewer class
Parameters
- specify various width & height
- specify parameters (available via Applet#getParameter(...))
- specify applet name - allows applets to communicate with each other via AppletContext#getApplet(...)
Threads & Monitors
- monitors view displays by object, which objects (monitors) are owned by which threads
- threads view displays by thread, which thread owns which monitors
- deadlock view displays cycles in the relationship - a thread wating for a monitor, owned by a thread waiting for a monitor...
- suspend/resume affects all threads in the selected VM
- when a VM does not support monitor information, an infomation message is displayed
- when no VM is suspended, an information message is displayed
Hot Code Replace
Positive (J9, JDK1.4)
- changes within pre-existing method
- changes within pre-existing instance variable initializer (frames won't automatically pop, but it should work)
- all affected frames are dropped automatically
- changes in method of inner type
- changes in method of anonymous inner type
- default and non-default packages
- drop to frame
Negative
- Not supported by VM
- method addition/removal
- field addition/removal
- can't pop frames when in"main"
- can't pop affected frames when native method on the stack
- toggle error notification preferences - should only be told of errors when preferences are on
Installed JREs
Basic
- Add a JRE - Standard, 1.1.x, J9
- Re-name a JRE
- Change default JRE
- Remove a JRE
- Search for JREs
- Export JREs (workspace preferences)
- Import JREs (workspace preferences)
Libraries
- Default libraries
- non-default system libraries
- re-order system libraries
- change source attachments
- persisted across workbench invocations
- noted when running an associated config
- noted in Java project build path when referenced explicitly (via container, or workspace default)
Re-build
- when a project references a JRE that is changed (re-named, removed, library change), you should be prompted to re-build the workspace
- changing a source attachment should not prompt for a re-build
Console
- output appears automatically when a program is run/debugged
- accepts input from standard in
- fixed width console
- buffer size preference
- color for out/in/err
- hyperlinks appear for exception stack traces
- scroll lock
- process lock
- remove all terminated
- process termination


