Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: a58ede28ec99ec1a359404c39ff3857dd82bf867 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*******************************************************************************
 * Copyright (c) 2011, 2013 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
 *
 * Contributors:
 *     Oracle - initial API and implementation
 ******************************************************************************/
package org.eclipse.jpt.common.utility.tests.internal.comparator;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Comparator;
import junit.framework.TestCase;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.comparator.ComparatorTools;
import org.eclipse.jpt.common.utility.internal.comparator.VersionComparator;
import org.eclipse.jpt.common.utility.internal.comparator.VersionComparator.SegmentParser;

@SuppressWarnings("nls")
public class VersionComparatorTests
	extends TestCase
{
	public VersionComparatorTests(String name) {
		super(name);
	}

	public void testVersionIsEqual_integer() {
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0", "2.0.0") == 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0", "2.0.0.0") == 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0.0.0.0.0000", "2.0") == 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.-1", "2.0.-1") == 0);
	}

	public void testVersionIsLess_integer() {
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0", "2.0.1") < 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.5.0", "2.14") < 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.5.0", "2.5.0.0.1.0") < 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.5.0.0.0.-1", "2.5") < 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.-1", "2.0.0") < 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.-1", "2") < 0);
	}

	public void testVersionIsGreater_integer() {
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.2", "2.0.1") > 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.2", "2.0.1") > 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.5.0.0.1.0", "2.5.0") > 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.5", "2.5.0.0.0.-1") > 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0", "2.0.-1") > 0);
		assertTrue(ComparatorTools.integerVersionComparator().compare("2", "2.0.-1") > 0);
	}

	public void testVersionIsEqual_integer_comma() {
		Comparator<String> versionComparator = new VersionComparator<BigDecimal>(",", DecimalSegmentParser.instance());
		assertTrue(versionComparator.compare("2,0,0", "2,0,0") == 0);
		assertTrue(versionComparator.compare("2,0.0,0", "2,0,0") == 0);
		assertTrue(versionComparator.compare("2,0.0,0", "2,0,0.0") == 0);
		assertTrue(versionComparator.compare("2.0,0.0,0", "2,0,0.0") == 0);
	}

	public void testVersionIsLess_integer_comma() {
		Comparator<String> versionComparator = new VersionComparator<BigDecimal>(",", DecimalSegmentParser.instance());
		assertTrue(versionComparator.compare("2,0,0", "2,0,1") < 0);
		assertTrue(versionComparator.compare("2,0.0,0", "2,0,1") < 0);
		assertTrue(versionComparator.compare("2,0,0", "2,0,1.0") < 0);
		assertTrue(versionComparator.compare("2.0,0,0", "2,0,1") < 0);
	}

	public void testVersionIsGreater_integer_comma() {
		Comparator<String> versionComparator = ComparatorTools.versionComparator(',', DecimalSegmentParser.instance());
		assertTrue(versionComparator.compare("2,0,2", "2,0,1") > 0);
		assertTrue(versionComparator.compare("2,0,2.1", "2,0,1") > 0);
		assertTrue(versionComparator.compare("2,0,2", "2,0,1.9") > 0);
		assertTrue(versionComparator.compare("2.000,0,2", "2,0,1") > 0);
	}

	public void testVersionIsEqual_subclass() {
		Comparator<String> versionComparator = ComparatorTools.integerVersionComparator();
		assertTrue(versionComparator.compare("2.0.0", "2.0.0") == 0);
		assertTrue(versionComparator.compare("2.0.0", "2.0.0.0") == 0);
		assertTrue(versionComparator.compare("2.0.0.0", "2.0") == 0);
		assertTrue(versionComparator.compare("2.0.-1", "2.0.-1") == 0);
	}

	public void testVersionIsLess_subclass() {
		Comparator<String> versionComparator = ComparatorTools.integerVersionComparator();
		assertTrue(versionComparator.compare("2.0.0", "2.0.1") < 0);
		assertTrue(versionComparator.compare("2.5.0", "2.14") < 0);
		assertTrue(versionComparator.compare("2.5.0", "2.5.0.0.1.0") < 0);
		assertTrue(versionComparator.compare("2.0.-1", "2.0.0") < 0);
		assertTrue(versionComparator.compare("2.0.-1", "2") < 0);
	}

	public void testVersionIsGreater_subclass() {
		Comparator<String> versionComparator = ComparatorTools.integerVersionComparator();
		assertTrue(versionComparator.compare("2.0.2", "2.0.1") > 0);
		assertTrue(versionComparator.compare("2.0.2", "2.0.1") > 0);
		assertTrue(versionComparator.compare("2.5.0.0.1.0", "2.5.0") > 0);
		assertTrue(versionComparator.compare("2.0.0", "2.0.-1") > 0);
		assertTrue(versionComparator.compare("2", "2.0.-1") > 0);
	}

	public void testBadString() {
		boolean exCaught = false;
		try {
			// note the letter 'O' instead of the numeral '0'
			assertTrue(ComparatorTools.integerVersionComparator().compare("2.0.0", "2.O.O") == 0);
		} catch (NumberFormatException ex) {
			exCaught = true;
		}
		assertTrue(exCaught);
	}


	static final class DecimalSegmentParser
		implements SegmentParser<BigDecimal>, Serializable
	{
		public static final SegmentParser<BigDecimal> INSTANCE = new DecimalSegmentParser();
		public static SegmentParser<BigDecimal> instance() {
			return INSTANCE;
		}
		// ensure single instance
		private DecimalSegmentParser() {
			super();
		}
		// simply parse the segment as an integer
		public BigDecimal parse(int segmentIndex, String segment) {
			return new BigDecimal(segment);
		}
		public BigDecimal getZero() {
			return ZERO;
		}
		private static final BigDecimal ZERO = new BigDecimal(0);
		@Override
		public String toString() {
			return ObjectTools.singletonToString(this);
		}
		private static final long serialVersionUID = 1L;
		private Object readResolve() {
			// replace this object with the singleton
			return INSTANCE;
		}
	}
}

Back to the top