| Version | Date | Description |
|---|---|---|
| 1.5 | 2007-12-02 | |
| 1.4 | 2007-05-15 | |
| 1.3 | 2007-01-20 | |
| 1.2 | 2006-11-19 | |
| 1.1 | 2006-06-11 | |
| 1.0 | 2006-04-17 | |
| 0.16 | 2006-03-05 | |
| 0.15 | 2005-12-29 | |
| 0.14 | 2005-10-17 | |
| 0.13 | 2005-09-06 | |
| 0.12 | 2005-08-31 | |
| 0.11 | 2005-07-27 | |
| 0.10 | 2005-06-18 | |
| 0.9 | 2005-05-21 | |
| 0.8 | 2005-04-15 | |
| 0.7 | 2005-03-06 | |
| 0.6 | 2004-12-25 |
| Type | Changes | By |
|---|---|---|
| Added 'MouseEvent.MOUSE_CLICKED' to the list of dispatched events for simulating a mouse click on a component. | ppratmarty |
| Applied the retry strategy when selecting a tab in GroupTab. It avoids accessing to a component in the selected tab whereas it is not shown yet - for instance popup-menu. | sroussea |
| Updated Empty implementation for WindowPeer for JDK 1.5.0_11 | sroussea |
| Type | Changes | By |
|---|---|---|
| Added Table.contentEquals(String[ ] , Object[ ] [ ] ) and Table.rowEquals(int, Object[ ] ) and 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 |
| Added ComboBox.contains(String) and ComboBox.contains(String[ ] ) to check only part of a ComboBox content. | rmedina |
| Added ListBox.contains(String) and ListBox.contains(String[ ] ) to check only part of a ListBox content. | rmedina |
| Handle cell selection when using Table.contentEquals(String[ ] ). Fixes 62. | sroussea |
| Enhanced 'pressKey' management on TextBox components (caret is better handled). | scrego |
| Added Table.getContentAt(row,column,converter) and ModelTableCellValueConverter to be used in cases where a direct access to the underlying model is handy. | rmedina |
| Type | Changes | By |
|---|---|---|
| Made the UISpecToolkit initialization work with Maven 2 (the Surefire plugin was preventing UISpec from setting UISpecToolkit as the Swing toolkit singleton) | scrego |
| Added the MainClassAdapter class to ease the implementation of functional tests. | rmedina |
| 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 |
| Type | Changes | By |
|---|---|---|
| TextBox.clickOnHyperLink() service reattempts to find the hyperlink when the page has not yet been loaded. | pratmarty |
| TextBox.clickOnHyperLink() service attempts to fix malformed URL by prepending 'file:' to href. UISpecAssert.checkAssertion() waits for AWT pending events before proceeding. | pratmarty |
| Manage HTML attributes in a-href for TextBox.clickOnHyperlink(String anchor). Fixes 60. | sroussea |
| Done some clean-up in Mouse class especially to offer methods to Swing components (not only UIComponents). | scrego |
| TextBox.textEquals() with empty string is now properly working. | ppratmarty |
| 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 |
| Type | Changes | By |
|---|---|---|
| Added support for JSlider components. Fixes 1. | ppratmarty |
| Provided support for JSpinner components with DateSpinner, ListSpinner and NumberSpinner. Fixes 3. | sroussea |
| Provided support for JPasswordField components. Fixes 2. | rmedina |
| Provided a means for customizing the ComboBox renderer analysis. Fixes 9. | scrego |
| Improved the reporting of unexpected failures in UISpecAssert, by throwing a RuntimeException chained with the initial Exception. | rmedina |
| Provided better failure report for Table.Header.contentEquals(String[ ] ). Changed Table.hasNoHeader() to Table.hasHeader(). | sroussea |
| Added Panel.containsLabel. | rmedina |
| Type | Changes | By |
|---|---|---|
| Removed all deprecated methods. | rmedina |
| Added Panel.containsXXX() methods, to be used with the UISpecTestCase/UISpecAssert assertXxx and waitUntil methods. | ppratmarty |
| Added Javadoc comments in many places. | rmedina |
| PopupMenuInterceptor.run() now waits for the popup to be shown, up to a time limit set by UISpec4J.setWindowInterceptionTimeLimit(). | rmedina |
| Made Table.getContentAt() use the table's TableCellValueConverter. | rmedina |
| Made UISpecTestCase/UISpecAssert.waitUntilEnabled(message, assertion, timeout) use the supplied message when an exception other than AssertionFailedError is thrown by the Assertion object. | rmedina |
| Bugfix: UISpec4J.setAssertionTimeLimit had no effect. | rmedina |
| Renamed UISpec4J.setWaitTimeLimit into setWindowInterceptionTimeLimit. | rmedina |
| Type | Changes | By |
|---|---|---|
| Changed all "assertXxx" methods into "xxx" methods that return Assertion objects to be used with UISpecAssert.assertTrue(). Please refer to the Using assertionspage for further details on the new assertions mechanism. 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 |
| Made 'Table.toString()' dump the content of the table. | ppratmarty |
| Added ProgressBar.isCompleted() to check the completion of the progress bar. | ppratmarty,sroussea |
| Added in FileChooseHandler.select(String[ ] fileNames) to select files using their names and FileChooserHandler.cancelSelection() to choose the Cancel button. | sroussea |
| 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 defaul t SUN one 'sun.awt.motif.MToolkit'. If none works, a AWTError will be thrown. | ppratmarty,sroussea |
| 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 |
| Changed the default timeout value to 10s (was 30s) | rmedina |
| Added a new Desktop component for managing Multiple-Document Interface (MDI) desktops implemented as JDesktopPane/JInternalFrame components. | rmedina |
| 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 |
| Made ListBox work with any ListCellRenderer implementation - it is now independent from the DefaultListCellRenderer class. | rmedina |
| Type | Changes | By |
|---|---|---|
| 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 |
| 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 su pported now). | scrego |
| Introduced the ComponentMatcher interface and added a number of methods in Panel to let users specify their own component searching policies | ppratmarty |
| 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 |
| Renamed Panel.getComponent() into getUIComponent() | ppratmarty |
| Improved the message displayed when Panel.getXxx() throws ComponentNotFoundException - the message now displays a list of available names | rmedina |
| Removed the "swingClass" argument in the ExtensionGenerator.main() command line parameters | rmedina |
| 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 |
| Moved all interception-related classes into an "org.uispec4j.interception" package. | rmedina |
| Transformed FileChooserInterceptor into FileChooserHandler, to fit into the new WindowInterceptor approach. | rmedina |
| Removed MenuItem.clickAndIntercept - the interception is now managed only with WindowInterceptor | rmedina |
| Removed the MessageBoxInterceptor class, which was too dependent on the prod uction 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 |
| Added Table.Header.triggerClick()/triggerRightClick() | rmedina |
| Added TextBox.triggerClickOnHyperlink() Fixes 37. | rmedina |
| Added a Trigger.DO_NOTHING constant, representing a "no op" trigger | rmedina |
| Added Window.getTitle() | rmedina |
| 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 |
| Display the contents of the menu when MenuItem.getSubMenu() fails | rmedina |
| Updated the reference documentation and the javadoc | rmedina |
| Added Clover code coverage report. | rmedina |
| Type | Changes | By |
|---|---|---|
| Improved the interception of windows in a multi-threaded environment. | scrego, rmedina |
| Type | Changes | By |
|---|---|---|
| Fixed an infinite loop error in Window.getSubDescription() | rmedina |
| Type | Changes | By |
|---|---|---|
| Added UIspecTestCase.setAdapter() and deprecated UISpecTestCase(UISpecAdapter adapter) Fixes 41. | sroussea,ppratmarty,rmedina |
| 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 |
| Removed the Clipboard.contentEquals() method (to be reintroduced later with a proper handling of MIME types) | rmedina |
| Fixed a cyclic initialization error that occured in certain situations when the extension mechanism was used | scrego, rmedina |
| Added TextBox.assertTextContains(String[ ] ) for checking that a number of items are displayed in a given order | scrego, rmedina |
| Improved the interception of windows in a multi-threaded environment. | scrego, rmedina |
| Made UISpec4J work with JDK 5.0. Please note however that the official platform remains JDK 1.4.2 | rmedina |
| Type | Changes | By |
|---|---|---|
| Modified documentation about extension generator mechanism | scrego, sroussea |
| Added AbstractButton.waitUntilEnabled() | rmedina |
| The window description is now displayed when an "Unexpected window shown" exception is raised by the interception mechanism | rmedina |
| Added MenuItem.clickAndIntercept to avoid the imbrication of WindowInterceptor and PopupMenuInterceptor (see Javadoc) | rmedina |
| Added Tree.triggerClick(), triggerRightClick() and triggerRightClickInSelection() | rmedina |
| Added Panel.findComponents() and Panel.findComponent() methods. Fixes 28. | ppratmarty, rmedina, scrego |
| 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 |
| The interception mechanism now catches lightweight popup menus. | rmedina |
| Calling MenuItem.click() when the item is a list (a JPopupMenu) raises an exception displaying the subitems that can be selected. | rmedina |
| Made the interception mechanism work with JDK 5.0. Please note however that the official platform remains JDK 1.4.2. | rmedina |
| Type | Changes | By |
|---|---|---|
| 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 |
| 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 |
| Fixed Window.assertVisible(). | sroussea, rmedina |
| Added MessageBoxInterceptor.setInput for input dialogs. | scrego, rmedina |
| 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 |
| Fixed the color matching algorithm (using HSB color space). Now "FFC8C8" is accepted as "red". Fixes 24. | gonnot |
| Type | Changes | By |
|---|---|---|
| Added TextBox.insertText(text, position) | scrego, rmedina |
| Added Table.Header.getColumnNames() and Table.Header.findColumnIndex(String columnName) Fixes 29. | scrego |
| 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 |
| Added Table.assertColumnEquals(int columnIndex, Object[ ] expectedColumn) to test the contents of a given table column. Fixes 25. | scrego |
| Use the customisation mechanism for the list box selection | sroussea |
| Implemented a list box analysis customisation mechanism, available with ListBox.setCellValueConverter Fixes 10. | sroussea |
| Updated the TYPE_NAME fields of ListBox and TextBox to reflect the class names | ppratmarty,rmedina |
| Type | Changes | By |
|---|---|---|
| Added missing getters in Panel for CheckBox, ToggleButton, RadioButton, etc. Fixes 26. | rmedina |
| Added table content in error message when Table.assertEmpty fails Fixes 19. | sroussea |
| Implemented a tree analysis customisation mechanism, available with Tree.setCellValueConverter Fixes 8. | rmedina |
| 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 ed some XDoc pages to the documentation: Contact, Contributing and Coding Rules Fixes 18. | rmedina |
| Removed the TODO page from our XDoc documentation, since we now use a better issue tracking tool. | rmedina |
| Added ComboBox.setText(String) for editable ComboBoxes Fixes 6. | ppratmarty |
| Type | Changes | By |
|---|---|---|
| Added two XDoc pages to the Reference section: Properties & Troubleshooting | rmedina |
| Added ProgressBar.assertDisplayedValueEquals() | srousseau,rmedina |
| Renamed RadioButton.assertSelected() into assertSelectionEquals() | ppratmarty,rmedina |
| Renamed CheckBox.assertSelected() into assertSelectionEquals() | ppratmarty,rmedina |
| Added ComboBox.assertEmpty(String displayedValue) | ppratmarty,rmedina |
| Renamed TabGroup.clickOnTab() into selectTab() | rmedina |
| Added links to documentation pages in the Javadoc | rmedina |
| Panel.getTextBox: detect ambiguity between JLabel and JTextComponent | ppratmarty |
| API Panel.getxxx: 'throws AmbiguityException' displayed on method signatures | ppratmarty |
| Added ComboBox.assertEditable(boolean) | ppratmarty |
| Added ProgressBar.waitForCompletion(int timeout) and ProgressBar.assertIndeterminate(boolean) | rmedina |
| ProgressBar now checks the current val ue as a percentage of the available range, with a user-defined precision | rmedina |
| 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 |
| 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 |
| Renamed ComboBox.assertSelected(String) to ComboBox.assertSelectionEquals(String) for symetry with ListBox | ppratmarty |
| ComboBox.select(String) uses the strategy [Identity, Substring, Regexp ] for finding an item | ppratmarty |
| Table: Support for moved columns | ppratmarty |
| Table.setCellValueConverter for a specific column | ppratmarty |
| Table extension mechanism: one can provide a custom TableCellValueConverter by default | ppratmarty |