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