package org.axdt.as3.scoping; import java.util.Collections; import org.axdt.as3.As3EFactory; import org.axdt.as3.As3EPackage; import org.axdt.as3.As3StandaloneSetup; import org.axdt.as3.model.As3Class; import org.axdt.as3.model.As3Package; import org.axdt.as3.model.As3Program; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.xtext.junit.AbstractXtextTests; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.scoping.IScope; import org.eclipse.xtext.scoping.IScopeProvider; import org.eclipse.xtext.scoping.impl.AbstractScope; import org.eclipse.xtext.scoping.impl.SimpleScope; public class As3ScopeProviderTest extends AbstractXtextTests { final SimpleScope simpleScope = new SimpleScope(Collections.<IEObjectDescription>emptyList()); EReference identRef = As3EPackage.eINSTANCE.getAs3SimpleIdentifier_Reference(); @Override protected void setUp() throws Exception { super.setUp(); with(As3StandaloneSetup.class); } protected As3ScopeProvider getProvider(final IScope delegate) { As3ScopeProvider provider = new As3ScopeProvider(); provider.setDelegate(new IScopeProvider() { public IScope getScope(EObject context, EReference reference) { return delegate; } }); return provider; } public void testTypeReference() throws Exception { // should always return delegate As3ScopeProvider provider = getProvider(simpleScope); assertEquals(simpleScope, provider.getScope( As3EFactory.eINSTANCE.createAs3Program(), As3EPackage.eINSTANCE.getAs3Class_ExtendedClass() )); assertEquals(simpleScope, provider.getScope( As3EFactory.eINSTANCE.createAs3Class(), As3EPackage.eINSTANCE.getAs3Class_ExtendedClass() )); } public void testReferableProgram() throws Exception { As3ScopeProvider provider = getProvider(simpleScope); IScope scope = provider.getScope( As3EFactory.eINSTANCE.createAs3Program(), identRef ); assertEquals(As3ProgramScope.class, scope.getClass()); assertEquals(simpleScope, ((AbstractScope) scope).getParent()); } public void testReferablePackage() throws Exception { As3ScopeProvider provider = getProvider(simpleScope); IScope scope = provider.getScope( As3EFactory.eINSTANCE.createAs3Package(), identRef ); assertEquals(simpleScope, scope); } public void testReferableProgramType() throws Exception { As3ScopeProvider provider = getProvider(simpleScope); As3Class as3Class = As3EFactory.eINSTANCE.createAs3Class(); As3Program program = As3EFactory.eINSTANCE.createAs3Program(); program.getDirectives().add(as3Class); IScope scope = provider.getScope(as3Class, identRef); assertEquals(As3TypeScope.class, scope.getClass()); IScope parent = ((As3TypeScope) scope).getParent(); assertEquals(As3ProgramScope.class, parent.getClass()); assertEquals(simpleScope, ((AbstractScope) parent).getParent()); } public void testReferablePackageType() throws Exception { As3ScopeProvider provider = getProvider(simpleScope); As3Class as3Class = As3EFactory.eINSTANCE.createAs3Class(); As3Package as3Package = As3EFactory.eINSTANCE.createAs3Package(); as3Package.getDirectives().add(as3Class); As3Program program = As3EFactory.eINSTANCE.createAs3Program(); program.setPackage(as3Package); IScope scope = provider.getScope(as3Class, identRef); assertEquals(As3TypeScope.class, scope.getClass()); IScope parent = ((As3TypeScope) scope).getParent(); assertEquals(As3ProgramScope.class, parent.getClass()); assertEquals(simpleScope, ((AbstractScope) parent).getParent()); } }