| /******************************************************************************* |
| * Copyright (c) 2009, 2014 R.Dvorak and others. |
| * 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: |
| * Radek Dvorak - initial API and implementation |
| * Christopher Gerking - Bug394188 |
| *******************************************************************************/ |
| package org.eclipse.m2m.tests.qvt.oml.compile; |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.util.Collections; |
| |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.URIUnitResolver; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.UnitContents; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.UnitProxy; |
| import org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory; |
| import org.eclipse.m2m.tests.qvt.oml.AllTests; |
| import org.junit.Test; |
| import org.osgi.framework.Bundle; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * @author dvorak |
| */ |
| public class URIUnitResolverTest extends TestCase { |
| |
| private static final URI TEST_UNIT_PLUGIN_URI = URI.createPlatformPluginURI( |
| "/" + AllTests.BUNDLE_ID +"/deployed/org/eclipse/Foo.qvto", true); |
| |
| |
| public URIUnitResolverTest(String name) { |
| super(name); |
| } |
| |
| @Test |
| public void testBaseAndNamespace() throws Exception { |
| URI baseURI = URI.createPlatformPluginURI(AllTests.BUNDLE_ID, true); |
| |
| URIUnitResolver resolver = new URIUnitResolver(Collections.singletonList(baseURI)); |
| UnitProxy unit = resolver.resolveUnit("deployed.org.eclipse.Foo"); |
| assertNotNull(unit); |
| assertContents(unit); |
| |
| assertEquals("deployed.org.eclipse", unit.getNamespace()); |
| assertEquals("Foo", unit.getName()); |
| assertEquals(TEST_UNIT_PLUGIN_URI, //$NON-NLS-1$ |
| unit.getURI()); |
| } |
| |
| @Test |
| public void testNamespace() throws Exception { |
| URI baseURI = URI.createPlatformPluginURI(AllTests.BUNDLE_ID + "/deployed", true); |
| |
| URIUnitResolver resolver = new URIUnitResolver(Collections.singletonList(baseURI)); |
| |
| UnitProxy unit = resolver.resolveUnit("org.eclipse.Foo"); |
| assertEquals("org.eclipse", unit.getNamespace()); |
| assertEquals("Foo", unit.getName()); |
| assertEquals(TEST_UNIT_PLUGIN_URI, //$NON-NLS-1$ |
| unit.getURI()); |
| assertContents(unit); |
| } |
| |
| @Test |
| public void testDefaultNamespace() throws Exception { |
| URI baseURI = URI.createPlatformPluginURI(AllTests.BUNDLE_ID + "/deployed/org/eclipse", true); |
| |
| URIUnitResolver resolver = new URIUnitResolver(Collections.singletonList(baseURI)); |
| |
| UnitProxy unit = resolver.resolveUnit("Foo"); |
| assertNull(unit.getNamespace()); |
| assertEquals("Foo", unit.getName()); |
| assertEquals(TEST_UNIT_PLUGIN_URI, //$NON-NLS-1$ |
| unit.getURI()); |
| assertContents(unit); |
| } |
| |
| @Test |
| public void testTrailPathSepBaseAndNamespace() throws Exception { |
| URI baseURI = URI.createURI(URI.createPlatformPluginURI(AllTests.BUNDLE_ID, true).toString() + "/"); |
| |
| URIUnitResolver resolver = new URIUnitResolver(Collections.singletonList(baseURI)); |
| UnitProxy unit = resolver.resolveUnit("deployed.org.eclipse.Foo"); |
| assertNotNull(unit); |
| |
| assertEquals("deployed.org.eclipse", unit.getNamespace()); |
| assertEquals("Foo", unit.getName()); |
| assertEquals(TEST_UNIT_PLUGIN_URI, //$NON-NLS-1$ |
| unit.getURI()); |
| |
| } |
| |
| @Test |
| public void testUnresolvedByURI() throws Exception { |
| URI baseURI = URI.createURI(URI.createPlatformPluginURI(AllTests.BUNDLE_ID, true).toString()); |
| URIUnitResolver resolver = new URIUnitResolver(Collections.singletonList(baseURI)); |
| |
| String notExisting = "I'm Not there"; |
| assertNull(resolver.resolveUnit(notExisting)); |
| assertNull(UnitResolverFactory.Registry.INSTANCE.getUnit(URI.createURI(notExisting))); |
| } |
| |
| @Test |
| public void testFileURI() throws Exception { |
| Bundle testBundle = Platform.getBundle(AllTests.BUNDLE_ID); |
| File bundleFile = FileLocator.getBundleFile(testBundle); |
| assertNotNull(bundleFile); |
| |
| URI baseURI = URI.createURI(bundleFile.toURI().toString()); |
| assertEquals("file", baseURI.scheme()); |
| |
| URIUnitResolver resolver = new URIUnitResolver(baseURI); |
| UnitProxy unit = resolver.resolveUnit("deployed.org.eclipse.Foo"); |
| |
| assertNotNull(unit); |
| assertContents(unit); |
| |
| assertEquals("deployed.org.eclipse", unit.getNamespace()); |
| assertEquals("Foo", unit.getName()); |
| |
| // test direct unit proxy constructor for a URI |
| if(baseURI.hasTrailingPathSeparator()) { |
| baseURI = baseURI.trimSegments(1); |
| } |
| assertEquals(baseURI.appendSegments(new String[] { "deployed", "org", "eclipse", "Foo.qvto"}), |
| unit.getURI()); |
| |
| UnitProxy unitByURI = UnitResolverFactory.Registry.INSTANCE.getUnit(unit.getURI()); |
| assertNotNull(unitByURI); |
| assertContents(unitByURI); |
| assertEquals(unit.getURI(), unitByURI.getURI()); |
| |
| // expect default namespace as we had no knowledge about |
| assertNull(unitByURI.getNamespace()); |
| assertEquals(unitByURI.getName(), unitByURI.getQualifiedName()); |
| } |
| |
| private static void assertContents(UnitProxy unit) throws Exception { |
| UnitContents contents = unit.getContents(); |
| assertTrue(contents instanceof UnitContents.CSTContents); |
| UnitContents.CSTContents cst = (UnitContents.CSTContents) contents; |
| BufferedReader reader = new BufferedReader(cst.getContents()); |
| while(reader.readLine() != null) { |
| // do nothing but read all contents |
| } |
| } |
| } |