add abstract driver spec
use ?:
add event spec