package com.github.jknack.antlr4ide.scoping;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.QualifiedName;
import org.junit.Test;
public class Antlr4NameProviderTest {
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void nameFeature() {
EObject object = createMock(EObject.class);
EClass eClass = createMock(EClass.class);
EAttribute nameFeature = createMock(EAttribute.class);
EClassifier eType = createMock(EClassifier.class);
Class instanceClass = String.class;
EList<Adapter> adapters = createMock(EList.class);
String name = "rule";
expect(object.eClass()).andReturn(eClass);
expect(object.eAdapters()).andReturn(adapters);
expect(eClass.getEStructuralFeature("name")).andReturn(nameFeature);
expect(nameFeature.isMany()).andReturn(false);
expect(nameFeature.getEType()).andReturn(eType);
expect(object.eGet(nameFeature)).andReturn(name);
expect(eType.getInstanceClass()).andReturn(instanceClass);
expect(adapters.add(isA(Adapter.class))).andReturn(true);
Object[] mocks = {object, eClass, nameFeature, eType, adapters };
replay(mocks);
QualifiedName qualifiedName = new Antlr4NameProvider().getFullyQualifiedName(object);
assertNotNull(qualifiedName);
assertEquals(name, qualifiedName.getFirstSegment());
assertEquals(name, qualifiedName.getLastSegment());
assertEquals(name, qualifiedName.toString());
verify(mocks);
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void idFeatureWhenNameIsMissing() {
EObject object = createMock(EObject.class);
EClass eClass = createMock(EClass.class);
EAttribute idFeature = createMock(EAttribute.class);
EClassifier eType = createMock(EClassifier.class);
Class instanceClass = String.class;
EList<Adapter> adapters = createMock(EList.class);
String name = "rule";
expect(object.eClass()).andReturn(eClass).times(2);
expect(object.eAdapters()).andReturn(adapters);
expect(eClass.getEStructuralFeature("name")).andReturn(null);
expect(eClass.getEStructuralFeature("id")).andReturn(idFeature);
expect(idFeature.isMany()).andReturn(false);
expect(idFeature.getEType()).andReturn(eType);
expect(object.eGet(idFeature)).andReturn(name);
expect(eType.getInstanceClass()).andReturn(instanceClass);
expect(adapters.add(isA(Adapter.class))).andReturn(true);
Object[] mocks = {object, eClass, idFeature, eType, adapters };
replay(mocks);
QualifiedName qualifiedName = new Antlr4NameProvider().getFullyQualifiedName(object);
assertNotNull(qualifiedName);
assertEquals(name, qualifiedName.getFirstSegment());
assertEquals(name, qualifiedName.getLastSegment());
assertEquals(name, qualifiedName.toString());
verify(mocks);
}
@Test
public void missingNameOrId() {
EObject object = createMock(EObject.class);
EClass eClass = createMock(EClass.class);
expect(object.eClass()).andReturn(eClass).times(2);
expect(eClass.getEStructuralFeature("name")).andReturn(null);
expect(eClass.getEStructuralFeature("id")).andReturn(null);
Object[] mocks = {object, eClass };
replay(mocks);
QualifiedName qualifiedName = new Antlr4NameProvider().getFullyQualifiedName(object);
assertNull(qualifiedName);
verify(mocks);
}
@Test
public void nullReference() {
QualifiedName qualifiedName = new Antlr4NameProvider().getFullyQualifiedName(null);
assertNull(qualifiedName);
}
}