Skip to content

Commit 2f20e77

Browse files
committed
replace langauge version comparision by jruby version due to limitations in version reporting
1 parent b38682c commit 2f20e77

File tree

5 files changed

+215
-70
lines changed

5 files changed

+215
-70
lines changed

ruby-tools/src/main/java/de/saumya/mojo/ruby/gems/GemsInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ private Script maybeAddArtifact(Script script, final Artifact artifact)
242242
.addArg(booleanArg(this.config.isVerbose(), "verbose"));
243243

244244
final JRubyVersion version = this.factory.getVersion();
245-
if (version == null || version.isLanguageLowerThan(2,6)) {
245+
if (version == null || version.isVersionLowerThan(9, 2, 10)) {
246246
script.addArg(booleanArg(this.config.isAddRdoc(), "rdoc"))
247247
.addArg(booleanArg(this.config.isAddRI(), "ri"));
248248
} else {

ruby-tools/src/main/java/de/saumya/mojo/ruby/script/JRubyVersion.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package de.saumya.mojo.ruby.script;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
public class JRubyVersion {
47

58
private final String version;
@@ -18,11 +21,35 @@ public String getLanguage() {
1821
return language;
1922
}
2023

24+
public boolean isVersionLowerThan(Integer... version) {
25+
final List<Integer> parts = extractVersionComponents(this.version);
26+
27+
for (int i = 0; i < version.length && i < parts.size(); i++) {
28+
if (parts.get(i) == version[i])
29+
continue;
30+
return parts.get(i) < version[i];
31+
}
32+
return false;
33+
}
34+
35+
private List<Integer> extractVersionComponents(String versionString) {
36+
if (versionString == null)
37+
throw new NumberFormatException();
38+
39+
final String[] parts = versionString.split("\\.");
40+
41+
final List<Integer> versionComponents = new ArrayList<Integer>();
42+
for (String part : parts) {
43+
versionComponents.add(Integer.parseInt(part));
44+
}
45+
return versionComponents;
46+
}
47+
2148
public boolean isLanguageLowerThan(int major, int minor) {
22-
final String[] parts = getLanguage().split("\\.");
49+
final List<Integer> parts = extractVersionComponents(language);
2350

24-
int majorLanguageVersion = Integer.parseInt(parts[0]);
25-
int minorLanguageVersion = Integer.parseInt(parts[1]);
51+
int majorLanguageVersion = parts.get(0);
52+
int minorLanguageVersion = parts.get(1);
2653

2754
if (major == majorLanguageVersion) {
2855
return minorLanguageVersion < minor;
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package de.saumya.mojo.ruby.script;
2+
3+
import org.junit.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
7+
public class JRubyLanguageComparisonTest {
8+
9+
@Test
10+
public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_equal() {
11+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
12+
13+
boolean result = version.isLanguageLowerThan(2, 5);
14+
15+
assertThat(result).isFalse();
16+
}
17+
18+
@Test
19+
public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_lower() {
20+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
21+
22+
boolean result = version.isLanguageLowerThan(2, 4);
23+
24+
assertThat(result).isFalse();
25+
}
26+
27+
@Test
28+
public void should_return_true_when_compared_language_major_is_equal_and_minor_version_is_higher() {
29+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
30+
31+
boolean result = version.isLanguageLowerThan(2, 6);
32+
33+
assertThat(result).isTrue();
34+
}
35+
36+
@Test
37+
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_equal() {
38+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
39+
40+
boolean result = version.isLanguageLowerThan(3, 5);
41+
42+
assertThat(result).isTrue();
43+
}
44+
45+
@Test
46+
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_lower() {
47+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
48+
49+
boolean result = version.isLanguageLowerThan(3, 3);
50+
51+
assertThat(result).isTrue();
52+
}
53+
54+
@Test
55+
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_higher() {
56+
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
57+
58+
boolean result = version.isLanguageLowerThan(3, 6);
59+
60+
assertThat(result).isTrue();
61+
}
62+
63+
@Test
64+
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_equal() {
65+
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
66+
67+
boolean result = version.isLanguageLowerThan(1, 5);
68+
69+
assertThat(result).isFalse();
70+
}
71+
72+
@Test
73+
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_lower() {
74+
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
75+
76+
boolean result = version.isLanguageLowerThan(1, 2);
77+
78+
assertThat(result).isFalse();
79+
}
80+
81+
@Test
82+
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_higher() {
83+
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
84+
85+
boolean result = version.isLanguageLowerThan(1, 10);
86+
87+
assertThat(result).isFalse();
88+
}
89+
90+
@Test
91+
public void should_return_false_when_compared_version_major_is_lower_and_minor_is_higher() {
92+
final JRubyVersion version = new JRubyVersion("9.2.10.1", "3.5.7");
93+
94+
boolean result = version.isVersionLowerThan(7, 10);
95+
96+
assertThat(result).isFalse();
97+
}
98+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package de.saumya.mojo.ruby.script;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.junit.runners.Parameterized;
6+
7+
import java.util.Arrays;
8+
import java.util.Collection;
9+
10+
import static java.lang.Boolean.FALSE;
11+
import static java.lang.Boolean.TRUE;
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
@RunWith(Parameterized.class)
15+
public class JRubyVersionComparisonTest {
16+
17+
@Parameterized.Parameters
18+
public static Collection<Object[]> data() {
19+
return Arrays.asList(new Object[][]{
20+
{"9.2.10.1", new Integer[]{9}, FALSE, "compared major is equal"},
21+
{"9.2.10.1", new Integer[]{9, 2}, FALSE, "compared major is equal and minor is lower"},
22+
{"9.2.10.1", new Integer[]{9, 3}, TRUE, "compared major is equal and minor is higher"},
23+
24+
{"9.2.10.1", new Integer[]{10}, TRUE, "compared major is greater and minor is equal"},
25+
{"9.2.10.1", new Integer[]{11, 2}, TRUE, "compared major is equal and minor is lower"},
26+
{"9.2.10.1", new Integer[]{12, 3, 14}, TRUE, "compared major is equal and minor is higher"},
27+
28+
{"9.2.10.1", new Integer[]{7}, FALSE, "compared major is lower and minor is equal"},
29+
{"9.2.10.1", new Integer[]{6, 2}, FALSE, "compared major is lower and minor is lower"},
30+
{"9.2.10.1", new Integer[]{5, 3, 14}, FALSE, "compared major is lower and minor is higher"},
31+
32+
{"9.1", new Integer[]{9, 1, 10}, FALSE, "version has more components"}
33+
});
34+
}
35+
36+
private final String jrubyVersion;
37+
private final Integer[] versionToCompare;
38+
private final Boolean expectedValue;
39+
40+
public JRubyVersionComparisonTest(String jrubyVersion, Integer[] versionToCompare, Boolean expectedValue, String description) {
41+
this.jrubyVersion = jrubyVersion;
42+
this.versionToCompare = versionToCompare;
43+
this.expectedValue = expectedValue;
44+
}
45+
46+
47+
@Test
48+
public void should_compared_jruby_version() {
49+
final JRubyVersion version = new JRubyVersion(jrubyVersion, "3.5.7");
50+
51+
boolean result = version.isVersionLowerThan(versionToCompare);
52+
53+
assertThat(result).isEqualTo(expectedValue);
54+
}
55+
56+
}
Lines changed: 30 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,53 @@
11
package de.saumya.mojo.ruby.script;
22

3+
import org.assertj.core.api.ThrowableAssert;
34
import org.junit.Test;
45

56
import static org.assertj.core.api.Assertions.assertThat;
7+
import static org.assertj.core.api.Assertions.catchThrowable;
68

7-
public class JRubyVersionTest {
8-
9-
@Test
10-
public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_equal() {
11-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
12-
13-
boolean result = version.isLanguageLowerThan(2, 5);
14-
15-
assertThat(result).isFalse();
16-
}
17-
18-
@Test
19-
public void should_return_false_when_compared_language_major_is_equal_and_minor_version_is_lower() {
20-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
21-
22-
boolean result = version.isLanguageLowerThan(2, 4);
23-
24-
assertThat(result).isFalse();
25-
}
26-
27-
@Test
28-
public void should_return_true_when_compared_language_major_is_equal_and_minor_version_is_higher() {
29-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
30-
31-
boolean result = version.isLanguageLowerThan(2, 6);
32-
33-
assertThat(result).isTrue();
34-
}
359

36-
@Test
37-
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_equal() {
38-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
39-
40-
boolean result = version.isLanguageLowerThan(3, 5);
41-
42-
assertThat(result).isTrue();
43-
}
44-
45-
@Test
46-
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_lower() {
47-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
48-
49-
boolean result = version.isLanguageLowerThan(3, 3);
50-
51-
assertThat(result).isTrue();
52-
}
53-
54-
@Test
55-
public void should_return_true_when_compared_language_major_is_higher_and_minor_is_higher() {
56-
final JRubyVersion version = new JRubyVersion("jruby", "2.5.7");
57-
58-
boolean result = version.isLanguageLowerThan(3, 6);
59-
60-
assertThat(result).isTrue();
61-
}
10+
public class JRubyVersionTest {
6211

6312
@Test
64-
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_equal() {
65-
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
13+
public void should_fail_with_exceptions_when_jruby_version_is_null() {
14+
final JRubyVersion version = new JRubyVersion(null, "3.5.7");
6615

67-
boolean result = version.isLanguageLowerThan(1, 5);
16+
Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() {
17+
public void call() {
18+
version.isVersionLowerThan(1, 2, 3);
19+
}
20+
});
6821

69-
assertThat(result).isFalse();
22+
assertThat(throwable)
23+
.isInstanceOf(NumberFormatException.class);
7024
}
7125

7226
@Test
73-
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_lower() {
74-
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
27+
public void should_fail_with_exceptions_when_jruby_version_is_empty() {
28+
final JRubyVersion version = new JRubyVersion("", "3.5.7");
7529

76-
boolean result = version.isLanguageLowerThan(1, 2);
30+
Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() {
31+
public void call() {
32+
version.isVersionLowerThan(1, 2, 3);
33+
}
34+
});
7735

78-
assertThat(result).isFalse();
36+
assertThat(throwable)
37+
.isInstanceOf(NumberFormatException.class);
7938
}
8039

8140
@Test
82-
public void should_return_false_when_compared_language_major_is_lower_and_minor_is_higher() {
83-
final JRubyVersion version = new JRubyVersion("jruby", "3.5.7");
41+
public void should_fail_with_exceptions_when_jruby_version_contains_text() {
42+
final JRubyVersion version = new JRubyVersion("not.a.number", "3.5.7");
8443

85-
boolean result = version.isLanguageLowerThan(1, 10);
44+
Throwable throwable = catchThrowable(new ThrowableAssert.ThrowingCallable() {
45+
public void call() {
46+
version.isVersionLowerThan(1, 2, 3);
47+
}
48+
});
8649

87-
assertThat(result).isFalse();
50+
assertThat(throwable)
51+
.isInstanceOf(NumberFormatException.class);
8852
}
8953
}

0 commit comments

Comments
 (0)