/******************************************************************************* * Copyright (c) 2014 Bruno Medeiros and other Contributors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package dtool.engine.analysis; import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue; import java.util.concurrent.ExecutionException; import melnorme.lang.tooling.engine.PickedElement; import melnorme.lang.tooling.engine.resolver.NamedElementSemantics; import melnorme.lang.tooling.engine.resolver.ReferenceResult; import melnorme.lang.tooling.symbols.INamedElement; import melnorme.lang.tooling.symbols.PackageNamespace; import org.junit.Test; import dtool.ast.definitions.Module; import dtool.ast.references.NamedReference; import dtool.engine.ResolvedModule; public class NE_Module_Test extends NamedElement_CommonTest { @Override public void test_NamedElement________() throws Exception { test_resolveConcreteElement(parseNamedElement("module xxx;"), null); test_resolveConcreteElement(parseNamedElement("module pack.xxx;"), null); test_resolveSearchInMembersScope(parseNamedElement("module xxx;") ); test_resolveSearchInMembersScope(parseNamedElement("module xxx.foo;") ); test_resolveSearchInMembersScope( parseSourceAndPickFromRefResolving("import xxx; auto _dummy = xxx/*M*/;") ); test_resolveSearchInMembersScope( parseSourceAndPickFromRefResolving("import xxx.foo; auto _dummy = xxx/*M*/;"), "xxx.foo/" ); testModuleProxy_fromImport(); testPackageNamespace_fromImport(); } protected void testModuleProxy_fromImport() throws ExecutionException { PickedElement<INamedElement> pickedElement = parseSourceAndPickFromRefResolving( "import foo; auto _dummy = foo; ", "foo;"); ModuleProxy moduleProxy = assertCast(pickedElement.element, ModuleProxy.class); assertTrue(moduleProxy.getContainingModuleNamespace() == moduleProxy); assertCast(moduleProxy.resolveUnderlyingNode(), Module.class); assertTrue(((NamedElementSemantics) moduleProxy.getSemantics(pickedElement.context)).isResolved()); test_NamedElement(pickedElement, "$foo/", expectNotAValue("foo"), array("foo/foo_member", "foo/foo_member2")); } protected void testPackageNamespace_fromImport() throws ExecutionException { PickedElement<INamedElement> pickedElement = parseSourceAndPickFromRefResolving( "import xxx.foo; auto _ = xxx;", "xxx;"); assertTrue(pickedElement.element instanceof PackageNamespace); test_NamedElement(pickedElement, null, expectNotAValue("xxx"), array("xxx.foo/")); } /* ----------------- ----------------- */ @Test public void testModuleSyntheticUnits() throws Exception { testModuleSyntheticUnits$(); } public void testModuleSyntheticUnits$() throws Exception { testModuleSyntheticUnit____("module foo;", "foo"); testModuleSyntheticUnit____("", "_tests"); testModuleSyntheticUnit____("module pack.foo;", "pack.foo"); testModuleSyntheticUnit____("module pack.subpack.foo;", "pack.subpack.foo"); } protected void testModuleSyntheticUnit____(String preSource, String elemName) { ResolvedModule resolvedModule = parseModule_( preSource + "; int _dummy = " + elemName + "/*A*/ ~ " + elemName + "/*B*/;"); PickedElement<NamedReference> pickA = pickElement(resolvedModule, elemName + "/*A*/", NamedReference.class); PickedElement<NamedReference> pickB = pickElement(resolvedModule, elemName + "/*B*/", NamedReference.class); assertTrue(pickA.element != pickB.element); ReferenceResult resultA = Resolvables_SemanticsTest.testResolveElement(pickA); ReferenceResult resultB = Resolvables_SemanticsTest.testResolveElement(pickB); assertTrue(resultA.result == resultB.result); } }