karma-chrome-launcher
Advanced tools
Comparing version 0.1.12 to 0.2.0
160
index.js
@@ -1,33 +0,33 @@ | ||
var fs = require('fs'), | ||
path = require('path'), | ||
which = require('which'); | ||
var fsAccess = require('fs-access') | ||
var path = require('path') | ||
var which = require('which') | ||
function isJSFlags(flag) { | ||
return flag.indexOf('--js-flags=') === 0; | ||
function isJSFlags (flag) { | ||
return flag.indexOf('--js-flags=') === 0 | ||
} | ||
function sanitizeJSFlags(flag) { | ||
var test = /--js-flags=(['"])/.exec(flag); | ||
function sanitizeJSFlags (flag) { | ||
var test = /--js-flags=(['"])/.exec(flag) | ||
if (!test) { | ||
return flag; | ||
return flag | ||
} | ||
var escapeChar = test[1]; | ||
var endExp = new RegExp(escapeChar + '$'); | ||
var startExp = new RegExp('--js-flags=' + escapeChar); | ||
return flag.replace(startExp, '--js-flags=').replace(endExp, ''); | ||
var escapeChar = test[1] | ||
var endExp = new RegExp(escapeChar + '$') | ||
var startExp = new RegExp('--js-flags=' + escapeChar) | ||
return flag.replace(startExp, '--js-flags=').replace(endExp, '') | ||
} | ||
var ChromeBrowser = function(baseBrowserDecorator, args) { | ||
baseBrowserDecorator(this); | ||
var ChromeBrowser = function (baseBrowserDecorator, args) { | ||
baseBrowserDecorator(this) | ||
var flags = args.flags || []; | ||
var flags = args.flags || [] | ||
this._getOptions = function(url) { | ||
this._getOptions = function (url) { | ||
// Chrome CLI options | ||
// http://peter.sh/experiments/chromium-command-line-switches/ | ||
flags.forEach(function(flag, i) { | ||
flags.forEach(function (flag, i) { | ||
if (isJSFlags(flag)) { | ||
flags[i] = sanitizeJSFlags(flag); | ||
flags[i] = sanitizeJSFlags(flag) | ||
} | ||
}); | ||
}) | ||
@@ -41,56 +41,56 @@ return [ | ||
'--disable-translate' | ||
].concat(flags, [url]); | ||
}; | ||
}; | ||
].concat(flags, [url]) | ||
} | ||
} | ||
// Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS"). | ||
function getChromeExe(chromeDirName) { | ||
function getChromeExe (chromeDirName) { | ||
// Only run these checks on win32 | ||
if (process.platform !== 'win32') { | ||
return null; | ||
return null | ||
} | ||
var windowsChromeDirectory, i, prefix; | ||
var suffix = '\\Google\\' + chromeDirName + '\\Application\\chrome.exe'; | ||
var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']]; | ||
var windowsChromeDirectory, i, prefix | ||
var suffix = '\\Google\\' + chromeDirName + '\\Application\\chrome.exe' | ||
var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']] | ||
for (i = 0; i < prefixes.length; i++) { | ||
prefix = prefixes[i]; | ||
prefix = prefixes[i] | ||
try { | ||
windowsChromeDirectory = path.join(prefix, suffix); | ||
fs.accessSync(windowsChromeDirectory); | ||
return windowsChromeDirectory; | ||
windowsChromeDirectory = path.join(prefix, suffix) | ||
fsAccess.sync(windowsChromeDirectory) | ||
return windowsChromeDirectory | ||
} catch (e) {} | ||
} | ||
return windowsChromeDirectory; | ||
return windowsChromeDirectory | ||
} | ||
function getBin(commands) { | ||
function getBin (commands) { | ||
// Don't run these checks on win32 | ||
if (process.platform !== 'linux') { | ||
return null; | ||
return null | ||
} | ||
var bin, i; | ||
var bin, i | ||
for (i = 0; i < commands.length; i++) { | ||
try { | ||
if (which.sync(commands[i])) { | ||
bin = commands[i]; | ||
break; | ||
bin = commands[i] | ||
break | ||
} | ||
} catch (e) {} | ||
} | ||
return bin; | ||
return bin | ||
} | ||
function getChromeDarwin(defaultPath) { | ||
function getChromeDarwin (defaultPath) { | ||
if (process.platform !== 'darwin') { | ||
return null; | ||
return null | ||
} | ||
try { | ||
var homePath = path.join(process.env.HOME, defaultPath); | ||
fs.accessSync(homePath); | ||
return homePath; | ||
var homePath = path.join(process.env.HOME, defaultPath) | ||
fsAccess.sync(homePath) | ||
return homePath | ||
} catch (e) { | ||
return defaultPath; | ||
return defaultPath | ||
} | ||
@@ -110,29 +110,29 @@ } | ||
ENV_CMD: 'CHROME_BIN' | ||
}; | ||
} | ||
ChromeBrowser.$inject = ['baseBrowserDecorator', 'args']; | ||
ChromeBrowser.$inject = ['baseBrowserDecorator', 'args'] | ||
function canaryGetOptions(url, args, parent) { | ||
function canaryGetOptions (url, args, parent) { | ||
// disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0) | ||
var flags = args.flags || []; | ||
var augmentedFlags; | ||
var customFlags = '--nocrankshaft --noopt'; | ||
var flags = args.flags || [] | ||
var augmentedFlags | ||
var customFlags = '--nocrankshaft --noopt' | ||
flags.forEach(function(flag) { | ||
flags.forEach(function (flag) { | ||
if (isJSFlags(flag)) { | ||
augmentedFlags = sanitizeJSFlags(flag) + ' ' + customFlags; | ||
augmentedFlags = sanitizeJSFlags(flag) + ' ' + customFlags | ||
} | ||
}); | ||
}) | ||
return parent.call(this, url).concat([augmentedFlags || '--js-flags=' + customFlags]); | ||
return parent.call(this, url).concat([augmentedFlags || '--js-flags=' + customFlags]) | ||
} | ||
var ChromeCanaryBrowser = function(baseBrowserDecorator, args) { | ||
ChromeBrowser.apply(this, arguments); | ||
var ChromeCanaryBrowser = function (baseBrowserDecorator, args) { | ||
ChromeBrowser.apply(this, arguments) | ||
var parentOptions = this._getOptions; | ||
this._getOptions = function(url) { | ||
return canaryGetOptions.call(this, url, args, parentOptions); | ||
}; | ||
}; | ||
var parentOptions = this._getOptions | ||
this._getOptions = function (url) { | ||
return canaryGetOptions.call(this, url, args, parentOptions) | ||
} | ||
} | ||
@@ -148,25 +148,25 @@ ChromeCanaryBrowser.prototype = { | ||
ENV_CMD: 'CHROME_CANARY_BIN' | ||
}; | ||
} | ||
ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args']; | ||
ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args'] | ||
var DartiumBrowser = function() { | ||
ChromeBrowser.apply(this, arguments); | ||
var DartiumBrowser = function () { | ||
ChromeBrowser.apply(this, arguments) | ||
var checkedFlag = '--checked'; | ||
var dartFlags = process.env.DART_FLAGS || ''; | ||
var flags = dartFlags.split(' '); | ||
if (flags.indexOf(checkedFlag) === -1) { | ||
flags.push(checkedFlag); | ||
process.env.DART_FLAGS = flags.join(' '); | ||
} | ||
}; | ||
var checkedFlag = '--checked' | ||
var dartFlags = process.env.DART_FLAGS || '' | ||
var flags = dartFlags.split(' ') | ||
if (flags.indexOf(checkedFlag) === -1) { | ||
flags.push(checkedFlag) | ||
process.env.DART_FLAGS = flags.join(' ') | ||
} | ||
} | ||
DartiumBrowser.prototype = { | ||
name: 'Dartium', | ||
DEFAULT_CMD: {}, | ||
ENV_CMD: 'DARTIUM_BIN' | ||
}; | ||
name: 'Dartium', | ||
DEFAULT_CMD: {}, | ||
ENV_CMD: 'DARTIUM_BIN' | ||
} | ||
DartiumBrowser.$inject = ['baseBrowserDecorator', 'args']; | ||
DartiumBrowser.$inject = ['baseBrowserDecorator', 'args'] | ||
@@ -178,3 +178,3 @@ // PUBLISH DI MODULE | ||
'launcher:Dartium': ['type', DartiumBrowser] | ||
}; | ||
} | ||
@@ -185,2 +185,2 @@ module.exports.test = { | ||
canaryGetOptions: canaryGetOptions | ||
}; | ||
} |
{ | ||
"name": "karma-chrome-launcher", | ||
"version": "0.1.12", | ||
"version": "0.2.0", | ||
"description": "A Karma plugin. Launcher for Chrome and Chrome Canary.", | ||
@@ -20,2 +20,3 @@ "main": "index.js", | ||
"dependencies": { | ||
"fs-access": "^1.0.0", | ||
"which": "^1.0.9" | ||
@@ -25,7 +26,19 @@ }, | ||
"devDependencies": { | ||
"grunt": "~0.4.1", | ||
"grunt-npm": "~0.0.2", | ||
"grunt-bump": "~0.0.6", | ||
"grunt-auto-release": "~0.0.2", | ||
"jasmine-node": "~1.14.5" | ||
"chai": "^3.0.0", | ||
"eslint": "^0.23.0", | ||
"eslint-config-standard": "^3.3.0", | ||
"grunt": "^0.4.1", | ||
"grunt-auto-release": "^0.0.6", | ||
"grunt-bump": "^0.3.1", | ||
"grunt-conventional-changelog": "^1.2.2", | ||
"grunt-eslint": "^15.0.0", | ||
"grunt-karma": "^0.11.1", | ||
"grunt-npm": "^0.0.2", | ||
"grunt-simple-mocha": "^0.4.0", | ||
"jasmine-node": "^1.14.5", | ||
"karma": "^0.12.36", | ||
"karma-mocha": "^0.2.0", | ||
"load-grunt-tasks": "^3.2.0", | ||
"mocha": "^2.2.5", | ||
"sinon": "^1.15.3" | ||
}, | ||
@@ -36,5 +49,7 @@ "contributors": [ | ||
"Friedel Ziegelmayer <friedel.ziegelmayer@gmail.com>", | ||
"dignifiedquire <dignifiedquire@gmail.com>", | ||
"Filipe Guerra <alias.mac@gmail.com>", | ||
"Aymeric Beaumet <aymeric@beaumet.me>", | ||
"Filipe Guerra <alias.mac@gmail.com>", | ||
"Jeff Cross <middlefloor@gmail.com>", | ||
"Julien Sanchez <julien.sanchez@lim.eu>", | ||
"Marko Vuksanovic <markovuksanovic@gmail.com>", | ||
"Michał Gołębiowski <m.goleb@gmail.com>", | ||
@@ -44,6 +59,5 @@ "Michał Gołębiowski <m.goleb@gmail.com>", | ||
"Timo Tijhof <krinklemail@gmail.com>", | ||
"Marko Vuksanovic <markovuksanovic@gmail.com>", | ||
"Joe Doyle <valdain@gmail.com>", | ||
"Julien Sanchez <julien.sanchez@lim.eu>" | ||
"Jeff Cross <middlefloor@gmail.com>", | ||
"Joe Doyle <valdain@gmail.com>" | ||
] | ||
} |
# karma-chrome-launcher | ||
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/karma-runner/karma-chrome-launcher) | ||
[![npm version](https://img.shields.io/npm/v/karma-chrome-launcher.svg?style=flat-square)](https://www.npmjs.com/package/karma-chrome-launcher) [![npm downloads](https://img.shields.io/npm/dm/karma-chrome-launcher.svg?style=flat-square)](https://www.npmjs.com/package/karma-chrome-launcher) | ||
[![Build Status](https://img.shields.io/travis/karma-runner/karma-chrome-launcher/master.svg?style=flat-square)](https://travis-ci.org/karma-runner/karma-chrome-launcher) [![Dependency Status](https://img.shields.io/david/karma-runner/karma-chrome-launcher.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-chrome-launcher) [![devDependency Status](https://img.shields.io/david/dev/karma-runner/karma-chrome-launcher.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-chrome-launcher#info=devDependencies) | ||
> Launcher for Google Chrome and Google Chrome Canary. | ||
@@ -7,18 +12,11 @@ | ||
The easiest way is to keep `karma-chrome-launcher` as a devDependency in your `package.json`. | ||
```json | ||
{ | ||
"devDependencies": { | ||
"karma": "~0.10", | ||
"karma-chrome-launcher": "~0.1" | ||
} | ||
} | ||
``` | ||
The easiest way is to keep `karma-chrome-launcher` as a devDependency in your `package.json`, | ||
by running | ||
You can simple do it by: | ||
```bash | ||
npm install karma-chrome-launcher --save-dev | ||
$ npm install karma-chrome-launcher --save-dev | ||
``` | ||
## Configuration | ||
```js | ||
@@ -37,9 +35,10 @@ // karma.conf.js | ||
} | ||
}); | ||
}; | ||
}) | ||
} | ||
``` | ||
You can pass list of browsers as a CLI argument too: | ||
```bash | ||
karma start --browsers Chrome,Chrome_without_security | ||
$ karma start --browsers Chrome,Chrome_without_security | ||
``` | ||
@@ -46,0 +45,0 @@ |
@@ -1,51 +0,53 @@ | ||
var launcher = require('../index'); | ||
var expect = require('chai').expect | ||
var sinon = require('sinon') | ||
describe('isJSFlags()', function() { | ||
var isJSFlags = launcher.test.isJSFlags; | ||
var launcher = require('../index') | ||
it('should return true if flag begins with --js-flags=', function() { | ||
expect(isJSFlags('--js-flags=--expose-gc')).toBe(true); | ||
expect(isJSFlags('--js-flags="--expose-gc"')).toBe(true); | ||
expect(isJSFlags("--js-flags='--expose-gc'")).toBe(true); | ||
}); | ||
describe('isJSFlags()', function () { | ||
var isJSFlags = launcher.test.isJSFlags | ||
it('should return false if flag does not begin with --js-flags=', function(){ | ||
expect(isJSFlags(' --js-flags=--expose-gc')).toBe(false); | ||
expect(isJSFlags('--js-flags"--expose-gc"')).toBe(false); | ||
expect(isJSFlags('--jsflags="--expose-gc"')).toBe(false); | ||
}); | ||
}); | ||
it('should return true if flag begins with --js-flags=', function () { | ||
expect(isJSFlags('--js-flags=--expose-gc')).to.be.eql(true) | ||
expect(isJSFlags('--js-flags="--expose-gc"')).to.be.eql(true) | ||
expect(isJSFlags("--js-flags='--expose-gc'")).to.be.eql(true) | ||
}) | ||
it('should return false if flag does not begin with --js-flags=', function () { | ||
expect(isJSFlags(' --js-flags=--expose-gc')).to.be.eql(false) | ||
expect(isJSFlags('--js-flags"--expose-gc"')).to.be.eql(false) | ||
expect(isJSFlags('--jsflags="--expose-gc"')).to.be.eql(false) | ||
}) | ||
}) | ||
describe('sanitizeJSFlags()', function() { | ||
var sanitizeJSFlags = launcher.test.sanitizeJSFlags; | ||
describe('sanitizeJSFlags()', function () { | ||
var sanitizeJSFlags = launcher.test.sanitizeJSFlags | ||
it('should do nothing if flags are not contained in quotes', function() { | ||
expect(sanitizeJSFlags('--js-flags=--expose-gc')).toBe('--js-flags=--expose-gc'); | ||
}); | ||
it('should do nothing if flags are not contained in quotes', function () { | ||
expect(sanitizeJSFlags('--js-flags=--expose-gc')).to.be.eql('--js-flags=--expose-gc') | ||
}) | ||
it('should symmetrically remove single or double quote if wraps all flags', function() { | ||
expect(sanitizeJSFlags("--js-flags='--expose-gc'")).toBe("--js-flags=--expose-gc"); | ||
expect(sanitizeJSFlags('--js-flags="--expose-gc"')).toBe('--js-flags=--expose-gc'); | ||
}); | ||
it('should symmetrically remove single or double quote if wraps all flags', function () { | ||
expect(sanitizeJSFlags("--js-flags='--expose-gc'")).to.be.eql('--js-flags=--expose-gc') | ||
expect(sanitizeJSFlags('--js-flags="--expose-gc"')).to.be.eql('--js-flags=--expose-gc') | ||
}) | ||
it('should NOT remove anything if the flags are not contained within quote', function() { | ||
expect(sanitizeJSFlags('--js-flags=--expose-gc="true"')).toBe('--js-flags=--expose-gc="true"'); | ||
expect(sanitizeJSFlags("--js-flags=--expose-gc='true'")).toBe("--js-flags=--expose-gc='true'"); | ||
}); | ||
}); | ||
it('should NOT remove anything if the flags are not contained within quote', function () { | ||
expect(sanitizeJSFlags('--js-flags=--expose-gc="true"')).to.be.eql('--js-flags=--expose-gc="true"') | ||
expect(sanitizeJSFlags("--js-flags=--expose-gc='true'")).to.be.eql("--js-flags=--expose-gc='true'") | ||
}) | ||
}) | ||
describe('canaryGetOptions', function() { | ||
var canaryGetOptions = launcher.test.canaryGetOptions; | ||
describe('canaryGetOptions', function () { | ||
var canaryGetOptions = launcher.test.canaryGetOptions | ||
it('should return a merged version of --js-flags', function() { | ||
var parent = jasmine.createSpy('parent').andReturn(['-incognito']); | ||
var context = {}; | ||
var url = 'http://localhost:9876'; | ||
var args = {flags: ['--js-flags="--expose-gc"']}; | ||
expect(canaryGetOptions.call(context, url, args, parent)).toEqual([ | ||
it('should return a merged version of --js-flags', function () { | ||
var parent = sinon.stub().returns(['-incognito']) | ||
var context = {} | ||
var url = 'http://localhost:9876' | ||
var args = {flags: ['--js-flags="--expose-gc"']} | ||
expect(canaryGetOptions.call(context, url, args, parent)).to.be.eql([ | ||
'-incognito', | ||
'--js-flags=--expose-gc --nocrankshaft --noopt' | ||
]); | ||
}); | ||
}); | ||
]) | ||
}) | ||
}) |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
15981
9
281
2
17
50
2
+ Addedfs-access@^1.0.0
+ Addedfs-access@1.0.1(transitive)
+ Addednull-check@1.0.0(transitive)