abstract classes and test cases added