From 33f0c35522d03821d8abb41b2026b22b0779487c Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Tue, 13 Oct 2015 09:34:07 -0700 Subject: [PATCH] Add eslint configuration --- .eslintrc | 9 +++ lib/assert/element.js | 4 +- lib/assert/imgLoaded_client.js | 7 +- lib/assert/index.js | 4 +- lib/browser/alert.js | 2 +- lib/browser/cookie.js | 8 +-- lib/browser/debug/console.js | 4 +- lib/browser/debug/index.js | 4 +- lib/browser/element.js | 18 +++-- lib/browser/index.js | 23 +++---- lib/browser/makeUrlRegExp.js | 13 ++-- lib/browser/navigation.js | 2 +- lib/browser/page.js | 2 +- lib/browser/wait.js | 13 ++-- lib/browser/window.js | 2 +- lib/testium-driver-sync.js | 2 +- package.json | 5 +- test/.eslintrc | 9 +++ test/browser/debug.js | 20 +++--- test/integration/assert/imgLoaded.test.js | 20 +++--- test/integration/console.test.js | 36 +++++----- test/integration/cookie.test.js | 18 ++--- test/integration/dialog.test.js | 11 +-- test/integration/element.test.js | 82 +++++++++++------------ test/integration/evaluate.test.js | 2 +- test/integration/form.test.js | 34 +++++----- test/integration/header.test.js | 10 +-- test/integration/navigation.test.js | 12 ++-- test/integration/non_browser.test.js | 2 +- test/integration/proxy.test.js | 10 ++- test/integration/ssl.test.js | 4 +- test/integration/unicode.test.js | 6 +- test/integration/window.test.js | 10 +-- test/mini-testium-mocha.js | 5 +- 34 files changed, 212 insertions(+), 201 deletions(-) create mode 100644 .eslintrc create mode 100644 test/.eslintrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..68d14a4 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,9 @@ +{ + "extends": "airbnb/legacy", + "rules": { + "id-length": 0, + "vars-on-top": 0, + "strict": [2, "global"], + "no-param-reassign": 0 + } +} diff --git a/lib/assert/element.js b/lib/assert/element.js index 1b5a8de..3b763f6 100644 --- a/lib/assert/element.js +++ b/lib/assert/element.js @@ -36,7 +36,7 @@ exports.elementHasAttributes = function elementHasAttributes(doc, selector, attr selector = doc; doc = [ 'elementHasAttributes - selector:' + selector, - 'attributesObject:' + JSON.stringify(attributesObject) + 'attributesObject:' + JSON.stringify(attributesObject), ].join('\n'); } else { assert.hasType('elementHasAttributes(docstring, selector, attributesObject) - requires String docstring', String, doc); @@ -47,7 +47,7 @@ exports.elementHasAttributes = function elementHasAttributes(doc, selector, attr var element = this._getElement(selector); - _.each(attributesObject, function(val, attribute) { + _.each(attributesObject, function verifyAttribute(val, attribute) { var actualVal = element.get(attribute); var attrDoc = util.format( '%s\nattribute %j was expected to be %j but was %j.', diff --git a/lib/assert/imgLoaded_client.js b/lib/assert/imgLoaded_client.js index 5adf829..fab7a04 100644 --- a/lib/assert/imgLoaded_client.js +++ b/lib/assert/imgLoaded_client.js @@ -1,3 +1,4 @@ +/* jshint browser: true */ 'use strict'; // returns true if the image is loaded and decoded, @@ -21,15 +22,13 @@ module.exports = function imgLoaded(selector) { if (imgs.length !== 1) { return imgs.length; } - img = imgs[0]; + var img = imgs[0]; if (!img.src) { - var oops = describe(img); if ((img.tagName || '').match(/^img$/i)) { return 'src-less ' + describe(img); - } else { - return 'non-image ' + describe(img); } + return 'non-image ' + describe(img); } return img.complete && img.naturalWidth ? true : img.src; diff --git a/lib/assert/index.js b/lib/assert/index.js index 5349772..0ec646e 100644 --- a/lib/assert/index.js +++ b/lib/assert/index.js @@ -10,8 +10,8 @@ function Assertions(driver, browser) { _.each([ require('./element'), require('./imgLoaded'), - require('./navigation') -], function(mixin) { + require('./navigation'), +], function applyMixin(mixin) { _.extend(Assertions.prototype, mixin); }); diff --git a/lib/browser/alert.js b/lib/browser/alert.js index f07775f..9949f7a 100644 --- a/lib/browser/alert.js +++ b/lib/browser/alert.js @@ -4,5 +4,5 @@ exports._forwarded = [ 'acceptAlert', 'dismissAlert', 'getAlertText', - 'typeAlert' + 'typeAlert', ]; diff --git a/lib/browser/cookie.js b/lib/browser/cookie.js index 8badd5c..f04c87f 100644 --- a/lib/browser/cookie.js +++ b/lib/browser/cookie.js @@ -8,13 +8,13 @@ var getTestiumCookie = require('testium-cookie').getTestiumCookie; exports._forwarded = [ // TODO: Port validateCookie to webdriver-http-sync 'setCookie', - 'clearCookies' + 'clearCookies', ]; -exports.setCookies = function(cookies) { +exports.setCookies = function setCookies(cookies) { _.each(cookies, this.setCookie, this); return this; -} +}; exports.getCookie = function getCookie(name) { assert.hasType('getCookie(name) - requires (String) name', String, name); @@ -31,7 +31,7 @@ exports.clearCookie = function clearCookie(name) { return this.setCookie({ name: name, value: 'dummy', // setCookie doesn't allow null values - expiry: 0 + expiry: 0, }); }; diff --git a/lib/browser/debug/console.js b/lib/browser/debug/console.js index d1b6f97..1bc001d 100644 --- a/lib/browser/debug/console.js +++ b/lib/browser/debug/console.js @@ -6,7 +6,7 @@ var logMap = { 'SEVERE': 'error', 'WARNING': 'warn', 'INFO': 'log', - 'DEBUG': 'debug' + 'DEBUG': 'debug', }; function convertLogType(log) { @@ -25,7 +25,7 @@ exports.filterLogs = function filterLogs(logs, type) { if (!type) { return { matched: logs }; } - return _.groupBy(logs, function(log) { + return _.groupBy(logs, function byMatched(log) { return log.type === type ? 'matched' : 'rest'; }); }; diff --git a/lib/browser/debug/index.js b/lib/browser/debug/index.js index 4819740..7282eed 100644 --- a/lib/browser/debug/index.js +++ b/lib/browser/debug/index.js @@ -10,7 +10,7 @@ var TYPES = [ 'error', 'warn', 'log', - 'debug' + 'debug', ]; var cachedLogs = []; @@ -24,6 +24,6 @@ exports.getConsoleLogs = function getConsoleLogs(type) { var logs = cachedLogs.concat(newLogs); var filtered = filterLogs(logs, type); - cachedLogs = filtered.rest || [] + cachedLogs = filtered.rest || []; return filtered.matched || []; }; diff --git a/lib/browser/element.js b/lib/browser/element.js index ab69938..2ea735f 100644 --- a/lib/browser/element.js +++ b/lib/browser/element.js @@ -10,7 +10,7 @@ var STALE_MESSAGE = /stale element reference/; var NOT_FOUND_MESSAGE = new RegExp([ 'Unable to locate element', // firefox message 'Unable to find element', // phantomjs message - 'no such element', // chrome message + 'no such element', // chrome message ].join('|')); function visiblePredicate(shouldBeVisible, element) { @@ -40,7 +40,7 @@ var isntVisibleFailure = _.partial(visibleFailure, false); exports._forwarded = [ // TODO: port type assertion for selector to webdriver-http-sync - 'getElements' + 'getElements', ]; exports.getElementWithoutError = function getElementWithoutError(selector) { @@ -73,24 +73,26 @@ exports.waitForElementVisible = function waitForElementVisible(selector, timeout exports.waitForElementNotVisible = function waitForElementNotVisible(selector, timeout) { return this._waitForElement(selector, isntVisiblePredicate, isntVisibleFailure, timeout); -} +}; exports.waitForElementExist = function waitForElementExist(selector, timeout) { return this._waitForElement(selector, elementExistsPredicate, elementExistsFailure, timeout); -} +}; exports.click = function click(selector) { return this.getExistingElement(selector).click(); }; function tryFindElement(self, selector, predicate, untilTime) { - var element, predicateResult; + var element; while (Date.now() < untilTime) { element = self.getElementWithoutError(selector); try { - predicateResult = predicate(element); + if (predicate(element)) { + return element; + } } catch (exception) { // Occasionally webdriver throws an error about the element reference being // stale. Let's handle that case as the element doesn't yet exist. All @@ -99,10 +101,6 @@ function tryFindElement(self, selector, predicate, untilTime) { throw exception; } } - - if (predicateResult) { - return element; - } } return null; } diff --git a/lib/browser/index.js b/lib/browser/index.js index e92d2bc..966b458 100644 --- a/lib/browser/index.js +++ b/lib/browser/index.js @@ -11,7 +11,7 @@ var builtIns = [ require('./input'), require('./navigation'), require('./page'), - require('./window') + require('./window'), ]; function Browser(driver, options) { @@ -32,21 +32,20 @@ Browser.prototype.evaluate = function evaluate() { assert.truthy(invocation, clientFunction); switch (typeof clientFunction) { - case 'function': - clientFunction = - 'return (' + clientFunction + ').apply(this, ' + JSON.stringify(args) + ');'; - // fall-through - - case 'string': - return this.driver.evaluate(clientFunction); - - default: - throw new Error(invocation); + case 'function': + clientFunction = + 'return (' + clientFunction + ').apply(this, ' + JSON.stringify(args) + ');'; + /* falls through */ + case 'string': + return this.driver.evaluate(clientFunction); + + default: + throw new Error(invocation); } }; function forwardToDriver(method) { - Browser.prototype[method] = function() { + Browser.prototype[method] = function _forwarded() { return this.driver[method].apply(this.driver, arguments); }; } diff --git a/lib/browser/makeUrlRegExp.js b/lib/browser/makeUrlRegExp.js index d79a197..c34f4f9 100644 --- a/lib/browser/makeUrlRegExp.js +++ b/lib/browser/makeUrlRegExp.js @@ -10,10 +10,9 @@ function quoteRegExp(string) { } function bothCases(alpha) { - var dn, up; - up = alpha.toUpperCase(); - dn = alpha.toLowerCase(); - return "[" + up + dn + "]"; + var up = alpha.toUpperCase(); + var dn = alpha.toLowerCase(); + return '[' + up + dn + ']'; } var isHexaAlphaRE = /[a-f]/gi; @@ -24,7 +23,7 @@ function matchCharacter(uriEncoded, hex) { if (character === ' ') { character += '|\\+'; } - return "(?:" + uriEncoded.replace(isHexaAlphaRE, bothCases) + "|" + character + ")"; + return '(?:' + uriEncoded.replace(isHexaAlphaRE, bothCases) + '|' + character + ')'; } var encodedCharRE = /%([0-9a-f]{2})/gi; @@ -39,10 +38,10 @@ function matchURI(stringOrRegExp) { function makeUrlRegExp(url, query) { var expr = matchURI(url); - _.each(query || {}, function(val, key) { + _.each(query || {}, function queryParamMatcher(val, key) { key = matchURI(key); val = matchURI(val); - expr += "(?=(?:\\?|.*&)" + key + "=" + val + ")"; + expr += '(?=(?:\\?|.*&)' + key + '=' + val + ')'; }); return new RegExp(expr); } diff --git a/lib/browser/navigation.js b/lib/browser/navigation.js index 65c8c30..ae55e7b 100644 --- a/lib/browser/navigation.js +++ b/lib/browser/navigation.js @@ -10,7 +10,7 @@ var waitFor = require('./wait'); exports._forwarded = [ 'refresh', - 'getUrl' + 'getUrl', ]; exports.navigateTo = function navigateTo(url, options) { diff --git a/lib/browser/page.js b/lib/browser/page.js index f1981cc..ecfa936 100644 --- a/lib/browser/page.js +++ b/lib/browser/page.js @@ -5,5 +5,5 @@ exports._forwarded = [ 'getPageSource', 'getScreenshot', 'setPageSize', - 'getPageSize' + 'getPageSize', ]; diff --git a/lib/browser/wait.js b/lib/browser/wait.js index 44aa991..ff17e13 100644 --- a/lib/browser/wait.js +++ b/lib/browser/wait.js @@ -4,26 +4,23 @@ var util = require('util'); var _ = require('lodash'); -function testEqual(a, b) { return a === b; } - function matches(stringOrRegex, testUrl) { return stringOrRegex.test(testUrl); } -function createTest(stringOrRegex) { +function createTest(stringOrRegex, waitingFor) { if (_.isString(stringOrRegex)) { return _.partial(_.isEqual, stringOrRegex); } else if (_.isRegExp(stringOrRegex)) { return _.partial(matches, stringOrRegex); - } else { - throw new Error( - util.format('waitFor%s(urlStringOrRegex) - requires a string or regex param', - waitingFor)); } + throw new Error( + util.format('waitFor%s(urlStringOrRegex) - requires a string or regex param', + waitingFor)); } function waitFor(stringOrRegex, waitingFor, getValue, timeout) { - var test = createTest(stringOrRegex); + var test = createTest(stringOrRegex, waitingFor); var start = Date.now(); var currentValue; diff --git a/lib/browser/window.js b/lib/browser/window.js index 0d148e2..e6c8b11 100644 --- a/lib/browser/window.js +++ b/lib/browser/window.js @@ -4,7 +4,7 @@ var assert = require('assertive'); exports._forwarded = [ 'switchToWindow', - 'closeWindow' + 'closeWindow', ]; exports.switchToDefaultFrame = function switchToDefaultFrame() { diff --git a/lib/testium-driver-sync.js b/lib/testium-driver-sync.js index df2a9b2..e61897f 100644 --- a/lib/testium-driver-sync.js +++ b/lib/testium-driver-sync.js @@ -17,7 +17,7 @@ function createDriver(testium) { var browser = testium.browser = new Browser(driver, { appUrl: 'http://127.0.0.1:' + config.get('app.port'), - getNewPageUrl: testium.getNewPageUrl + getNewPageUrl: testium.getNewPageUrl, }); browser.assert = new Assertions(driver, browser); diff --git a/package.json b/package.json index 65e3ee7..9dfeb63 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Sync interface for testium", "main": "lib/testium-driver-sync.js", "scripts": { - "test": "mocha" + "test": "eslint lib test && mocha" }, "repository": { "type": "git", @@ -24,6 +24,9 @@ "homepage": "https://github.com/testiumjs/testium-driver-sync#readme", "devDependencies": { "babel-core": "^5.8.25", + "babel-eslint": "^4.1.3", + "eslint": "^1.6.0", + "eslint-config-airbnb": "~0.1.0", "mocha": "^2.3.3", "node-static": "~0.7.7", "testium-core": "^1.1.2" diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 0000000..cdb7351 --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,9 @@ +{ + "extends": "airbnb/base", + "env": { + "mocha": true + }, + "rules": { + "id-length": 0 + } +} diff --git a/test/browser/debug.js b/test/browser/debug.js index 5650055..b388a30 100644 --- a/test/browser/debug.js +++ b/test/browser/debug.js @@ -3,9 +3,9 @@ import {parseLogs, filterLogs} from '../../lib/browser/debug/console'; describe('parseLogs', () => { it('maps log levels to browser log types', () => { - var logs = [ { level: 'SEVERE' } ]; - var parsed = parseLogs(logs); - var log = parsed[0]; + const logs = [ { level: 'SEVERE' } ]; + const parsed = parseLogs(logs); + const log = parsed[0]; assert.equal(log.level, undefined); assert.equal(log.type, 'error'); @@ -14,21 +14,21 @@ describe('parseLogs', () => { describe('filterLogs', () => { it('returns all logs if no type is given', () => { - var logs = [ + const logs = [ { type: 'error', message: 'something broke' }, - { type: 'log', message: 'things are working' } + { type: 'log', message: 'things are working' }, ]; - var { matched } = filterLogs(logs); + const { matched } = filterLogs(logs); assert.deepEqual(logs, matched); }); it('filters logs based on type', () => { - var errorItem = { type: 'error', message: 'something broke' }; - var logItem = { type: 'log', message: 'things are working' }; - var logs = [ logItem, errorItem ]; + const errorItem = { type: 'error', message: 'something broke' }; + const logItem = { type: 'log', message: 'things are working' }; + const logs = [ logItem, errorItem ]; - var { matched, rest } = filterLogs(logs, 'error'); + const { matched, rest } = filterLogs(logs, 'error'); assert.equal(errorItem, matched[0]); assert.equal(1, matched.length); assert.equal(logItem, rest[0]); diff --git a/test/integration/assert/imgLoaded.test.js b/test/integration/assert/imgLoaded.test.js index 01142e5..07df077 100644 --- a/test/integration/assert/imgLoaded.test.js +++ b/test/integration/assert/imgLoaded.test.js @@ -8,33 +8,33 @@ describe('imgLoaded', () => { before(() => browser.navigateTo('/')); it('throws an error when the image was not found', () => { - var msg = 'imgLoaded "img.not-in-the-page": element not found'; - var err = assert.throws(() => browser.assert.imgLoaded('img.not-in-the-page')); + const msg = 'imgLoaded "img.not-in-the-page": element not found'; + const err = assert.throws(() => browser.assert.imgLoaded('img.not-in-the-page')); assert.include(msg, err.message); }); it('throws an error for non-unique selectors when finding multiple images', () => { - var msg = 'imgLoaded "img[alt][class]": non-unique selector; count: 3'; - var err = assert.throws(() => browser.assert.imgLoaded('img[alt][class]')); + const msg = 'imgLoaded "img[alt][class]": non-unique selector; count: 3'; + const err = assert.throws(() => browser.assert.imgLoaded('img[alt][class]')); assert.include(msg, err.message); }); it('throws an error for an image not successfully loaded / decoded', () => { - var msg = 'imgLoaded "img.fail": failed to load '; - var err = assert.throws(() => browser.assert.imgLoaded('img.fail')); + const msg = 'imgLoaded "img.fail": failed to load '; + const err = assert.throws(() => browser.assert.imgLoaded('img.fail')); assert.include(msg, err.message); assert.include('/non-existent-image.jpg', err.message); }); it('throws a helpful error for an missing the src attribute', () => { - var msg = 'imgLoaded "#no": failed to load src-less img#no.src.dude'; - var err = assert.throws(() => browser.assert.imgLoaded('#no')); + const msg = 'imgLoaded "#no": failed to load src-less img#no.src.dude'; + const err = assert.throws(() => browser.assert.imgLoaded('#no')); assert.include(msg, err.message); }); it('throws a helpful error when the selector did not match an tag', () => { - var msg = 'imgLoaded "body": failed to load non-image body'; - var err = assert.throws(() => browser.assert.imgLoaded('body')); + const msg = 'imgLoaded "body": failed to load non-image body'; + const err = assert.throws(() => browser.assert.imgLoaded('body')); assert.include(msg, err.message); }); diff --git a/test/integration/console.test.js b/test/integration/console.test.js index dfc4799..9b327da 100644 --- a/test/integration/console.test.js +++ b/test/integration/console.test.js @@ -14,31 +14,31 @@ describe('console', () => { // for console.logs differently. // Use at your own risk. it('can all be retrieved', () => { - var { browserName } = browser.capabilities; - var logs; + const { browserName } = browser.capabilities; + let logs; switch (browserName) { - case 'firefox': - // firefox ignores this entirely - break; + case 'firefox': + // firefox ignores this entirely + break; - case 'chrome': - logs = browser.getConsoleLogs(); - assert.truthy('console.logs length', logs.length > 0); + case 'chrome': + logs = browser.getConsoleLogs(); + assert.truthy('console.logs length', logs.length > 0); - logs = browser.getConsoleLogs(); - assert.equal(0, logs.length); + logs = browser.getConsoleLogs(); + assert.equal(0, logs.length); - browser.click('#log-button'); + browser.click('#log-button'); - logs = browser.getConsoleLogs(); - assert.truthy('console.logs length', logs.length > 0); - break; + logs = browser.getConsoleLogs(); + assert.truthy('console.logs length', logs.length > 0); + break; - default: - logs = browser.getConsoleLogs(); - assert.truthy('console.logs length', logs.length > 0); - break; + default: + logs = browser.getConsoleLogs(); + assert.truthy('console.logs length', logs.length > 0); + break; } }); }); diff --git a/test/integration/cookie.test.js b/test/integration/cookie.test.js index e313691..5299727 100644 --- a/test/integration/cookie.test.js +++ b/test/integration/cookie.test.js @@ -8,21 +8,21 @@ describe('cookie', () => { it('can be set individually', () => { browser.setCookie({ name: 'test_cookie', - value: '3' + value: '3', }); - var cookie = browser.getCookie('test_cookie'); + const cookie = browser.getCookie('test_cookie'); assert.equal('3', cookie.value); }); it('can be set in groups', () => { browser.setCookies([ { name: 'test_cookie1', value: '5' }, - { name: 'test_cookie2', value: '7' } + { name: 'test_cookie2', value: '7' }, ]); - var cookie1 = browser.getCookie('test_cookie1'); - var cookie2 = browser.getCookie('test_cookie2'); + const cookie1 = browser.getCookie('test_cookie1'); + const cookie2 = browser.getCookie('test_cookie2'); assert.equal('5', cookie1.value); assert.equal('7', cookie2.value); @@ -31,11 +31,11 @@ describe('cookie', () => { it('can be cleared as a group', () => { browser.setCookie({ name: 'test_cookie', - value: '9' + value: '9', }); browser.clearCookies(); - var cookies = browser.getCookies(); + const cookies = browser.getCookies(); assert.equal(0, cookies.length); }); @@ -43,12 +43,12 @@ describe('cookie', () => { it('can be cleared individually', () => { browser.setCookie({ name: 'test_cookie', - value: '4' + value: '4', }); browser.clearCookie('test_cookie'); - var cookie = browser.getCookie('test_cookie'); + const cookie = browser.getCookie('test_cookie'); assert.falsey(cookie); }); }); diff --git a/test/integration/dialog.test.js b/test/integration/dialog.test.js index d82b0ec..ff27fa5 100644 --- a/test/integration/dialog.test.js +++ b/test/integration/dialog.test.js @@ -3,7 +3,7 @@ import assert from 'assertive'; import Config from 'testium-core/lib/config'; -var browserName = Config.load().get('browser'); +const browserName = Config.load().get('browser'); describe('dialogs', () => { if (browserName === 'phantomjs') { @@ -11,9 +11,10 @@ describe('dialogs', () => { return; } - let browser, target; + let browser; before(async () => (browser = await getBrowser())); + let target; before(() => { browser.navigateTo('/'); browser.assert.httpStatus(200); @@ -26,7 +27,7 @@ describe('dialogs', () => { beforeEach(() => browser.click('.link_to_open_an_alert')); it('can get an alert text', () => { - var text = browser.getAlertText(); + const text = browser.getAlertText(); browser.acceptAlert(); assert.equal('Alert text was not found', 'An alert!', text); }); @@ -46,7 +47,7 @@ describe('dialogs', () => { beforeEach(() => browser.click('.link_to_open_a_confirm')); it('can get confirm text', () => { - var text = browser.getAlertText(); + const text = browser.getAlertText(); browser.acceptAlert(); assert.equal('Confirm text was not found', 'A confirmation!', text); }); @@ -66,7 +67,7 @@ describe('dialogs', () => { beforeEach(() => browser.click('.link_to_open_a_prompt')); it('can get prompt text', () => { - text = browser.getAlertText(); + const text = browser.getAlertText(); browser.acceptAlert(); assert.equal('Confirm text was not found', 'A prompt!', text); }); diff --git a/test/integration/element.test.js b/test/integration/element.test.js index 760931e..1406f94 100644 --- a/test/integration/element.test.js +++ b/test/integration/element.test.js @@ -8,8 +8,8 @@ describe('element', () => { before(() => browser.navigateTo('/')); it('can get an element\'s text', () => { - var element = browser.getElement('h1'); - var text = element.get('text'); + const element = browser.getElement('h1'); + const text = element.get('text'); assert.equal('Element text was not found', 'Test Page!', text); }); @@ -17,31 +17,31 @@ describe('element', () => { // the "checked" property (when it doesn't exist) // returns a non-standard response from selenium; // let's make sure we can handle it properly - var element = browser.getElement('#checkbox'); - var checked = element.get('checked'); + const element = browser.getElement('#checkbox'); + const checked = element.get('checked'); assert.equal('checked is null', null, checked); }); it('returns null when the element can not be found', () => { - var element = browser.getElement('.non-existing'); + const element = browser.getElement('.non-existing'); assert.equal('Element magically appeared on the page', null, element); }); it('can get several elements', () => { - var elements = browser.getElements('.message'); + const elements = browser.getElements('.message'); assert.equal('Messages were not all found', 3, elements.length); }); describe('elementIsVisible', () => { it('fails if element does not exist', () => { - var error = assert.throws(() => browser.assert.elementIsVisible('.non-existing')); - var expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; + const error = assert.throws(() => browser.assert.elementIsVisible('.non-existing')); + const expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; assert.equal(expectedError, error.message); }); it('fails if element exists, but is not visible', () => { - var error = assert.throws(() => browser.assert.elementIsVisible('#hidden_thing')); - var expectedError = 'Assertion failed: Element should be visible for selector: #hidden_thing\n\u001b[39;49;00mExpected \u001b[31mfalse\u001b[39m to be truthy'; + const error = assert.throws(() => browser.assert.elementIsVisible('#hidden_thing')); + const expectedError = 'Assertion failed: Element should be visible for selector: #hidden_thing\n\u001b[39;49;00mExpected \u001b[31mfalse\u001b[39m to be truthy'; assert.equal(expectedError, error.message); }); @@ -52,14 +52,14 @@ describe('element', () => { describe('elementNotVisible', () => { it('fails if element does not exist', () => { - var error = assert.throws(() => browser.assert.elementNotVisible('.non-existing')); - var expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; + const error = assert.throws(() => browser.assert.elementNotVisible('.non-existing')); + const expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; assert.equal(expectedError, error.message); }); it('fails if element exists, but is visible', () => { - var error = assert.throws(() => browser.assert.elementNotVisible('h1')); - var expectedError = 'Assertion failed: Element should not be visible for selector: h1\n\u001b[39;49;00mExpected \u001b[31mtrue\u001b[39m to be falsey'; + const error = assert.throws(() => browser.assert.elementNotVisible('h1')); + const expectedError = 'Assertion failed: Element should not be visible for selector: h1\n\u001b[39;49;00mExpected \u001b[31mtrue\u001b[39m to be falsey'; assert.equal(expectedError, error.message); }); @@ -70,8 +70,8 @@ describe('element', () => { describe('elementExists', () => { it('fails if element does not exist', () => { - var error = assert.throws(() => browser.assert.elementExists('.non-existing')); - var expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; + const error = assert.throws(() => browser.assert.elementExists('.non-existing')); + const expectedError = 'Assertion failed: Element not found for selector: .non-existing\n\u001b[39;49;00mExpected \u001b[31mnull\u001b[39m to be truthy'; assert.equal(expectedError, error.message); }); @@ -86,35 +86,35 @@ describe('element', () => { }); it('fails if element exists', () => { - var error = assert.throws(() => browser.assert.elementDoesntExist('h1')); - var expectedError = 'Assertion failed: Element found for selector: h1\n\u001b[39;49;00mExpected \u001b[31mElement\u001b[39m to be falsey'; + const error = assert.throws(() => browser.assert.elementDoesntExist('h1')); + const expectedError = 'Assertion failed: Element found for selector: h1\n\u001b[39;49;00mExpected \u001b[31mElement\u001b[39m to be falsey'; assert.equal(expectedError, error.message); }); }); describe('elementHasText', () => { it('finds and returns a single element', () => { - var element = browser.assert.elementHasText('.only', 'only one here'); + const element = browser.assert.elementHasText('.only', 'only one here'); assert.equal('resolve the element\'s class', 'only', element.get('class')); }); it('finds an element with the wrong text', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.assert.elementHasText('.only', 'the wrong text')); - var expected = 'Assertion failed: elementHasText: .only\n\u001b[39;49;00minclude expected needle to be found in haystack\n- needle: \"the wrong text\"\nhaystack: \"only one here\"'; + const expected = 'Assertion failed: elementHasText: .only\n\u001b[39;49;00minclude expected needle to be found in haystack\n- needle: \"the wrong text\"\nhaystack: \"only one here\"'; assert.equal(expected, error.message); }); it('finds no elements', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.assert.elementHasText('.does-not-exist', 'some text')); assert.equal('Element not found for selector: .does-not-exist', error.message); }); it('finds many elements', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.assert.elementHasText('.message', 'some text')); assert.equal('assertion needs a unique selector!\n.message has 3 hits in the page', error.message); @@ -127,22 +127,22 @@ describe('element', () => { describe('elementLacksText', () => { it('asserts an element lacks some text, and returns the element', () => { - var element = browser.assert.elementLacksText('.only', 'this text not present'); + const element = browser.assert.elementLacksText('.only', 'this text not present'); assert.equal('resolve the element\'s class', 'only', element.get('class')); }); it('finds an element incorrectly having some text', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.assert.elementLacksText('.only', 'only')); - var expected = 'Assertion failed: elementLacksText: .only\n\u001b[39;49;00mnotInclude expected needle not to be found in haystack\n- needle: \"only\"\nhaystack: \"only one here\"'; + const expected = 'Assertion failed: elementLacksText: .only\n\u001b[39;49;00mnotInclude expected needle not to be found in haystack\n- needle: \"only\"\nhaystack: \"only one here\"'; assert.equal(expected, error.message); }); }); describe('elementHasValue', () => { it('finds and returns a single element', () => { - var element = browser.assert.elementHasValue('#text-input', 'initialvalue'); + const element = browser.assert.elementHasValue('#text-input', 'initialvalue'); assert.equal('resolve the element\'s id', 'text-input', element.get('id')); }); @@ -153,15 +153,15 @@ describe('element', () => { describe('elementLacksValue', () => { it('asserts an element lacks some value, and returns the element', () => { - var element = browser.assert.elementLacksValue('#text-input', 'this text not present'); + const element = browser.assert.elementLacksValue('#text-input', 'this text not present'); assert.equal('resolve the element\'s id', 'text-input', element.get('id')); }); it('finds an element incorrectly having some text', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.assert.elementLacksValue('#text-input', 'initialvalue')); - var expected = 'Assertion failed: elementLacksValue: #text-input\n\u001b[39;49;00mnotInclude expected needle not to be found in haystack\n- needle: \"initialvalue\"\nhaystack: \"initialvalue\"'; + const expected = 'Assertion failed: elementLacksValue: #text-input\n\u001b[39;49;00mnotInclude expected needle not to be found in haystack\n- needle: \"initialvalue\"\nhaystack: \"initialvalue\"'; assert.equal(expected, error.message); }); }); @@ -180,7 +180,7 @@ describe('element', () => { }); it('fails to find an element that never exists', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.waitForElementExist('.does-not-exist', 10)); assert.equal('Timeout (10ms) waiting for element (.does-not-exist) to exist in page.', error.message); }); @@ -195,13 +195,13 @@ describe('element', () => { }); it('fails to find a visible element within the timeout', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.waitForElementVisible('.load_never', 10)); assert.equal('Timeout (10ms) waiting for element (.load_never) to be visible.', error.message); }); it('fails to find an element that never exists', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.waitForElementVisible('.does-not-exist', 10)); assert.equal('Timeout (10ms) waiting for element (.does-not-exist) to be visible.', error.message); }); @@ -216,13 +216,13 @@ describe('element', () => { }); it('fails to find a not-visible element within the timeout', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.waitForElementNotVisible('.hide_never', 10)); assert.equal('Timeout (10ms) waiting for element (.hide_never) to not be visible.', error.message); }); it('fails to find an element that never exists', () => { - var error = assert.throws(() => + const error = assert.throws(() => browser.waitForElementNotVisible('.does-not-exist', 10)); assert.equal('Timeout (10ms) waiting for element (.does-not-exist) to not be visible.', error.message); }); @@ -232,13 +232,13 @@ describe('element', () => { before(() => browser.navigateTo('/')); it('succeeds if selector is a String', () => { - var element = browser.getElement('body'); + const element = browser.getElement('body'); element.getElement('.message'); }); it('return null if not found an element on the message element', () => { - var messageElement = browser.getElement('.message'); - var element = messageElement.getElement('.message'); + const messageElement = browser.getElement('.message'); + const element = messageElement.getElement('.message'); assert.falsey(element); }); }); @@ -247,13 +247,13 @@ describe('element', () => { before(() => browser.navigateTo('/')); it('succeeds if selector is a String', () => { - var element = browser.getElement('body'); + const element = browser.getElement('body'); element.getElements('.message'); }); it('return empty array if not found an element on the message element', () => { - var messageElement = browser.getElement('.message'); - var elements = messageElement.getElements('.message'); + const messageElement = browser.getElement('.message'); + const elements = messageElement.getElements('.message'); assert.equal(0, elements.length); }); }); diff --git a/test/integration/evaluate.test.js b/test/integration/evaluate.test.js index a2a77c2..4d5b695 100644 --- a/test/integration/evaluate.test.js +++ b/test/integration/evaluate.test.js @@ -8,7 +8,7 @@ describe('evaluate', () => { before(() => browser.navigateTo('/')); it('runs JavaScript passed as a String', () => { - var value = browser.evaluate('return 3;'); + const value = browser.evaluate('return 3;'); assert.equal(3, value); }); diff --git a/test/integration/form.test.js b/test/integration/form.test.js index 06a9960..a92dd45 100644 --- a/test/integration/form.test.js +++ b/test/integration/form.test.js @@ -11,51 +11,51 @@ describe('evaluate', () => { }); it('can get an input\'s value', () => { - var element = browser.getElement('#text-input'); - var value = element.get('value'); + const element = browser.getElement('#text-input'); + const value = element.get('value'); assert.equal('Input value was not found', 'initialvalue', value); }); it('can clear an input\'s value', () => { - var element = browser.getElement('#text-input'); + const element = browser.getElement('#text-input'); element.clear(); - var value = element.get('value'); + const value = element.get('value'); assert.equal('Input value was not cleared', '', value); }); it('can type into an input', () => { - var element = browser.getElement('#text-input'); + const element = browser.getElement('#text-input'); element.type('new stuff'); - var value = element.get('value'); + const value = element.get('value'); assert.equal('Input value was not typed', 'new stuff', value); }); it('can replace the input\'s value', () => { - var element = browser.getElement('#text-input'); - var value = element.get('value'); - assert.notEqual('Input value is already empty', '', value); + const element = browser.getElement('#text-input'); + const valueBefore = element.get('value'); + assert.notEqual('Input value is already empty', '', valueBefore); browser.clearAndType('#text-input', 'new stuff2'); - value = element.get('value'); - assert.equal('Input value was not typed', 'new stuff2', value); + const valueAfter = element.get('value'); + assert.equal('Input value was not typed', 'new stuff2', valueAfter); }); it('can get a textarea\'s value', () => { - var element = browser.getElement('#text-area'); - var value = element.get('value'); + const element = browser.getElement('#text-area'); + const value = element.get('value'); assert.equal('Input value was not found', 'initialvalue', value); }); it('can clear an textarea\'s value', () => { - var element = browser.getElement('#text-area'); + const element = browser.getElement('#text-area'); element.clear(); - var value = element.get('value'); + const value = element.get('value'); assert.equal('Input value was not cleared', '', value); }); it('can type into a textarea', () => { - var element = browser.getElement('#text-area'); + const element = browser.getElement('#text-area'); element.type('new stuff'); - var value = element.get('value'); + const value = element.get('value'); assert.equal('Input value was not typed', 'new stuff', value); }); }); diff --git a/test/integration/header.test.js b/test/integration/header.test.js index ac4103f..8fdd653 100644 --- a/test/integration/header.test.js +++ b/test/integration/header.test.js @@ -12,13 +12,13 @@ describe('header', () => { }); it('as a group', () => { - var headers = browser.getHeaders(); - var contentType = headers['content-type']; + const headers = browser.getHeaders(); + const contentType = headers['content-type']; assert.equal('text/html', contentType); }); it('individually', () => { - var contentType = browser.getHeader('content-type'); + const contentType = browser.getHeader('content-type'); assert.equal('text/html', contentType); }); }); @@ -28,8 +28,8 @@ describe('header', () => { browser.navigateTo('/echo', { headers: { 'x-something': 'that place' } })); it('to new values', () => { - var source = browser.getElement('body').get('text'); - var body = JSON.parse(source); + const source = browser.getElement('body').get('text'); + const body = JSON.parse(source); assert.equal(body.headers['x-something'], 'that place'); }); }); diff --git a/test/integration/navigation.test.js b/test/integration/navigation.test.js index 7282135..808e1d5 100644 --- a/test/integration/navigation.test.js +++ b/test/integration/navigation.test.js @@ -61,8 +61,8 @@ describe('navigation', () => { browser.navigateTo('/index.html'); assert.equal(200, browser.getStatusCode()); - var error = assert.throws(() => browser.waitForUrl('/some-random-place.html', 5)); - var expectedError = /^Timed out \(5ms\) waiting for url \("\/some-random-place\.html"\)\. Last value was: "http:\/\/127\.0\.0\.1:[\d]+\/index\.html"$/; + const error = assert.throws(() => browser.waitForUrl('/some-random-place.html', 5)); + const expectedError = /^Timed out \(5ms\) waiting for url \("\/some-random-place\.html"\)\. Last value was: "http:\/\/127\.0\.0\.1:[\d]+\/index\.html"$/; assert.match(expectedError, error.message); }); @@ -71,7 +71,7 @@ describe('navigation', () => { browser.navigateTo('/redirect-to-query.html'); browser.waitForUrl('/index.html', { 'a b': 'A B', - c: '1,7' + c: '1,7', }); assert.equal(200, browser.getStatusCode()); }); @@ -80,7 +80,7 @@ describe('navigation', () => { browser.navigateTo('/redirect-to-query.html'); browser.waitForUrl('/index.html', { c: '1,7', - 'a b': 'A B' + 'a b': 'A B', }); }); @@ -88,14 +88,14 @@ describe('navigation', () => { browser.navigateTo('/redirect-to-query.html'); browser.waitForUrl('/index.html', { c: /[\d,]+/, - 'a b': 'A B' + 'a b': 'A B', }); }); it('detects non-matches too', () => { browser.navigateTo('/redirect-to-query.html'); - var error = assert.throws(() => browser.waitForUrl('/index.html', { no: 'q' }, 200)); + const error = assert.throws(() => browser.waitForUrl('/index.html', { no: 'q' }, 200)); assert.match(/Timed out .* waiting for url/, error.message); }); }); diff --git a/test/integration/non_browser.test.js b/test/integration/non_browser.test.js index 6af250b..0afec06 100644 --- a/test/integration/non_browser.test.js +++ b/test/integration/non_browser.test.js @@ -8,7 +8,7 @@ describe('Non-browser test', () => { before(async () => (browser = await getBrowser())); it('can make a request without using the browser', done => { - var url = `${browser.appUrl}/echo`; + const url = `${browser.appUrl}/echo`; get(url, response => { assert.equal(200, response.statusCode); done(); diff --git a/test/integration/proxy.test.js b/test/integration/proxy.test.js index 97d2237..db49a97 100644 --- a/test/integration/proxy.test.js +++ b/test/integration/proxy.test.js @@ -1,5 +1,4 @@ import {getBrowser} from '../mini-testium-mocha'; -import assert from 'assertive'; describe('proxy', () => { let browser; @@ -26,6 +25,9 @@ describe('proxy', () => { browser.navigateTo('/blackholed-resource.html'); browser.assert.httpStatus(200); + // this can't simply be sync + // because firefox blocks dom-ready + // if we don't wait on the client-side setTimeout(() => { // when navigating away, the proxy should // abort the resource request; @@ -33,11 +35,7 @@ describe('proxy', () => { // or status code retrieval browser.navigateTo('/'); browser.assert.httpStatus(200); - done() - - // this can't simply be sync - // because firefox blocks dom-ready - // if we don't wait on the client-side + done(); }, 50); }); diff --git a/test/integration/ssl.test.js b/test/integration/ssl.test.js index 5f347ce..0a71bff 100644 --- a/test/integration/ssl.test.js +++ b/test/integration/ssl.test.js @@ -7,8 +7,8 @@ describe('ssl/tls', () => { it('TLS is supported', () => { browser.navigateTo('https://www.howsmyssl.com/a/check'); - var raw = browser.getExistingElement('pre').get('text'); - var sslReport = JSON.parse(raw); + const raw = browser.getExistingElement('pre').get('text'); + const sslReport = JSON.parse(raw); assert.match(/^TLS/, sslReport.tls_version); }); }); diff --git a/test/integration/unicode.test.js b/test/integration/unicode.test.js index f8992a2..db2c5f6 100644 --- a/test/integration/unicode.test.js +++ b/test/integration/unicode.test.js @@ -8,10 +8,10 @@ describe('unicode support', () => { before(() => browser.navigateTo('/')); it('multibyte unicode can pass through and back from WebDriver', () => { - var multibyteText = '日本語 text'; - var element = browser.getElement('#blank-input'); + const multibyteText = '日本語 text'; + const element = browser.getElement('#blank-input'); element.type(multibyteText); - var result = element.get('value'); + const result = element.get('value'); assert.equal(result, multibyteText); }); }); diff --git a/test/integration/window.test.js b/test/integration/window.test.js index 19fad58..ba81e16 100644 --- a/test/integration/window.test.js +++ b/test/integration/window.test.js @@ -13,9 +13,9 @@ describe('window api', () => { it('can be switched', () => { browser.switchToFrame('cool-frame'); - var iframeContent = browser.getElement('.in-iframe-only').get('text'); + const iframeContent = browser.getElement('.in-iframe-only').get('text'); browser.switchToDefaultFrame(); - var primaryContent = browser.getElement('.in-iframe-only'); + const primaryContent = browser.getElement('.in-iframe-only'); assert.equal('iframe content!', iframeContent); assert.equal(null, primaryContent); }); @@ -23,7 +23,7 @@ describe('window api', () => { it('can be found when nested', () => { browser.switchToFrame('cool-frame'); browser.switchToFrame('nested-frame'); - var element = browser.getElement('#nested-frame-div'); + const element = browser.getElement('#nested-frame-div'); assert.truthy('nested frame content', element); }); }); @@ -37,10 +37,10 @@ describe('window api', () => { it('can be opened', () => { browser.click('#open-popup'); browser.switchToWindow('popup1'); - var popupContent = browser.getElement('.popup-only').get('text'); + const popupContent = browser.getElement('.popup-only').get('text'); browser.closeWindow(); browser.switchToDefaultWindow(); - var primaryContent = browser.getElement('.popup-only'); + const primaryContent = browser.getElement('.popup-only'); assert.equal('popup content!', popupContent); assert.equal(null, primaryContent); }); diff --git a/test/mini-testium-mocha.js b/test/mini-testium-mocha.js index d2c7f63..a548755 100644 --- a/test/mini-testium-mocha.js +++ b/test/mini-testium-mocha.js @@ -1,4 +1,3 @@ -'use strict'; // This is a minimal version of `testium-mocha`. // We're trying to avoid cyclic dependencies. import initTestium from 'testium-core'; @@ -6,9 +5,9 @@ import {once} from 'lodash'; import createDriver from '../'; -var initOnce = once(initTestium); +const initOnce = once(initTestium); -export async function getBrowser(options) { +export async function getBrowser() { const { browser } = await initOnce().then(createDriver); return browser; }