diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IFolderTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IFolderTest.java index 71bcad5c734..bedeeaf7109 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IFolderTest.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IFolderTest.java @@ -23,9 +23,11 @@ import static org.eclipse.core.tests.resources.ResourceTestUtil.createRandomContentsStream; import static org.eclipse.core.tests.resources.ResourceTestUtil.createRandomString; import static org.eclipse.core.tests.resources.ResourceTestUtil.createTestMonitor; +import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnly; import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnlySupported; import static org.eclipse.core.tests.resources.ResourceTestUtil.removeFromFileSystem; import static org.eclipse.core.tests.resources.ResourceTestUtil.removeFromWorkspace; +import static org.eclipse.core.tests.resources.ResourceTestUtil.setReadOnly; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -42,9 +44,12 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform.OS; import org.eclipse.core.runtime.QualifiedName; +import org.eclipse.core.tests.resources.ResourceTestUtil.ReadOnlyApi; import org.eclipse.core.tests.resources.util.WorkspaceResetExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @ExtendWith(WorkspaceResetExtension.class) public class IFolderTest { @@ -316,8 +321,9 @@ public void testLeafFolderMove() throws Exception { assertDoesNotExistInWorkspace(source); } - @Test - public void testReadOnlyFolderCopy() throws Exception { + @ParameterizedTest + @EnumSource(ReadOnlyApi.class) + public void testReadOnlyFolderCopy(ReadOnlyApi apiVersion) throws Exception { // We need to know whether or not we can unset the read-only flag // in order to perform this test. if (!isReadOnlySupported()) { @@ -326,16 +332,16 @@ public void testReadOnlyFolderCopy() throws Exception { IProject project = getWorkspace().getRoot().getProject("Project"); IFolder source = project.getFolder("Folder1"); createInWorkspace(source); - source.setReadOnly(true); + setReadOnly(source, true, apiVersion); IFolder dest = project.getFolder("Folder2"); source.copy(dest.getFullPath(), true, createTestMonitor()); assertExistsInWorkspace(dest); assertExistsInWorkspace(source); - assertTrue(dest.isReadOnly()); + assertTrue(isReadOnly(dest, apiVersion)); // cleanup - ensure that the files can be deleted. - source.setReadOnly(false); - dest.setReadOnly(false); + setReadOnly(source, false, apiVersion); + setReadOnly(dest, true, apiVersion); } @Test diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java index f4df24f6e42..77cc6a0f6a7 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java @@ -43,6 +43,7 @@ import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnlySupported; import static org.eclipse.core.tests.resources.ResourceTestUtil.removeFromFileSystem; import static org.eclipse.core.tests.resources.ResourceTestUtil.removeFromWorkspace; +import static org.eclipse.core.tests.resources.ResourceTestUtil.setReadOnly; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -73,9 +74,12 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Platform.OS; +import org.eclipse.core.tests.resources.ResourceTestUtil.ReadOnlyApi; import org.eclipse.core.tests.resources.util.WorkspaceResetExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; @@ -762,8 +766,9 @@ public void testSortNatureSet() { order -> assertThat(order).containsExactly(NATURE_SIMPLE, NATURE_WATER, NATURE_SNOW)); } - @Test - public void testValidateEdit() throws CoreException { + @ParameterizedTest + @EnumSource(ReadOnlyApi.class) + public void testValidateEdit(ReadOnlyApi apiVersion) throws CoreException { // We need to know whether or not we can unset the read-only flag // in order to perform this test. if (!isReadOnlySupported()) { @@ -774,12 +779,12 @@ public void testValidateEdit() throws CoreException { createInWorkspace(new IResource[] {project, file}); IStatus result = getWorkspace().validateEdit(new IFile[] {file}, null); assertTrue(result.isOK()); - file.setReadOnly(true); + setReadOnly(file, true, apiVersion); result = getWorkspace().validateEdit(new IFile[] {file}, null); assertEquals(IStatus.ERROR, result.getSeverity()); // assertEquals(IResourceStatus.READ_ONLY_LOCAL, result.getCode()); // remove the read-only status so test cleanup will work ok - file.setReadOnly(false); + setReadOnly(file, false, apiVersion); } @Test diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTestUtil.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTestUtil.java index 803c23219d9..55fccd5c69f 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTestUtil.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTestUtil.java @@ -773,4 +773,28 @@ public static boolean isLocal(IResource resource, int depth) { return resource.isLocal(depth); } + public enum ReadOnlyApi { + CURRENT, DEPRECATED + } + + @SuppressWarnings("deprecation") + public static void setReadOnly(IResource resource, boolean value, ReadOnlyApi api) throws CoreException { + if (api == ReadOnlyApi.CURRENT) { + ResourceAttributes attributes = new ResourceAttributes(); + attributes.setReadOnly(value); + resource.setResourceAttributes(attributes); + } else { + resource.setReadOnly(value); + } + } + + @SuppressWarnings("deprecation") + public static boolean isReadOnly(IResource resource, ReadOnlyApi api) { + if (api == ReadOnlyApi.CURRENT) { + ResourceAttributes attributes = resource.getResourceAttributes(); + return attributes.isReadOnly(); + } + return resource.isReadOnly(); + } + } diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFileTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFileTest.java index 7a1b4de08b9..07117a5374b 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFileTest.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFileTest.java @@ -19,7 +19,9 @@ import static org.eclipse.core.tests.resources.ResourceTestUtil.createInWorkspace; import static org.eclipse.core.tests.resources.ResourceTestUtil.createRandomContentsStream; import static org.eclipse.core.tests.resources.ResourceTestUtil.createTestMonitor; +import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnly; import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnlySupported; +import static org.eclipse.core.tests.resources.ResourceTestUtil.setReadOnly; import static org.junit.Assume.assumeFalse; import static org.junit.Assume.assumeTrue; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -42,10 +44,13 @@ import org.eclipse.core.runtime.Platform.OS; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.tests.resources.ResourceTestUtil.ReadOnlyApi; import org.eclipse.core.tests.resources.util.WorkspaceResetExtension; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @ExtendWith(WorkspaceResetExtension.class) public class IFileTest { @@ -55,9 +60,10 @@ public class IFileTest { * you try to create a file in a read-only folder on Linux should be * ERROR_WRITE. */ - @Test + @ParameterizedTest + @EnumSource(ReadOnlyApi.class) @Disabled("This test is no longer valid since the error code is dependent on whether or not the parent folder is marked as read-only. We need to write a different test to make the file.create fail.") - public void testBug25658() throws CoreException { + public void testBug25658(ReadOnlyApi apiVersion) throws CoreException { // We need to know whether or not we can unset the read-only flag // in order to perform this test. assumeTrue("only relevant for platforms supporting read-only files", isReadOnlySupported()); @@ -71,13 +77,13 @@ public void testBug25658() throws CoreException { IFile file = folder.getFile("file.txt"); try { - folder.setReadOnly(true); - assertThat(folder).matches(IResource::isReadOnly, "is read only"); + setReadOnly(folder, true, apiVersion); + assertThat(folder).matches(res -> isReadOnly(res, apiVersion), "is read only"); CoreException exception = assertThrows(CoreException.class, () -> file.create(createRandomContentsStream(), true, createTestMonitor())); assertEquals(IResourceStatus.FAILED_WRITE_LOCAL, exception.getStatus().getCode()); } finally { - folder.setReadOnly(false); + setReadOnly(folder, false, apiVersion); } } @@ -86,8 +92,9 @@ public void testBug25658() throws CoreException { * parent to see if it is read-only so we can return a better error code and message * to the user. */ - @Test - public void testBug25662() throws CoreException { + @ParameterizedTest + @EnumSource(ReadOnlyApi.class) + public void testBug25662(ReadOnlyApi apiVersion) throws CoreException { // We need to know whether or not we can unset the read-only flag // in order to perform this test. @@ -103,13 +110,13 @@ public void testBug25662() throws CoreException { IFile file = folder.getFile("file.txt"); try { - folder.setReadOnly(true); - assertThat(folder).matches(IResource::isReadOnly, "is read only"); + setReadOnly(folder, true, apiVersion); + assertThat(folder).matches(res -> isReadOnly(res, apiVersion), "is read only"); CoreException exception = assertThrows(CoreException.class, () -> file.create(createRandomContentsStream(), true, createTestMonitor())); assertEquals(IResourceStatus.PARENT_READ_ONLY, exception.getStatus().getCode()); } finally { - folder.setReadOnly(false); + setReadOnly(folder, false, apiVersion); } } diff --git a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFolderTest.java b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFolderTest.java index 351ea41488b..435c9320e15 100644 --- a/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFolderTest.java +++ b/resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IFolderTest.java @@ -19,7 +19,9 @@ import static org.eclipse.core.tests.resources.ResourceTestUtil.createInFileSystem; import static org.eclipse.core.tests.resources.ResourceTestUtil.createInWorkspace; import static org.eclipse.core.tests.resources.ResourceTestUtil.createTestMonitor; +import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnly; import static org.eclipse.core.tests.resources.ResourceTestUtil.isReadOnlySupported; +import static org.eclipse.core.tests.resources.ResourceTestUtil.setReadOnly; import static org.junit.Assume.assumeTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -35,9 +37,12 @@ import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Platform.OS; +import org.eclipse.core.tests.resources.ResourceTestUtil.ReadOnlyApi; import org.eclipse.core.tests.resources.util.WorkspaceResetExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; @ExtendWith(WorkspaceResetExtension.class) public class IFolderTest { @@ -47,8 +52,9 @@ public class IFolderTest { * the immediate parent to see if it is read-only so we can return a better * error code and message to the user. */ - @Test - public void testBug25662() throws CoreException { + @ParameterizedTest + @EnumSource(ReadOnlyApi.class) + public void testBug25662(ReadOnlyApi apiVersion) throws CoreException { // We need to know whether or not we can unset the read-only flag // in order to perform this test. assumeTrue("only relevant for platforms supporting read-only files", isReadOnlySupported()); @@ -63,12 +69,12 @@ public void testBug25662() throws CoreException { IFolder folder = parentFolder.getFolder("folder"); try { - parentFolder.setReadOnly(true); - assertThat(parentFolder).matches(IResource::isReadOnly, "is read only"); + setReadOnly(parentFolder, true, apiVersion); + assertThat(parentFolder).matches(res -> isReadOnly(res, apiVersion), "is read only"); CoreException exception = assertThrows(CoreException.class, () -> folder.create(true, true, createTestMonitor())); assertEquals(IResourceStatus.PARENT_READ_ONLY, exception.getStatus().getCode()); } finally { - parentFolder.setReadOnly(false); + setReadOnly(parentFolder, false, apiVersion); } }