/******************************************************************************* * Copyright (c) 2015 Pivotal, Inc. * 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: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.test; import java.io.File; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.JavaCore; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.packaging.JarNameGenerator; import org.springframework.ide.eclipse.boot.util.JavaProjectUtil; import org.springsource.ide.eclipse.commons.tests.util.StsTestCase; public class JarNameGeneratorTest extends StsTestCase { private JarNameGenerator ng = new JarNameGenerator(); public void testNamesForJars() { assertName("foo-1.2.3.jar", "/home/someplace/foo-1.2.3.jar"); assertName("foo-1.2.3-1.jar", "/home/some-other-place/foo-1.2.3.jar"); assertName("foo-1.2.3-2.jar", "/home/and-yet-another/foo-1.2.3.jar"); //counters are per-name not per JarNameGenerator instance? assertName("bar.jar", "/home/bar.jar"); assertName("bar-1.jar", "/away/bar.jar"); //Tolerate '.JAR' in upper case? assertName("case-nutter.jar", "/somewhere/case-nutter.JAR"); assertName("case-nutter-1.jar", "/elsewhere/case-nutter.JAR"); } public void testNamesForProjectFolders() throws Exception { IProject p = createPredefinedProject("demo-lib"); IContainer _outputFolder = JavaProjectUtil.getDefaultOutputFolder(JavaCore.create(p)); File outputFolder = _outputFolder.getLocation().toFile(); assertName("demo-lib.jar", outputFolder); assertName("demo-lib-1.jar", outputFolder); assertName("demo-lib-2.jar", outputFolder); } public void testNamesForNestedProjectFolders() throws Exception { IProject p = createPredefinedProject("demo-lib"); String nestedName = "nested"; IProject nested = createGeneralProject(p, nestedName, p.getLocation().append(nestedName)); File dep = nested.getLocation().toFile(); //The next bit is to check that this is actually a good test. I.e. // We do in fact have a situation where a nested project implies that several resources in the // workspace represent the same folder on disk. IContainer[] containers = getWSRoot().findContainersForLocationURI(dep.toURI()); assertEquals(2, containers.length); //Now check that it makes the right choice and names the jar after 'nested' not after 'demo-lib'. assertName("nested.jar", dep); assertName("nested-1.jar", dep); assertName("nested-2.jar", dep); } protected IProject createGeneralProject(IProject p, String name, IPath loc) throws CoreException { IProjectDescription desc = getWorkspace().newProjectDescription(name); IProject nested = getProject(name); desc.setLocation(loc); nested.create(desc, new NullProgressMonitor()); return nested; } private IProject getProject(String name) { return getWSRoot().getProject(name); } protected IWorkspaceRoot getWSRoot() { return getWorkspace().getRoot(); } protected IWorkspace getWorkspace() { return ResourcesPlugin.getWorkspace(); } private void assertName(String expectedName, File dep) { assertEquals(expectedName, ng.createName(dep)); } private void assertName(String expectedName, String depPath) { assertName(expectedName, new File(depPath)); } @Override protected String getBundleName() { return BootDashTestBundleConstants.BUNDLE_ID; } }