Ticket #16567: 16567.initial_extensions.patch
| File 16567.initial_extensions.patch, 16.6 KB (added by , 5 years ago) |
|---|
-
test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
60 60 import org.openstreetmap.josm.io.OsmTransferCanceledException; 61 61 import org.openstreetmap.josm.spi.preferences.Config; 62 62 import org.openstreetmap.josm.spi.preferences.Setting; 63 import org.openstreetmap.josm.testutils.annotations.UseJosmHome; 64 import org.openstreetmap.josm.testutils.annotations.UsePreferences; 63 65 import org.openstreetmap.josm.testutils.mockers.EDTAssertionMocker; 64 66 import org.openstreetmap.josm.testutils.mockers.WindowlessMapViewStateMocker; 65 67 import org.openstreetmap.josm.testutils.mockers.WindowlessNavigatableComponentMocker; … … 134 136 /** 135 137 * Enable the use of default preferences. 136 138 * @return this instance, for easy chaining 139 * @deprecated Use {@link UsePreferences} instead. 137 140 */ 141 @Deprecated 138 142 public JOSMTestRules preferences() { 139 143 josmHome(); 140 144 usePreferences = true; … … 144 148 /** 145 149 * Set JOSM home to a valid, empty directory. 146 150 * @return this instance, for easy chaining 151 * @deprecated Use {@link UseJosmHome} instead. 147 152 */ 153 @Deprecated 148 154 private JOSMTestRules josmHome() { 149 155 josmHome = new TemporaryFolder(); 150 156 return this; … … 172 178 * Mock this test's assumed JOSM version (as reported by {@link Version}). 173 179 * @param revisionProperties mock contents of JOSM's {@code REVISION} properties file 174 180 * @return this instance, for easy chaining 181 * @deprecated Use {@link OverrideAssumeRevision} instead. 175 182 */ 183 @Deprecated 176 184 public JOSMTestRules assumeRevision(final String revisionProperties) { 177 185 this.assumeRevisionString = revisionProperties; 178 186 return this; … … 397 405 return this; 398 406 } 399 407 400 private static class MockVersion extends Version { 401 MockVersion(final String propertiesString) { 408 /* 409 * Mock the JOSM version. This should only be used in JOSM Core test extensions. 410 */ 411 public static class MockVersion extends Version { 412 public MockVersion(final String propertiesString) { 402 413 super.initFromRevisionInfo( 403 414 new ByteArrayInputStream(propertiesString.getBytes(StandardCharsets.UTF_8)) 404 415 ); … … 409 420 public Statement apply(Statement base, Description description) { 410 421 // First process any Override* annotations for per-test overrides. 411 422 // The following only work because "option" methods modify JOSMTestRules in-place 412 finalOverrideAssumeRevision overrideAssumeRevision = description.getAnnotation(OverrideAssumeRevision.class);423 OverrideAssumeRevision overrideAssumeRevision = description.getAnnotation(OverrideAssumeRevision.class); 413 424 if (overrideAssumeRevision != null) { 414 425 this.assumeRevision(overrideAssumeRevision.value()); 415 426 } … … 790 801 /** 791 802 * Override this test's assumed JOSM version (as reported by {@link Version}). 792 803 * @see JOSMTestRules#assumeRevision(String) 804 * @deprecated Use {@link org.openstreetmap.josm.testutils.annotations.OverrideAssumeRevision} 805 * when using JUnit 5 Extensions. 793 806 */ 794 807 @Documented 795 808 @Retention(RetentionPolicy.RUNTIME) 796 809 @Target(ElementType.METHOD) 797 public @interface OverrideAssumeRevision { 810 @Deprecated 811 public @interface OverrideAssumeRevision { 798 812 /** 799 813 * Returns overridden assumed JOSM version. 800 814 * @return overridden assumed JOSM version -
test/unit/org/openstreetmap/josm/testutils/annotations/BasicPreferences.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.annotations; 3 4 import java.lang.annotation.Documented; 5 import java.lang.annotation.ElementType; 6 import java.lang.annotation.Retention; 7 import java.lang.annotation.RetentionPolicy; 8 import java.lang.annotation.Target; 9 10 import org.junit.jupiter.api.extension.ExtendWith; 11 import org.openstreetmap.josm.testutils.JOSMTestRules; 12 import org.openstreetmap.josm.testutils.extensions.BasicPreferencesExtension; 13 14 /** 15 * Allow tests to use JOSM preferences (see {@link JOSMTestRules#preferences()}) 16 * @author Taylor Smock 17 */ 18 @Documented 19 @Retention(RetentionPolicy.RUNTIME) 20 @Target({ElementType.METHOD, ElementType.TYPE}) 21 @ExtendWith(BasicPreferencesExtension.class) 22 public @interface BasicPreferences { 23 } -
test/unit/org/openstreetmap/josm/testutils/annotations/OverrideAssumeRevision.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.annotations; 3 4 import java.lang.annotation.Documented; 5 import java.lang.annotation.ElementType; 6 import java.lang.annotation.Retention; 7 import java.lang.annotation.RetentionPolicy; 8 import java.lang.annotation.Target; 9 10 import org.openstreetmap.josm.data.Version; 11 import org.openstreetmap.josm.testutils.JOSMTestRules; 12 13 14 /** 15 * Override this test's assumed JOSM version (as reported by {@link Version}). 16 * @see JOSMTestRules#assumeRevision(String) 17 */ 18 @Documented 19 @Retention(RetentionPolicy.RUNTIME) 20 @Target({ElementType.METHOD, ElementType.TYPE}) 21 public @interface OverrideAssumeRevision { 22 /** 23 * Returns overridden assumed JOSM version. 24 * @return overridden assumed JOSM version 25 */ 26 String value(); 27 } -
test/unit/org/openstreetmap/josm/testutils/annotations/UseJosmHome.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.annotations; 3 4 import java.lang.annotation.Documented; 5 import java.lang.annotation.ElementType; 6 import java.lang.annotation.Retention; 7 import java.lang.annotation.RetentionPolicy; 8 import java.lang.annotation.Target; 9 10 import org.junit.jupiter.api.extension.ExtendWith; 11 import org.openstreetmap.josm.testutils.JOSMTestRules; 12 import org.openstreetmap.josm.testutils.extensions.UseJosmHomeExtension; 13 14 /** 15 * Use the JOSM home directory. See {@link JOSMTestRules}. 16 * Typically only used by {@link UsePreferences}. 17 * 18 * @author Taylor Smock 19 * 20 */ 21 @Documented 22 @Retention(RetentionPolicy.RUNTIME) 23 @Target({ElementType.METHOD, ElementType.TYPE}) 24 @ExtendWith(UseJosmHomeExtension.class) 25 public @interface UseJosmHome { 26 } -
test/unit/org/openstreetmap/josm/testutils/annotations/UsePreferences.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.annotations; 3 4 import java.lang.annotation.Documented; 5 import java.lang.annotation.ElementType; 6 import java.lang.annotation.Retention; 7 import java.lang.annotation.RetentionPolicy; 8 import java.lang.annotation.Target; 9 10 import org.junit.jupiter.api.extension.ExtendWith; 11 import org.openstreetmap.josm.testutils.JOSMTestRules; 12 import org.openstreetmap.josm.testutils.extensions.UsePreferencesExtension; 13 14 /** 15 * Allow tests to use JOSM preferences (see {@link JOSMTestRules#preferences()}) 16 * @see BasicPreferences (often enough for simple tests). 17 * 18 * @author Taylor Smock 19 */ 20 @Documented 21 @Retention(RetentionPolicy.RUNTIME) 22 @Target({ElementType.METHOD, ElementType.TYPE}) 23 @UseJosmHome 24 @BasicPreferences 25 @ExtendWith(UsePreferencesExtension.class) 26 public @interface UsePreferences { 27 28 } -
test/unit/org/openstreetmap/josm/testutils/extensions/BasicPreferencesExtension.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.extensions; 3 4 import org.junit.jupiter.api.extension.BeforeAllCallback; 5 import org.junit.jupiter.api.extension.ExtensionContext; 6 import org.junit.jupiter.api.extension.ExtensionContext.Namespace; 7 import org.openstreetmap.josm.data.Preferences; 8 import org.openstreetmap.josm.data.preferences.JosmBaseDirectories; 9 import org.openstreetmap.josm.data.preferences.JosmUrls; 10 import org.openstreetmap.josm.spi.preferences.Config; 11 import org.openstreetmap.josm.testutils.annotations.BasicPreferences; 12 import org.openstreetmap.josm.testutils.annotations.UsePreferences; 13 14 /** 15 * Initialize basic preferences. This is often more than enough for basic tests. Use {@link BasicPreferences}. 16 * @see UsePreferences if {@link BasicPreferences} does not work. 17 * @author Taylor Smock 18 * 19 */ 20 public class BasicPreferencesExtension implements BeforeAllCallback { 21 22 @Override 23 public void beforeAll(ExtensionContext context) throws Exception { 24 Preferences pref = Preferences.main(); 25 Config.setPreferencesInstance(pref); 26 Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance()); 27 Config.setUrlsProvider(JosmUrls.getInstance()); 28 context.getStore(Namespace.create(BasicPreferencesExtension.class)).put("preferences", pref); 29 } 30 31 } -
test/unit/org/openstreetmap/josm/testutils/extensions/OverrideAssumeRevisionExtension.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.extensions; 3 4 import java.util.Optional; 5 6 import org.junit.jupiter.api.extension.AfterEachCallback; 7 import org.junit.jupiter.api.extension.BeforeEachCallback; 8 import org.junit.jupiter.api.extension.ExtensionContext; 9 import org.junit.jupiter.api.extension.ExtensionContext.Namespace; 10 import org.junit.jupiter.api.extension.ExtensionContext.Store; 11 import org.junit.platform.commons.support.AnnotationSupport; 12 import org.openstreetmap.josm.TestUtils; 13 import org.openstreetmap.josm.data.Version; 14 import org.openstreetmap.josm.testutils.JOSMTestRules; 15 import org.openstreetmap.josm.testutils.annotations.OverrideAssumeRevision; 16 17 /** 18 * Override the JOSM revision information. Use {@link OverrideAssumeRevision} instead of directly using this extension. 19 * @author Taylor Smock 20 * 21 */ 22 public class OverrideAssumeRevisionExtension implements BeforeEachCallback, AfterEachCallback { 23 24 @Override 25 public void afterEach(ExtensionContext context) throws Exception { 26 Store store = context.getStore(Namespace.create(OverrideAssumeRevisionExtension.class)); 27 String originalVersion = store.getOrDefault(store, String.class, null); 28 if (originalVersion != null) { 29 TestUtils.setPrivateStaticField(Version.class, "instance", originalVersion); 30 } 31 } 32 33 @Override 34 public void beforeEach(ExtensionContext context) throws Exception { 35 Optional<OverrideAssumeRevision> annotation = AnnotationSupport.findAnnotation(context.getElement(), OverrideAssumeRevision.class); 36 if (annotation.isPresent()) { 37 Store store = context.getStore(Namespace.create(OverrideAssumeRevisionExtension.class)); 38 store.put("originalVersion", Version.getInstance()); 39 final Version replacementVersion = new JOSMTestRules.MockVersion(annotation.get().value()); 40 TestUtils.setPrivateStaticField(Version.class, "instance", replacementVersion); 41 } 42 } 43 } -
test/unit/org/openstreetmap/josm/testutils/extensions/UseJosmHomeExtension.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.extensions; 3 4 import java.io.File; 5 import java.io.IOException; 6 import java.nio.file.FileVisitResult; 7 import java.nio.file.Files; 8 import java.nio.file.Path; 9 import java.nio.file.SimpleFileVisitor; 10 import java.nio.file.attribute.BasicFileAttributes; 11 12 import org.junit.jupiter.api.extension.AfterAllCallback; 13 import org.junit.jupiter.api.extension.BeforeAllCallback; 14 import org.junit.jupiter.api.extension.ExtensionContext; 15 import org.openstreetmap.josm.data.preferences.JosmBaseDirectories; 16 import org.openstreetmap.josm.testutils.annotations.UseJosmHome; 17 18 /** 19 * Create a JOSM home directory. Prefer using {@link UseJosmHome}. 20 * @author Taylor Smock 21 */ 22 public class UseJosmHomeExtension implements BeforeAllCallback, AfterAllCallback { 23 24 @Override 25 public void afterAll(ExtensionContext context) throws Exception { 26 Path tempDir = Files.createTempDirectory(context.getUniqueId()); 27 Files.walkFileTree(tempDir, new SimpleFileVisitor<Path>() { 28 @Override 29 public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { 30 Files.delete(dir); 31 return FileVisitResult.CONTINUE; 32 } 33 34 @Override 35 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 36 Files.delete(file); 37 return FileVisitResult.CONTINUE; 38 } 39 }); 40 } 41 42 @Override 43 public void beforeAll(ExtensionContext context) throws Exception { 44 Path tempDir = Files.createTempDirectory(context.getUniqueId()); 45 File home = tempDir.toFile(); 46 System.setProperty("josm.home", home.getAbsolutePath()); 47 JosmBaseDirectories.getInstance().clearMemos(); 48 } 49 50 } -
test/unit/org/openstreetmap/josm/testutils/extensions/UsePreferencesExtension.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.testutils.extensions; 3 4 import java.util.Map; 5 6 import org.junit.jupiter.api.extension.BeforeEachCallback; 7 import org.junit.jupiter.api.extension.ExtensionContext; 8 import org.junit.jupiter.api.extension.ExtensionContext.Namespace; 9 import org.openstreetmap.josm.TestUtils; 10 import org.openstreetmap.josm.data.Preferences; 11 import org.openstreetmap.josm.spi.preferences.Config; 12 import org.openstreetmap.josm.spi.preferences.Setting; 13 import org.openstreetmap.josm.testutils.annotations.UsePreferences; 14 /** 15 * Initialize preferences. Prefer {@link UsePreferences}. 16 * @author Taylor Smock 17 * 18 */ 19 public class UsePreferencesExtension implements BeforeEachCallback { 20 @Override 21 public void beforeEach(ExtensionContext context) throws Exception { 22 Preferences pref = context.getStore(Namespace.create(BasicPreferencesExtension.class)).get("preferences", Preferences.class); 23 @SuppressWarnings("unchecked") 24 final Map<String, Setting<?>> defaultsMap = (Map<String, Setting<?>>) TestUtils.getPrivateField(pref, "defaultsMap"); 25 defaultsMap.clear(); 26 pref.resetToInitialState(); 27 pref.enableSaveOnPut(false); 28 // No pref init -> that would only create the preferences file. 29 // We force the use of a wrong API server, just in case anyone attempts an upload 30 Config.getPref().put("osm-server.url", "http://invalid"); 31 } 32 33 }
