1. A computer-implemented method for automated testing of programs, the method comprising: accessing at least a portion of a program with an event-based interface; placing an arbitrary state in a set of test inputs; performing each of the following until at least one of i) a testing time allocated has expired, and ii) every test input in the set of test inputs has been executed: selecting at least one test input with an associated event handler from the set of test inputs; loading the test input to set a state of the program; executing the test input and the associated event handler to produce a resulting state; updating a set of results with the test input that was executed and a description of any errors encountered during execution of the test input; and based on the resulting state being found in the set of results for the test input, updating the set of test inputs by at least one of: updating a parameter used in the test input; adding a new event in the event-based interface to be used with the test input; and updating the state in the set of test inputs.