Change Log
Release 2.4 - 2010-12-19
| Type | Changes | By |
|---|---|---|
![]() |
Added support for KeyStrokes when action code is activated through JComponent ActionMap. | pratmarty |
Release 2.3 - 2010-05-12
| Type | Changes | By |
|---|---|---|
![]() |
Prevented Component.getMousePosition() from causing a program failure (introduced a dummy MouseInfoPeer). | pratmarty |
![]() |
Fixed initialization error at test startup when relying on the extension mechanism. | pratmarty |
![]() |
Added Table.Header.contentEquals(int countHeaderToCheck, String... expectedHeaders) | mguiot |
![]() |
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 |
![]() |
Added Slider.setRelativePosition(percentage) | rmedina |
![]() |
WindowInterceptor : the trigger is launch in swing thread | mguiot |
![]() |
Added Table.selectRowsWithText(int column, String... labels). | rmedina |
![]() |
Added Table.getColumnIndex(String columnName). | rmedina |
![]() |
Added FileChooserHandler.assertCurrentDirEquals(). | rmedina |
![]() |
If Tab.selectTab(tabName) fail it now give the existing tabs in the message | rmedina |
![]() |
Added TextBox.setText(String, boolean) to select whether Enter is simulated or not. | rmedina |
![]() |
Added TextBox.focusLost(). | rmedina |
![]() |
Added Clipboard.getContentAsText(). | rmedina |
![]() |
Added Key.platformSpecificCtrl(), which returns META-Key on MacOS X and CTRL-Key on other platforms. | rmedina |
![]() |
Added Table.selectAllRows(). | rmedina |
![]() |
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 |
|---|---|---|
![]() |
Added Tree.doubleClick(). | pratmarty |
![]() |
Added methods on ListBox for double-clicking and right-clicking on individual rows. | pratmarty |
Release 2.1 - 2009-10-31
| Type | Changes | By |
|---|---|---|
|
Added methods on ListBox for checking individual cell colors (background and foreground ). | pratmarty |
|
Made DateSpinner, NumberSpinner and ListSpinner accept a subclass instance of, respectively, SpinnerDateModel, SpinnerNumberModel and SpinnerListModel as the model of the wrapped JSpinner component. | pratmarty |
|
Added UIComponent.typeKey(Key), pressKey(Key) and releaseKey(Key) to simulate key typing with the focus on the component. | pratmarty |
|
Improved Key low-level management through Key and KeyUtils classes. (Thanks to Michael Muthukrishna) | pratmarty |
|
Added BasicHandler.titleEquals() and titleContains(). | pratmarty |
|
Made the method Panel.findUIComponent() work for customized components without running the ExtensionGenerator. | pratmarty |
Release 2.0 - 2009-06-07
| Type | Changes | By |
|---|---|---|
|
Fixed FileChooserHandler.titleEquals() (worked only with customized titles, not with default titles). | pratmarty |
|
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 |
|---|---|---|
|
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 |
|---|---|---|
|
In class WindowInterceptor, revert call to TriggerRunner.runInSwingThread in call to TriggerRunner.runInCurrentThread | mguiot |
|
In ComboBox.selectionEquals : use the rendered value in assert if selection is null | mguiot |
|
Fixed TestNG library adapter: reversed expected and actual parameters in 'assertEquals(String expected, String actual)' | pratmarty |
|
Added ComponentMatchers.toolTipEquals(String) | rmedina |
|
Added Table.foregroundNear(row, column, color) and Table.backgroundNear(row, column, color) for approximative comparisons. | rmedina |
|
Improved the handling of multi-threading conditions in the window interception mechanism. | mguiot |
Release 2.0-RC1 - 2008-12-25
| Type | Changes | By |
|---|---|---|
|
Migrated the whole API to take advantage of JDK 1.5 language features. | rmedina,sroussea |
|
Added a means for choosing between JUnit and TestNG as the underlying testing framework. | pratmarty |
|
Migrated the project to Maven 2 | pratmarty |
|
Added AbstractUIComponent methods foregroundNear() and backgroundNear() for approximative comparisons, and added named colors darkGrey, darkRed, darkGreen and darkBlue. | rmedina |
|
Add Key.MINUS and Key.ADD. | mguiot |
|
Check that the button is visible before calling doClick. | mguiot |
|
TextBox does not allow editing text when the underlying component is disabled. | rmedina |
|
Added table.getRowIndex(int columnIndex, Object value) and table.getRowIndices(int columnIndex, Object value); | mguiot |
|
Added Panel UIComponent.getContainer(String parentName); | mguiot |
|
Added Window.titleContains(String). | ppratmarty |
|
Added 'MouseEvent.MOUSE_CLICKED' to the list of dispatched events for simulating a mouse click on a component. | ppratmarty |
|
When searching components from a name, the Panel now also looks for components bound to matching JLabels. | pratmarty |
|
Added Table.containsRow (Thanks to Luke Sleeman). | pratmarty |
|
Added Table.startsWith and endsWith for checking part of the content (Thanks to Luke Sleeman). | pratmarty |
|
Added assertThat() assertions to UISpecAssert and UISpecTestCase, as a more "human readable" alternative to assertTrue(). | rmedina |
|
Added Table.cellEquals for checking a single cell value (Thanks to Luke Sleeman). | rmedina |
|
Added Table.rowCountEquals / columnCountEquals (Thanks to Luke Sleeman). | rmedina |
|
Added Mouse.click for simulating single clicks on a component. | rmedina |
|
Added UIComponent.isVisible (was only available on AbstractUIComponent). | rmedina |
|
Added ComponentMatchers.and()/or() instead of intersection()/union() which are now deprecated. | rmedina |
|
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 |
|
Added TextBox.clear() and TextBox.appendText() for changing a text field content without triggering the action listeners. | rmedina |
|
Added TooltipComponent.tooltipEquals() and TooltipComponent.tooltipContains() for checking tooltips on JComponent subclasses. | rmedina |
Release 1.4 - 2007-05-15
| Type | Changes | By |
|---|---|---|
|
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 |
|
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 |
Release 1.3 - 2007-01-20
| 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 |
Release 1.2 - 2006-11-19
| Type | Changes | By |
|---|---|---|
|
TextBox.clickOnHyperLink() service reattempts to find the hyperlink when the page has not yet been loaded. | ppratmarty |
|
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 |
|
Did 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 |
Release 1.1 - 2006-06-11
| 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 |
Release 1.0 - 2006-04-17
| 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 |
Release 0.16 - 2006-03-05
| Type | Changes | By |
|---|---|---|
|
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 |
|
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 default 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 |
Release 0.15 - 2005-12-29
| 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 supported 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 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 |
|
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 |
Release 0.14 - 2005-10-17
| Type | Changes | By |
|---|---|---|
|
Improved the interception of windows in a multi-threaded environment. | scrego, rmedina |
Release 0.13 - 2005-09-06
| Type | Changes | By |
|---|---|---|
|
Fixed an infinite loop error in Window.getSubDescription() | rmedina |
Release 0.12 - 2005-08-31
| 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 |
Release 0.11 - 2005-07-27
| 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 |
Release 0.10 - 2005-06-18
| 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 |
Release 0.9 - 2005-05-21
| 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 |
Release 0.8 - 2005-04-15
| 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 |
|
Added 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 |
Release 0.7 - 2005-03-06
| 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 |
|
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 value 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 |
Release 0.6 - 2004-12-25
| Type | Changes | By |
|---|---|---|
|
(this change log started just after release 0.7) | all |


