Port Settings
and OS
to TypeScript
This commit is contained in:
parent
38b23c6627
commit
a102016ed8
6 changed files with 36 additions and 23 deletions
15
ts/OS.ts
Normal file
15
ts/OS.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import is from '@sindresorhus/is';
|
||||
import os from 'os';
|
||||
import semver from 'semver';
|
||||
|
||||
export const isMacOS = () => process.platform === 'darwin';
|
||||
export const isLinux = () => process.platform === 'linux';
|
||||
export const isWindows = (minVersion?: string) => {
|
||||
const isPlatformValid = process.platform === 'win32';
|
||||
const osRelease = os.release();
|
||||
const isVersionValid = is.undefined(minVersion)
|
||||
? true
|
||||
: semver.gte(osRelease, minVersion);
|
||||
|
||||
return isPlatformValid && isVersionValid;
|
||||
};
|
56
ts/test/types/Settings_test.ts
Normal file
56
ts/test/types/Settings_test.ts
Normal file
|
@ -0,0 +1,56 @@
|
|||
import os from 'os';
|
||||
import sinon from 'sinon';
|
||||
import { assert } from 'chai';
|
||||
|
||||
import * as Settings from '../../../ts/types/Settings';
|
||||
|
||||
describe('Settings', () => {
|
||||
const sandbox = sinon.createSandbox();
|
||||
|
||||
describe('isAudioNotificationSupported', () => {
|
||||
context('on macOS', () => {
|
||||
beforeEach(() => {
|
||||
sandbox.stub(process, 'platform').value('darwin');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('should return true', () => {
|
||||
assert.isTrue(Settings.isAudioNotificationSupported());
|
||||
});
|
||||
});
|
||||
|
||||
context('on Windows', () => {
|
||||
context('version 8+', () => {
|
||||
beforeEach(() => {
|
||||
sandbox.stub(process, 'platform').value('win32');
|
||||
sandbox.stub(os, 'release').returns('8.0.0');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('should return true', () => {
|
||||
assert.isTrue(Settings.isAudioNotificationSupported());
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
context('on Linux', () => {
|
||||
beforeEach(() => {
|
||||
sandbox.stub(process, 'platform').value('linux');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('should return false', () => {
|
||||
assert.isFalse(Settings.isAudioNotificationSupported());
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
4
ts/types/Settings.ts
Normal file
4
ts/types/Settings.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
import * as OS from '../OS';
|
||||
|
||||
export const isAudioNotificationSupported = () =>
|
||||
OS.isWindows() || OS.isMacOS();
|
Loading…
Add table
Add a link
Reference in a new issue