Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit 989759a

Browse files
authored
chore(tslint): add tslint to gulpfile (#3833)
- add gulp task tslint and lint - update `**/*.ts` with tslint fixes - update circle.yml to run `gulp lint` - update `gulp pretest` to run both jshint and tslint
1 parent 075a512 commit 989759a

19 files changed

+91
-68
lines changed

circle.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ dependencies:
1212
cache_directories:
1313
- testapp/node_modules
1414
post:
15-
- ./node_modules/.bin/gulp format:enforce
15+
- ./node_modules/.bin/gulp lint
1616
- ./node_modules/.bin/webdriver-manager update
1717
- ./node_modules/.bin/webdriver-manager start:
1818
background: true

gulpfile.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var gulpFormat = require('gulp-clang-format');
66
var runSequence = require('run-sequence');
77
var spawn = require('child_process').spawn;
88
var spawnSync = require('child_process').spawnSync;
9+
var tslint = require('gulp-tslint');
910
var fs = require('fs');
1011
var path = require('path');
1112
var glob = require('glob');
@@ -34,6 +35,15 @@ var runSpawn = function(done, task, opt_arg, opt_io) {
3435
});
3536
};
3637

38+
gulp.task('tslint', function() {
39+
return gulp.src(['lib/**/*.ts', 'spec/**/*.ts', '!spec/install/**/*.ts'])
40+
.pipe(tslint()).pipe(tslint.report());
41+
});
42+
43+
gulp.task('lint', function(done) {
44+
runSequence('tslint', 'jshint', 'format:enforce', done);
45+
});
46+
3747
// prevent contributors from using the wrong version of node
3848
gulp.task('checkVersion', function(done) {
3949
// read minimum node on package.json
@@ -44,8 +54,8 @@ gulp.task('checkVersion', function(done) {
4454
if (semver.satisfies(process.version, nodeVersion)) {
4555
done();
4656
} else {
47-
throw new Error('minimum node version for Protractor ' + protractorVersion +
48-
' is node ' + nodeVersion);
57+
throw new Error('minimum node version for Protractor ' +
58+
protractorVersion + ' is node ' + nodeVersion);
4959
}
5060
});
5161

@@ -60,7 +70,8 @@ gulp.task('webdriver:update', function(done) {
6070
});
6171

6272
gulp.task('jshint', function(done) {
63-
runSpawn(done, 'node', ['node_modules/jshint/bin/jshint', '-c', '.jshintrc', 'lib', 'spec', 'scripts',
73+
runSpawn(done, 'node', ['node_modules/jshint/bin/jshint', '-c',
74+
'.jshintrc', 'lib', 'spec', 'scripts',
6475
'--exclude=lib/selenium-webdriver/**/*.js,spec/dependencyTest/*.js,' +
6576
'spec/install/**/*.js']);
6677
});
@@ -90,8 +101,7 @@ gulp.task('prepublish', function(done) {
90101

91102
gulp.task('pretest', function(done) {
92103
runSequence('checkVersion',
93-
['webdriver:update', 'jshint', 'format'], 'tsc',
94-
'built:copy', done);
104+
['webdriver:update', 'jshint', 'tslint', 'format'], 'tsc', 'built:copy', done);
95105
});
96106

97107
gulp.task('default',['prepublish']);

lib/browser.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export class Webdriver {
7474
*/
7575
function ptorMixin(to: any, from: any, fnName: string, setupFn?: Function) {
7676
to[fnName] = function() {
77-
for (var i = 0; i < arguments.length; i++) {
77+
for (let i = 0; i < arguments.length; i++) {
7878
if (arguments[i] instanceof ElementFinder) {
7979
arguments[i] = arguments[i].getWebElement();
8080
}
@@ -103,10 +103,9 @@ function buildElementHelper(browser: ProtractorBrowser): ElementHelper {
103103
return new ElementArrayFinder(browser).all(locator).toElementFinder_();
104104
}) as ElementHelper;
105105

106-
element.all =
107-
(locator: Locator) => {
108-
return new ElementArrayFinder(browser).all(locator);
109-
}
106+
element.all = (locator: Locator) => {
107+
return new ElementArrayFinder(browser).all(locator);
108+
};
110109

111110
return element;
112111
};

lib/cli.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import * as path from 'path';
99
* Values from command line options override values from the config.
1010
*/
1111

12-
var args: Array<string> = [];
12+
let args: Array<string> = [];
1313

1414
process.argv.slice(2).forEach(function(arg: string) {
15-
var flag: string = arg.split('=')[0];
15+
let flag: string = arg.split('=')[0];
1616

1717
switch (flag) {
1818
case 'debug':
@@ -72,7 +72,7 @@ optimist
7272
}
7373
});
7474

75-
var argv: any = optimist.parse(args);
75+
let argv: any = optimist.parse(args);
7676

7777
if (argv.help) {
7878
optimist.showHelp();
@@ -105,7 +105,7 @@ if (argv.exclude) {
105105
}
106106

107107
// Use default configuration, if it exists.
108-
var configFile: string = argv._[0];
108+
let configFile: string = argv._[0];
109109
if (!configFile) {
110110
if (fs.existsSync('./protractor.conf.js')) {
111111
configFile = './protractor.conf.js';

lib/debugger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as net from 'net';
22
import {promise as wdpromise, WebElement} from 'selenium-webdriver';
3-
import * as util from 'util'
3+
import * as util from 'util';
44

55
import {ProtractorBrowser} from './browser';
66
import {Locator} from './locators';

lib/driverProviders/attachSession.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ export class AttachSession extends DriverProvider {
3838
* @return {WebDriver} webdriver instance
3939
*/
4040
getNewDriver(): WebDriver {
41-
var executor = executors.createExecutor(this.config_.seleniumAddress);
42-
var newDriver = WebDriver.attachToSession(executor, this.config_.seleniumSessionId);
41+
let executor = executors.createExecutor(this.config_.seleniumAddress);
42+
let newDriver = WebDriver.attachToSession(executor, this.config_.seleniumSessionId);
4343
this.drivers_.push(newDriver);
4444
return newDriver;
4545
}

lib/driverProviders/browserStack.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class BrowserStack extends DriverProvider {
4747

4848
let req = https.request(options, (res) => {
4949
res.on('data', (data: Buffer) => {
50-
var info = JSON.parse(data.toString());
50+
let info = JSON.parse(data.toString());
5151
if (info && info.automation_session && info.automation_session.browser_url) {
5252
logger.info(
5353
'BrowserStack results available at ' + info.automation_session.browser_url);
@@ -95,7 +95,7 @@ export class BrowserStack extends DriverProvider {
9595
* ready to test.
9696
*/
9797
setupEnv(): q.Promise<any> {
98-
var deferred = q.defer();
98+
let deferred = q.defer();
9999
this.config_.capabilities['browserstack.user'] = this.config_.browserstackUser;
100100
this.config_.capabilities['browserstack.key'] = this.config_.browserstackKey;
101101
this.config_.seleniumAddress = 'http://hub.browserstack.com/wd/hub';

lib/driverProviders/sauce.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ export class Sauce extends DriverProvider {
3030
* @return {q.promise} A promise that will resolve when the update is complete.
3131
*/
3232
updateJob(update: any): q.Promise<any> {
33-
var deferredArray = this.drivers_.map((driver: WebDriver) => {
34-
var deferred = q.defer();
33+
let deferredArray = this.drivers_.map((driver: WebDriver) => {
34+
let deferred = q.defer();
3535
driver.getSession().then((session: Session) => {
3636
logger.info('SauceLabs results available at http://saucelabs.com/jobs/' + session.getId());
3737
this.sauceServer_.updateJob(session.getId(), update, (err: Error) => {

lib/element.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {By, error, ILocation, ISize, promise as wdpromise, WebDriver, WebElement, WebElementPromise} from 'selenium-webdriver';
22

3-
import {ElementHelper} from './browser';
4-
import {ProtractorBrowser} from './browser';
3+
import {ElementHelper, ProtractorBrowser} from './browser';
54
import {IError} from './exitCodes';
65
import {Locator} from './locators';
76
import {Logger} from './logger';

lib/expectedConditions.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import {ElementFinder} from './element';
33

44
const webdriver = require('selenium-webdriver');
55

6-
declare var global: any;
7-
86
/**
97
* Represents a library of canned expected conditions that are useful for
108
* protractor, especially when dealing with non-angular apps.
@@ -88,7 +86,7 @@ export class ProtractorExpectedConditions {
8886
if (fns.length === 0) {
8987
return defaultRet;
9088
}
91-
var fn = fns[0];
89+
let fn = fns[0];
9290
return fn().then((bool: boolean): boolean => {
9391
if (bool === defaultRet) {
9492
return self.logicalChain_(defaultRet, fns.slice(1))();
@@ -208,7 +206,7 @@ export class ProtractorExpectedConditions {
208206
* representing whether the text is present in the element.
209207
*/
210208
textToBePresentInElement(elementFinder: ElementFinder, text: string): Function {
211-
var hasText = () => {
209+
let hasText = () => {
212210
return elementFinder.getText().then((actualText: string): boolean => {
213211
// MSEdge does not properly remove newlines, which causes false
214212
// negatives
@@ -235,7 +233,7 @@ export class ProtractorExpectedConditions {
235233
* representing whether the text is present in the element's value.
236234
*/
237235
textToBePresentInElementValue(elementFinder: ElementFinder, text: string): Function {
238-
var hasText = () => {
236+
let hasText = () => {
239237
return elementFinder.getAttribute('value').then((actualText: string): boolean => {
240238
return actualText.indexOf(text) > -1;
241239
});

lib/launcher.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ let initFn = function(configFile: string, additionalConfig: Config) {
238238

239239
let deferred = q.defer<any>(); // Resolved when all tasks are completed
240240
let createNextTaskRunner = () => {
241-
var task = scheduler.nextTask();
241+
let task = scheduler.nextTask();
242242
if (task) {
243243
let taskRunner = new TaskRunner(configFile, additionalConfig, task, forkProcess);
244244
taskRunner.run()
@@ -267,7 +267,7 @@ let initFn = function(configFile: string, additionalConfig: Config) {
267267
// the beginning. As a worker finishes a task, it will pick up the next
268268
// task
269269
// from the scheduler's queue until all tasks are gone.
270-
for (var i = 0; i < scheduler.maxConcurrentTasks(); ++i) {
270+
for (let i = 0; i < scheduler.maxConcurrentTasks(); ++i) {
271271
createNextTaskRunner();
272272
}
273273
logger.info('Running ' + scheduler.countActiveTasks() + ' instances of WebDriver');

lib/locators.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class ProtractorBy extends WebdriverBy {
7272
*/
7373
addLocator(name: string, script: Function|string) {
7474
this[name] = (...args: any[]): Locator => {
75-
var locatorArguments = args;
75+
let locatorArguments = args;
7676
return {
7777
findElementsOverride: (driver: WebDriver, using: WebElement, rootSelector: string):
7878
wdpromise.Promise<WebElement[]> => {
@@ -247,7 +247,7 @@ export class ProtractorBy extends WebdriverBy {
247247

248248
// Generate either by.repeater or by.exactRepeater
249249
private byRepeaterInner(exact: boolean, repeatDescriptor: string): Locator {
250-
var name = 'by.' + (exact ? 'exactR' : 'r') + 'epeater';
250+
let name = 'by.' + (exact ? 'exactR' : 'r') + 'epeater';
251251
return {
252252
findElementsOverride: (driver: WebDriver, using: WebElement, rootSelector: string):
253253
wdpromise.Promise<WebElement[]> => {

lib/plugins.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ export class Plugins {
488488

489489
export interface SpecResult {
490490
description: string;
491-
assertions: AssertionResult[]
491+
assertions: AssertionResult[];
492492
}
493493

494494
export interface AssertionResult {

lib/ptor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class Ptor {
5858
firefox: require('selenium-webdriver/firefox'),
5959
http: require('selenium-webdriver/http'),
6060
remote: require('selenium-webdriver/remote')
61-
}
61+
};
6262
}
6363

64-
export var protractor = new Ptor();
64+
export let protractor = new Ptor();

lib/runner.ts

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@ import * as util from 'util';
55

66
import {ProtractorBrowser} from './browser';
77
import {Config} from './config';
8-
import {AttachSession, BrowserStack, Direct, Hosted, Local, Mock, Sauce} from './driverProviders';
9-
import {DriverProvider} from './driverProviders';
8+
import {AttachSession, BrowserStack, Direct, DriverProvider, Hosted, Local, Mock, Sauce} from './driverProviders';
109
import {Logger} from './logger';
1110
import {Plugins} from './plugins';
1211
import {protractor} from './ptor';
1312
import * as helper from './util';
1413

15-
declare var global: any;
16-
declare var process: any;
14+
declare let global: any;
15+
declare let process: any;
1716

18-
var webdriver = require('selenium-webdriver');
17+
const webdriver = require('selenium-webdriver');
1918
let logger = new Logger('runner');
2019
/*
2120
* Runner is responsible for starting the execution of a test run and triggering
@@ -127,17 +126,16 @@ export class Runner extends EventEmitter {
127126
* @private
128127
* @param {int} Standard unix exit code
129128
*/
130-
exit_ = function(exitCode: number):
131-
any {
132-
return helper.runFilenameOrFn_(this.config_.configDir, this.config_.onCleanUp, [exitCode])
133-
.then((returned): number | any => {
134-
if (typeof returned === 'number') {
135-
return returned;
136-
} else {
137-
return exitCode;
138-
}
139-
});
140-
}
129+
exit_ = function(exitCode: number): any {
130+
return helper.runFilenameOrFn_(this.config_.configDir, this.config_.onCleanUp, [exitCode])
131+
.then((returned): number | any => {
132+
if (typeof returned === 'number') {
133+
return returned;
134+
} else {
135+
return exitCode;
136+
}
137+
});
138+
};
141139

142140
/**
143141
* Getter for the Runner config object
@@ -205,10 +203,10 @@ export class Runner extends EventEmitter {
205203
* @public
206204
*/
207205
createBrowser(plugins: any): any {
208-
var config = this.config_;
209-
var driver = this.driverprovider_.getNewDriver();
206+
let config = this.config_;
207+
let driver = this.driverprovider_.getNewDriver();
210208

211-
var browser_ = ProtractorBrowser.wrapDriver(
209+
let browser_ = ProtractorBrowser.wrapDriver(
212210
driver, config.baseUrl, config.rootElement, config.untrackOutstandingTimeouts);
213211

214212
browser_.params = config.params;
@@ -341,7 +339,7 @@ export class Runner extends EventEmitter {
341339
}
342340

343341
if (this.config_.restartBrowserBetweenTests) {
344-
var restartDriver = () => {
342+
let restartDriver = () => {
345343
browser_.restart();
346344
};
347345
this.on('testPass', restartDriver);
@@ -393,7 +391,7 @@ export class Runner extends EventEmitter {
393391
// 9) Exit process
394392
})
395393
.then(() => {
396-
var exitCode = testPassed ? 0 : 1;
394+
let exitCode = testPassed ? 0 : 1;
397395
return this.exit_(exitCode);
398396
})
399397
.fin(() => {

lib/taskLogger.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ export class TaskLogger {
6262
* @param {string} data
6363
*/
6464
public log(data: string): void {
65-
var tag = '[';
66-
var capabilities = this.task.capabilities;
65+
let tag = '[';
66+
let capabilities = this.task.capabilities;
6767
tag += (capabilities.logName) ? capabilities.logName :
6868
(capabilities.browserName) ? capabilities.browserName : '';
6969
tag += (capabilities.version) ? (' ' + capabilities.version) : '';
@@ -72,7 +72,7 @@ export class TaskLogger {
7272
tag += '] ';
7373

7474
data = data.toString();
75-
for (var i = 0; i < data.length; i++) {
75+
for (let i = 0; i < data.length; i++) {
7676
if (this.insertTag) {
7777
this.insertTag = false;
7878
// This ensures that the '\x1B[0m' appears before the tag, so that

0 commit comments

Comments
 (0)