Skip to content

Commit f315f4e

Browse files
dgolovinjrichter1
authored andcommitted
Allow Java 9+ to be detected (#1384)
1 parent 0588d48 commit f315f4e

4 files changed

Lines changed: 32 additions & 16 deletions

File tree

browser/directives/componentPanel.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<span>You have selected
5050
<ng-repeat ng-repeat="dep in filtered = (item.dependenciesOf | filter: {selectedOption: 'install'} | limitTo:1)">
5151
<span>{{dep.productName}},</span>
52-
</ng-repeat> which requires {{item.productName}} version {{item.minimumVersion}} or higher.</span>
52+
</ng-repeat> which requires {{item.productName}} version {{item.minimumVersion}}{{item.orHigher}}.</span>
5353
<span ng-show="item.messages.dependency !== undefined">
5454
<span>{{item.messages.dependency.message.split(item.messages.dependency.linkDescription)[0]}}</span>
5555
<a type="button" class="pointer" ng-click="openUrl(item.messages.dependency.link ? item.messages.dependency.link : item.downloadUrl)">

browser/model/jdk-install.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
let fs = require('fs-extra');
44
let path = require('path');
5-
var rimraf = require('rimraf');
5+
let rimraf = require('rimraf');
6+
let semver = require('semver');
67

78

89
import InstallableItem from './installable-item';
@@ -20,6 +21,7 @@ class JdkInstall extends InstallableItem {
2021
this.sha256 = sha256sum;
2122
this.minimumVersion = '1.8.0';
2223
this.openJdkMsi = false;
24+
this.orHigher = '';
2325
}
2426

2527
static get KEY() {
@@ -34,7 +36,7 @@ class JdkInstall extends InstallableItem {
3436
}
3537

3638
detectExistingInstall() {
37-
let versionRegex = /version\s"(\d+\.\d+\.\d+)_.*"/;
39+
let versionRegex = /version\s"(.+)".*/;
3840
let versionRegex1 = /(\d+\.\d+\.\d+).*/;
3941
let command = 'java -XshowSettings';
4042
this.addOption('install', versionRegex1.exec(this.version)[1], this.installerDataSvc.jdkDir(), true);
@@ -52,15 +54,11 @@ class JdkInstall extends InstallableItem {
5254
}).then((output) => {
5355
return new Promise((resolve, reject) => {
5456
let version = versionRegex.exec(output);
55-
if (version && version.length > 1) {
57+
if (version && version.length > 1 && version[1].length > 0) {
5658
this.addOption('detected', version[1], '', true);
57-
this.option['detected'].version = version[1];
5859
this.selectedOption = 'detected';
5960
this.validateVersion();
60-
if(this.option['detected'].valid) {
61-
this.selectedOption = 'detected';
62-
}
63-
resolve(true);
61+
resolve();
6462
} else {
6563
reject('No java detected');
6664
}
@@ -110,15 +108,16 @@ class JdkInstall extends InstallableItem {
110108
validateVersion() {
111109
let option = this.option[this.selectedOption];
112110
if(option) {
111+
let v = semver.coerce(option.version);
113112
option.valid = true;
114113
option.error = '';
115114
option.warning = '';
116-
if(Version.LT(option.version, this.minimumVersion)) {
115+
if(Version.LT(v, this.minimumVersion)) {
117116
option.valid = false;
118117
option.error = 'oldVersion';
119118
option.warning = '';
120-
} else if(Version.GT(option.version, this.minimumVersion)) {
121-
option.valid = true;
119+
} else if(Version.GT(v, this.minimumVersion)) {
120+
option.valid = false;
122121
option.error = '';
123122
option.warning = 'newerVersion';
124123
}

browser/model/virtualbox.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class VirtualBoxInstall extends InstallableItem {
1515
super(VirtualBoxInstall.KEY, downloadUrl, fileName, targetFolderName, installerDataSvc, false);
1616

1717
this.minimumVersion = '5.1.12';
18+
this.orHigher = ' or higher';
1819
this.revision = revision;
1920

2021
this.downloadUrl = this.downloadUrl.split('${version}').join(this.version);

test/unit/model/jdk-install-test.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ describe('JDK installer', function() {
7777
sandbox.restore();
7878
});
7979

80-
function mockDetectedJvm(version, location = 'java.home = /java/home\n') {
80+
function mockDetectedJvm(version, location = 'java.home = /java/home\n', buildDate = '2018-03-20') {
8181
sandbox.stub(JdkInstall.prototype, 'findMsiInstalledJava').resolves('');
8282
sandbox.stub(JdkInstall.prototype, 'findDarwinJava').resolves('');
8383
sandbox.stub(Util, 'executeCommand')
84-
.onFirstCall().resolves(`version "${version}"`)
84+
.onFirstCall().resolves(`version "${version}" ${buildDate}`)
8585
.onSecondCall().resolves(location);
8686
sandbox.stub(Util, 'executeFile').resolves('optput');
8787
sandbox.stub(child_process, 'exec').yields(undefined, 'output');
@@ -139,6 +139,22 @@ describe('JDK installer', function() {
139139
jdk.validateVersion();
140140
});
141141

142+
it('should detect Java 9 and mark it as invalid', function() {
143+
mockDetectedJvm('9.0.4.1-redhat');
144+
return jdk.detectExistingInstall().then(()=>{
145+
expect(jdk.selectedOption).to.be.equal('detected');
146+
expect(jdk.option.detected.valid).to.be.equal(false);
147+
});
148+
});
149+
150+
it('should detect Java 10 and mark it as invalid', function() {
151+
mockDetectedJvm('10');
152+
return jdk.detectExistingInstall().then(()=>{
153+
expect(jdk.selectedOption).to.be.equal('detected');
154+
expect(jdk.option.detected.valid).to.be.equal(false);
155+
});
156+
});
157+
142158
describe('on windows', function() {
143159
beforeEach(function() {
144160
sandbox.stub(Platform, 'getOS').returns('win32');
@@ -168,7 +184,7 @@ describe('JDK installer', function() {
168184
});
169185

170186
it('should reject openjdk if location for java is not found', function() {
171-
mockDetectedJvm('1.8.0', '');
187+
mockDetectedJvm('', '');
172188
return jdk.detectExistingInstall().then(()=> {
173189
expect(jdk.selectedOption).to.be.equal('install');
174190
});
@@ -271,7 +287,7 @@ describe('JDK installer', function() {
271287
mockDetectedJvm('1.9.0_1');
272288
return jdk.detectExistingInstall().then(()=>{
273289
expect(jdk.selectedOption).to.be.equal('detected');
274-
expect(jdk.option.detected.version).to.be.equal('1.9.0');
290+
expect(jdk.option.detected.version).to.be.equal('1.9.0_1');
275291
Util.executeCommand.rejects();
276292
return jdk.detectExistingInstall();
277293
}).then(()=>{

0 commit comments

Comments
 (0)