Skip to content

Commit 055b222

Browse files
committed
Check if arguments to builtins are FluentNone
1 parent c9b38d3 commit 055b222

File tree

2 files changed

+21
-37
lines changed

2 files changed

+21
-37
lines changed

fluent/src/builtins.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* `FluentType`. Functions must return `FluentType` objects as well.
1212
*/
1313

14-
import { FluentNumber, FluentDateTime } from "./types.js";
14+
import { FluentNone, FluentNumber, FluentDateTime } from "./types.js";
1515

1616
function merge(argopts, opts) {
1717
return Object.assign({}, argopts, values(opts));
@@ -27,6 +27,10 @@ function values(opts) {
2727

2828
export
2929
function NUMBER([arg], opts) {
30+
if (arg instanceof FluentNone) {
31+
return new FluentNone("NUMBER()");
32+
}
33+
3034
if (arg instanceof FluentNumber) {
3135
return new FluentNumber(arg.valueOf(), merge(arg.opts, opts));
3236
}
@@ -36,6 +40,10 @@ function NUMBER([arg], opts) {
3640

3741
export
3842
function DATETIME([arg], opts) {
43+
if (arg instanceof FluentNone) {
44+
return new FluentNone("DATETIME()");
45+
}
46+
3947
if (arg instanceof FluentDateTime) {
4048
return new FluentDateTime(arg.valueOf(), merge(arg.opts, opts));
4149
}

fluent/test/functions_builtin_test.js

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,23 @@ suite('Built-in functions', function() {
2828
errors = [];
2929
msg = bundle.getMessage('num-decimal');
3030
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{NUMBER()}');
31-
assert.strictEqual(errors.length, 2);
31+
assert.strictEqual(errors.length, 1);
3232
assert.ok(errors[0] instanceof ReferenceError);
3333
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
34-
assert.ok(errors[1] instanceof TypeError);
35-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
3634

3735
errors = [];
3836
msg = bundle.getMessage('num-percent');
3937
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{NUMBER()}');
40-
assert.strictEqual(errors.length, 2);
38+
assert.strictEqual(errors.length, 1);
4139
assert.ok(errors[0] instanceof ReferenceError);
4240
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
43-
assert.ok(errors[1] instanceof TypeError);
44-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
4541

4642
errors = [];
4743
msg = bundle.getMessage('num-bad-opt');
4844
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{NUMBER()}');
49-
assert.strictEqual(errors.length, 2);
45+
assert.strictEqual(errors.length, 1);
5046
assert.ok(errors[0] instanceof ReferenceError);
5147
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
52-
assert.ok(errors[1] instanceof TypeError);
53-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
5448
});
5549

5650
test('number argument', function() {
@@ -131,29 +125,23 @@ suite('Built-in functions', function() {
131125
errors = [];
132126
msg = bundle.getMessage('num-decimal');
133127
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{NUMBER()}');
134-
assert.strictEqual(errors.length, 2);
128+
assert.strictEqual(errors.length, 1);
135129
assert.ok(errors[0] instanceof TypeError);
136130
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
137-
assert.ok(errors[1] instanceof TypeError);
138-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
139131

140132
errors = [];
141133
msg = bundle.getMessage('num-percent');
142134
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{NUMBER()}');
143-
assert.strictEqual(errors.length, 2);
135+
assert.strictEqual(errors.length, 1);
144136
assert.ok(errors[0] instanceof TypeError);
145137
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
146-
assert.ok(errors[1] instanceof TypeError);
147-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
148138

149139
errors = [];
150140
msg = bundle.getMessage('num-bad-opt');
151141
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{NUMBER()}');
152-
assert.strictEqual(errors.length, 2);
142+
assert.strictEqual(errors.length, 1);
153143
assert.ok(errors[0] instanceof TypeError);
154144
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
155-
assert.ok(errors[1] instanceof TypeError);
156-
assert.strictEqual(errors[1].message, "Invalid argument type to NUMBER");
157145
});
158146
});
159147

@@ -173,29 +161,23 @@ suite('Built-in functions', function() {
173161
errors = [];
174162
msg = bundle.getMessage('dt-default');
175163
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{DATETIME()}');
176-
assert.strictEqual(errors.length, 2);
164+
assert.strictEqual(errors.length, 1);
177165
assert.ok(errors[0] instanceof ReferenceError);
178166
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
179-
assert.ok(errors[1] instanceof TypeError);
180-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
181167

182168
errors = [];
183169
msg = bundle.getMessage('dt-month');
184170
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{DATETIME()}');
185-
assert.strictEqual(errors.length, 2);
171+
assert.strictEqual(errors.length, 1);
186172
assert.ok(errors[0] instanceof ReferenceError);
187173
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
188-
assert.ok(errors[1] instanceof TypeError);
189-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
190174

191175
errors = [];
192176
msg = bundle.getMessage('dt-bad-opt');
193177
assert.strictEqual(bundle.formatPattern(msg.value, {}, errors), '{DATETIME()}');
194-
assert.strictEqual(errors.length, 2);
178+
assert.strictEqual(errors.length, 1);
195179
assert.ok(errors[0] instanceof ReferenceError);
196180
assert.strictEqual(errors[0].message, "Unknown variable: $arg");
197-
assert.ok(errors[1] instanceof TypeError);
198-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
199181
});
200182

201183
test('Date argument', function () {
@@ -286,29 +268,23 @@ suite('Built-in functions', function() {
286268
errors = [];
287269
msg = bundle.getMessage('dt-default');
288270
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{DATETIME()}');
289-
assert.strictEqual(errors.length, 2);
271+
assert.strictEqual(errors.length, 1);
290272
assert.ok(errors[0] instanceof TypeError);
291273
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
292-
assert.ok(errors[1] instanceof TypeError);
293-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
294274

295275
errors = [];
296276
msg = bundle.getMessage('dt-month');
297277
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{DATETIME()}');
298-
assert.strictEqual(errors.length, 2);
278+
assert.strictEqual(errors.length, 1);
299279
assert.ok(errors[0] instanceof TypeError);
300280
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
301-
assert.ok(errors[1] instanceof TypeError);
302-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
303281

304282
errors = [];
305283
msg = bundle.getMessage('dt-bad-opt');
306284
assert.strictEqual(bundle.formatPattern(msg.value, args, errors), '{DATETIME()}');
307-
assert.strictEqual(errors.length, 2);
285+
assert.strictEqual(errors.length, 1);
308286
assert.ok(errors[0] instanceof TypeError);
309287
assert.strictEqual(errors[0].message, "Variable type not supported: $arg, object");
310-
assert.ok(errors[1] instanceof TypeError);
311-
assert.strictEqual(errors[1].message, "Invalid argument type to DATETIME");
312288
});
313289
});
314290
});

0 commit comments

Comments
 (0)