/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.test.roaster.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import org.jboss.forge.roaster.Roaster; import org.jboss.forge.roaster.model.impl.ImportImpl; import org.jboss.forge.roaster.model.source.Import; import org.jboss.forge.roaster.model.source.JavaSource; import org.junit.Test; public class ImportEqualityTest { private static final String DEFAULT_IMPORT_PACKAGE = "org.jboss.forge.roaster.model"; private static final String DEFAULT_IMPORT_CLASS = "Import"; private static final String DEFAULT_IMPORT = DEFAULT_IMPORT_PACKAGE + "." + DEFAULT_IMPORT_CLASS; @Test public void testImportEqualsAnotherInstance() throws Exception { Import firstImport = buildImport(DEFAULT_IMPORT); Import secondImport = buildImport(DEFAULT_IMPORT); assertEquals(firstImport, secondImport); assertEquals(secondImport, firstImport); } @Test public void testEqualsReturnsFalseForDifferentImport() throws Exception { Import classImport = buildImport(DEFAULT_IMPORT); Import interfaceImport = buildImport("org.jboss.forge.roaster.model.impl.ImportImpl"); assertFalse(classImport.equals(interfaceImport)); } @Test public void testEqualsIsReflexive() throws Exception { Import reflexiveImport = buildImport(DEFAULT_IMPORT); assertEquals(reflexiveImport, reflexiveImport); } @Test public void testEqualsIsTransitive() throws Exception { Import firstImport = buildImport(DEFAULT_IMPORT); Import secondImport = buildImport(DEFAULT_IMPORT); Import thirdImport = buildImport(DEFAULT_IMPORT); assertEquals(firstImport, secondImport); assertEquals(secondImport, thirdImport); assertEquals(firstImport, thirdImport); } @Test public void testNotEqualToNull() throws Exception { assertFalse(buildImport(DEFAULT_IMPORT).equals(null)); } @Test public void testNotEqualsToDifferentClass() throws Exception { Import myImport = buildImport(DEFAULT_IMPORT); assertFalse(myImport.equals(DEFAULT_IMPORT)); } @Test public void testEqualsToDifferentImportImplementation() throws Exception { Import myImport = buildImport(DEFAULT_IMPORT); Import mockImport = new MockImportImpl(DEFAULT_IMPORT_PACKAGE, DEFAULT_IMPORT_CLASS); assertEquals(myImport, mockImport); } private class MockImportImpl implements Import { private String packageName; private String simpleName; private MockImportImpl(String packageName, String simpleName) { this.packageName = packageName; this.simpleName = simpleName; } @Override public Object getInternal() { return null; } @Override public String getPackage() { return packageName; } @Override public String getSimpleName() { return simpleName; } @Override public String getQualifiedName() { return packageName + "." + simpleName; } @Override public Import setName(String name) { this.packageName = name.substring(0, name.lastIndexOf(".")); this.simpleName = name.substring(name.lastIndexOf(".") + 1); return this; } @Override public boolean isStatic() { return false; } @Override public Import setStatic(boolean value) { return this; } @Override public boolean isWildcard() { return false; } } private Import buildImport(String importName) { return new ImportImpl(Roaster.parse(JavaSource.class, "public class MockClass {}")).setName(importName); } }