1
+ var minimist = require ( 'minimist' ) ;
1
2
var jsdom = require ( 'jsdom' ) ;
2
3
var path = require ( 'path' ) ;
3
4
var fs = require ( 'fs' ) ;
@@ -14,15 +15,72 @@ plotlyServerDom.window.eval(plotlyJsSource);
14
15
var pathToRoot = path . join ( __dirname , '..' ) ;
15
16
var pathToMocks = path . join ( pathToRoot , 'test' , 'image' , 'mocks' ) ;
16
17
17
- function startsWithLowerCaseOrNumber ( v ) {
18
- var c = v . charAt ( 0 ) ;
19
- return c !== c . toUpperCase ( ) || c === String ( Number ( c ) ) ;
18
+ var list = [ ] ;
19
+
20
+ // command line options
21
+ var args = minimist ( process . argv . slice ( 2 ) , { } ) ;
22
+ if ( args . _ . length ) {
23
+ // test listed mock(s)
24
+ list = args . _ ;
25
+ } else {
26
+ // no mock listed, test all excluding the black list
27
+ list = fs . readdirSync ( pathToMocks )
28
+ . filter ( function ( e ) { return e . indexOf ( '.json' ) !== - 1 ; } )
29
+ . map ( function ( e ) { return e . replace ( '.json' , '' ) ; } )
30
+ . filter ( notBlackListed ) ;
31
+ }
32
+
33
+ var fail ;
34
+ var failedMocks = [ ] ;
35
+
36
+ for ( var i = 0 ; i < list . length ; i ++ ) {
37
+ var name = list [ i ] ;
38
+ console . log ( 'validating ' + name ) ;
39
+
40
+ var filename = path . join ( pathToMocks , name + '.json' ) ;
41
+ var fig = JSON . parse ( fs . readFileSync ( filename ) ) ;
42
+ var out = plotlyServerDom . window . Plotly . validate ( fig . data , fig . layout ) ;
43
+
44
+ fail = false ;
45
+ assert ( name , out ) ;
46
+ if ( fail ) failedMocks . push ( name ) ;
47
+ }
48
+
49
+ if ( failedMocks . length ) {
50
+ var error = 'Failed at ' + JSON . stringify ( { mocks : failedMocks } , null , 2 ) ;
51
+ throw error ;
52
+ }
53
+
54
+ function expectToBe ( actual , expected ) {
55
+ if ( actual !== expected ) {
56
+ console . error ( 'Expected ' + actual + ' to be ' + expected ) ;
57
+ fail = true ;
58
+ }
20
59
}
21
60
22
- var list = fs . readdirSync ( pathToMocks )
23
- . filter ( startsWithLowerCaseOrNumber )
24
- . map ( function ( e ) { return e . replace ( '.json' , '' ) ; } )
25
- . filter ( notBlackListed ) ;
61
+ function assert ( name , v ) {
62
+ var success = true ;
63
+ if ( ! v ) {
64
+ expectToBe ( v , undefined ) ;
65
+ if ( v !== undefined ) success = false ;
66
+ } else {
67
+ v . forEach ( function ( e ) {
68
+ var condition = (
69
+ e . code === 'invisible' ||
70
+ e . code === 'dynamic' ||
71
+ e . path [ e . path . length - 1 ] === 'coloraxis'
72
+ ) ;
73
+ expectToBe ( condition , true ) ; // we accept invisible, dynamic and coloraxis for now
74
+ if ( ! condition ) {
75
+ console . log ( 'file:' , name ) ;
76
+ console . log ( JSON . stringify ( v , null , 2 ) ) ;
77
+ success = false ;
78
+ return success ;
79
+ }
80
+ } ) ;
81
+ }
82
+ return success ;
83
+ }
26
84
27
85
function notBlackListed ( name ) {
28
86
return [
@@ -200,55 +258,3 @@ function notBlackListed(name) {
200
258
'yiorrd_heatmap'
201
259
] . indexOf ( name ) === - 1 ;
202
260
}
203
-
204
- var fail ;
205
- var failedMocks = [ ] ;
206
-
207
- for ( var i = 0 ; i < list . length ; i ++ ) {
208
- var name = list [ i ] ;
209
- console . log ( 'validating ' + name ) ;
210
-
211
- var filename = path . join ( pathToMocks , name + '.json' ) ;
212
- var fig = JSON . parse ( fs . readFileSync ( filename ) ) ;
213
- var out = plotlyServerDom . window . Plotly . validate ( fig . data , fig . layout ) ;
214
-
215
- fail = false ;
216
- assert ( name , out ) ;
217
- if ( fail ) failedMocks . push ( name ) ;
218
- }
219
-
220
- if ( failedMocks . length ) {
221
- var error = 'Failed at ' + JSON . stringify ( { mocks : failedMocks } , null , 2 ) ;
222
- throw error ;
223
- }
224
-
225
- function expectToBe ( actual , expected ) {
226
- if ( actual !== expected ) {
227
- console . error ( 'Expected ' + actual + ' to be ' + expected ) ;
228
- fail = true ;
229
- }
230
- }
231
-
232
- function assert ( name , v ) {
233
- var success = true ;
234
- if ( ! v ) {
235
- expectToBe ( v , undefined ) ;
236
- if ( v !== undefined ) success = false ;
237
- } else {
238
- v . forEach ( function ( e ) {
239
- var condition = (
240
- e . code === 'invisible' ||
241
- e . code === 'dynamic' ||
242
- e . path [ e . path . length - 1 ] === 'coloraxis'
243
- ) ;
244
- expectToBe ( condition , true ) ; // we accept invisible, dynamic and coloraxis for now
245
- if ( ! condition ) {
246
- console . log ( 'file:' , name ) ;
247
- console . log ( JSON . stringify ( v , null , 2 ) ) ;
248
- success = false ;
249
- return success ;
250
- }
251
- } ) ;
252
- }
253
- return success ;
254
- }
0 commit comments