We chose #3 - two separate source folders for tests and GWTTestCases.
This also meant that we could easily run all the fast tests when we
wanted quick feedback about a change.
If you wanted to remove the need for the GWTTestCase, could you create
an interface that wraps the History object? I don't know enough about
how your code works, but perhaps you could inject a mock
implementation of the History object and ensure that it gets invoked
with the right state; in your example it looks like it wants to be
notified with the token "test". However, if there's other stuff going
on in that method, then this approach might not work.
Dan