Skip to content

Commit 06bd876

Browse files
committed
added cloud selenium, local emulated ie testing, lint task, build task, release task, improved tests
1 parent 30824fb commit 06bd876

11 files changed

+580
-89
lines changed

.eslintrc

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"rules": {
3+
"indent": [
4+
2,
5+
4
6+
],
7+
"quotes": [
8+
2,
9+
"single"
10+
],
11+
"linebreak-style": [
12+
2,
13+
"windows"
14+
],
15+
"semi": [
16+
2,
17+
"always"
18+
]
19+
},
20+
"env": {
21+
"browser": true,
22+
"jquery": true
23+
},
24+
"extends": "eslint:recommended"
25+
}

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
.idea
2-
node_modules
2+
node_modules
3+
private.conf.js

gulpfile.js

+173-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,183 @@
1-
// TODO: build task
2-
// TODO: minify task
3-
// TODO: eslint task
4-
// TODO: cloud selenium server to test more browsers
51
// TODO: add more test specs (see matchHeight.spec.js)
62
// TODO: travis CI
73

84
var gulp = require('gulp');
5+
var uglify = require('gulp-uglify');
6+
var rename = require('gulp-rename');
7+
var header = require('gulp-header');
8+
var eslint = require('gulp-eslint');
9+
var gulpBump = require('gulp-bump');
10+
var tag = require('gulp-tag-version');
11+
var sequence = require('run-sequence');
912
var webdriver = require('gulp-webdriver');
1013
var webserver = require('gulp-webserver');
14+
var selenium = require('selenium-standalone');
15+
var browserStack = require('gulp-browserstack');
16+
var staticTransform = require('connect-static-transform');
17+
var privateConfig = require('./test/conf/private.conf.js').config;
18+
var pkg = require('./package.json');
19+
var server;
1120

12-
gulp.task('test', function() {
13-
return gulp.src('test/conf/wdio.conf.js').pipe(webdriver());
21+
gulp.task('release', function(callback) {
22+
var type = process.argv[4] || 'minor';
23+
sequence('lint', 'test', 'build', 'bump:' + type, 'tag', callback);
24+
});
25+
26+
gulp.task('build', function() {
27+
return gulp.src(pkg.main)
28+
.pipe(uglify())
29+
.pipe(header(banner, { pkg: pkg }))
30+
.pipe(rename({ suffix: '-min' }))
31+
.pipe(gulp.dest('.'));
32+
});
33+
34+
gulp.task('lint', function() {
35+
return gulp.src(pkg.main)
36+
.pipe(eslint())
37+
.pipe(eslint.format())
38+
.pipe(eslint.failAfterError());
39+
});
40+
41+
var bump = function(options) {
42+
return gulp.src(['package.json', 'bower.json'])
43+
.pipe(gulpBump(options))
44+
.pipe(gulp.dest('.'));
45+
};
46+
47+
gulp.task('bump:patch', function() {
48+
return bump({ type: 'patch' });
49+
});
50+
51+
gulp.task('bump:minor', function() {
52+
return bump({ type: 'minor' });
53+
});
54+
55+
gulp.task('bump:major', function() {
56+
return bump({ type: 'major' });
57+
});
58+
59+
gulp.task('tag', function() {
60+
return gulp.src('package.json')
61+
.pipe(tag({ prefix: '' }));
1462
});
1563

1664
gulp.task('serve', function() {
17-
gulp.src('.')
18-
.pipe(webserver({
19-
livereload: true,
20-
directoryListing: true,
21-
open: 'http://localhost:8000/test/page/test.html'
22-
}));
23-
});
65+
server = gulp.src('.')
66+
.pipe(webserver({
67+
host: '0.0.0.0',
68+
//livereload: true,
69+
directoryListing: true,
70+
middleware: function(req, res, next) {
71+
var ieMode = (req._parsedUrl.query || '').replace('=','');
72+
if (ieMode in emulateIEMiddleware) {
73+
emulateIEMiddleware[ieMode](req, res, next);
74+
} else {
75+
next();
76+
}
77+
}
78+
}));
79+
});
80+
81+
gulp.task('selenium', function(done) {
82+
console.log('Setting up Selenium server...');
83+
selenium.install({
84+
logger: function(message) { console.log(message); }
85+
}, function(err) {
86+
if (err) {
87+
done(err);
88+
return;
89+
}
90+
console.log('Starting Selenium server...');
91+
selenium.start(function(err, child) {
92+
console.log('Selenium server started');
93+
selenium.child = child;
94+
done(err);
95+
});
96+
});
97+
});
98+
99+
gulp.task('test', ['serve', 'selenium'], function(done) {
100+
var error;
101+
console.log('Starting webdriver...');
102+
103+
var finish = function(err) {
104+
console.log('Webdriver stopped');
105+
selenium.child.kill();
106+
console.log('Selenium server stopped');
107+
if (server) {
108+
try {
109+
server.emit('kill');
110+
} catch(e) {}
111+
console.log('Web server stopped');
112+
}
113+
done(error || err);
114+
};
115+
116+
gulp.src('test/conf/local.conf.js')
117+
.pipe(webdriver())
118+
.on('error', function(err) { error = err; })
119+
.on('finish', finish);
120+
});
121+
122+
gulp.task('test:cloud', ['serve'], function(done) {
123+
gulp.src('test/conf/cloud.conf.js')
124+
.pipe(browserStack.startTunnel({
125+
key: privateConfig.key,
126+
hosts: [{
127+
name: 'localhost',
128+
port: 8000,
129+
sslFlag: 0
130+
}]
131+
}))
132+
.pipe(webdriver())
133+
.pipe(browserStack.stopTunnel())
134+
.on('finish', function(err) {
135+
if (server) {
136+
try {
137+
server.emit('kill');
138+
} catch(e) {}
139+
console.log('Web server stopped');
140+
}
141+
done(err);
142+
});
143+
});
144+
145+
gulp.task('test:cloud:all', function(done) {
146+
return gulp
147+
.src('test/conf/cloud-all.conf.js')
148+
.pipe(browserStack.startTunnel({
149+
key: privateConfig.key,
150+
hosts: [{
151+
name: 'localhost',
152+
port: 8000,
153+
sslFlag: 0
154+
}]
155+
}))
156+
.pipe(webdriver())
157+
.pipe(browserStack.stopTunnel());
158+
});
159+
160+
var banner = [
161+
'/*',
162+
'* <%= pkg.name %> v<%= pkg.version %> by @liabru',
163+
'* <%= pkg.homepage %>',
164+
'* License <%= pkg.license %>',
165+
'*/',
166+
''
167+
].join('\n');
168+
169+
var emulateIEMiddlewareFactory = function(version) {
170+
return staticTransform({
171+
root: __dirname,
172+
match: /(.+)\.html/,
173+
transform: function (path, text, send) {
174+
send(text.replace('content="IE=edge,chrome=1"', 'content="IE=' + version + '"'));
175+
}
176+
});
177+
};
178+
179+
var emulateIEMiddleware = {
180+
'ie8': emulateIEMiddlewareFactory(8),
181+
'ie9': emulateIEMiddlewareFactory(9),
182+
'ie10': emulateIEMiddlewareFactory(10)
183+
};

jquery.matchHeight.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* License: MIT
55
*/
66

7-
;(function($) {
7+
;(function($) { // eslint-disable-line no-extra-semi
88
/*
99
* internal
1010
*/

package.json

+10-1
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,18 @@
2626
},
2727
"devDependencies": {
2828
"gulp": "^3.9.0",
29+
"gulp-browserstack": "^1.0.0",
30+
"gulp-eslint": "^1.0.0",
31+
"gulp-header": "^1.7.1",
32+
"gulp-rename": "^1.2.2",
33+
"gulp-tag-version": "^1.3.0",
34+
"gulp-uglify": "^1.4.2",
2935
"gulp-webdriver": "^1.0.1",
3036
"gulp-webserver": "^0.9.1",
3137
"jasmine": "^2.3.2",
32-
"webdriverio": "^3.2.5"
38+
"run-sequence": "^1.1.4",
39+
"selenium-standalone": "^4.7.0",
40+
"webdriverio": "^3.2.5",
41+
"gulp-bump": "^1.0.0"
3342
}
3443
}

0 commit comments

Comments
 (0)