blob: eea92c4cdc7a6008bb66f3b4acc1080f8b29ccaf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 The University of York.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Louis Rose - initial API and implementation
******************************************************************************
*
* $Id$
*/
package org.eclipse.epsilon.concordance.core.hashing.hashers.ecore;
import static org.eclipse.epsilon.test.util.builders.emf.EAttributeBuilder.MANY;
import static org.eclipse.epsilon.test.util.builders.emf.EAttributeBuilder.anEAttribute;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EcorePackage;
import org.junit.Test;
public class EAttributeHasherTests {
private final EAttributeHasher hasher = EAttributeHasher.getInstance();
@Test
public void attributesWithSameNameHaveSameHashCode() {
final EAttribute age1 = anEAttribute().named("age").build();
final EAttribute age2 = anEAttribute().named("age").build();
assertThat(hashOf(age1), equalTo(hashOf(age2)));
}
@Test
public void attributesWithNoNameHaveSameHashCode() {
final EAttribute unnamed1 = anEAttribute().build();
final EAttribute unnamed2 = anEAttribute().build();
assertThat(hashOf(unnamed1), equalTo(hashOf(unnamed2)));
}
@Test
public void attributesWithDifferentNameHaveDifferentHashCodes() {
final EAttribute age = anEAttribute().named("age").build();
final EAttribute dob = anEAttribute().named("dob").build();
assertThat(hashOf(age), not(equalTo(hashOf(dob))));
}
@Test
public void attributesWithSameNameAndSameMultiplicityHaveSameHashCode() {
final EAttribute age1 = anEAttribute().named("age").withBounds(1, MANY).build();
final EAttribute age2 = anEAttribute().named("age").withBounds(1, MANY).build();
assertThat(hashOf(age1), equalTo(hashOf(age2)));
}
@Test
public void attributesWithSameNameAndDifferentLowerBoundHaveDifferentHashCodes() {
final EAttribute mandatory = anEAttribute().named("age").withBounds(1, MANY).build();
final EAttribute optional = anEAttribute().named("age").withBounds(0, MANY).build();
assertThat(hashOf(mandatory), not(equalTo(hashOf(optional))));
}
@Test
public void attributesWithSameNameAndDifferentUpperBoundHaveDifferentHashCodes() {
final EAttribute single = anEAttribute().named("age").withBounds(1, 1).build();
final EAttribute many = anEAttribute().named("age").withBounds(1, MANY).build();
assertThat(hashOf(single), not(equalTo(hashOf(many))));
}
@Test
public void attributesWithSameTypeHaveSameHashCode() {
final EAttribute integer1 = anEAttribute().withType(EcorePackage.eINSTANCE.getEInt()).build();
final EAttribute integer2 = anEAttribute().withType(EcorePackage.eINSTANCE.getEInt()).build();
assertThat(hashOf(integer1), equalTo(hashOf(integer2)));
}
@Test
public void attributesWithDifferentTypeHaveDifferentHashCode() {
final EAttribute _int = anEAttribute().withType(EcorePackage.eINSTANCE.getEInt()).build();
final EAttribute _float = anEAttribute().withType(EcorePackage.eINSTANCE.getEFloat()).build();
assertThat(hashOf(_int), not(equalTo(hashOf(_float))));
}
private int hashOf(EAttribute attribute) {
return hasher.hash(attribute);
}
}