forked from moment/moment
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzones.js
104 lines (91 loc) · 2.7 KB
/
zones.js
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
var path = require('path'),
nodeunit = require('nodeunit'),
moment = require('../moment');
module.exports = function (grunt) {
// placeholder for an array of timezones
var ALL_ZONES,
INITIAL_ZONE,
done;
/******************************
Grunt task
******************************/
grunt.registerTask('zones', 'Run the unit tests in different timezones.', function () {
done = this.async();
getCurrentTimezone(function (zone) {
// save the initial timezone so we dont break our computers
INITIAL_ZONE = zone;
getAllTimezones(function (zones) {
// store all the timezones
ALL_ZONES = zones;
// start running the tests
nextTest(function () {
// reset the timezone like nothing ever happened
resetTimezone();
});
});
});
});
/******************************
Timezones
******************************/
function resetTimezone() {
setTimezone(INITIAL_ZONE, function () {
grunt.log.writeln("Resetting timezone back to " + INITIAL_ZONE);
done();
});
}
function getCurrentTimezone(cb) {
grunt.utils.spawn({
cmd: "systemsetup",
args: ["gettimezone"]
}, function (err, result, code) {
cb(result.stdout.replace('Time Zone: ', ''));
});
}
function getAllTimezones(cb) {
grunt.utils.spawn({
cmd: "systemsetup",
args: ["listtimezones"]
}, function (err, result, code) {
var zones = result.stdout.replace('Time Zones:', '');
zones = zones.match(/\S+/g);
cb(zones);
});
}
function setTimezone(zone, cb) {
grunt.utils.spawn({
cmd: "systemsetup",
args: ["settimezone", zone]
}, function (err, result, code) {
cb();
});
}
/******************************
Tests
******************************/
function nextTest(cb) {
var zone = ALL_ZONES.pop();
if (zone) {
setTimezone(zone, function () {
testZone(zone, function () {
nextTest(cb);
});
});
} else {
cb();
}
}
function testZone(zone, cb) {
grunt.utils.spawn({
cmd: "grunt",
args: ["zone"]
}, function (err, result, code) {
if (err) {
resetTimezone();
throw err;
}
console.log(result.stdout);
cb();
});
}
};