diff --git a/app/src/processing/app/debug/TargetPlatform.java b/app/src/processing/app/debug/TargetPlatform.java index 2e9b88a39..91e9ef974 100644 --- a/app/src/processing/app/debug/TargetPlatform.java +++ b/app/src/processing/app/debug/TargetPlatform.java @@ -44,6 +44,7 @@ public class TargetPlatform { * Contains preferences for every defined board */ private Map boards = new LinkedHashMap(); + private TargetBoard defaultBoard; /** * Contains preferences for every defined programmer @@ -86,11 +87,16 @@ public class TargetPlatform { boardsPreferences.remove("menu"); // Create boards - for (String id : boardsPreferences.keySet()) { + Set boardIDs = boardsPreferences.keySet(); + for (String id : boardIDs) { PreferencesMap preferences = boardsPreferences.get(id); TargetBoard board = new TargetBoard(id, preferences, this); boards.put(id, board); } + if (!boardIDs.isEmpty()) { + PreferencesMap preferences = boardsPreferences.get(boardIDs.iterator().next()); + defaultBoard = new TargetBoard(id, preferences, this); + } } catch (IOException e) { throw new TargetPlatformException(format(_("Error loading {0}"), boardsFile.getAbsolutePath()), e); @@ -156,7 +162,10 @@ public class TargetPlatform { } public TargetBoard getBoard(String boardId) { - return boards.get(boardId); + if (boards.containsKey(boardId)) { + return boards.get(boardId); + } + return defaultBoard; } public TargetPackage getContainerPackage() { diff --git a/app/test/processing/app/AbstractWithPreferencesTest.java b/app/test/processing/app/AbstractWithPreferencesTest.java index dd2946eeb..ca07ec385 100644 --- a/app/test/processing/app/AbstractWithPreferencesTest.java +++ b/app/test/processing/app/AbstractWithPreferencesTest.java @@ -1,12 +1,17 @@ package processing.app; -import org.junit.BeforeClass; +import org.junit.Before; public abstract class AbstractWithPreferencesTest { - @BeforeClass - public static void init() throws Exception { + @Before + public void init() throws Exception { Base.initPlatform(); Preferences.init(null); + Theme.init(); + + Base.untitledFolder = Base.createTempFolder("untitled"); + Base.untitledFolder.deleteOnExit(); + } } diff --git a/app/test/processing/app/DefaultTargetTest.java b/app/test/processing/app/DefaultTargetTest.java new file mode 100644 index 000000000..f019e9f80 --- /dev/null +++ b/app/test/processing/app/DefaultTargetTest.java @@ -0,0 +1,35 @@ +package processing.app; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import processing.app.debug.TargetBoard; + +import static org.junit.Assert.assertNotEquals; + +public class DefaultTargetTest extends AbstractWithPreferencesTest { + + private String oldBoardID; + + @Before + public void saveBoardFromPreferences() throws Exception { + oldBoardID = Preferences.get("board"); + } + + @After + public void restoreBoardIntoPreferences() throws Exception { + Preferences.set("board", oldBoardID); + Preferences.save(); + } + + @Test + public void testDefaultTarget() throws Exception { + Preferences.set("board", "unreal_board"); + + // should not raise an exception + new Base(new String[0]); + + TargetBoard targetBoard = Base.getTargetBoard(); + assertNotEquals("unreal_board", targetBoard.getId()); + } +}