Refactor ViewListener and add some tests
Add form component for testing