Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

But we group the changes as follows:

  • Breaking Changes when a change requires manual activity at update.
  • Bug Fixes when we fix broken functionality.
  • New Features for added functionality.
  • Improvements for other changed parts.

Table of Contents

[Unreleased]

Breaking Changes

  • Changed table headers to allow gathering of its column headers. Since additional components are found in screens with tables, they need to be accepted manually.
  • Add font, background color, foreground color and enabled-status as additional criteria per component, which may lead to additional changes when running tests. However, simply accepting the changes after update should suffice.
  • TargetNotFoundHandler renamed to ExecutionHook, which is more general and powerful (see New Features).
  • JComboBox has now children components which will result in additional components. Thus they need to be accepted manually.

Bug Fixes

  • Fixed that, in some cases, tab-clicks were not recorded.
  • Fixed recording of text modification after right click.
  • Fixed that when editing a table cell the wrong component is retrieved. This should have no effect on the current action sequences.
  • Fixed that the Accept all checkbox did not work correctly if differences was accepted from an other difference.
  • Fixed color conversion with transparent colors with alpha = 0 or just blue values;
  • Fixed that removing values from or adding values to a JComboBox results in the wrong item being selected (was solely based on row index).

New Features

  • Drag'n'Drop is now supported if executed inside the program. Drag'n'Drop from/to the outside (i.e. operating system or other programs) is not yet supported.
    • Fully supported: Text components (e.g. JTextField) if the drop action modifies the text property.
    • Partially supported: JList, JTable and JTree. While the Drag'n'Drop should be recorded, there may be problems while replaying:
      • The drop action might not be replayed properly. A current not working example is dragging onto a table cell that is being edited. Since the insertion between two characters of the dragged text is tied to the cursor location of the text field, the Drag'n'Drop will always insert the text at the end. This is because the Drag'n'Drop action does not update the component dropped on.
      • The initial drag action is not replayed. This non critical if the object is copied.
      • If one of the above is causing problems, the component in question needs a custom implementation. In this case please contact support.
  • Components are now analyzed whether they do custom painting and, if so, the screenshots of the images is compared. Two comparison implementations are available via the de.retest.image.DifferenceCalculator property: ExactImageDifferenceCalculator and FuzzyImageDifferenceCalculator. To enable this comparison for 3rd party libraries, please use the property de.retest.swing.paintingComponents.packages to define packages of which painting components should the screenshot be taken off.
  • Added ability to convert suites to execsuites via ant.
  • Clicking on unknown components is now supported. Please note that this feature should only be used rarely since it is quite unstable to changes. If you need a component to be supported in a more stable way (because you need it often), please contact the support.
  • Added a loading feature to Tests and Suites so that they can be edited directly.
  • Inserted and skipped actions are now represented in the test report and shown in the GUI. However, they cannot yet be 'approved' to be permanently added to the test.
  • Instead of a TargetNotFoundHandler, we now have a more powerful ExecutionHook, which can insert or skip arbitrary actions (not just in case of a TargetNotFoundException). The property de.retest.maxInsertedActions (default 5) is used to limit the number of inserted actions, in case the user config results in an endless loop.

Improvements

  • Removed tree selection listeners. Clicking on a tree is now only one action.
  • Now using TreeTable in the GUI for creating tests, suites, converting action sequences and in the review module to visualize the structure and relation of action sequences, tests and suites.
  • Add count of number of rows of tables, trees and lists if not all children are tracked in detail (i.e. if their number exceeds de.retest.maxChildComponents).
  • Show error message if a report cannot be loaded into ReView.
  • Improved the file path to be relative to the ReTest-Workspace. This is for example used in the JFileChooser.
  • The selectable values in a JComboBox are now analyzed properly as children. Thus removing values should now be recognized.

[1.3.3] (2017-05-30)

Bug Fixes

  • Fixed an arguable bug, where a NullPointerException was thrown, if the implementation of the JTable returned null for a call to getCellEditor(int row, int column) - which according to specification it shouldn't...

[1.3.2] (2017-05-15)

Bug Fixes

  • Fixed a bug, where the de.retest.maxChildComponents parameter was influencing the number of table rows that were counted.

[1.3.1] (2017-05-13)

Bug Fixes

  • Fixed replay of rightclick for tables where the renderer / editor is not a simple component, but contains children.
  • Two minor bugfixes for rare cases.

[1.3.0] (2017-05-02)

Breaking Changes

  • Changed trees to allow for complex layouts. This requires all actions with trees to be recorded and converted again.

Bug Fixes

  • Fixed recording of clicks on JList.
  • Fixed clicks on JTree being recorded twice.
  • Fixed clicks on JCheckBox in tables being recorded twice.
  • Fixed recording of double clicks on JTextfield.

New Features

  • It now is possible to ignore individual attributes of individual components.
  • Surili now also tries to insert values from the Big List of Naughty Strings.
  • Right click on tables, trees, table headers, labels and text fields can be recorded and replayed.
  • Added a new option that removes the signature of all .jar when ReTest launches. This is because if the application has signed .jar its launch will take longer. To use this feature it must be toggled with de.retest.checkAndRemoveJarSignature=true. However this causes a short delay when ReTest is started. It is recommended that this option should only be used if necessary.
  • Add property to ignore threads while waiting for stabilization.

Improvements

  • Improved user feedback when ReTest could not find a component on a dialog (TargetNotFoundException).
  • Increased default for de.retest.maxChildComponents to 1,500 child components to tackle medium-sized lists, tables, and trees.
  • Better logging during update process when there're missing file permissions.

[1.2.3] (2017-04-19)

Bug Fixes

  • Fixed a bug where in some special cases modal dialogs where not recognized.

Improvements

  • Ignore Java2D Queue Flusher active waiting thread.

[1.2.2] (2017-04-10)

Bug Fixes

  • Fixed obfuscation preferences where an MalformedParameterizedTypeException was thrown.

[1.2.1] (2017-04-03)

Bug Fixes

  • Update demo license.

[1.2.0] (2017-03-28)

Bug Fixes

  • A DefaultUncaughtExceptionHandler no longer keeps ReTest from terminating the SUT properly.
  • Fixed IllegalArgumentException: Only directories are allowed! that occurred when Surili opened a JFileChooser.
  • Fixed NullPointerException for tables without table headers.

Improvements

  • A dialog will be shown when saving or loading files fails.
  • Added menu hover to improve self explanatory of clickable content.
  • Added support button for direct access to ReTest's service desk.
  • HSQLDB is now supported by the ThreadMonitor.
  • Added property de.retest.instrumentation.shouldInstrument to allow to completely skip instrumentation, along with a warning if used. This is intended only for debugging purposes.
  • Support invisible java.awt.Components and provide a stub for easy extension.
  • Show English descriptions for screens.

[1.1.1] (2017-03-15)

Bug Fixes

  • In special situations where the java.util.logging framework is used, the SUT could only be started once.

[1.1.0] (2017-03-08)

Breaking Changes

  • Removing de as the language in the default config, possibly making it necessary to set it, if so preferred.
  • Differences on the file system are now completely ignored. As a result, actions via JFileChooser must be rerecorded.

Bug Fixes

  • Properly mark screenshots of differences for nested windows.
  • Inactive windows due to modal dialogs are now correctly ignored by the monkey.
  • Fixed automatic invocation of (general and specific) suite hooks for action sequences within ReCapture.
  • Fixed IOException thrown when proxy settings were used for local addresses.
  • Fixed IllegalStateException if a replay result was opened where an additional window was shown in the SUT.
  • Fixed a bug which shadowed child differences in a few situations. Hence, former hidden differences may be visible now.
  • Various minor bug fixes.

New Features

  • Now all changes of an action can be accepted at once via an "Accept all" checkbox in the table header.
  • Now the (always up-to-date) documentation in the web is linked in the HTML descriptions.
  • Partly English translation of the GUI (without the HTML description).

Improvements

  • The screen to edit actions is polished.
  • Black- and whitelisting is now on the same page of the monkey wizard, making it harder to confuse them or create invalid configurations.
  • Errors and warnings now occur within the startup shell, which makes it a lot easier to detect issues like invalid licenses.
  • Randomly missing Popup$HeavyWeightWindows no longer cause differences.

[1.0.0] Ham - The First One (2017-02-09)

Bug Fixes

  • It is not possible anymore to apply the same changes twice to an executable suite.
  • Fixed encoding, various typos, and formatting issues of the HTML description in the GUI.
  • Fixed regression with ignored proxy settings.

New Features

  • After applying changes to executable suites and/or ignored components, a popup shows which files are affected and reminds to commit them.
  • Adding the possibility to have the monkey test UI components exclusively (whitelisting).
  • Adding a screen to view the currently ignored components.
  • After generating tests with Surili, the best suite is now exported as an executable suite.
  • The color markings of selected components is now different for ignoring (grey), blacklisting (red) and whitelisting (green).
  • In ReView, there is now a table on the level of the action that shows all differences of that action and allows to accept them right there.

Improvements

  • Showing report summary when initially opening a replay.result file, summarizing execution time, number of suites, tests, actions, number of differences and errors and such.
  • Behavior in regard to ignored.components is now consistent with updating execution suites - changes to ignored components are only applied when someone presses Apply Changes.
  • Update the inline documentation on the right side.
  • Add extended online documentation at https://retest.de/docs/de/.
  • Several improvements in demo application.

[0.12.0] (2017-01-30)

Breaking Changes

  • Changed application packaging, the complete code is now in one fat JAR. Paths to classpath and javaagent in startup scripts or build.xml must be adjusted regarding to this change.

Bug Fixes

  • A lot of bug fixes in Surili module.

New Features

  • Added a demo application as show case.

[0.10.2] (2017-01-26)

Bug Fixes

  • Fixed automatic invocation of specific suite hooks within ReCapture.

[0.10.1] (2017-01-05)

Bug Fixes

  • Fixed two different OutOfMemoryError leaks, triggered if one opens too many GUI screenshot popups.
  • Fixed IndexOutOfBoundsException if same changes were applied to same execsuite multiple times.
  • Corrected displaying of error in details view (was stuffed into one line).

[0.10.0] (2016-12-22)

Breaking Changes

  • Proxy settings changed, please take a look in retest-template.properties.
  • For lists, tables, and trees, at most 500 child components are being recorded in order to improve overall performance and file sizes. This value can be adjusted via the property de.retest.maxChildComponents.

Bug Fixes

  • Fixed race condition between clean up task and (external) report creator.
  • Fixed IllegalStateException "No state AND no stateDifference is illegal!" in ReView.
  • Huge components no longer cause differences per se.
  • Fixed several corner cases regarding path differences, e.g. sometimes the wrong table cell was clicked.
  • RePlay no longer allows starting multiple SUTs by accident.
  • Closing a window is now recorded again.
  • Fix for OSGI applications, where the bundle de.retest.equinox.hooks was not found.
  • Fixed a bug, where the folder latest was not cleared from XML files.

Improvements

  • Stabilized and secured outgoing connections, especially with proxy setups.
  • Better error messages for configuration errors.

[0.9.0] (2016-11-17)

Breaking Changes

  • The license file must be moved to retest workspace with name retest.license, or specified with system property de.retest.license.File.
  • The classes referenced in Ant build.xml have changed, please inherit from new build.xml in the release.
  • The sut-javaagent is now placed directly in install directory with fix name retest-sut-javaagent.jar.
  • The equinox-hooks-fragment is now placed directly in install directory with fix name retest-equinox-hooks-fragment.jar.

Bug Fixes

  • Fixed OutOfMemoryError in ReView.
  • Removed old update folders.
  • Added support for combo chooser again.
  • Surili now excludes submenus if the corresponding menu or menubar is excluded as well.
  • Fixed bug where table cells where wrongly associated to one another.
  • Fixed bug where JFileChooser was not recorded and replayed correctly.
  • A lot of bugfixes for Surili Ant task.

New Features

  • Write a live test anything protocol (TAP) after each test execution. This can be displayed within the build server.
  • Made Screenshots resizable in report.
  • Let Surili optionally start at the end of an ExecSuite instead of anywhere.
  • Limit number of test reports via de.retest.cleanUp.maxFolders (default 10) and/or de.retest.cleanUp.maxDirectorySizeInMByte (default 1GB).
  • Added support for editable combo box.
  • Test reports are created when Surili is executed.

Improvements

  • Simplifyed path serialization to reduce file size.
  • Made screenshots clickable in report.
  • Added summary of changes in actions details view within ReView.
  • Added support for disabled Tabs.