diff --git a/app/test/cc/arduino/contributions/VersionHelperTest.java b/app/test/cc/arduino/contributions/VersionHelperTest.java new file mode 100644 index 000000000..fecbcb8a8 --- /dev/null +++ b/app/test/cc/arduino/contributions/VersionHelperTest.java @@ -0,0 +1,57 @@ +/* + * This file is part of Arduino. + * + * Copyright 2016 Arduino LLC (http://www.arduino.cc/) + * + * Arduino is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * As a special exception, you may use this file as part of a free software + * library without restriction. Specifically, if other files instantiate + * templates or use macros or inline functions from this file, or you compile + * this file and link it with other files to produce an executable, this + * file does not by itself cause the resulting executable to be covered by + * the GNU General Public License. This exception does not however + * invalidate any other reasons why the executable file might be covered by + * the GNU General Public License. + */ + +package cc.arduino.contributions; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class VersionHelperTest { + + @Test + public void testVersions() throws Exception { + assertEquals("1.0.0", VersionHelper.valueOf("1.0.0").toString()); + assertEquals("1.0.0", VersionHelper.valueOf("1.0").toString()); + assertEquals("1.0.0", VersionHelper.valueOf("1").toString()); + assertEquals("1.0.0-abc", VersionHelper.valueOf("1.0.0-abc").toString()); + assertEquals("1.0.0-abc", VersionHelper.valueOf("1.0-abc").toString()); + assertEquals("1.0.0-abc", VersionHelper.valueOf("1-abc").toString()); + assertEquals("1.0.0+abc", VersionHelper.valueOf("1.0.0+abc").toString()); + assertEquals("1.0.0+abc", VersionHelper.valueOf("1.0+abc").toString()); + assertEquals("1.0.0+abc", VersionHelper.valueOf("1+abc").toString()); + assertEquals("1.0.0-def+abc", VersionHelper.valueOf("1.0.0-def+abc").toString()); + assertEquals("1.0.0-def+abc", VersionHelper.valueOf("1.0-def+abc").toString()); + assertEquals("1.0.0-def+abc", VersionHelper.valueOf("1-def+abc").toString()); + assertEquals("1.0.0+def-abc", VersionHelper.valueOf("1.0.0+def-abc").toString()); + assertEquals("1.0.0+def-abc", VersionHelper.valueOf("1.0+def-abc").toString()); + assertEquals("1.0.0+def-abc", VersionHelper.valueOf("1+def-abc").toString()); + } + +} diff --git a/arduino-core/src/cc/arduino/contributions/VersionHelper.java b/arduino-core/src/cc/arduino/contributions/VersionHelper.java index 39f4b923a..0f108aed5 100644 --- a/arduino-core/src/cc/arduino/contributions/VersionHelper.java +++ b/arduino-core/src/cc/arduino/contributions/VersionHelper.java @@ -38,20 +38,26 @@ public class VersionHelper { return null; } try { - if (ver.contains("-")) { - // Strip snapshot info - ver = ver.split("-")[0]; + // Allow x.y-something, assuming x.y.0-something + // Allow x-something, assuming x.0.0-something + String version = ver; + String extra = ""; + String split[] = ver.split("[+-]", 2); + if (split.length == 2) { + version = split[0]; + extra = ver.substring(version.length()); // includes separator + or - } - String[] verParts = ver.split("\\."); - if (verParts.length < 3) { - if (verParts.length == 2) { - return Version.forIntegers(Integer.valueOf(verParts[0]), Integer.valueOf(verParts[1])); - } else { - return Version.forIntegers(Integer.valueOf(verParts[0])); - } - } else { + String[] parts = version.split("\\."); + if (parts.length >= 3) { return Version.valueOf(ver); } + if (parts.length == 2) { + version += ".0"; + } + if (parts.length == 1) { + version += ".0.0"; + } + return Version.valueOf(version + extra); } catch (Exception e) { System.err.println("Invalid version found: " + ver); return null;