1 package com.atlassian.plugin.util;
2
3
4 import org.junit.Test;
5
6 import static org.junit.Assert.assertEquals;
7 import static org.junit.Assert.assertFalse;
8 import static org.junit.Assert.assertTrue;
9
10 public class TestVersionStringComparator {
11
12 private final VersionStringComparator comparator = new VersionStringComparator();
13
14 @Test
15 public void testIntegers() {
16 assertSecondGreater("0", "1");
17 assertSecondGreater("1", "2");
18 assertSecondGreater("75", "1000");
19 }
20
21 @Test
22 public void testOneDot() {
23 assertSecondGreater("0.1", "0.2");
24 assertSecondGreater("0.9", "1.0");
25 assertSecondGreater("1.1", "1.10");
26 assertSecondGreater("1.1", "1.19");
27 assertSecondGreater("3.75", "4.19");
28 assertSecondGreater("0.1", "1");
29 assertSecondGreater("0.9", "1");
30 }
31
32 @Test
33 public void testLongString() {
34 assertSecondGreater("1.0-1414575567068", "1.0-1414575567069");
35 assertBothSame("1.0-1414575567068", "1.0-00000000000000000001414575567068");
36 }
37
38 @Test
39 public void testTwoDots() {
40 assertSecondGreater("0.0.1", "0.0.2");
41 assertSecondGreater("0.9.0", "1.0.0");
42 assertSecondGreater("1.0", "1.0.1");
43 assertSecondGreater("1.1.0", "1.10.0");
44 assertSecondGreater("1.1.9", "1.19");
45 assertSecondGreater("3.56.75", "4.46.19");
46 }
47
48 @Test
49 public void testMoreDots() {
50 assertSecondGreater("0.0.0.1", "0.0.0.2");
51 assertSecondGreater("0.0.0.1", "0.0.1.0");
52 assertSecondGreater("2.5.7.3", "2.5.8.1");
53 assertSecondGreater("27.5.27.3.12", "56.5.8.1");
54 }
55
56 @Test
57 public void testLetters() {
58 assertSecondGreater("0.1a", "0.1b");
59 assertSecondGreater("0.1-alpha", "0.2-beta");
60 assertSecondGreater("2.3-dr1", "2.3-dr2");
61 assertSecondGreater("2.3-dr1", "2.3-DR2");
62 assertSecondGreater("2.3-dr1", "2.3");
63 assertSecondGreater("1.0-rc1", "1.0");
64 assertSecondGreater("1.0a", "1.1");
65 assertSecondGreater("1.0a", "1.1a");
66 assertSecondGreater("1.0a", "2.0a");
67 assertSecondGreater("1.5", "1.6a");
68 assertSecondGreater("1.2-m2", "1.2.0");
69 assertSecondGreater("1.2-m2", "1.2.1");
70 }
71
72 @Test
73 public void testBetas() {
74 assertSecondGreater("1.0-beta1", "1.0-beta2");
75 assertSecondGreater("1.0-beta", "1.0-beta2");
76 }
77
78 @Test
79 public void testDates() {
80 assertSecondGreater("2006-01-12", "2006-10-07");
81 assertSecondGreater("2006.01.12", "2006-10-07");
82 assertSecondGreater("20060112", "20061007");
83 }
84
85
86
87
88 @Test
89 public void testUnintuitiveCases() {
90 assertBothSame("1.01", "1.1");
91 assertSecondGreater("1.0a", "1.0");
92
93 assertSecondGreater("1.0-beta10", "1.0-beta2");
94 }
95
96 @Test
97 public void testValidVersions() {
98 assertValidVersion("1");
99 assertValidVersion("1.0");
100 assertValidVersion("1.2.0");
101 assertValidVersion("1.2.0.56");
102 assertValidVersion("0.223.0.56");
103 assertValidVersion("2.3-beta1");
104 assertValidVersion("alpha");
105 assertValidVersion("beta");
106 assertValidVersion("2005-12-03");
107 }
108
109 @Test
110 public void testInvalidVersions() {
111 assertInvalidVersion("");
112 assertInvalidVersion(null);
113 assertInvalidVersion("%^&%#");
114 }
115
116 @Test
117 public void testSnapshots() {
118 assertTrue(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT"));
119 assertFalse(VersionStringComparator.isSnapshotVersion("1.0-snapshot"));
120 assertFalse(VersionStringComparator.isSnapshotVersion("1.0-SNAPSHOT-1"));
121 assertSecondGreater("1.0-SNAPSHOT", "1.0");
122 assertSecondGreater("1.0", "1.0.1-SNAPSHOT");
123 assertSecondGreater("1.0", "1.1-SNAPSHOT");
124 assertSecondGreater("1.1-m1", "1.1-SNAPSHOT");
125 assertBothSame("1.1-SNAPSHOT", "1.1-SNAPSHOT");
126 }
127
128 private void assertSecondGreater(final String first, final String second) {
129 assertValidVersion(first);
130 assertValidVersion(second);
131
132
133 assertBothSame(first, first);
134 assertBothSame(second, second);
135
136
137 assertTrue(first + " < " + second, comparator.compare(second, first) > 0);
138 assertTrue(first + " < " + second, comparator.compare(first, second) < 0);
139 }
140
141 private void assertValidVersion(final String string) {
142 assertTrue(VersionStringComparator.isValidVersionString(string));
143 }
144
145 private void assertInvalidVersion(final String string) {
146 assertFalse(VersionStringComparator.isValidVersionString(string));
147 }
148
149 private void assertBothSame(final String first, final String second) {
150 assertEquals(first + " == " + second, 0, comparator.compare(first, second));
151 }
152 }