Skip to content

Commit ba3c52f

Browse files
authored
Merge pull request #485 from iLib-js/node22
Changes to get all unit tests to run on node 22 and 24
2 parents 242bcfd + e01f708 commit ba3c52f

21 files changed

+1613
-178
lines changed

.circleci/config.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,8 @@ workflows:
7373
- test:
7474
docker_image: cimg/node:18.20.4-browsers
7575
- test:
76-
docker_image: cimg/node:20.15.1-browsers
76+
docker_image: cimg/node:20.15.1-browsers
77+
- test:
78+
docker_image: cimg/node:22.11.0-browsers
79+
- test:
80+
docker_image: cimg/node:24.1.0-browsers

build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
version=14.21.1
16+
version=14.21.2

docs/ReleaseNotes.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
Release Notes for Version 14
22
============================
33

4+
Build 031
5+
-------
6+
Published as version 14.21.2
7+
8+
New Features:
9+
10+
Bug Fixes:
11+
* Changes to get ilib to run properly on node 22 and 24
12+
* Updated dependencies
13+
414
Build 031
515
-------
616
Published as version 14.21.1

js/package.json.template

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
"name": "ilib",
33
"version": "@fullversion@",
44
"main": "index.js",
5+
"engines": {
6+
"node": ">=8 <25"
7+
},
58
"description": "iLib is a cross-engine library of internationalization (i18n) classes written in pure JS",
69
"keywords": [
710
"internationalization",

js/test/date/testdatefmt_en_GB.js

Lines changed: 88 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,8 @@ if (typeof(DateFactory) === "undefined") {
3434
var DateFactory = require("../../lib/DateFactory.js");
3535
}
3636

37-
38-
function getChromeVersion () {
39-
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
40-
return raw ? parseInt(raw[2], 10) : false;
37+
if (typeof(TestingSupport) === "undefined") {
38+
var TestingSupport = require("../test/testingSupport.js");
4139
}
4240

4341
module.exports.testdatefmt_en_GB = {
@@ -144,32 +142,31 @@ module.exports.testdatefmt_en_GB = {
144142
millisecond: 0
145143
});
146144

147-
if(ilib._getPlatform() === "nodejs"){
148-
var cldrVersion = Number(process.versions["cldr"]);
149-
var nodeMajorVersion = process.versions["node"].split(".")[0];
150-
if (cldrVersion < 36) {
151-
test.equal(fmt.format(date), "9/29/2011");
152-
} else if (cldrVersion < 38) {
153-
/*
154-
* Both node v12.16.1 and v14.16.1 say the cldr version is 37.0.
155-
* But it returns a different result.
156-
*/
157-
if (nodeMajorVersion === "14") {
158-
test.equal(fmt.format(date), "29/09/2011");
159-
} else {
160-
test.equal(fmt.format(date), "9/29/11");
161-
}
162-
} else {
163-
test.equal(fmt.format(date), "29/09/2011");
164-
}
165-
} else {
166-
test.equal(fmt.format(date), "29/09/2011");
145+
var cldrVersion = TestingSupport.getCLDRVersion();
146+
if (cldrVersion === undefined) {
147+
// On Node < 13, use ilib's own formatting
148+
// before node 13, node did not support new Intl.DateTimeFormat, so it uses ilib's own formatting
149+
test.equal(fmt.format(date), "9/29/2011");
150+
test.done();
151+
return;
167152
}
153+
cldrVersion = Number(cldrVersion);
154+
if (cldrVersion <= 35.1) {
155+
test.equal(fmt.format(date), "9/29/2011");
156+
test.done();
157+
return;
158+
} else if (cldrVersion < 38) {
159+
test.equal(fmt.format(date), "9/29/11");
160+
test.done();
161+
return;
162+
}
163+
// Default format for >= 38 or undefined
164+
test.equal(fmt.format(date), "29/09/2011");
168165
test.done();
169166
},
170167
testDateFmtSimpleMedium_en_GB_useIntl: function(test) {
171168
if(!DateFmt.isIntlDateTimeAvailable("en-GB")){
172-
// The result is different depending on the node version.
169+
// The result is different depending on the CLDR version.
173170
test.done();
174171
return;
175172
}
@@ -187,24 +184,28 @@ module.exports.testdatefmt_en_GB = {
187184
millisecond: 0
188185
});
189186

190-
if (ilib._getPlatform() === "nodejs") {
191-
var cldrVersion = Number(process.versions["cldr"]);
192-
var nodeMajorVersion = process.versions["node"].split(".")[0];
193-
//console.log("version: " + version + " majorVersion: " + majorVersion);
194-
if (cldrVersion < 36) {
195-
test.equal(fmt.format(date), "9/29/2011");
196-
} else if (cldrVersion < 38) {
197-
if (nodeMajorVersion === "14") {
198-
test.equal(fmt.format(date), "29 Sep 2011");
199-
} else {
200-
test.equal(fmt.format(date), "Sep 29, 2011");
201-
}
202-
} else {
203-
test.equal(fmt.format(date), "29 Sept 2011");
204-
}
205-
} else {
206-
test.equal(fmt.format(date), "29 Sept 2011");
187+
var cldrVersion = TestingSupport.getCLDRVersion();
188+
if (cldrVersion === undefined) {
189+
// On Node < 13, use ilib's own formatting
190+
// before node 13, node did not support new Intl.DateTimeFormat, so it uses ilib's own formatting
191+
test.equal(fmt.format(date), "Sep 29, 2011");
192+
test.done();
193+
return;
194+
}
195+
cldrVersion = Number(cldrVersion);
196+
if (cldrVersion <= 36.1) {
197+
test.equal(fmt.format(date), "9/29/2011");
198+
test.done();
199+
return;
200+
} else if (cldrVersion < 38) {
201+
// CLDR < 38.0: month name is "Sep", pattern is "d MMM y" → "29 Sep 2011"
202+
test.equal(fmt.format(date), "Sep 29, 2011");
203+
test.done();
204+
return;
207205
}
206+
// Default format for >= 38.0 (catches future CLDR versions)
207+
// CLDR >= 38.0: month name is "Sept", pattern is "d MMM y" → "29 Sept 2011"
208+
test.equal(fmt.format(date), "29 Sept 2011");
208209
test.done();
209210
},
210211
testDateFmtSimpleLong_en_GB_useIntl: function(test) {
@@ -227,25 +228,26 @@ module.exports.testdatefmt_en_GB = {
227228
millisecond: 0
228229
});
229230

230-
if(ilib._getPlatform() === "nodejs"){
231-
var cldrVersion = Number(process.versions["cldr"]);
232-
var nodeMajorVersion = process.versions["node"].split(".")[0];
233-
if (cldrVersion < 36) {
234-
test.equal(fmt.format(date), "9/29/2011");
235-
} else if (cldrVersion < 38) {
236-
if (nodeMajorVersion === "14") {
237-
test.equal(fmt.format(date), "29 September 2011");
238-
} else {
239-
test.equal(fmt.format(date), "September 29, 2011");
240-
}
241-
242-
} else {
243-
test.equal(fmt.format(date), "29 September 2011");
244-
}
245-
} else {
246-
test.equal(fmt.format(date), "29 September 2011");
231+
var cldrVersion = TestingSupport.getCLDRVersion();
232+
if (cldrVersion === undefined) {
233+
// On Node < 13, use ilib's own formatting
234+
// before node 13, node did not support new Intl.DateTimeFormat, so it uses ilib's own formatting
235+
test.equal(fmt.format(date), "9/29/2011");
236+
test.done();
237+
return;
247238
}
248-
239+
cldrVersion = Number(cldrVersion);
240+
if (cldrVersion <= 36.1) {
241+
test.equal(fmt.format(date), "9/29/2011");
242+
test.done();
243+
return;
244+
} else if (cldrVersion < 38) {
245+
test.equal(fmt.format(date), "September 29, 2011");
246+
test.done();
247+
return;
248+
}
249+
// Default format for >= 38 or undefined
250+
test.equal(fmt.format(date), "29 September 2011");
249251
test.done();
250252
},
251253
testDateFmtSimpleFull_en_GB_useIntl: function(test) {
@@ -291,35 +293,33 @@ module.exports.testdatefmt_en_GB = {
291293
millisecond: 0
292294
});
293295

294-
var platform = ilib._getPlatform();
295-
if(platform === "nodejs"){
296-
var cldrVersion = Number(process.versions["cldr"]);
297-
var nodeMajorVersion = process.versions["node"].split(".")[0];
298-
if (cldrVersion < 36) {
299-
test.equal(fmt.format(date), "9/29/2011");
300-
} else if (cldrVersion < 38) {
301-
if (nodeMajorVersion === "14") {
302-
test.equal(fmt.format(date), "Thursday, 29 September 2011");
303-
} else {
304-
test.equal(fmt.format(date), "Thursday, September 29, 2011");
305-
}
306-
} else if (cldrVersion < 44) {
307-
test.equal(fmt.format(date), "Thursday, 29 September 2011");
308-
} else {
309-
test.equal(fmt.format(date), "Thursday 29 September 2011");
310-
}
311-
} else if (platform === "browser") {
312-
var browser = ilib._getBrowser();
313-
if (browser === "chrome" && getChromeVersion() >= 130) {
314-
//chrome 131.0.6778.139
315-
test.equal(fmt.format(date), "Thursday 29 September 2011");
316-
} else {
317-
// firefox 133.0.3
318-
test.equal(fmt.format(date), "Thursday, 29 September 2011");
319-
}
320-
} else {
321-
test.equal(fmt.format(date), "Thursday, 29 September 2011");
296+
var cldrVersion = TestingSupport.getCLDRVersion();
297+
if (cldrVersion === undefined) {
298+
// Node < 13 or CLDR < 35.1: use ilib's own formatting
299+
// before node 13, node did not support Intl.DateTimeFormat, so it uses ilib's own formatting
300+
test.equal(fmt.format(date), "Thursday, September 29, 2011");
301+
test.done();
302+
return;
303+
}
304+
cldrVersion = Number(cldrVersion);
305+
if (cldrVersion <= 36.1) {
306+
test.equal(fmt.format(date), "9/29/2011");
307+
test.done();
308+
return;
309+
} else if (cldrVersion < 38) {
310+
test.equal(fmt.format(date), "Thursday, September 29, 2011");
311+
test.done();
312+
return;
313+
} else if (cldrVersion >= 44.1 && cldrVersion < 46) {
314+
// CLDR 44.1 and 45.0: comma was removed
315+
test.equal(fmt.format(date), "Thursday 29 September 2011");
316+
test.done();
317+
return;
322318
}
319+
// Default format for < 44.1 or >= 46
320+
// CLDR 40.0, 41.0, 42.0, 43.1: has comma
321+
// CLDR 46.0, 47.0: has comma (restored in CLDR 46.0)
322+
test.equal(fmt.format(date), "Thursday, 29 September 2011");
323323
test.done();
324324
},
325325
testDateFmtGBSimpleTimeShort: function(test) {

js/test/durfmt/testdurfmt.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ if (typeof(ilib) === "undefined") {
2424
var ilib = require("../../lib/ilib.js");
2525
}
2626

27-
function getChromeVersion () {
28-
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
29-
return raw ? parseInt(raw[2], 10) : false;
27+
if (typeof(TestingSupport) === "undefined") {
28+
var TestingSupport = require("../test/testingSupport.js");
3029
}
3130

3231
module.exports.testdurfmt = {
@@ -2428,7 +2427,9 @@ module.exports.testdurfmt = {
24282427
} else if (platform === "browser") {
24292428
var browser = ilib._getBrowser();
24302429
var expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 יום, 20 שעות, 20 דקות ו-‏20 שניות';
2431-
if (browser === "chrome" && getChromeVersion() >= 110) {
2430+
var cldrVersion = TestingSupport.getCLDRVersionForBrowser();
2431+
// CLDR 43+ changed the behavior for he-IL
2432+
if (cldrVersion !== undefined && cldrVersion >= 43) {
24322433
expected = '‏20 שנים, 20 חודשים, 20 שבועות, 20 ימים, 20 שעות, 20 דקות ו-20 שניות';
24332434
}
24342435
test.equal(duration.toString(), expected);

js/test/durfmt/testdurfmt2.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,16 @@ if (typeof(DurationFmt) === "undefined") {
2525
var DurationFmt = require("../../lib/DurationFmt.js");
2626
}
2727

28+
if (typeof(TestingSupport) === "undefined") {
29+
var TestingSupport = require("../test/testingSupport.js");
30+
}
31+
2832
function setVariable() {
2933
var obj = {};
3034
var length = ["full", "long", "medium", "short"];
3135
obj.fullLength = length;
3236
return obj;
3337
}
34-
3538
module.exports.testdurfmt2 = {
3639
setUp: function(callback) {
3740
ilib.clearCache();
@@ -3275,7 +3278,9 @@ module.exports.testdurfmt2 = {
32753278
}
32763279
} else if (platform === "browser") {
32773280
var browser = ilib._getBrowser();
3278-
if (browser === "chrome" && getChromeVersion() >= 110) {
3281+
var cldrVersion = TestingSupport.getCLDRVersionForBrowser();
3282+
// CLDR 43+ changed the behavior for he-IL
3283+
if (cldrVersion !== undefined && cldrVersion >= 43) {
32793284
test.equal(textformatted_20[0], '‏20 שנים, 20 חודשים, 20 שבועות ו-20 ימים');
32803285
test.equal(textformatted_20[1], '‏20 שנים, 20 ח׳, 20 שבועות, 20 ימ׳');
32813286
test.equal(textformatted_20[2], '‏20 ש′ 20 ח׳ 20 ש′ 20 י׳');

0 commit comments

Comments
 (0)