forked from enviPath/enviPy
123 lines
4.0 KiB
JavaScript
123 lines
4.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
"use strict";
|
|
|
|
const os = require('os');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const spawnSync = require('child_process').spawnSync;
|
|
|
|
const versions = ['0.12', '4', '6'];
|
|
const tmpdir = os.tmpdir();
|
|
|
|
function directoryExists(file) {
|
|
try {
|
|
var stat = fs.lstatSync(file);
|
|
return stat.isDirectory();
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function fileExists(file) {
|
|
try {
|
|
var stat = fs.lstatSync(file);
|
|
return stat.isFile();
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function removeFolder(dir) {
|
|
if (!fs.existsSync(dir)) return;
|
|
fs.readdirSync(dir).forEach((file) => {
|
|
let curPath = dir + path.sep + file;
|
|
if (fs.lstatSync(curPath).isDirectory())
|
|
removeFolder(curPath);
|
|
else
|
|
fs.unlinkSync(curPath);
|
|
});
|
|
fs.rmdirSync(dir);
|
|
}
|
|
|
|
let tempInstallPath = path.resolve(tmpdir, 'chromedriver-test');
|
|
if (directoryExists(tempInstallPath)) {
|
|
console.log(`Deleting directory '${tempInstallPath}'.`);
|
|
removeFolder(tempInstallPath);
|
|
}
|
|
fs.mkdirSync(tempInstallPath);
|
|
|
|
function checkSpawn(spawnInfo) {
|
|
if (spawnInfo.stdout) {
|
|
if (typeof (spawnInfo.stdout) !== 'string')
|
|
console.log(spawnInfo.stdout.toString('utf8'));
|
|
else
|
|
console.log(spawnInfo.stdout);
|
|
}
|
|
if (spawnInfo.stderr) {
|
|
if (typeof (spawnInfo.error) !== 'string')
|
|
console.error(spawnInfo.stderr.toString('utf8'));
|
|
else
|
|
console.error(spawnInfo.stderr);
|
|
}
|
|
if (spawnInfo.status !== 0 || spawnInfo.error) {
|
|
console.error('Failed when spawning.');
|
|
process.exit(1);
|
|
}
|
|
if (typeof (spawnInfo.stdout) !== 'string')
|
|
return spawnInfo.stdout.toString('utf8');
|
|
else
|
|
return spawnInfo.stdout;
|
|
}
|
|
|
|
function nvmUse(version) {
|
|
if (os.platform() === 'win32')
|
|
var versionsText = checkSpawn(spawnSync('nvm', ['list']));
|
|
else
|
|
var versionsText = checkSpawn(spawnSync('/bin/bash', ['-c', 'source $HOME/.nvm/nvm.sh && nvm list']));
|
|
const versionsAvailable = versionsText.split('\n').map(v => v.match(/\d+\.\d+\.\d+/)).filter(v => v).map(v => v[0]);
|
|
var largestMatch = versionsAvailable.filter(v => v.match(`^${version}\.`)).map(v => v.match(/\d+\.(\d+)\.\d+/)).reduce(((max, v) => max[1] > v[1] ? max : v), [null, 0]);
|
|
if (largestMatch.length === 0) {
|
|
console.error(`Version '${version}' not found.`);
|
|
process.exit(3);
|
|
}
|
|
var largestMatchingVersion = largestMatch.input;
|
|
console.log(`Found version '${largestMatchingVersion}'.`);
|
|
if (os.platform() === 'win32')
|
|
checkSpawn(spawnSync('nvm', ['use', largestMatchingVersion]));
|
|
else
|
|
checkSpawn(spawnSync('/bin/bash', ['-c', `source $HOME/.nvm/nvm.sh && nvm use ${largestMatchingVersion}`]));
|
|
}
|
|
|
|
function sleep(milliseconds) {
|
|
const inAFewMilliseconds = new Date(new Date().getTime() + 2000);
|
|
while (inAFewMilliseconds > new Date()) { }
|
|
}
|
|
|
|
for (let version of versions) {
|
|
console.log(`Testing version ${version}...`);
|
|
let tempInstallPathForVersion = path.resolve(tmpdir, 'chromedriver-test', version);
|
|
fs.mkdirSync(tempInstallPathForVersion);
|
|
nvmUse(version);
|
|
if (os.platform() === 'win32') {
|
|
sleep(2000); // wait 2 seconds until everything is in place
|
|
checkSpawn(spawnSync('cmd.exe', ['/c', `npm i ${__dirname}`], { cwd: tempInstallPathForVersion }));
|
|
|
|
} else {
|
|
checkSpawn(spawnSync('npm', ['i', `${__dirname}`], { cwd: tempInstallPathForVersion }));
|
|
}
|
|
let executable = path.resolve(tempInstallPathForVersion, 'node_modules', 'chromedriver', 'lib', 'chromedriver', `chromedriver${os.platform() === 'win32' ? '.exe' : ''}`);
|
|
if (fileExists(executable)) {
|
|
console.log(`Version ${version} installed fine.`);
|
|
}
|
|
else {
|
|
console.error(`Version ${version} did not install correctly, file '${executable}' was not found.`);
|
|
process.exit(2);
|
|
}
|
|
}
|
|
|
|
try {
|
|
removeFolder(tempInstallPath);
|
|
} catch (err) {
|
|
console.error(`Could not delete folder '${tempInstallPath}'.`);
|
|
} |