-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhours-test.js
More file actions
135 lines (128 loc) · 4.23 KB
/
Copy pathhours-test.js
File metadata and controls
135 lines (128 loc) · 4.23 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
require("../env");
require("../../d3");
require("../../d3.time");
var vows = require("vows"),
assert = require("assert");
var suite = vows.describe("d3.time.hours");
suite.addBatch({
"hours": {
topic: function() {
return d3.time.hours;
},
"returns hours": function(range) {
assert.deepEqual(range(local(2010, 11, 31, 12, 30), local(2010, 11, 31, 15, 30)), [
local(2010, 11, 31, 13),
local(2010, 11, 31, 14),
local(2010, 11, 31, 15)
]);
},
"has an inclusive lower bound": function(range) {
assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[0], local(2010, 11, 31, 23));
},
"has an exclusive upper bound": function(range) {
assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[2], local(2011, 0, 1, 1));
},
"can skip hours": function(range) {
assert.deepEqual(range(local(2011, 1, 1, 1), local(2011, 1, 1, 13), 3), [
local(2011, 1, 1, 3),
local(2011, 1, 1, 6),
local(2011, 1, 1, 9),
local(2011, 1, 1, 12)
]);
},
"observes start of daylight savings time": function(range) {
assert.deepEqual(range(local(2011, 2, 13, 1), local(2011, 2, 13, 5)), [
utc(2011, 2, 13, 9),
utc(2011, 2, 13, 10),
utc(2011, 2, 13, 11)
]);
},
"observes end of daylight savings time": function(range) {
assert.deepEqual(range(local(2011, 10, 6, 0), local(2011, 10, 6, 2)), [
utc(2011, 10, 6, 7),
utc(2011, 10, 6, 8),
utc(2011, 10, 6, 9)
]);
},
"NPT": {
"observes 15-minute offset": tz("Asia/Kathmandu", function(range) {
assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
utc(2011, 10, 6, 18, 15),
utc(2011, 10, 6, 19, 15),
utc(2011, 10, 6, 20, 15)
]);
})
},
"IST": {
"observes 30-minute offset": tz("Asia/Calcutta", function(range) {
assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
utc(2011, 10, 6, 18, 30),
utc(2011, 10, 6, 19, 30),
utc(2011, 10, 6, 20, 30)
]);
})
},
"UTC": {
topic: function(range) {
return range.utc;
},
"returns hours": function(range) {
assert.deepEqual(range(utc(2010, 11, 31, 12, 30), utc(2010, 11, 31, 15, 30)), [
utc(2010, 11, 31, 13),
utc(2010, 11, 31, 14),
utc(2010, 11, 31, 15)
]);
},
"has an inclusive lower bound": function(range) {
assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[0], utc(2010, 11, 31, 23));
},
"has an exclusive upper bound": function(range) {
assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[2], utc(2011, 0, 1, 1));
},
"can skip hours": function(range) {
assert.deepEqual(range(utc(2011, 1, 1, 1), utc(2011, 1, 1, 13), 3), [
utc(2011, 1, 1, 3),
utc(2011, 1, 1, 6),
utc(2011, 1, 1, 9),
utc(2011, 1, 1, 12)
]);
},
"observes start of daylight savings time": function(range) {
assert.deepEqual(range(utc(2011, 2, 13, 9), utc(2011, 2, 13, 12)), [
utc(2011, 2, 13, 9),
utc(2011, 2, 13, 10),
utc(2011, 2, 13, 11)
]);
},
"observes end of daylight savings time": function(range) {
assert.deepEqual(range(utc(2011, 10, 6, 7), utc(2011, 10, 6, 10)), [
utc(2011, 10, 6, 7),
utc(2011, 10, 6, 8),
utc(2011, 10, 6, 9)
]);
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
}
function tz(tz, scope) {
return function() {
var o = process.env.TZ;
try {
process.env.TZ = tz;
new Date(0).toString(); // invalidate node's dst cache
new Date().toString();
scope.apply(this, arguments);
} finally {
process.env.TZ = o;
new Date(0).toString(); // invalidate node's dst cache
new Date().toString();
}
};
}
suite.export(module);