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