Change Log

Release 2.4 - 2010-12-19

Type Changes By
fix Added support for KeyStrokes when action code is activated through JComponent ActionMap. pratmarty

Release 2.3 - 2010-05-12

Type Changes By
fix Prevented Component.getMousePosition() from causing a program failure (introduced a dummy MouseInfoPeer). pratmarty
fix Fixed initialization error at test startup when relying on the extension mechanism. pratmarty
add Added Table.Header.contentEquals(int countHeaderToCheck, String... expectedHeaders) mguiot
add Added Table.blockEquals(int fromRowIndex, int fromColumnIndex, int columnCount, int rowCount, Object[][] expected) Added Table.rowEquals(int rowIndex, int fromColumnIndex, int columnCount, Object[] expectedRow) mguiot
add Added Slider.setRelativePosition(percentage) rmedina
add WindowInterceptor : the trigger is launch in swing thread mguiot
add Added Table.selectRowsWithText(int column, String... labels). rmedina
add Added Table.getColumnIndex(String columnName). rmedina
add Added FileChooserHandler.assertCurrentDirEquals(). rmedina
add If Tab.selectTab(tabName) fail it now give the existing tabs in the message rmedina
add Added TextBox.setText(String, boolean) to select whether Enter is simulated or not. rmedina
add Added TextBox.focusLost(). rmedina
add Added Clipboard.getContentAsText(). rmedina
add Added Key.platformSpecificCtrl(), which returns META-Key on MacOS X and CTRL-Key on other platforms. rmedina
add Added Table.selectAllRows(). rmedina
update Made UISpecAssert.fail() fail immediately instead of returning an Assertion, and introduced UISpecAssert.failure to return an Assertion that always fails. rmedina

Release 2.2 - 2010-02-13

Type Changes By
add Added Tree.doubleClick(). pratmarty
add Added methods on ListBox for double-clicking and right-clicking on individual rows. pratmarty

Release 2.1 - 2009-10-31

Type Changes By
add Added methods on ListBox for checking individual cell colors (background and foreground ). pratmarty
fix Made DateSpinner, NumberSpinner and ListSpinner accept a subclass instance of, respectively, SpinnerDateModel, SpinnerNumberModel and SpinnerListModel as the model of the wrapped JSpinner component. pratmarty
add Added UIComponent.typeKey(Key), pressKey(Key) and releaseKey(Key) to simulate key typing with the focus on the component. pratmarty
fix Improved Key low-level management through Key and KeyUtils classes. (Thanks to Michael Muthukrishna) pratmarty
add Added BasicHandler.titleEquals() and titleContains(). pratmarty
add Made the method Panel.findUIComponent() work for customized components without running the ExtensionGenerator. pratmarty

Release 2.0 - 2009-06-07

Type Changes By
fix Fixed FileChooserHandler.titleEquals() (worked only with customized titles, not with default titles). pratmarty
fix Made the JFileChooser return the CANCEL_OPTION code when FileChooserHandler.cancelSelection is getting called. pratmarty

Release 2.0-RC3 - 2009-02-03

Type Changes By
fix Changed Graphics configuration of the Peer elements returned by the UISpecToolkit (fix specific to Java 6) pratmarty

Release 2.0-RC2 - 2009-01-19

Type Changes By
fix In class WindowInterceptor, revert call to TriggerRunner.runInSwingThread in call to TriggerRunner.runInCurrentThread mguiot
fix In ComboBox.selectionEquals : use the rendered value in assert if selection is null mguiot
fix Fixed TestNG library adapter: reversed expected and actual parameters in 'assertEquals(String expected, String actual)' pratmarty
add Added ComponentMatchers.toolTipEquals(String) rmedina
add Added Table.foregroundNear(row, column, color) and Table.backgroundNear(row, column, color) for approximative comparisons. rmedina
fix Improved the handling of multi-threading conditions in the window interception mechanism. mguiot

Release 2.0-RC1 - 2008-12-25

Type Changes By
fix Migrated the whole API to take advantage of JDK 1.5 language features. rmedina,sroussea
add Added a means for choosing between JUnit and TestNG as the underlying testing framework. pratmarty
add Migrated the project to Maven 2 pratmarty
add Added AbstractUIComponent methods foregroundNear() and backgroundNear() for approximative comparisons, and added named colors darkGrey, darkRed, darkGreen and darkBlue. rmedina
add Add Key.MINUS and Key.ADD. mguiot
add Check that the button is visible before calling doClick. mguiot
add TextBox does not allow editing text when the underlying component is disabled. rmedina
add Added table.getRowIndex(int columnIndex, Object value) and table.getRowIndices(int columnIndex, Object value); mguiot
add Added Panel UIComponent.getContainer(String parentName); mguiot
add Added Window.titleContains(String). ppratmarty
fix Added 'MouseEvent.MOUSE_CLICKED' to the list of dispatched events for simulating a mouse click on a component. ppratmarty
add When searching components from a name, the Panel now also looks for components bound to matching JLabels. pratmarty
add Added Table.containsRow (Thanks to Luke Sleeman). pratmarty
add Added Table.startsWith and endsWith for checking part of the content (Thanks to Luke Sleeman). pratmarty
add Added assertThat() assertions to UISpecAssert and UISpecTestCase, as a more "human readable" alternative to assertTrue(). rmedina
add Added Table.cellEquals for checking a single cell value (Thanks to Luke Sleeman). rmedina
add Added Table.rowCountEquals / columnCountEquals (Thanks to Luke Sleeman). rmedina
add Added Mouse.click for simulating single clicks on a component. rmedina
add Added UIComponent.isVisible (was only available on AbstractUIComponent). rmedina
add Added ComponentMatchers.and()/or() instead of intersection()/union() which are now deprecated. rmedina
fix Applied the retry strategy when selecting a tab in GroupTab. This avoids accessing a component in the selected tab when it is not yet shown (for instance popup-menu). sroussea
add Added TextBox.clear() and TextBox.appendText() for changing a text field content without triggering the action listeners. rmedina
add Added TooltipComponent.tooltipEquals() and TooltipComponent.tooltipContains() for checking tooltips on JComponent subclasses. rmedina

Release 1.4 - 2007-05-15

Type Changes By
add Added Table.contentEquals(String[], Object[][]) and Table.rowEquals(int, Object[]) to check only a set of columns in a table. This is useful for making tests less dependent on the whole contents of a given table, or the order of the columns. rmedina
add Added ComboBox.contains(String) and ComboBox.contains(String[]) to check only part of a ComboBox content. rmedina
add Added ListBox.contains(String) and ListBox.contains(String[]) to check only part of a ListBox content. rmedina
fix Handle cell selection when using Table.contentEquals(String[]). Fixes 62. sroussea
fix Enhanced 'pressKey' management on TextBox components (caret is better handled). scrego
add Added Table.getContentAt(row,column,converter) and ModelTableCellValueConverter to be used in cases where a direct access to the underlying model is handy. rmedina

Release 1.3 - 2007-01-20

Type Changes By
fix Made the UISpecToolkit initialization work with Maven 2 (the Surefire plugin was preventing UISpec from setting UISpecToolkit as the Swing toolkit singleton) scrego
add Added the MainClassAdapter class to ease the implementation of functional tests. rmedina
fix Made our Toolkit implementation return dummy Graphics2D objects instead of just Graphics objects, to prevent ClassCastExceptions in components where paint() is overriden and expects to be provided a Graphics2D. rmedina

Release 1.2 - 2006-11-19

Type Changes By
fix TextBox.clickOnHyperLink() service reattempts to find the hyperlink when the page has not yet been loaded. ppratmarty
fix TextBox.clickOnHyperLink() service attempts to fix malformed URL by prepending 'file:' to href. UISpecAssert.checkAssertion() waits for AWT pending events before proceeding. pratmarty
fix Manage HTML attributes in a-href for TextBox.clickOnHyperlink(String anchor). Fixes 60. sroussea
add Did some clean-up in Mouse class especially to offer methods to Swing components (not only UIComponents). scrego
fix TextBox.textEquals() with empty string is now properly working. ppratmarty
fix The multi-selection methods in ListBox and Table now set the "value is adjusting" flag on the selection model during the selection, so that the corresponding listeners can wait for the whole selection to be finished. rmedina

Release 1.1 - 2006-06-11

Type Changes By
add Added support for JSlider components. Fixes 1. ppratmarty
add Provided support for JSpinner components with DateSpinner, ListSpinner and NumberSpinner. Fixes 3. sroussea
add Provided support for JPasswordField components. Fixes 2. rmedina
add Provided a means for customizing the ComboBox renderer analysis. Fixes 9. scrego
add Improved the reporting of unexpected failures in UISpecAssert, by throwing a RuntimeException chained with the initial Exception. rmedina
add Provided better failure report for Table.Header.contentEquals(String[]). Changed Table.hasNoHeader() to Table.hasHeader(). sroussea
add Added Panel.containsLabel. rmedina

Release 1.0 - 2006-04-17

Type Changes By
remove Removed all deprecated methods. rmedina
add Added Panel.containsXXX() methods, to be used with the UISpecTestCase/UISpecAssert assertXxx and waitUntil methods. ppratmarty
add Added Javadoc comments in many places. rmedina
update PopupMenuInterceptor.run() now waits for the popup to be shown, up to a time limit set by UISpec4J.setWindowInterceptionTimeLimit(). rmedina
fix Made Table.getContentAt() use the table's TableCellValueConverter. rmedina
fix Made UISpecTestCase/UISpecAssert.waitUntilEnabled(message, assertion, timeout) use the supplied message when an exception other than AssertionFailedError is thrown by the Assertion object. rmedina
fix Bugfix: UISpec4J.setAssertionTimeLimit had no effect. rmedina
update Renamed UISpec4J.setWaitTimeLimit into setWindowInterceptionTimeLimit. rmedina

Release 0.16 - 2006-03-05

Type Changes By
update Changed all "assertXxx" methods into "xxx" methods that return Assertion objects to be used with UISpecAssert.assertTrue(). The main motivation behind this evolution is that the UISpecAssert.assertTrue() method now performs automatic retries when the first assertion check fails, so that the tests are less dependent on slight delays in multithreaded applications. Please note that the compatibility with previous versions of the API is maintained temporarily - the "assertXxx" methods have been deprecated, they will be removed in the next release. rmedina, ppratmarty, scrego
add Made 'Table.toString()' dump the content of the table. ppratmarty
add Added ProgressBar.isCompleted() to check the completion of the progress bar. ppratmarty,sroussea
add Added in FileChooseHandler.select(String[] fileNames) to select files using their names and FileChooserHandler.cancelSelection() to choose the Cancel button. sroussea
fix Set the 'awt.toolkit' property with a default one when it is not set (best-effort) depending on Operating Systems. Try first to set the property with the default Windows one 'sun.awt.windows.WToolkit', then with the default SUN one 'sun.awt.motif.MToolkit'. If none works, a AWTError will be thrown. ppratmarty,sroussea
update Moved the default timeout value from WindowInterceptor to UISpec4J - this is now a global parameter used in both the assertion and window interception mechanisms. As a consequence, the WindowInterceptor.setWaitWindowTimeLimit/getWaitTimeLimit methods are not available anymore. rmedina
update Changed the default timeout value to 10s (was 30s) rmedina
add Added a new Desktop component for managing Multiple-Document Interface (MDI) desktops implemented as JDesktopPane/JInternalFrame components. rmedina
add Added WindowInterceptor.getModelDialog() to intercept a modal dialog by running a trigger and returning the displayed window. This is for specific usages only, modal dialogs should rather be intercepted using WindowInterceptor.init(Trigger). ppratmarty,sroussea
fix Made ListBox work with any ListCellRenderer implementation - it is now independent from the DefaultListCellRenderer class. rmedina

Release 0.15 - 2005-12-29

Type Changes By
add Introduced UISpec4J.init() as a main entry point for initializing the library. This method replaces UISpecToolkit.setUp(), and is now responsible for both initializing the toolkit and setting up our own look&feel classes. rmedina
fix Removed the retrieval of a MSWindows-specific toolkit in UISpecToolkit that raised problems in other Operating Systems. Please note that the 'awt.toolkit' property must not be used anymore for setting up the UISpecToolkit (only UISpec4J.init() is supported now). scrego
add Introduced the ComponentMatcher interface and added a number of methods in Panel to let users specify their own component searching policies ppratmarty
add Provided predefined component matchers in the ComponentMatchers utility class: name-based matchers (identity/substring/regexp on inner/displayed name), and collection matchers (intersection, union and negation) ppratmarty
update Renamed Panel.getComponent() into getUIComponent() ppratmarty
add Improved the message displayed when Panel.getXxx() throws ComponentNotFoundException - the message now displays a list of available names rmedina
remove Removed the "swingClass" argument in the ExtensionGenerator.main() command line parameters rmedina
add Made major evolutions in WindowInterceptor to improve the support of modal dialogs, and in particular sequences of modal dialogs. Please check the WindowInterceptor Javadoc and the "Intercepting windows" reference documentation for further details on the new signatures. rmedina
update Moved all interception-related classes into an "org.uispec4j.interception" package. rmedina
update Transformed FileChooserInterceptor into FileChooserHandler, to fit into the new WindowInterceptor approach. rmedina
remove Removed MenuItem.clickAndIntercept - the interception is now managed only with WindowInterceptor rmedina
add Removed the MessageBoxInterceptor class, which was too dependent on the production code using the JOptionPane class. This class is replaced with a more generic WindowHandler implementation, named BasicHandler - please refer to the Javadoc for further details. rmedina
add Added Table.Header.triggerClick()/triggerRightClick() rmedina
add Added TextBox.triggerClickOnHyperlink() Fixes 37. rmedina
add Added a Trigger.DO_NOTHING constant, representing a "no op" trigger rmedina
add Added Window.getTitle() rmedina
fix Fixed problem with ColorUtils: "white" and "black" are not considered similar to "gray" anymore, by relying more upon the brightness when computing the HSB distance. ppratmarty
fix Display the contents of the menu when MenuItem.getSubMenu() fails rmedina
update Updated the reference documentation and the javadoc rmedina
add Added Clover code coverage report. rmedina

Release 0.14 - 2005-10-17

Type Changes By
fix Improved the interception of windows in a multi-threaded environment. scrego, rmedina

Release 0.13 - 2005-09-06

Type Changes By
fix Fixed an infinite loop error in Window.getSubDescription() rmedina

Release 0.12 - 2005-08-31

Type Changes By
add Added UIspecTestCase.setAdapter() and deprecated UISpecTestCase(UISpecAdapter adapter) Fixes 41. sroussea,ppratmarty,rmedina
add Modified the Clipboard class to make its methods static (got rid of getInstance()) and added a putText() method which allows the MIME type to be defined rmedina
remove Removed the Clipboard.contentEquals() method (to be reintroduced later with a proper handling of MIME types) rmedina
fix Fixed a cyclic initialization error that occured in certain situations when the extension mechanism was used scrego, rmedina
add Added TextBox.assertTextContains(String[]) for checking that a number of items are displayed in a given order scrego, rmedina
add Improved the interception of windows in a multi-threaded environment. scrego, rmedina
fix Made UISpec4J work with JDK 5.0. Please note however that the official platform remains JDK 1.4.2 rmedina

Release 0.11 - 2005-07-27

Type Changes By
add Modified documentation about extension generator mechanism scrego, sroussea
add Added AbstractButton.waitUntilEnabled() rmedina
add The window description is now displayed when an "Unexpected window shown" exception is raised by the interception mechanism rmedina
add Added MenuItem.clickAndIntercept to avoid the imbrication of WindowInterceptor and PopupMenuInterceptor (see Javadoc) rmedina
add Added Tree.triggerClick(), triggerRightClick() and triggerRightClickInSelection() rmedina
add Added Panel.findComponents() and Panel.findComponent() methods. Fixes 28. ppratmarty, rmedina, scrego
fix Fixed deadlock that occured when an handler tried to close a dialog during an interception (the triggers in WindowInterceptor are now run from the Swing thread). sroussea, rmedina
add The interception mechanism now catches lightweight popup menus. rmedina
add Calling MenuItem.click() when the item is a list (a JPopupMenu) raises an exception displaying the subitems that can be selected. rmedina
add Made the interception mechanism work with JDK 5.0. Please note however that the official platform remains JDK 1.4.2. rmedina

Release 0.10 - 2005-06-18

Type Changes By
fix Panel.getPanel() does not raise ambiguity errors when other Container objects are present in the panel - only JPanel, JInternalFrame, etc. are searched for. sroussea, rmedina
add Added Panel.getInputTextBox() and Panel.getInputTextBox(String name) to avoid ambiguity exceptions when searching for a text field placed near a simple label. Fixes 30. rmedina
fix Fixed Window.assertVisible(). sroussea, rmedina
add Added MessageBoxInterceptor.setInput for input dialogs. scrego, rmedina
fix Fixed exceptions thrown during the execution of tests when working with a frame that was intercepted after having been packed and shown. Fixes 34. rmedina
fix Fixed the color matching algorithm (using HSB color space). Now "FFC8C8" is accepted as "red". Fixes 24. gonnot

Release 0.9 - 2005-05-21

Type Changes By
add Added TextBox.insertText(text, position) scrego, rmedina
add Added Table.Header.getColumnNames() and Table.Header.findColumnIndex(String columnName) Fixes 29. scrego
fix Made the search strategy process all components in a container instead of stopping at a given level as soon as a result is found Fixes 27. ppratmarty
add Added Table.assertColumnEquals(int columnIndex, Object[] expectedColumn) to test the contents of a given table column. Fixes 25. scrego
update Use the customisation mechanism for the list box selection sroussea
add Implemented a list box analysis customisation mechanism, available with ListBox.setCellValueConverter Fixes 10. sroussea
add Updated the TYPE_NAME fields of ListBox and TextBox to reflect the class names ppratmarty,rmedina

Release 0.8 - 2005-04-15

Type Changes By
add Added missing getters in Panel for CheckBox, ToggleButton, RadioButton, etc. Fixes 26. rmedina
add Added table content in error message when Table.assertEmpty fails Fixes 19. sroussea
add Implemented a tree analysis customisation mechanism, available with Tree.setCellValueConverter Fixes 8. rmedina
add Added TabGroup.getSelectedTab() that returns a Panel allowing to find components easily in the selected tab. Fails if the component managed by the selected tab is not a JPanel Fixes 11. sroussea,scrego
add Added some XDoc pages to the documentation: Contact, Contributing and Coding Rules Fixes 18. rmedina
remove Removed the TODO page from our XDoc documentation, since we now use a better issue tracking tool. rmedina
add Added ComboBox.setText(String) for editable ComboBoxes Fixes 6. ppratmarty

Release 0.7 - 2005-03-06

Type Changes By
add Added two XDoc pages to the Reference section: Properties & Troubleshooting rmedina
add Added ProgressBar.assertDisplayedValueEquals() srousseau,rmedina
update Renamed RadioButton.assertSelected() into assertSelectionEquals() ppratmarty,rmedina
update Renamed CheckBox.assertSelected() into assertSelectionEquals() ppratmarty,rmedina
add Added ComboBox.assertEmpty(String displayedValue) ppratmarty,rmedina
update Renamed TabGroup.clickOnTab() into selectTab() rmedina
update Added links to documentation pages in the Javadoc rmedina
fix Panel.getTextBox: detect ambiguity between JLabel and JTextComponent ppratmarty
add Panel.getxxx: 'throws AmbiguityException' displayed on method signatures ppratmarty
add Added ComboBox.assertEditable(boolean) ppratmarty
add Added ProgressBar.waitForCompletion(int timeout) and ProgressBar.assertIndeterminate(boolean) rmedina
update ProgressBar now checks the current value as a percentage of the available range, with a user-defined precision rmedina
add ListBox.select(String) uses [Identity, Substring, Regexp] strategy to identify the item, and throws an Ambiguity exception when more than one Component were found ppratmarty
fix WindowInterceptor now waits a little before declaring that no window was shown - this is useful in cases where the window is shown from another thread rmedina,scrego,ppratmarty
add Renamed ComboBox.assertSelected(String) to ComboBox.assertSelectionEquals(String) for symetry with ListBox ppratmarty
add ComboBox.select(String) uses the strategy [Identity, Substring, Regexp] for finding an item ppratmarty
fix Table: Support for moved columns ppratmarty
add Table.setCellValueConverter for a specific column ppratmarty
add Table extension mechanism: one can provide a custom TableCellValueConverter by default ppratmarty

Release 0.6 - 2004-12-25

Type Changes By
add (this change log started just after release 0.7) all