--- /dev/null 2019-12-03 13:57:48.000000000 -0500 +++ new/test/jdk/tools/jpackage/junit/jdk/incubator/jpackage/internal/DottedVersionTest.java 2019-12-03 13:57:46.162208800 -0500 @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.incubator.jpackage.internal; + +import java.util.Collections; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Stream; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import static org.junit.Assert.*; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class DottedVersionTest { + + public DottedVersionTest(boolean greedy) { + this.greedy = greedy; + if (greedy) { + createTestee = DottedVersion::greedy; + } else { + createTestee = DottedVersion::lazy; + } + } + + @Parameterized.Parameters + public static List data() { + return List.of(new Object[] { true }, new Object[] { false }); + } + + @Rule + public ExpectedException exceptionRule = ExpectedException.none(); + + @Test + public void testValid() { + final List validStrings = List.of( + "1.0", + "1", + "2.234.045", + "2.234.0", + "0", + "0.1" + ); + + final List validLazyStrings; + if (greedy) { + validLazyStrings = Collections.emptyList(); + } else { + validLazyStrings = List.of( + "1.-1", + "5.", + "4.2.", + "3..2", + "2.a", + "0a", + ".", + " ", + " 1", + "1. 2", + "+1", + "-1", + "-0", + "1234567890123456789012345678901234567890" + ); + } + + Stream.concat(validStrings.stream(), validLazyStrings.stream()) + .forEach(value -> { + DottedVersion version = createTestee.apply(value); + assertEquals(version.toString(), value); + }); + } + + @Test + public void testNull() { + exceptionRule.expect(NullPointerException.class); + createTestee.apply(null); + } + + @Test + public void testEmpty() { + if (greedy) { + exceptionRule.expect(IllegalArgumentException.class); + exceptionRule.expectMessage("Version may not be empty string"); + createTestee.apply(""); + } else { + assertTrue(0 == createTestee.apply("").compareTo("")); + assertTrue(0 == createTestee.apply("").compareTo("0")); + } + } + + private final boolean greedy; + private final Function createTestee; +}