/******************************************************************************* * Copyright (c) 2000, 2009 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.core.tests.builder; import java.util.Map; import junit.framework.*; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.tests.util.Util; /** * Basic tests of the image builder. */ public class CopyResourceTests extends BuilderTests { public CopyResourceTests(String name) { super(name); } public static Test suite() { return buildTestSuite(CopyResourceTests.class); } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=117302 public void testFilteredResources() throws JavaModelException { IPath projectPath = env.addProject("P"); env.removePackageFragmentRoot(projectPath, ""); IPath src = env.addPackageFragmentRoot( projectPath, "", new IPath[] {new org.eclipse.core.runtime.Path("foo/;bar/")}, new IPath[] {new org.eclipse.core.runtime.Path("foo/ignored/")}, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addClass(src, "foo", "A", "package foo;"+ "public class A extends bar.B {}" ); env.addClass(src, "bar", "B", "package bar;"+ "public class B {}" ); env.addFolder(src, "foo/skip"); IPath ignored = env.addFolder(src, "foo/ignored"); env.addFile(ignored, "test.txt", "test file"); env.addFile(src.append("bar"), "test.txt", "test file"); org.eclipse.jdt.core.IJavaProject p = env.getJavaProject("P"); Map<String, String> options = p.getOptions(true); options.put(org.eclipse.jdt.core.JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "bar*"); options.put(org.eclipse.jdt.core.JavaCore.CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER, "enabled"); p.setOptions(options); int max = org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE; try { org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = 1; fullBuild(); expectingNoProblems(); expectingNoPresenceOf(projectPath.append("bin/foo/skip/")); expectingNoPresenceOf(projectPath.append("bin/foo/ignored/")); expectingNoPresenceOf(projectPath.append("bin/bar/test.txt")); env.removeFolder(projectPath.append("bin/bar")); env.addClass(src, "x", "A", "package x;"+ "public class A extends bar.B {}" ); env.addFile(src.append("bar"), "test.txt", "changed test file"); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(projectPath.append("bin/foo/skip/")); expectingNoPresenceOf(projectPath.append("bin/foo/ignored/")); expectingNoPresenceOf(projectPath.append("bin/bar/test.txt")); } finally { org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = max; } } public void testSimpleProject() throws JavaModelException { IPath projectPath = env.addProject("P1"); IPath src = env.getPackageFragmentRootPath(projectPath, ""); env.setOutputFolder(projectPath, ""); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src, "z.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(projectPath.append("z.txt")); env.removeFile(src.append("z.txt")); IPath p = env.addFolder(src, "p"); env.addFile(p, "p.txt", ""); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(projectPath.append("z.txt")); expectingPresenceOf(p.append("p.txt")); } public void testProjectWithBin() throws JavaModelException { IPath projectPath = env.addProject("P2"); IPath src = env.getPackageFragmentRootPath(projectPath, ""); env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src, "z.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(new IPath[] { projectPath.append("z.txt"), projectPath.append("bin/z.txt") }); env.removeFile(src.append("z.txt")); IPath p = env.addFolder(src, "p"); env.addFile(p, "p.txt", ""); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(new IPath[] { projectPath.append("z.txt"), projectPath.append("bin/z.txt") }); expectingPresenceOf(new IPath[] { projectPath.append("p/p.txt"), projectPath.append("bin/p/p.txt") }); } public void testProjectWithSrcBin() throws JavaModelException { IPath projectPath = env.addProject("P3"); env.removePackageFragmentRoot(projectPath, ""); IPath src = env.addPackageFragmentRoot(projectPath, "src"); env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src, "z.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(new IPath[] { projectPath.append("src/z.txt"), projectPath.append("bin/z.txt") }); env.removeFile(src.append("z.txt")); env.addFile(src, "zz.txt", ""); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(new IPath[] { projectPath.append("src/z.txt"), projectPath.append("bin/z.txt") }); expectingPresenceOf(new IPath[] { projectPath.append("src/zz.txt"), projectPath.append("bin/zz.txt") }); } public void testProjectWith2SrcBin() throws JavaModelException { IPath projectPath = env.addProject("P4"); env.removePackageFragmentRoot(projectPath, ""); IPath src1 = env.addPackageFragmentRoot(projectPath, "src1"); IPath src2 = env.addPackageFragmentRoot(projectPath, "src2"); env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src1, "z.txt", ""); env.addFile(src2, "zz.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(new IPath[] { projectPath.append("src1/z.txt"), projectPath.append("bin/z.txt"), projectPath.append("src2/zz.txt"), projectPath.append("bin/zz.txt") }); env.removeFile(src2.append("zz.txt")); IPath p = env.addFolder(src2, "p"); env.addFile(p, "p.txt", ""); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(new IPath[] { projectPath.append("src2/zz.txt"), projectPath.append("bin/zz.txt") }); expectingPresenceOf(new IPath[] { projectPath.append("src2/p/p.txt"), projectPath.append("bin/p/p.txt") }); } public void testProjectWith2SrcAsBin() throws JavaModelException { IPath projectPath = env.addProject("P5"); env.removePackageFragmentRoot(projectPath, ""); IPath src1 = env.addPackageFragmentRoot(projectPath, "src1", null, "src1"); IPath src2 = env.addPackageFragmentRoot(projectPath, "src2", null, "src2"); env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src1, "z.txt", ""); env.addFile(src2, "zz.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(new IPath[] { projectPath.append("src1/z.txt"), projectPath.append("src2/zz.txt"), }); expectingNoPresenceOf(new IPath[] { projectPath.append("src2/z.txt"), projectPath.append("bin") }); } public void testProjectWith2Src2Bin() throws JavaModelException { IPath projectPath = env.addProject("P6"); env.removePackageFragmentRoot(projectPath, ""); IPath src1 = env.addPackageFragmentRoot(projectPath, "src1", null, "bin1"); IPath src2 = env.addPackageFragmentRoot(projectPath, "src2", null, "bin2"); env.setOutputFolder(projectPath, "bin1"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); env.addFile(src1, "z.txt", ""); env.addFile(src2, "zz.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(new IPath[] { projectPath.append("bin1/z.txt"), projectPath.append("bin2/zz.txt"), }); expectingNoPresenceOf(new IPath[] { projectPath.append("bin1/zz.txt"), projectPath.append("bin2/z.txt"), }); } public void test2ProjectWith1Bin() throws JavaModelException { IPath projectPath = env.addProject("P7"); env.removePackageFragmentRoot(projectPath, ""); env.addPackageFragmentRoot(projectPath, "src"); IPath bin = env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); IPath projectPath2 = env.addProject("P8"); IPath binLocation = env.getProject(projectPath).getFolder("bin").getLocation(); env.setExternalOutputFolder(projectPath2, "externalBin", binLocation); env.addExternalJars(projectPath2, Util.getJavaClassLibs()); env.addFile(projectPath2, "z.txt", ""); fullBuild(); expectingNoProblems(); expectingPresenceOf(bin.append("z.txt")); } //https://bugs.eclipse.org/bugs/show_bug.cgi?id=154693 public void testBug154693() throws JavaModelException { IPath projectPath = env.addProject("P9"); env.removePackageFragmentRoot(projectPath, ""); IPath src = env.addPackageFragmentRoot(projectPath, "src"); env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); org.eclipse.jdt.core.IJavaProject p = env.getJavaProject("P9"); Map<String, String> options = p.getOptions(true); options.put(org.eclipse.jdt.core.JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, ".svn/"); p.setOptions(options); IPath folder = env.addFolder(src, "p"); env.addFolder(folder, ".svn"); env.addFile(folder, "A.java", "package p;\nclass A{}"); fullBuild(); expectingNoProblems(); expectingNoPresenceOf(new IPath[] { projectPath.append("bin/p/.svn") }); } //https://bugs.eclipse.org/bugs/show_bug.cgi?id=194420 public void testBug194420() throws JavaModelException { IPath projectPath = env.addProject("P"); env.removePackageFragmentRoot(projectPath, ""); IPath src = env.addPackageFragmentRoot(projectPath, "src"); IPath bin = env.setOutputFolder(projectPath, "bin"); env.addExternalJars(projectPath, Util.getJavaClassLibs()); IPath folder = env.addFolder(src, "p"); String testContents = "incremental test contents"; IPath zPath = env.addFile(folder, "z.txt", testContents); IPath zBinPath = bin.append("p/z.txt"); org.eclipse.core.resources.IFile zFile = env.getWorkspace().getRoot().getFile(zPath); fullBuild(); expectingNoProblems(); expectingPresenceOf(zBinPath); try { byte[] contents = new byte[testContents.length()]; java.io.InputStream stream = zFile.getContents(); stream.read(contents); stream.close(); assumeEquals("File was not copied", testContents, new String(contents)); } catch (Exception e) { fail("File was not copied"); } java.io.File file = new java.io.File(zFile.getLocation().toOSString()); file.delete(); fullBuild(); expectingNoProblems(); expectingNoPresenceOf(zBinPath); testContents = "incremental test contents"; env.addFile(folder, "z.txt", testContents); incrementalBuild(); expectingNoProblems(); expectingPresenceOf(zBinPath); try { byte[] contents = new byte[testContents.length()]; java.io.InputStream stream = zFile.getContents(); stream.read(contents); stream.close(); assumeEquals("File was not copied", testContents, new String(contents)); } catch (Exception e) { fail("File was not copied"); } env.addFile(folder, "z.txt", "about to be deleted"); file.delete(); incrementalBuild(); expectingNoProblems(); expectingNoPresenceOf(zBinPath); } }