Index: trunk/test/unit/org/openstreetmap/josm/actions/AddImageryLayerActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/AddImageryLayerActionTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/actions/AddImageryLayerActionTest.java	(revision 12557)
@@ -2,4 +2,8 @@
 package org.openstreetmap.josm.actions;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -10,7 +14,11 @@
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.gui.layer.WMSLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -30,4 +38,10 @@
 
     /**
+     * HTTP mock.
+     */
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()));
+
+    /**
      * Unit test of {@link AddImageryLayerAction#updateEnabledState}.
      */
@@ -45,5 +59,5 @@
      */
     @Test
-    public void testActionPerformedEnabled() {
+    public void testActionPerformedEnabledTms() {
         assertTrue(Main.getLayerManager().getLayersOfType(TMSLayer.class).isEmpty());
         new AddImageryLayerAction(new ImageryInfo("foo_tms", "http://bar", "tms", null, null)).actionPerformed(null);
@@ -51,4 +65,22 @@
         assertEquals(1, tmsLayers.size());
         Main.getLayerManager().removeLayer(tmsLayers.get(0));
+    }
+
+    /**
+     * Unit test of {@link AddImageryLayerAction#actionPerformed} - Enabled cases for WMS.
+     */
+    @Test
+    public void testActionPerformedEnabledWms() {
+        wireMockRule.stubFor(get(urlEqualTo("/wms?VERSION=1.1.1&SERVICE=WMS&REQUEST=GetCapabilities"))
+                .willReturn(aResponse()
+                    .withStatus(200)
+                    .withHeader("Content-Type", "text/xml")
+                    .withBodyFile("imagery/wms-capabilities.xml")));
+        new AddImageryLayerAction(new ImageryInfo("localhost", "http://localhost:" + wireMockRule.port() + "/wms?",
+                "wms_endpoint", null, null)).actionPerformed(null);
+        List<WMSLayer> wmsLayers = Main.getLayerManager().getLayersOfType(WMSLayer.class);
+        assertEquals(1, wmsLayers.size());
+
+        Main.getLayerManager().removeLayer(wmsLayers.get(0));
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/actions/AddImageryLayerActionTestIT.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/AddImageryLayerActionTestIT.java	(revision 12556)
+++ 	(revision )
@@ -1,42 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.actions;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.List;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.imagery.ImageryInfo;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Unit tests for class {@link AddImageryLayerAction}.
- */
-public final class AddImageryLayerActionTestIT {
-    /**
-     * We need prefs for this. We need platform for actions and the OSM API for checking blacklist.
-     * The timeout is set to default httpclient read timeout + connect timeout + a small delay to ignore
-     * common but harmless network issues.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences().platform().fakeAPI().timeout(45500);
-
-    /**
-     * Integration test of {@link AddImageryLayerAction#actionPerformed} - Enabled cases for WMS.
-     */
-    @Test
-    public void testActionPerformedEnabledWms() {
-        new AddImageryLayerAction(new ImageryInfo("wms.openstreetmap.fr", "http://wms.openstreetmap.fr/wms?",
-                "wms_endpoint", null, null)).actionPerformed(null);
-        List<WMSLayer> wmsLayers = Main.getLayerManager().getLayersOfType(WMSLayer.class);
-        assertEquals(1, wmsLayers.size());
-
-        Main.getLayerManager().removeLayer(wmsLayers.get(0));
-    }
-}
Index: trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTaskTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTaskTest.java	(revision 12557)
+++ trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTaskTest.java	(revision 12557)
@@ -0,0 +1,59 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions.downloadtasks;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+
+import org.junit.Rule;
+import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Superclass of {@link DownloadGpsTaskTest}, {@link DownloadOsmTaskTest} and {@link DownloadNotesTaskTest}.
+ */
+public abstract class AbstractDownloadTaskTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().https();
+
+    /**
+     * HTTP mock.
+     */
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()));
+
+    /**
+     * Returns the path to remote test file to download via http.
+     * @return the path to remote test file, relative to JOSM root directory
+     */
+    protected abstract String getRemoteFile();
+
+    /**
+     * Returns the http URL to remote test file to download.
+     * @return the http URL to remote test file to download
+     */
+    protected final String getRemoteFileUrl() {
+        return "http://localhost:" + wireMockRule.port() + "/" + getRemoteFile();
+    }
+
+    /**
+     * Mock the HTTP server.
+     */
+    protected final void mockHttp() {
+        wireMockRule.stubFor(get(urlEqualTo("/" + getRemoteFile()))
+                .willReturn(aResponse()
+                    .withStatus(200)
+                    .withHeader("Content-Type", "text/xml")
+                    .withBodyFile(getRemoteFile())));
+    }
+}
Index: trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTaskTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTaskTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTaskTest.java	(revision 12557)
@@ -8,24 +8,11 @@
 import java.util.concurrent.ExecutionException;
 
-import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.gpx.GpxData;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests for class {@link DownloadGpsTask}.
  */
-public class DownloadGpsTaskTest {
-
-    private static final String REMOTE_FILE = "https://josm.openstreetmap.de/export/head/josm/trunk/data_nodist/munich.gpx";
-
-    /**
-     * Setup test.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().https();
+public class DownloadGpsTaskTest extends AbstractDownloadTaskTest {
 
     /**
@@ -45,5 +32,5 @@
         assertTrue(task.acceptsUrl("https://www.openstreetmap.org/edit?gpx=750057"));
         assertTrue(task.acceptsUrl("http://www.openstreetmap.org/edit?gpx=2277313#map=14/-20.7321/-40.5328"));
-        assertTrue(task.acceptsUrl(REMOTE_FILE));
+        assertTrue(task.acceptsUrl(getRemoteFileUrl()));
     }
 
@@ -55,6 +42,7 @@
     @Test
     public void testDownloadExternalFile() throws InterruptedException, ExecutionException {
+        mockHttp();
         DownloadGpsTask task = new DownloadGpsTask();
-        task.loadUrl(false, REMOTE_FILE, null).get();
+        task.loadUrl(false, getRemoteFileUrl(), null).get();
         GpxData data = task.getDownloadedData();
         assertNotNull(data);
@@ -62,3 +50,8 @@
         assertFalse(data.tracks.isEmpty());
     }
+
+    @Override
+    protected String getRemoteFile() {
+        return "samples/data.gpx";
+    }
 }
Index: trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTaskTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTaskTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTaskTest.java	(revision 12557)
@@ -8,24 +8,11 @@
 import java.util.concurrent.ExecutionException;
 
-import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.osm.NoteData;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests for class {@link DownloadNotesTask}.
  */
-public class DownloadNotesTaskTest {
-
-    private static final String REMOTE_FILE = "https://josm.openstreetmap.de/export/head/josm/trunk/test/data/planet-notes-extract.osn";
-
-    /**
-     * Setup test.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform().https();
+public class DownloadNotesTaskTest extends AbstractDownloadTaskTest {
 
     /**
@@ -41,5 +28,5 @@
         assertTrue(task.acceptsUrl("http://api.openstreetmap.org/api/0.6/notes.xml?bbox=-0.65094,51.312159,0.374908,51.669148"));
         assertTrue(task.acceptsUrl("http://api.openstreetmap.org/api/0.6/notes.gpx?bbox=-0.65094,51.312159,0.374908,51.669148"));
-        assertTrue(task.acceptsUrl(REMOTE_FILE));
+        assertTrue(task.acceptsUrl(getRemoteFileUrl()));
     }
 
@@ -51,9 +38,15 @@
     @Test
     public void testDownloadExternalFile() throws InterruptedException, ExecutionException {
+        mockHttp();
         DownloadNotesTask task = new DownloadNotesTask();
-        task.loadUrl(false, REMOTE_FILE, null).get();
+        task.loadUrl(false, getRemoteFileUrl(), null).get();
         NoteData data = task.getDownloadedData();
         assertNotNull(data);
         assertFalse(data.getNotes().isEmpty());
     }
+
+    @Override
+    protected String getRemoteFile() {
+        return "samples/data.osn";
+    }
 }
Index: trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskTest.java	(revision 12557)
@@ -8,24 +8,11 @@
 import java.util.concurrent.ExecutionException;
 
-import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
  * Unit tests for class {@link DownloadOsmTask}.
  */
-public class DownloadOsmTaskTest {
-
-    private static final String REMOTE_FILE = "https://josm.openstreetmap.de/export/head/josm/trunk/data_nodist/direction-arrows.osm";
-
-    /**
-     * Setup test.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().https();
+public class DownloadOsmTaskTest extends AbstractDownloadTaskTest {
 
     /**
@@ -43,5 +30,5 @@
         assertTrue(task.acceptsUrl("http://api.openstreetmap.org/api/0.6/ways?ways=101,102,103"));
         assertTrue(task.acceptsUrl("http://api.openstreetmap.org/api/0.6/relations?relations=101,102,103"));
-        assertTrue(task.acceptsUrl(REMOTE_FILE));
+        assertTrue(task.acceptsUrl(getRemoteFileUrl()));
     }
 
@@ -53,6 +40,7 @@
     @Test
     public void testDownloadExternalFile() throws InterruptedException, ExecutionException {
+        mockHttp();
         DownloadOsmTask task = new DownloadOsmTask();
-        task.loadUrl(false, REMOTE_FILE, null).get();
+        task.loadUrl(false, getRemoteFileUrl(), null).get();
         DataSet ds = task.getDownloadedData();
         assertNotNull(ds);
@@ -60,3 +48,8 @@
         assertFalse(ds.getWays().isEmpty());
     }
+
+    @Override
+    protected String getRemoteFile() {
+        return "samples/data.osm";
+    }
 }
Index: trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java	(revision 12557)
@@ -2,4 +2,8 @@
 package org.openstreetmap.josm.gui;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
 import static org.junit.Assert.assertEquals;
 
@@ -10,7 +14,6 @@
 import java.util.List;
 
-import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -24,5 +27,8 @@
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.xml.sax.SAXException;
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -34,10 +40,15 @@
 
     /**
-     * Setup tests
+     * Setup test.
      */
-    @BeforeClass
-    public static void setUpBeforeClass() {
-        JOSMFixture.createUnitTestFixture().init();
-    }
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().platform();
+
+    /**
+     * HTTP mock.
+     */
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()));
 
     /**
@@ -50,6 +61,11 @@
     @SuppressFBWarnings(value = "ITA_INEFFICIENT_TO_ARRAY")
     public void testTicket9632() throws IllegalDataException, IOException, SAXException {
-        String source = "http://josm.openstreetmap.de/josmfile?page=Presets/BicycleJunction&amp;preset";
-        TaggingPresets.addTaggingPresets(TaggingPresetReader.readAll(source, true));
+        String source = "presets/Presets_BicycleJunction-preset.xml";
+        wireMockRule.stubFor(get(urlEqualTo("/" + source))
+                .willReturn(aResponse()
+                    .withStatus(200)
+                    .withHeader("Content-Type", "text/xml")
+                    .withBodyFile(source)));
+        TaggingPresets.addTaggingPresets(TaggingPresetReader.readAll("http://localhost:" + wireMockRule.port() + "/" + source, true));
 
         Comparator<Relation> comparator = DefaultNameFormatter.getInstance().getRelationComparator();
Index: trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTest.java	(revision 12557)
@@ -4,6 +4,11 @@
 import static org.junit.Assert.assertNotNull;
 
+import java.io.File;
+import java.util.Arrays;
+
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.gui.preferences.PreferencesTestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -21,5 +26,5 @@
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().platform().commands();
+    public JOSMTestRules test = new JOSMTestRules().platform().mainMenu();
 
     /**
@@ -36,4 +41,6 @@
     @Test
     public void testAddGui() {
+        String fileUrl = new File(TestUtils.getTestDataRoot()+"__files/imagery/maps.xml").toURI().toString();
+        Main.pref.putCollection("imagery.layers.sites", Arrays.asList(fileUrl));
         PreferencesTestUtils.doTestPreferenceSettingAddGui(new ImageryPreference.Factory(), null);
     }
Index: trunk/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java	(revision 12557)
@@ -2,4 +2,8 @@
 package org.openstreetmap.josm.io;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -7,12 +11,15 @@
 import java.util.regex.Matcher;
 
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.io.OverpassDownloadReader.OverpassOutpoutFormat;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 import org.openstreetmap.josm.tools.OverpassTurboQueryWizard;
 import org.openstreetmap.josm.tools.Utils;
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -28,9 +35,25 @@
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().timeout(15000);
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+
+    /**
+     * HTTP mock.
+     */
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()));
+
+    private static final String NOMINATIM_URL_PATH = "/search?format=xml&q=";
+
+    /**
+     * Setup test.
+     */
+    @Before
+    public void setUp() {
+        NameFinder.NOMINATIM_URL_PROP.put("http://localhost:" + wireMockRule.port() + NOMINATIM_URL_PATH);
+    }
 
     private String getExpandedQuery(String search) {
         final String query = OverpassTurboQueryWizard.getInstance().constructQuery(search);
-        final String request = new OverpassDownloadReader(new Bounds(1, 2, 3, 4), OverpassServerPreference.getOverpassServer(), query)
+        final String request = new OverpassDownloadReader(new Bounds(1, 2, 3, 4), null, query)
                 .getRequestForBbox(1, 2, 3, 4)
                 .substring("interpreter?data=".length());
@@ -55,4 +78,12 @@
     }
 
+    private void stubNominatim(String query) {
+        wireMockRule.stubFor(get(urlEqualTo(NOMINATIM_URL_PATH + query))
+                .willReturn(aResponse()
+                    .withStatus(200)
+                    .withHeader("Content-Type", "text/xml")
+                    .withBodyFile("nominatim/" + query + ".xml")));
+    }
+
     /**
      * Tests evaluating the extended query feature {@code geocodeArea}.
@@ -60,4 +91,5 @@
     @Test
     public void testGeocodeArea() {
+        stubNominatim("London");
         final String query = getExpandedQuery("amenity=drinking_water in London");
         assertEquals("" +
@@ -78,4 +110,5 @@
     @Test
     public void testGeocodeUnknownArea() {
+        stubNominatim("foo-bar-baz-does-not-exist");
         final String query = OverpassDownloadReader.expandExtendedQueries("{{geocodeArea:foo-bar-baz-does-not-exist}}");
         assertEquals("// Failed to evaluate {{geocodeArea:foo-bar-baz-does-not-exist}}\n", query);
Index: trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java	(revision 12556)
+++ trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java	(revision 12557)
@@ -17,4 +17,6 @@
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
 import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -55,4 +57,6 @@
     private boolean territories;
     private boolean rlTraffic;
+    private boolean main;
+    private boolean mainMenu;
 
     /**
@@ -205,4 +209,25 @@
     public JOSMTestRules rlTraffic() {
         rlTraffic = true;
+        return this;
+    }
+
+    /**
+     * Use the {@link Main#main} application in this test.
+     * @return this instance, for easy chaining
+     * @since xxx
+     */
+    public JOSMTestRules main() {
+        main = true;
+        return this;
+    }
+
+    /**
+     * Use the {@link Main#menu} in this test.
+     * @return this instance, for easy chaining
+     * @since xxx
+     */
+    public JOSMTestRules mainMenu() {
+        main();
+        mainMenu = true;
         return this;
     }
@@ -311,4 +336,14 @@
             // TODO: Implement a more selective version of this once Main is restructured.
             JOSMFixture.createUnitTestFixture().init(true);
+        } else {
+            if (main) {
+                new MainApplication();
+            }
+
+            if (mainMenu) {
+                JOSMFixture.initContentPane();
+                JOSMFixture.initToolbar();
+                Main.main.menu = new MainMenu();
+            }
         }
     }
