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