1 /*
2  * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /**
25  * @test
26  * @run testng VersionTest
27  * @summary Basic tests for java.lang.module.ModuleDescriptor.Version.
28  */
29 
30 import java.lang.module.ModuleDescriptor.Version;
31 
32 import org.testng.annotations.Test;
33 import org.testng.annotations.DataProvider;
34 import static org.testng.Assert.*;
35 
36 @Test
37 public class VersionTest {
38 
39     // valid version strings
40     @DataProvider(name = "validVersions")
validVersions()41     public Object[][] validVersions() {
42         return new Object[][]{
43 
44             { "1.0",            null },
45             { "1.0.0",          null },
46             { "1.0.0.0",        null },
47 
48             { "99",             null },
49             { "99.99",          null },
50             { "99.99.99",       null },
51 
52             { "1-SNAPSHOT",     null },
53             { "1.0-SNAPSHOT",   null },
54             { "1.0.0-SNAPSHOT", null },
55 
56             { "9-ea",           null },
57             { "9-ea+110",       null },
58             { "9.3.2.1+42-8839942", null}
59 
60         };
61     }
62 
63     // invalid version strings
64     @DataProvider(name = "invalidVersions")
invalidVersions()65     public Object[][] invalidVersions() {
66         return new Object[][]{
67 
68             { null,            null },
69             { "",              null },
70             { "A1",            null },  // does not start with number
71             { "1.0-",          null },  // empty branch
72 
73         };
74     }
75 
76     // Test parsing valid version strings
77     @Test(dataProvider = "validVersions")
testParseValidVersions(String vs, String ignore)78     public void testParseValidVersions(String vs, String ignore) {
79         Version v = Version.parse(vs);
80         assertEquals(v.toString(), vs);
81     }
82 
83     // Test parsing an invalid version strings
84     @Test(dataProvider = "invalidVersions",
85           expectedExceptions = IllegalArgumentException.class )
testParseInvalidVersions(String vs, String ignore)86     public void testParseInvalidVersions(String vs, String ignore) {
87         Version.parse(vs);
88     }
89 
90     // Test equals and hashCode
91     @Test(dataProvider = "validVersions")
testEqualsAndHashCode(String vs, String ignore)92     public void testEqualsAndHashCode(String vs, String ignore) {
93 
94         Version v1 = Version.parse(vs);
95         Version v2 = Version.parse(vs);
96         assertEquals(v1, v2);
97         assertEquals(v2, v1);
98         assertEquals(v1.hashCode(), v2.hashCode());
99 
100         Version v3 = Version.parse("1.0-rhubarb");
101         assertNotEquals(v1, v3);
102         assertNotEquals(v2, v3);
103         assertNotEquals(v3, v1);
104         assertNotEquals(v3, v2);
105 
106     }
107 
108     // ordered version strings
109     @DataProvider(name = "orderedVersions")
orderedVersions()110     public Object[][] orderedVersions() {
111         return new Object[][]{
112 
113             { "1.0",     "2.0" },
114             { "1.0-SNAPSHOT", "1.0" },
115             { "1.0-SNAPSHOT2", "1.0" },
116             { "1.2.3-ea", "1.2.3" },
117             { "1.2.3-ea+104", "1.2.3-ea+105" },
118             { "1.2.3-ea+104-4084552", "1.2.3-ea+104-4084552+8849330" },
119             { "1+104", "1+105" },
120             { "1.0-alpha1", "1.0-alpha2" }
121 
122         };
123     }
124 
125     /**
126      * Test compareTo with ordered versions.
127      */
128     @Test(dataProvider = "orderedVersions")
testCompareOrderedVersions(String vs1, String vs2)129     public void testCompareOrderedVersions(String vs1, String vs2) {
130 
131         Version v1 = Version.parse(vs1);
132         assertTrue(v1.compareTo(v1) == 0);
133 
134         Version v2 = Version.parse(vs2);
135         assertTrue(v2.compareTo(v2) == 0);
136 
137         // v1 < v2
138         assertTrue(v1.compareTo(v2) < 0);
139         assertTrue(v2.compareTo(v1) > 0);
140 
141     }
142 
143     // equal version strings
144     @DataProvider(name = "equalVersions")
equalVersions()145     public Object[][] equalVersions() {
146         return new Object[][]{
147 
148             { "1",             "1.0.0" },
149             { "1.0",           "1.0.0" },
150             { "1.0-beta",      "1.0.0-beta" },
151 
152         };
153     }
154 
155     /**
156      * Test compareTo with equal versions.
157      */
158     @Test(dataProvider = "equalVersions")
testCompareEqualsVersions(String vs1, String vs2)159     public void testCompareEqualsVersions(String vs1, String vs2) {
160 
161         Version v1 = Version.parse(vs1);
162         assertTrue(v1.compareTo(v1) == 0);
163 
164         Version v2 = Version.parse(vs2);
165         assertTrue(v2.compareTo(v2) == 0);
166 
167         assertTrue(v1.compareTo(v2) == 0);
168         assertTrue(v2.compareTo(v1) == 0);
169         assertEquals(v1, v2);
170         assertEquals(v2, v1);
171 
172     }
173 
174 }
175