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
| /*
| * tst.basic.js: tests various valid invocation
| */
|
| var mod_assert = require('assert');
| var mod_extsprintf = require('../lib/extsprintf');
| var mod_path = require('path');
| var sprintf = mod_extsprintf.sprintf;
|
| var testcases = [ {
| 'name': 'empty string',
| 'args': [ '' ],
| 'result': ''
| }, {
| 'name': '%s: basic',
| 'args': [ '%s', 'foo' ],
| 'result': 'foo'
| }, {
| 'name': '%s: not first',
| 'args': [ 'hello %s\n', 'world' ],
| 'result': 'hello world\n'
| }, {
| 'name': '%s: right-aligned',
| 'args': [ 'hello %10s\n', 'world' ],
| 'result': 'hello world\n'
| }, {
| 'name': '%s: left-aligned',
| 'args': [ 'hello %-10sagain\n', 'world' ],
| 'result': 'hello world again\n'
| }, {
| 'name': '%d: basic, positive',
| 'args': [ '%d', 17 ],
| 'result': '17'
| }, {
| 'name': '%d: basic, zero',
| 'args': [ '%d', 0 ],
| 'result': '0'
| }, {
| 'name': '%d: basic, floating point value',
| 'args': [ '%d', 17.3 ],
| 'result': '17'
| }, {
| 'name': '%d: basic, negative',
| 'args': [ '%d', -3 ],
| 'result': '-3'
| }, {
| 'name': '%d: right-aligned',
| 'args': [ '%4d', 17 ],
| 'result': ' 17'
| }, {
| 'name': '%d: right-aligned, zero-padded',
| 'args': [ '%04d', 17 ],
| 'result': '0017'
| }, {
| 'name': '%d: left-aligned',
| 'args': [ '%-4d', 17 ],
| 'result': '17 '
| }, {
| 'name': '%x: basic',
| 'args': [ '%x', 18],
| 'result': '12'
| }, {
| 'name': '%x: zero-padded, right-aligned',
| 'args': [ '%08x', 0xfeedface ],
| 'result': 'feedface'
| }, {
| 'name': '%d: with plus sign',
| 'args': [ '%+d', 17 ],
| 'result': '+17'
| }, {
| 'name': '%f: basic',
| 'args': [ '%f', 3.2 ],
| 'result': '3.2'
| }, {
| 'name': '%f: right-aligned',
| 'args': [ '%5f', 3.2 ],
| 'result': ' 3.2'
| }, {
| 'name': '%%: basic',
| 'args': [ '%%' ],
| 'result': '%'
| }, {
| 'name': 'complex',
| 'args': [ 'one %s %8s %-3d bytes past 0x%04x, which was %6f%%%s%5s',
| 'program', 'wrote', -2, 0x30, 3.7, ' plus', 'over' ],
| 'result': 'one program wrote -2 bytes past 0x0030, which was ' +
| '3.7% plus over'
| } ];
|
| function main(verbose) {
| /*
| * Create one test case with a very large input string.
| */
| var input = '1234';
| while (input.length < 100 * 1024) {
| input += input;
| }
| testcases.push({
| 'name': 'long string argument (' + input.length + ' characters)',
| 'args': [ '%s', input ],
| 'result': input
| });
|
| testcases.forEach(function (tc) {
| var result;
| console.error('test case: %s', tc.name);
| result = sprintf.apply(null, tc.args);
| if (verbose) {
| console.error(' args: %s', JSON.stringify(tc.args));
| console.error(' result: %s', result);
| }
| mod_assert.equal(tc.result, result);
| });
|
| console.log('%s tests passed', mod_path.basename(__filename));
| }
|
| main(process.argv.length > 2 && process.argv[2] == '-v');
|
|