From 942bb47e318029110e427c132355196360043ffd Mon Sep 17 00:00:00 2001 From: "Andy.Bloomfield" Date: Wed, 30 Apr 2025 14:14:45 +0100 Subject: [PATCH 1/2] fix(1532): When precision is not specified on "separator" mask error "toFixed() digits argument must be between 0 and 100" Include additional logic to check if separatorPrecision is Infinity or not before checking if > 0 --- projects/ngx-mask-lib/src/lib/ngx-mask.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts index bd95795c..a4773491 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts @@ -801,7 +801,7 @@ export class NgxMaskService extends NgxMaskApplierService { if ( separatorExpression.indexOf('2') > 0 || - (this.leadZero && Number(separatorPrecision) > 0) + (this.leadZero && separatorPrecision != Infinity && Number(separatorPrecision) > 0) ) { if (this.decimalMarker === MaskExpression.COMMA && this.leadZero) { value = value.replace(',', '.'); From 578c25e9f8a560078994c53e1e855d3bba917991 Mon Sep 17 00:00:00 2001 From: "Andy.Bloomfield" Date: Mon, 9 Jun 2025 17:10:06 +0100 Subject: [PATCH 2/2] New unit test for service change --- .../src/test/mask.service.spec.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/ngx-mask-lib/src/test/mask.service.spec.ts diff --git a/projects/ngx-mask-lib/src/test/mask.service.spec.ts b/projects/ngx-mask-lib/src/test/mask.service.spec.ts new file mode 100644 index 00000000..50642bca --- /dev/null +++ b/projects/ngx-mask-lib/src/test/mask.service.spec.ts @@ -0,0 +1,30 @@ +import { TestBed } from '@angular/core/testing'; +import { NgxMaskService,provideNgxMask} from 'ngx-mask'; + +describe('NgxMaskService', () => { + let service: NgxMaskService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + provideNgxMask(), + NgxMaskService + ] + }); + service = TestBed.inject(NgxMaskService); + }); + + it('should not call toFixed with "separator" precision and leadZero is true', () => { + const originalToFixed = Number.prototype.toFixed; + const spy = spyOn(Number.prototype, 'toFixed').and.callFake(function (this: Number, digits: number) { + if (!isFinite(digits)) { + fail(` toFixed() called with invalid precision: ${digits}`); + } + return originalToFixed.call(this, digits); + }); + service.leadZero = true; + service._checkPrecision('separator', '123456.78'); + + expect(spy).not.toHaveBeenCalled(); + }); +});