made the test ignorant of the implementor, just testing the interface
handled some more error states, refactored