/******************************************************************************* * Copyright (c) 2010, 2010 Andrew Gvozdev 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: * Andrew Gvozdev (Quoin Inc.) - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.utils; import java.io.File; import java.io.IOException; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; public class FindProgramLocationTest extends TestCase { private static final String PATH_SEPARATOR = File.pathSeparator; public static Test suite() { return new TestSuite(FindProgramLocationTest.class); } @Override protected void tearDown() throws Exception { ResourceHelper.cleanUp(); } public void testCornerCases() throws CoreException, IOException { assertNull(PathUtil.findProgramLocation("", "")); assertNull(PathUtil.findProgramLocation("prog", "")); assertNull(PathUtil.findProgramLocation("prog", PATH_SEPARATOR)); assertNull(PathUtil.findProgramLocation("prog", "x"+PATH_SEPARATOR)); assertNull(PathUtil.findProgramLocation("prog", PATH_SEPARATOR+"x")); assertNull(PathUtil.findProgramLocation("prog", PATH_SEPARATOR+PATH_SEPARATOR)); assertNull(PathUtil.findProgramLocation("prog", PATH_SEPARATOR+"x"+PATH_SEPARATOR)); } public void testFind() throws CoreException, IOException { String name1 = "file1"; String name2 = "file2"; String name3 = "file3"; String nameA = "fileA"; // Create some folders and files IPath dir1 = ResourceHelper.createTemporaryFolder(); IPath dir2 = ResourceHelper.createTemporaryFolder(); IPath dir3 = ResourceHelper.createTemporaryFolder(); IPath filePath1 = new Path(dir1 + File.separator + name1); IPath filePath2 = new Path(dir2 + File.separator + name2); IPath filePath3 = new Path(dir3 + File.separator + name3); IPath filePath2A = new Path(dir2 + File.separator + nameA); IPath filePath3A = new Path(dir3 + File.separator + nameA); File file1 = filePath1.toFile(); file1.createNewFile(); assertTrue(file1.exists()); File file2 = filePath2.toFile(); file2.createNewFile(); assertTrue(file2.exists()); File file3 = filePath3.toFile(); file3.createNewFile(); assertTrue(file3.exists()); File file2A = filePath2A.toFile(); file2A.createNewFile(); assertTrue(file2A.exists()); File file3A = filePath3A.toFile(); file3A.createNewFile(); assertTrue(file3A.exists()); // sample $PATH String path123 = dir1 + PATH_SEPARATOR + dir2 + PATH_SEPARATOR + dir3; { // non-existing file IPath actual = PathUtil.findProgramLocation("non-existing", path123); assertEquals(null, actual); } { // file in the first path IPath actual = PathUtil.findProgramLocation(name1, path123); assertEquals(filePath1, actual); } { // file in the middle path IPath actual = PathUtil.findProgramLocation(name2, path123); assertEquals(filePath2, actual); } { // file in the last path IPath actual = PathUtil.findProgramLocation(name3, path123); assertEquals(filePath3, actual); } { // if two exist return first IPath actual = PathUtil.findProgramLocation(nameA, path123); assertEquals(filePath2A, actual); } { // try directory String nameDir = "subdir"; IPath subdirPath = new Path(dir1 + File.separator + nameDir); File subdir = subdirPath.toFile(); subdir.mkdir(); assertTrue(file1.exists()); // directory should not be found IPath actual = PathUtil.findProgramLocation(nameDir, path123); assertEquals(null, actual); } } public void testWindows() throws CoreException, IOException { if (!Platform.getOS().equals(Platform.OS_WIN32)) return; String name1 = "file1"; String name2 = "file2"; String name3 = "file3"; // Create some folders and files IPath dir1 = ResourceHelper.createTemporaryFolder(); IPath dir2 = ResourceHelper.createTemporaryFolder(); IPath filePath1_com = new Path(dir1 + File.separator + name1 + ".com"); IPath filePath2_exe = new Path(dir1 + File.separator + name2 + ".exe"); IPath filePath3 = new Path(dir1 + File.separator + name3); IPath filePath3_exe = new Path(dir2 + File.separator + name3 + ".exe"); File file1_com = filePath1_com.toFile(); file1_com.createNewFile(); assertTrue(file1_com.exists()); File file2_exe = filePath2_exe.toFile(); file2_exe.createNewFile(); assertTrue(file2_exe.exists()); File file3 = filePath3.toFile(); file3.createNewFile(); assertTrue(file3.exists()); File file3_exe = filePath3_exe.toFile(); file3_exe.createNewFile(); assertTrue(file3_exe.exists()); String path1 = dir1.toOSString(); { // file.com IPath actual = PathUtil.findProgramLocation(name1, path1); assertEquals(filePath1_com, actual); } { // file.exe IPath actual = PathUtil.findProgramLocation(name2, path1); assertEquals(filePath2_exe, actual); } String path12 = dir1.toOSString() + PATH_SEPARATOR + dir2.toOSString(); { // dir2/file.exe is preferred to dir1/file IPath actual = PathUtil.findProgramLocation(name3, path12); assertEquals(filePath3_exe, actual); } } }