1
1
var fs = require ( 'fs' ) ;
2
- var PNG = require ( 'pngjs' ) . PNG ;
3
- var pixelmatch = require ( 'pixelmatch' ) ;
4
- var parallel = require ( 'run-parallel' ) ;
2
+ var gm = require ( 'gm' ) ;
5
3
6
4
var run = require ( './assets/run' ) ;
7
5
var getMockList = require ( './assets/get_mock_list' ) ;
8
6
var getImagePaths = require ( './assets/get_image_paths' ) ;
7
+ var common = require ( '../../tasks/util/common' ) ;
9
8
10
9
var argv = require ( 'minimist' ) ( process . argv . slice ( 2 ) , {
11
10
'boolean' : [ 'queue' , 'help' , 'debug' ] ,
@@ -14,7 +13,7 @@ var argv = require('minimist')(process.argv.slice(2), {
14
13
help : [ 'h' , 'info' ]
15
14
} ,
16
15
'default' : {
17
- threshold : 0.1 ,
16
+ threshold : 0.001 ,
18
17
'parallel-limit' : 4
19
18
}
20
19
} ) ;
@@ -65,7 +64,7 @@ if(argv._.indexOf('gl2d_*') !== -1) {
65
64
if ( ! argv . queue ) {
66
65
console . log ( 'WARN: Running gl2d image tests in batch may lead to unwanted results\n' ) ;
67
66
}
68
- console . log ( '\nSorting gl2d mocks to avoid gl-shader conflicts' ) ;
67
+ console . log ( 'Sorting gl2d mocks to avoid gl-shader conflicts' ) ;
69
68
sortGl2dMockList ( mockList ) ;
70
69
console . log ( '' ) ;
71
70
}
@@ -77,41 +76,35 @@ run(mockList, input, argv, function write(info, done) {
77
76
var paths = getImagePaths ( mockName ) ;
78
77
var imgData = info . body ;
79
78
80
- if ( ! fs . existsSync ( paths . baseline ) ) {
81
- return done ( 'baseline image for ' + mockName + ' does not exist') ;
79
+ if ( ! common . doesFileExist ( paths . baseline ) ) {
80
+ return done ( mockName + ': baseline image for does not exist') ;
82
81
}
83
82
84
- parallel ( [
85
- function ( cb ) {
86
- var img = fs . createReadStream ( paths . baseline ) . pipe ( new PNG ( ) ) ;
87
- img . on ( 'parsed' , function ( ) { return cb ( null , img ) ; } ) ;
88
- img . on ( 'error' , function ( err ) { return cb ( err ) ; } ) ;
89
- } ,
90
- function ( cb ) { ( new PNG ( ) ) . parse ( imgData , cb ) ; } ,
91
- function ( cb ) { fs . writeFile ( paths . test , imgData , cb ) ; } ,
92
- ] , function ( err , results ) {
93
- if ( err ) done ( err ) ;
94
-
95
- var baseline = results [ 0 ] ;
96
- var width = baseline . width ;
97
- var height = baseline . height ;
98
- var test = results [ 1 ] ;
99
- var diff = new PNG ( { width : width , height : height } ) ;
100
-
101
- var numDiffPixels = pixelmatch (
102
- baseline . data , test . data , diff . data ,
103
- width , height ,
104
- { threshold : argv . threshold }
105
- ) ;
106
-
107
- if ( numDiffPixels ) {
108
- var diffStream = fs . createWriteStream ( paths . diff ) . on ( 'finish' , function ( ) {
109
- done ( '(' + numDiffPixels + ' pixels differ with threshold ' + argv . threshold + ')' ) ;
110
- } ) ;
111
- diff . pack ( ) . pipe ( diffStream ) ;
112
- } else {
113
- done ( ) ;
83
+ fs . writeFile ( paths . test , imgData , function ( err ) {
84
+ if ( err ) {
85
+ return done ( mockName + ': error during test image generation' ) ;
114
86
}
87
+
88
+ gm . compare ( paths . test , paths . baseline , {
89
+ file : paths . diff ,
90
+ highlightColor : 'purple' ,
91
+ tolerance : argv . threshold
92
+ } , function ( err , isEqual , equality ) {
93
+ if ( err ) {
94
+ return done ( mockName + ': gm compare error' ) ;
95
+ }
96
+
97
+ if ( isEqual ) {
98
+ fs . unlink ( paths . diff , function ( err ) {
99
+ if ( err ) {
100
+ return done ( mockName + ': unlink error' ) ;
101
+ }
102
+ done ( ) ;
103
+ } ) ;
104
+ } else {
105
+ done ( 'differs by ' + ( equality / argv . threshold ) . toPrecision ( 4 ) + ' times the threshold' ) ;
106
+ }
107
+ } ) ;
115
108
} ) ;
116
109
} ) ;
117
110
0 commit comments