package rtt.annotation.test.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; import rtt.annotation.editor.model.ClassElement; import rtt.annotation.editor.model.ClassModel; import rtt.annotation.editor.model.ClassModelFactory; public class ClassModelTests { private static final String PACKAGE1 = "package1"; private static final String PACKAGE2 = "package2"; private static final String CLASS1 = "class1"; private static final String CLASS2 = "class2"; private ClassModelFactory factory; private ClassModel classModel; @Before public void setUp() throws Exception { factory = ClassModelFactory.getFactory(); classModel = factory.createClassModel(); } @Test public void testEmptyClassModel() throws Exception { assertNotNull(classModel.getPackages()); assertEquals(classModel.getPackages(), Collections.EMPTY_SET); assertNotNull(classModel.getClassElements()); assertEquals(classModel.getClassElements(), Collections.EMPTY_MAP); assertNull(classModel.getClasses(PACKAGE1)); } @Test(expected=IllegalArgumentException.class) public void testAddNull() throws Exception { classModel.addClassElement(null); } @Test public void testAddOneClassElement() { ClassElement classElement = createClassElement(CLASS1, PACKAGE1); classModel.addClassElement(classElement); assertTrue(checkPackagesSize(1)); assertTrue(checkClassesSize(PACKAGE1, 1)); assertTrue(containsClasses(PACKAGE1, classElement)); } @Test public void testAddTwoClassesSamePackage() throws Exception { ClassElement classElement1 = createClassElement(CLASS1, PACKAGE1); classModel.addClassElement(classElement1); ClassElement classElement2 = createClassElement(CLASS2, PACKAGE1); classModel.addClassElement(classElement2); assertTrue(checkPackagesSize(1)); assertTrue(checkClassesSize(PACKAGE1, 2)); assertTrue(containsClasses(PACKAGE1, classElement1, classElement2)); } @Test public void testAddTwoClassesDifferentPackage() throws Exception { ClassElement classElement1 = createClassElement(CLASS1, PACKAGE1); classModel.addClassElement(classElement1); ClassElement classElement2 = createClassElement(CLASS1, PACKAGE2); classModel.addClassElement(classElement2); assertTrue(checkPackagesSize(2)); assertTrue(checkClassesSize(PACKAGE1, 1)); assertTrue(checkClassesSize(PACKAGE2, 1)); assertTrue(containsClasses(PACKAGE1, classElement1)); assertTrue(containsClasses(PACKAGE2, classElement2)); } private ClassElement createClassElement(String name, String packageName) { return factory.createClassElement(classModel, name, packageName); } private boolean checkPackagesSize(int size) { return !classModel.getPackages().isEmpty() && classModel.getPackages().size() == size; } private boolean checkClassesSize(String packageName, int size) { List<ClassElement> classes = classModel.getClasses(PACKAGE1); return classes != null && !classes.isEmpty() && classes.size() == size; } private boolean containsClasses(String packageName, ClassElement... classes) { List<ClassElement> classList = classModel.getClasses(packageName); for (ClassElement classElement : classes) { if (!classList.contains(classElement)) { return false; } } return true; } }