/* Copyright 2009-2015 David Hadka
*
* This file is part of the MOEA Framework.
*
* The MOEA Framework is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* The MOEA Framework is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the MOEA Framework. If not, see <http://www.gnu.org/licenses/>.
*/
package org.moeaframework.analysis.collector;
import java.util.Stack;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* Tests the {@link AttachPoint} class.
*/
public class AttachPointTest {
public static class TypeA {
}
public static class TypeB {
}
public static class TypeC extends TypeB {
}
private AttachPoint FALSE;
private AttachPoint TRUE;
@Before
public void setUp() {
FALSE = new AttachPoint() {
@Override
public boolean matches(Stack<Object> parents, Object object) {
return false;
}
};
TRUE = new AttachPoint() {
@Override
public boolean matches(Stack<Object> parents, Object object) {
return true;
}
};
}
@Test
public void testAnd() {
Assert.assertFalse(FALSE.and(FALSE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertFalse(FALSE.and(TRUE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertFalse(TRUE.and(FALSE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertTrue(TRUE.and(TRUE).matches(new Stack<Object>(),
new TypeA()));
}
@Test
public void testOr() {
Assert.assertFalse(FALSE.or(FALSE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertTrue(FALSE.or(TRUE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertTrue(TRUE.or(FALSE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertTrue(TRUE.or(TRUE).matches(new Stack<Object>(),
new TypeA()));
}
@Test
public void testNot() {
Assert.assertTrue(AttachPoint.not(FALSE).matches(new Stack<Object>(),
new TypeA()));
Assert.assertFalse(AttachPoint.not(TRUE).matches(new Stack<Object>(),
new TypeA()));
}
@Test
public void testIsClass() {
Assert.assertFalse(AttachPoint.isClass(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
Assert.assertTrue(AttachPoint.isClass(TypeB.class).matches(
new Stack<Object>(), new TypeB()));
Assert.assertFalse(AttachPoint.isClass(TypeB.class).matches(
new Stack<Object>(), new TypeC()));
//test empty parents
Assert.assertFalse(AttachPoint.isClass(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
}
@Test
public void testIsSubclass() {
Assert.assertFalse(AttachPoint.isSubclass(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
Assert.assertTrue(AttachPoint.isSubclass(TypeB.class).matches(
new Stack<Object>(), new TypeB()));
Assert.assertTrue(AttachPoint.isSubclass(TypeB.class).matches(
new Stack<Object>(), new TypeC()));
//test empty parents
Assert.assertFalse(AttachPoint.isSubclass(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
}
@Test
public void testIsDeclaredIn() {
Stack<Object> parents = new Stack<Object>();
parents.add(new TypeB());
Assert.assertFalse(AttachPoint.isDeclaredIn(TypeA.class).matches(
parents, new TypeA()));
Assert.assertTrue(AttachPoint.isDeclaredIn(TypeB.class).matches(
parents, new TypeA()));
Assert.assertFalse(AttachPoint.isDeclaredIn(TypeC.class).matches(
parents, new TypeA()));
//test empty parents
Assert.assertFalse(AttachPoint.isDeclaredIn(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
}
@Test
public void testIsNestedIn() {
Stack<Object> parents = new Stack<Object>();
parents.add(new TypeC());
parents.add(new TypeB());
Assert.assertFalse(AttachPoint.isNestedIn(TypeA.class).matches(
parents, new TypeA()));
Assert.assertTrue(AttachPoint.isNestedIn(TypeB.class).matches(
parents, new TypeA()));
Assert.assertTrue(AttachPoint.isNestedIn(TypeC.class).matches(
parents, new TypeA()));
//test empty parents
Assert.assertFalse(AttachPoint.isNestedIn(TypeB.class).matches(
new Stack<Object>(), new TypeA()));
}
}