Files
2023-03-07 10:52:05 +07:00

371 lines
13 KiB
JavaScript

const chai = require('chai');
const expect = chai.expect;
const Buffer = require('buffer').Buffer;
// rewrite to get access for testing
const rewire = require("rewire");
const chromeVersionModule = rewire("../index.js");
const extractChromeVersionNumer = chromeVersionModule.__get__('extractChromeVersionNumer');
const getChromeVersionFromOsa = chromeVersionModule.__get__('getChromeVersionFromOsa');
const chromeFinderLinuxModule = rewire("../chrome-finder/linux.js");
const findChromeExecutablesForLinuxDesktop = chromeFinderLinuxModule.__get__('findChromeExecutablesForLinuxDesktop');
const findChromeExecutablesForLinux = chromeFinderLinuxModule.__get__('findChromeExecutablesForLinux');
const chromeFinderDarwinModule = rewire("../chrome-finder/darwin.js");
const findChromeForDarwin = chromeFinderDarwinModule.__get__('darwin');
const chromeFinderWin32Module = rewire("../chrome-finder/win32.js");
const findChromeForWin32 = chromeFinderWin32Module.__get__('win32');
describe('Chrome Finder', function() {
describe('extractChromeVersionNumer from Google Chrome 95.0.4638', function() {
it('should return "95.0.4638"', function() {
const versionString = 'Google Chrome 95.0.4638';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('95.0.4638');
});
});
describe('extractChromeVersionNumer from Google Chrome 96.0.4664.110', function() {
it('should return "96.0.4664.110"', function() {
const versionString = 'Google Chrome 96.0.4664.110';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('96.0.4664.110');
});
});
describe('extractChromeVersionNumer from Google Chrome 97.0.4692.71', function() {
it('should return "97.0.4692.71"', function() {
const versionString = 'Google Chrome 97.0.4692.71';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('97.0.4692.71');
});
});
describe('extractChromiumVersionNumer from Chromium 105.0.5195.102 built on Debian 11.4, running on Debian 11.5', function() {
it('should return "105.0.5195.102"', function() {
const versionString = 'Chromium 105.0.5195.102 built on Debian 11.4, running on Debian 11.5';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('105.0.5195.102');
});
});
describe('extractChromiumVersionNumer from Chromium 90.0.4430.212 Fedora Project', function() {
it('should return "90.0.4430.212"', function() {
const versionString = 'Chromium 90.0.4430.212 Fedora Project';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('90.0.4430.212');
});
});
describe('extractChromiumVersionNumer from Chromium 98.0.4753.0', function() {
it('should return "98.0.4753.0"', function() {
const versionString = 'Chromium 98.0.4753.0';
const versionNumber = extractChromeVersionNumer(versionString);
expect(versionNumber).to.equal('98.0.4753.0');
});
});
describe('getChromeVersionFromOsa when includeChromium=false', function() {
it('should only find Chrome', function() {
const includeChromium = false;
const mockVersion = '97.0.4692.71';
var execSyncCommand;
chromeVersionModule.__set__('execSync', function(command) {
execSyncCommand = command;
return Buffer.from(mockVersion);
});
const version = getChromeVersionFromOsa(includeChromium);
expect(execSyncCommand).to.include('Google Chrome');
expect(execSyncCommand).to.not.include('Chromium');
expect(version).to.equal(mockVersion);
});
});
describe('getChromeVersionFromOsa when includeChromium=true', function() {
it('should only find Chromium', function() {
const includeChromium = true;
const mockVersion = '98.0.4753.0';
var execSyncCommands = [];
chromeVersionModule.__set__('execSync', function(command) {
execSyncCommands.push(command);
if (execSyncCommands.length == 1) {
throw "not found"
}
return Buffer.from(mockVersion);
});
const version = getChromeVersionFromOsa(includeChromium);
expect(execSyncCommands.length).equal(2);
expect(execSyncCommands[0]).to.include('Google Chrome');
expect(execSyncCommands[1]).to.include('Chromium');
expect(version).to.equal(mockVersion);
});
});
});
describe('Chrome Finder Linux Module', function() {
describe('Linux Desktop when includeChromium=false', function() {
it('should only find Chrome', function() {
const includeChromium = false;
const mockChromePaths = [
'/opt/google/chrome/google-chrome',
'/home/user/Downloads/chrome-linux/chrome-wrapper'
];
chromeFinderLinuxModule.__set__('canAccess', function(file) {
return true;
});
var execSyncCommand;
chromeFinderLinuxModule.__set__('execSync', function(command) {
execSyncCommand = command;
return Buffer.from(mockChromePaths.join('\n'));
});
const mockDesktopFolder = "mock-desktop-folder";
const executables = findChromeExecutablesForLinuxDesktop(mockDesktopFolder, includeChromium);
expect(execSyncCommand).to.include(mockDesktopFolder);
expect(execSyncCommand).to.not.include('|chromium');
expect(executables).to.have.lengthOf(2);
expect(executables).to.deep.equal(mockChromePaths);
});
});
describe('Linux Desktop when includeChromium=true', function() {
it('should find Chrome and Chromium', function() {
const includeChromium = true;
const mockChromePaths = [
'/opt/google/chrome/google-chrome',
'/home/user/Downloads/chrome-linux/chrome-wrapper',
'/usr/local/bin/chromium-browser'
];
chromeFinderLinuxModule.__set__('canAccess', function(file) {
return true;
});
var execSyncCommand;
chromeFinderLinuxModule.__set__('execSync', function(command) {
execSyncCommand = command;
return Buffer.from(mockChromePaths.join('\n'));
});
const mockDesktopFolder = "mock-desktop-folder";
const executables = findChromeExecutablesForLinuxDesktop(mockDesktopFolder, includeChromium);
expect(execSyncCommand).to.include(mockDesktopFolder);
expect(execSyncCommand).to.include('|chromium');
expect(executables).to.have.lengthOf(3);
expect(executables).to.deep.equal(mockChromePaths);
});
});
describe('Linux when includeChromium=false', function() {
it('should only find Chrome', function() {
const includeChromium = false;
const mockPaths = [
'/mock-path'
];
chromeFinderLinuxModule.__set__('fs', {
existsSync: function(file) {
return true;
}
});
chromeFinderLinuxModule.__set__('canAccess', function(file) {
return true;
});
chromeFinderLinuxModule.__set__('isExecutable', function(file) {
return true;
});
const executables = findChromeExecutablesForLinux(mockPaths, includeChromium);
expect(executables).to.have.lengthOf(2);
const expectedExecutables = mockPaths.map(mockPath => ['google-chrome-stable', 'google-chrome'].map(executable => mockPath + '/' + executable)).reduce((acc, val) => acc.concat(val), []);
expect(executables).to.deep.equal(expectedExecutables);
});
});
describe('Linux when includeChromium=true', function() {
it('should find Chrome and Chromium', function() {
const includeChromium = true;
const mockPaths = [
'/mock-path'
];
chromeFinderLinuxModule.__set__('fs', {
existsSync: function(file) {
return true;
}
});
chromeFinderLinuxModule.__set__('canAccess', function(file) {
return true;
});
chromeFinderLinuxModule.__set__('isExecutable', function(file) {
return true;
});
const executables = findChromeExecutablesForLinux(mockPaths, includeChromium);
expect(executables).to.have.lengthOf(5);
const expectedExecutables = mockPaths.map(mockPath => ['google-chrome-stable', 'google-chrome', 'chromium', 'chromium-browser', 'chromium/chrome'].map(executable => mockPath + '/' + executable)).reduce((acc, val) => acc.concat(val), []);
expect(executables).to.deep.equal(expectedExecutables);
});
});
});
describe('Chrome Finder Darwin Module', function() {
describe('Darwin when includeChromium=false', function() {
it('should only find Chrome', function() {
const includeChromium = false;
const mockChromePaths = [
'/Applications/Google Chrome.app'
];
chromeFinderDarwinModule.__set__('canAccess', function(file) {
return true;
});
var execSyncCommand;
chromeFinderDarwinModule.__set__('execSync', function(command) {
execSyncCommand = command;
return Buffer.from(mockChromePaths.join('\n'));
});
const executables = findChromeForDarwin(includeChromium);
expect(execSyncCommand).to.not.include('|chromium');
expect(executables).to.have.lengthOf(1);
expect(executables).to.deep.equal(mockChromePaths.map(mockChromePath => mockChromePath + '/Contents/MacOS/Google Chrome'));
});
});
describe('Darwin when includeChromium=true', function() {
it('should only find Chrome', function() {
const includeChromium = true;
const mockChromePaths = [
'/Applications/Google Chrome.app',
'/Applications/Chromium.app'
];
const expectedExecutables = [
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
'/Applications/Chromium.app/Contents/MacOS/Chromium'
];
chromeFinderDarwinModule.__set__('canAccess', function(file) {
return expectedExecutables.includes(file);
});
var execSyncCommand;
chromeFinderDarwinModule.__set__('execSync', function(command) {
execSyncCommand = command;
return Buffer.from(mockChromePaths.join('\n'));
});
const executables = findChromeForDarwin(includeChromium);
expect(execSyncCommand).to.include('|chromium');
expect(executables).to.have.lengthOf(2);
expect(executables).to.deep.equal(expectedExecutables);
});
});
});
describe('Chrome Finder Win32 Module', function() {
describe('Win32 when includeChromium=false', function() {
it('should only find Chrome', function() {
const includeChromium = false;
chromeFinderWin32Module.__set__('canAccess', function(file) {
return true;
});
chromeFinderWin32Module.__set__('procesEnv', {
LOCALAPPDATA: 'mock-local-app-data',
PROGRAMFILES: 'mock-program-files',
'PROGRAMFILES(X86)': 'mock-program-files-x86'
});
const executables = findChromeForWin32(includeChromium);
expect(executables).to.have.lengthOf(9);
expect(executables).to.deep.equal([
'mock-local-app-data\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-local-app-data\\Google\\Chrome\\Application\\chrome.exe',
'mock-local-app-data\\chrome-win32\\chrome.exe',
'mock-program-files\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-program-files\\Google\\Chrome\\Application\\chrome.exe',
'mock-program-files\\chrome-win32\\chrome.exe',
'mock-program-files-x86\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-program-files-x86\\Google\\Chrome\\Application\\chrome.exe',
'mock-program-files-x86\\chrome-win32\\chrome.exe'
]);
});
});
describe('Win32 when includeChromium=true', function() {
it('should only find Chrome', function() {
const includeChromium = true;
chromeFinderWin32Module.__set__('canAccess', function(file) {
return true;
});
chromeFinderWin32Module.__set__('procesEnv', {
LOCALAPPDATA: 'mock-local-app-data',
PROGRAMFILES: 'mock-program-files',
'PROGRAMFILES(X86)': 'mock-program-files-x86'
});
const executables = findChromeForWin32(includeChromium);
expect(executables).to.have.lengthOf(12);
expect(executables).to.deep.equal([
'mock-local-app-data\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-local-app-data\\Google\\Chrome\\Application\\chrome.exe',
'mock-local-app-data\\chrome-win32\\chrome.exe',
'mock-local-app-data\\Chromium\\Application\\chrome.exe',
'mock-program-files\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-program-files\\Google\\Chrome\\Application\\chrome.exe',
'mock-program-files\\chrome-win32\\chrome.exe',
'mock-program-files\\Chromium\\Application\\chrome.exe',
'mock-program-files-x86\\Google\\Chrome SxS\\Application\\chrome.exe',
'mock-program-files-x86\\Google\\Chrome\\Application\\chrome.exe',
'mock-program-files-x86\\chrome-win32\\chrome.exe',
'mock-program-files-x86\\Chromium\\Application\\chrome.exe'
]);
});
});
});