forked from ionic-team/ionic-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnapshot.task.js
More file actions
104 lines (83 loc) · 3.18 KB
/
snapshot.task.js
File metadata and controls
104 lines (83 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
module.exports = function(gulp, argv, buildConfig) {
var snapshotConfig = require('./snapshot.config').config;
var _ = require('lodash');
var http = require('http');
var connect = require('connect');
var serveStatic = require('serve-static');
var cp = require('child_process');
var path = require('canonical-path');
var projectRoot = path.resolve(__dirname, '../..');
var protractorHttpServer;
var snapshotValues = _.merge(snapshotConfig.platformDefauls, argv);
gulp.task('protractor-server', function() {
var app = connect().use(serveStatic(projectRoot)); // serve everything that is static
protractorHttpServer = http.createServer(app).listen(buildConfig.protractorPort);
console.log('Serving `dist` on http://localhost:' + buildConfig.protractorPort);
});
gulp.task('snapshot', ['e2e', 'protractor-server'], function(done) {
snapshot(done);
});
gulp.task('snapshot-quick', ['e2e', 'protractor-server'], function(done) {
snapshot(done, true);
});
gulp.task('e2e-publish', function(done) {
var testId = generateTestId();
e2ePublish(testId, true);
});
function snapshot(done, quickMode) {
if (!snapshotConfig.accessKey || !snapshotConfig.accessKey.length) {
console.error('Missing IONIC_SNAPSHOT_KEY environment variable');
return done();
}
var testId = generateTestId();
var protractorConfigFile = path.resolve(projectRoot, 'scripts/snapshot/protractor.config.js');
snapshotValues.params.test_id = testId;
snapshotValues.params.upload = !quickMode;
var protractorArgs = [
'--browser ' + snapshotValues.browser,
'--platform ' + snapshotValues.platform,
'--params.platform_id=' + snapshotValues.params.platform_id,
'--params.platform_index=' + snapshotValues.params.platform_index,
'--params.platform_count=' + snapshotValues.params.platform_count,
'--params.width=' + snapshotValues.params.width,
'--params.height=' + snapshotValues.params.height,
'--params.test_id=' + snapshotValues.params.test_id,
'--params.upload=' + snapshotValues.params.upload
];
e2ePublish(testId, false);
return protractor(done, [protractorConfigFile].concat(protractorArgs));
}
function protractor(done, args) {
var errored = false;
var child = cp.spawn('protractor', args, {
stdio: [process.stdin, process.stdout, 'pipe']
});
child.stderr.on('data', function(data) {
protractorHttpServer.close();
console.error(data.toString());
if (!errored) {
errored = true;
done('Protractor tests failed.');
}
});
child.on('exit', function() {
protractorHttpServer.close();
done();
});
}
function e2ePublish(testId, verbose) {
console.log('e2ePublish: ' + testId);
snapshotConfig.testId = testId;
snapshotConfig.verbose = verbose;
require('../e2e/e2e-publish')(snapshotConfig);
}
function generateTestId() {
var chars = 'abcdefghijkmnpqrstuvwxyz';
var id = chars.charAt(Math.floor(Math.random() * chars.length));
chars += '0123456789';
while (id.length < 3) {
id += chars.charAt(Math.floor(Math.random() * chars.length));
}
return id;
}
};