1
- // TODO: build task
2
- // TODO: minify task
3
- // TODO: eslint task
4
- // TODO: cloud selenium server to test more browsers
5
1
// TODO: add more test specs (see matchHeight.spec.js)
6
2
// TODO: travis CI
7
3
8
4
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' ) ;
9
12
var webdriver = require ( 'gulp-webdriver' ) ;
10
13
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 ;
11
20
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 : '' } ) ) ;
14
62
} ) ;
15
63
16
64
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 : / ( .+ ) \. h t m l / ,
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
+ } ;
0 commit comments