In this coding exercise, you gradually evolve an application for sending two different types of messages, emails and IM chats, through a network connection. The mechanics of input and output are drastically oversimplified (command-line input, and output to one single writer that represents different network connections), but are just realistic to simulate some of the issues that a real app would face. There are a series of end-to-end tests representing eight different user stories. All but the first are annotated with @Ignore. Once the first story is complete, remove the @Ignore from the second and start work on it, and so on.
This originated as a place to try out the rules from Jeff Bay's Object Calisthenics exercise, and if you do it, I'd recommend trying that out for at least one attempt.