From a279767accf20966288b6bca746ac78548c6bc70 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 13 Jan 2025 11:37:58 +0000 Subject: [PATCH 1/2] fix(common/web): add ElementString.parseIntOrZero() method to handle invalid order and tertiary params --- common/web/types/src/kmx/kmx-plus/element-string.ts | 8 ++++++-- .../web/types/tests/kmx/kmx-plus/element-string.tests.ts | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/web/types/src/kmx/kmx-plus/element-string.ts b/common/web/types/src/kmx/kmx-plus/element-string.ts index b389107cce..2b4321abda 100644 --- a/common/web/types/src/kmx/kmx-plus/element-string.ts +++ b/common/web/types/src/kmx/kmx-plus/element-string.ts @@ -104,8 +104,8 @@ export class ElementString extends Array { typeFlag |= constants.elem_flags_type_str; } } - elem.order = orders.length ? parseInt(orders[i], 10) : 0; - elem.tertiary = tertiaries.length ? parseInt(tertiaries[i], 10) : 0; + elem.order = orders.length ? this.parseIntOrZero(orders[i]) : 0; + elem.tertiary = tertiaries.length ? this.parseIntOrZero(tertiaries[i]) : 0; elem.flags = ElemElementFlags.none | (ElemElementFlags.type & typeFlag) | (tertiary_bases?.[i] == '1' /* TODO-LDML: or 'true'? */ ? ElemElementFlags.tertiary_base : 0) | @@ -125,5 +125,9 @@ export class ElementString extends Array { } return true; } + private static parseIntOrZero(str: string) { + const num = parseInt(str, 10); + return !Number.isNaN(num) ? num : 0; + } } ; diff --git a/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts b/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts index 054bb3d393..be8b56da2d 100644 --- a/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts +++ b/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts @@ -142,7 +142,7 @@ describe('Test of ElementString file', () => { ]; assert.deepEqual(actual, expected); }); - it.skip('can handle order string that is too short', () => { + it('can handle order string that is too short', () => { sections.strs.allocString = stubStrsAllocString_Char; const actual = ElementString.fromStrings( sections, @@ -156,7 +156,7 @@ describe('Test of ElementString file', () => { ]; assert.deepEqual(actual, expected); }); - it.skip('can handle non-number in order string', () => { + it('can handle non-number in order string', () => { sections.strs.allocString = stubStrsAllocString_Char; const actual = ElementString.fromStrings( sections, @@ -200,7 +200,7 @@ describe('Test of ElementString file', () => { ]; assert.deepEqual(actual, expected); }); - it.skip('can handle tertiary string that is too short', () => { + it('can handle tertiary string that is too short', () => { sections.strs.allocString = stubStrsAllocString_Char; const actual = ElementString.fromStrings( sections, @@ -215,7 +215,7 @@ describe('Test of ElementString file', () => { ]; assert.deepEqual(actual, expected); }); - it.skip('can handle non-number in tertiary string', () => { + it('can handle non-number in tertiary string', () => { sections.strs.allocString = stubStrsAllocString_Char; const actual = ElementString.fromStrings( sections, From d48ccda140f1c011af1b5f4edc9889d2e5266ea6 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 13 Jan 2025 12:05:39 +0000 Subject: [PATCH 2/2] fix(common/web): add test cases for parseIntOrZero() --- .../types/src/kmx/kmx-plus/element-string.ts | 2 +- .../tests/kmx/kmx-plus/element-string.tests.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/common/web/types/src/kmx/kmx-plus/element-string.ts b/common/web/types/src/kmx/kmx-plus/element-string.ts index 2b4321abda..7a65592c0b 100644 --- a/common/web/types/src/kmx/kmx-plus/element-string.ts +++ b/common/web/types/src/kmx/kmx-plus/element-string.ts @@ -125,7 +125,7 @@ export class ElementString extends Array { } return true; } - private static parseIntOrZero(str: string) { + private static parseIntOrZero(str: string): number { const num = parseInt(str, 10); return !Number.isNaN(num) ? num : 0; } diff --git a/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts b/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts index be8b56da2d..5f5b53481b 100644 --- a/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts +++ b/common/web/types/tests/kmx/kmx-plus/element-string.tests.ts @@ -428,6 +428,24 @@ describe('Test of ElementString file', () => { assert.isFalse(one.isEqual(two)); }); }); + describe('Test of parseIntOrZero()', () => { + it('returns a number for a valid string', () => { + const num = ElementString['parseIntOrZero']('1'); + assert.equal(num, 1); + }); + it('returns zero for an invalid string', () => { + const num = ElementString['parseIntOrZero']('A'); + assert.equal(num, 0); + }); + it('returns zero for undefined', () => { + const num = ElementString['parseIntOrZero'](undefined); + assert.equal(num, 0); + }); + it('returns zero for a null string', () => { + const num = ElementString['parseIntOrZero'](null); + assert.equal(num, 0); + }); + }); }); });