From c6d4a7ce6da083868cc8072dff587e70de52188a Mon Sep 17 00:00:00 2001 From: Simeon Andreev Date: Thu, 1 Jun 2023 11:29:19 +0300 Subject: [PATCH] WIP, DONT MERGE Fixes: #470 Signed-off-by: Simeon Andreev --- .../tests/resources/ProjectLinksTest.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ProjectLinksTest.java diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ProjectLinksTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ProjectLinksTest.java new file mode 100644 index 00000000000..7ae32f2e69f --- /dev/null +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ProjectLinksTest.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright (c) 2023 Simeon Andreev and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Simeon Andreev - initial API and implementation + *******************************************************************************/ +package org.eclipse.core.tests.resources; + +import java.nio.file.*; +import java.util.List; +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.IPath; + +/** + * + */ +public class ProjectLinksTest extends ResourceTest { + + private Path tmpFolder; + private IPath tmpPath; + + @Override + protected void setUp() throws Exception { + super.setUp(); + tmpPath = getRandomLocation(); + tmpFolder = Paths.get(tmpPath.toOSString()); + Files.createDirectory(tmpFolder); + } + + @Override + protected void tearDown() throws Exception { + try { + Files.deleteIfExists(tmpFolder); + } finally { + super.tearDown(); + } + } + + /** + * Tests that link information is updated after closing a project, deleting a + * link in the {@code .project} file and then opening the project. + */ + public void testCloseProjectDeleteLinksAndOpen_GH470() throws Exception { + String linkedFolderName = "test"; + IWorkspaceRoot root = getWorkspace().getRoot(); + IProject project = root.getProject(getUniqueString()); + + project.create(getMonitor()); + project.open(getMonitor()); + project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); + + IFolder folder = project.getFolder(linkedFolderName); + + IFile dotProject = project.getFile(".project"); + Path dotProjectPath = Paths.get(dotProject.getLocationURI()); + + List dotProjectContentsWithoutLink = Files.readAllLines(dotProjectPath); + + folder.createLink(tmpPath, IResource.NONE, getMonitor()); + project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); + + assertTrue("Failed to create linked folder in test project", folder.isLinked()); + + project.close(getMonitor()); + + Files.write(dotProjectPath, dotProjectContentsWithoutLink); + + project.open(getMonitor()); + project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor()); + + folder = project.getFolder(linkedFolderName); + assertFalse("Expected folder to not be linked after re-opening project", folder.isLinked()); + } +}