This is a draft proposal, feel free to contribute to it!
SWTBot is proposed as an open source project under the Eclipse Technology Project (http://www.eclipse.org/technology/). This proposal is still in the Project Proposal Phase, and is being made in order to call for more community participation.
SWTBot (http://swtbot.org) is a functional testing tool for SWT/Eclipse based applications that eases and supports testing of multithreaded applications. SWTBot is capable of playback and recording of SWTBot Java "scripts", there are plans to provide scripting support for various other languages including JRuby (http://jruby.codehaus.org), and Groovy (http://groovy.codehaus.org/).
Background and Goal
The development of applications based on SWT, RCP and the Eclipse platform in general is growing fast. With Eclipse based applications becoming more and more complex by the day, manual testing of Eclipse applications becomes a major concern in the development lifecycle of the application. The need for automated testing is inevitable in such cases and SWTBot helps projects in such cases.
Automated testing code needs the same love and affection that code does. This means better IDE support for writing tests, reusing test code, refactoring, etc. Simplifying this test code so that it is agnostic of SWT and Eclipse and deals with UI paradigms would be appealing to non-developers and would help address this issue to a large extent.
SWTBot has demonstrated some of these capabilities (http://swtbot.sourceforge.net/screencasts/SWTBotEclipseHelloWorld-FullScreen.html) very early on, and is being supported by a few contributors.
The goal of SWTBot is to provide APIs that can be used by programmers to drive SWT based UIs by providing a lightweight functional testing tool for SWT and Eclipse, and to make it easy for non-developers to automate testing of applications written using Eclipse in a way that is consistent with what has been stated above.
Architecture and Extensibility
SWTBot can be extended in a limited number of ways to add support for new widgets and actions that can be performed on those widgets. The proposal does not express this extensibility, because testability of eclipse based applications is the primary usage of SWTBot.
SWTBot mainly consists of the following components:
- UI traversal: to traverse over all UI components
- Filtering: to find the right component that is requested
- Encapsulation around the UI component to provide operations to query/manipulate the UI.
This would allow other parties interested in extending SWTBot by implementing or extending the above components.
For e.g. Extending SWTBot for Nebula widgets, would involve:
- extending the UI traversal to be able to understand nebula specific widgets
- adding new filters to be able to filter out the right nebula components.
- providing encapsulation around the nebula widgets to perform operations on them or enquire about their state.
The scope of SWTBot is to make writing tests for SWT and Eclipse applications easier not just for developers who understand the technologies, but also for Quality Analysts who understand the application and not the underlying technologies used to build them.
SWTBot should integrate well with JUnit so as to make execution and reporting of tests independent of Eclipse, yet integrate well with Eclipse. This would mean that SWTBot tests can be run as an Ant task as part of Continuous Integration using CruiseControl.
There are also efforts by individuals to port SWTBot to eRCP/eSWT.
It is proposed that SWTBot should provide APIs that enable scripting languages based on the JVM. This would mean that scripts could potentially be written with JRuby using Glimmer (http://www.eclipse.org/proposals/glimmer/) or with Groovy using GroovySWT (http://groovy.codehaus.org/GroovySWT).
To make writing scripts easier, it is also proposed to provide better Eclipse integration, introspection of the application, and basic support for scripting/debugging.
There is currently some of overlap between SWTBot and TPTP's AGR. TPTP supports Eclipse plugins, but does not support plain SWT applications, nor easy Ant integration. SWTBot's focus is to become a low level driver to drive SWT and Eclipse applications while filling these shortcomings of AGR.
Packaging and Deployment
SWTBot currently ships in the form of an Eclipse update site, and also an independent .zip/.tgz download. It would continue to ship in these forms.
- Chris Aniszczyk
- Ed Merks
- Ketan Padegaonkar (ketanpadegaonkar at gmail)
- Stephen Paulin
Potential committers (individuals who have contributed patches)
- Cedric Chabanois (cedric.chabanois at entropysoft.net)
- Lechner Sami (lechner.sami at gmail)
- PDE (Chris Aniszczyk)
- ThoughtWorks Studios (http://studios.thoughtworks.com)
- Nirav Thaker (nirav.thaker at gmail)
- Ravi Chodavarapu (rchodava at gmail.com)
- Stefan Seelmann, Apache Directory Studio (seelmann at apache.org)
- ANCiT Consulting, (Annamalai C, annamalai at ancitconsulting.com)
- Ben Xu (xufengbing at gmail.com)
- Mirko Stocker (me at misto.ch)
- Emanuel Graf (egraf at hsr.ch)
- RAP (Benjamin Muskalla)
- Sriram Narayanan (ram at thoughtworks.com)