ExpectJ can be used for automating interaction with either a process (through stdin / stdout) or a telnet session. It is a Java implementation of the Unix expect utility.
The following snippet can be used for running a short shell session. Try putting something like it in a unit test for example:
// Create a new ExpectJ object with a timeout of 5s ExpectJ expectinator = new ExpectJ(5); // Fork the process Spawn shell = expectinator.spawn("/bin/sh"); // Talk to it shell.send("echo Chunder\n"); shell.expect("Chunder"); shell.send("exit\n"); shell.expectClose(); // Done!
On timeout a TimeoutException will be thrown.
More usage information is in the javadocs.
Don't. Use Maven. Put the following dependency in your pom.xml:
<project ...> <dependencies> <dependency> <groupId>net.sourceforge.expectj</groupId> <artifactId>expectj</artifactId> <version>2.0.1</version> <!-- Optional scope: Use ExpectJ for (unit) tests only --> <scope>test</scope> </dependency> ... </dependencies> ... </project>
First of all, you need to install Bzr to get the latest sources.
Then you need Maven to build. At the time of this release Maven 2.2.1 was used for upstream development, other versions may work fine as well.
To get the sources:
bzr branch bzr://expectj.bzr.sourceforge.net/bzrroot/expectj/trunk
To create an Eclipse project:
cd trunk mvn eclipse:eclipse
To run the unit tests:
To commit any changes to your local branch (don't forget to "bzr add" any new files first):
To generate a patch with your checked in changes:
bzr send -o expectj.patch
To update your branch with the latest changes from upstream:
bzr merge bzr ci
To see what changes you have that upstream doesn't and the other way around:
ExpectJ is released under the GNU Lesser General Public License 2.1.