forked from d3/d3-format
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocale-test.js
86 lines (78 loc) · 3.6 KB
/
locale-test.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
var fs = require("fs"),
path = require("path"),
tape = require("tape"),
queue = require("d3-queue"),
d3 = require("../");
tape("formatLocale({decimal: decimal}) observes the specified decimal point", function(test) {
test.equal(d3.formatLocale({decimal: "|"}).format("06.2f")(2), "002|00");
test.equal(d3.formatLocale({decimal: "/"}).format("06.2f")(2), "002/00");
test.end();
});
tape("formatLocale({currency: [prefix, suffix]}) observes the specified currency prefix and suffix", function(test) {
test.equal(d3.formatLocale({decimal: ".", currency: ["฿", ""]}).format("$06.2f")(2), "฿02.00");
test.equal(d3.formatLocale({decimal: ".", currency: ["", "฿"]}).format("$06.2f")(2), "02.00฿");
test.end();
});
tape("formatLocale({grouping: null}) does not perform any grouping", function(test) {
test.equal(d3.formatLocale({decimal: ".", grouping: null}).format("012,.2f")(2), "000000002.00");
test.end();
});
tape("formatLocale({grouping: [sizes…]}) observes the specified group sizes", function(test) {
test.equal(d3.formatLocale({decimal: ".", grouping: [3], thousands: ","}).format("012,.2f")(2), "0,000,002.00");
test.equal(d3.formatLocale({decimal: ".", grouping: [2], thousands: ","}).format("012,.2f")(2), "0,00,00,02.00");
test.equal(d3.formatLocale({decimal: ".", grouping: [2, 3], thousands: ","}).format("012,.2f")(2), "00,000,02.00");
test.equal(d3.formatLocale({decimal: ".", grouping: [3, 2, 2, 2, 2, 2, 2], thousands: ","}).format(",d")(1e12), "10,00,00,00,00,000");
test.end();
});
tape("formatLocale(…) can format numbers using the Indian numbering system.", function(test) {
var format = d3.formatLocale(require("../locale/en-IN")).format(",");
test.equal(format(10), "10");
test.equal(format(100), "100");
test.equal(format(1000), "1,000");
test.equal(format(10000), "10,000");
test.equal(format(100000), "1,00,000");
test.equal(format(1000000), "10,00,000");
test.equal(format(10000000), "1,00,00,000");
test.equal(format(10000000.4543), "1,00,00,000.4543");
test.equal(format(1000.321), "1,000.321");
test.equal(format(10.5), "10.5");
test.equal(format(-10), "-10");
test.equal(format(-100), "-100");
test.equal(format(-1000), "-1,000");
test.equal(format(-10000), "-10,000");
test.equal(format(-100000), "-1,00,000");
test.equal(format(-1000000), "-10,00,000");
test.equal(format(-10000000), "-1,00,00,000");
test.equal(format(-10000000.4543), "-1,00,00,000.4543");
test.equal(format(-1000.321), "-1,000.321");
test.equal(format(-10.5), "-10.5");
test.end();
});
tape("formatLocale({thousands: separator}) observes the specified group separator", function(test) {
test.equal(d3.formatLocale({decimal: ".", grouping: [3], thousands: " "}).format("012,.2f")(2), "0 000 002.00");
test.equal(d3.formatLocale({decimal: ".", grouping: [3], thousands: "/"}).format("012,.2f")(2), "0/000/002.00");
test.end();
});
tape("locale data is valid", function(test) {
fs.readdir("locale", function(error, locales) {
if (error) throw error;
var q = queue.queue(1);
locales.forEach(function(locale) {
if (!/\.json$/i.test(locale)) return;
q.defer(testLocale, path.join("locale", locale));
});
q.awaitAll(function(error) {
if (error) throw error;
test.end();
});
});
function testLocale(locale, callback) {
fs.readFile(locale, "utf8", function(error, locale) {
if (error) return void callback(error);
locale = JSON.parse(locale);
test.deepEqual(Object.keys(locale).sort(), ["currency", "decimal", "grouping", "thousands"]);
locale = d3.formatLocale(locale);
callback(null);
});
}
});