@@ -62,8 +62,10 @@ describe('Directive: Mask (Trigger on mask change)', () => {
6262 fixture . detectChanges ( ) ;
6363 await fixture . whenStable ( ) ;
6464 inputEl = fixture . debugElement . query ( By . css ( 'input' ) ) ;
65+ // Display is formatted with new mask
6566 expect ( inputEl . nativeElement . value ) . equal ( '79 123 45 67' ) ;
66- expect ( component . form . value ) . equal ( '791234567' ) ;
67+ // But form value should NOT be updated when triggerOnMaskChange is false
68+ expect ( component . form . value ) . equal ( '7912345678' ) ;
6769 } ) ;
6870
6971 it ( 'should trigger form value update if mask is changed when triggerOnMaskChange is true' , async ( ) => {
@@ -97,6 +99,78 @@ describe('Directive: Mask (Trigger on mask change)', () => {
9799
98100 component . mask . set ( 'S0S 0S0' ) ;
99101 await equal ( inputTarget . value , '' , fixture , true ) ;
100- expect ( component . form . value ) . equal ( '' ) ;
102+ // Form value should NOT be updated when triggerOnMaskChange is false
103+ expect ( component . form . value ) . equal ( '1234' ) ;
104+ } ) ;
105+
106+ it ( 'should not mark form as dirty when mask changes and triggerOnMaskChange is false' , async ( ) => {
107+ component . mask . set ( '0000' ) ;
108+ component . triggerOnMaskChange . set ( false ) ;
109+ fixture . detectChanges ( ) ;
110+
111+ // Set value programmatically
112+ component . form . setValue ( '1234' ) ;
113+ fixture . detectChanges ( ) ;
114+ await fixture . whenStable ( ) ;
115+
116+ // Reset to pristine state (setValue may trigger onChange in some cases)
117+ component . form . markAsPristine ( ) ;
118+ expect ( component . form . pristine ) . equal ( true ) ;
119+
120+ // Change the mask - this should NOT mark form as dirty
121+ component . mask . set ( '00-00' ) ;
122+ fixture . detectChanges ( ) ;
123+ await fixture . whenStable ( ) ;
124+
125+ // Form should still be pristine after mask change when triggerOnMaskChange is false
126+ expect ( component . form . pristine ) . equal ( true ) ;
127+ expect ( component . form . dirty ) . equal ( false ) ;
128+ } ) ;
129+
130+ it ( 'should not mark form as dirty when mask changes from empty to pattern and triggerOnMaskChange is false' , async ( ) => {
131+ component . mask . set ( '' ) ;
132+ component . triggerOnMaskChange . set ( false ) ;
133+ fixture . detectChanges ( ) ;
134+
135+ // Set value programmatically
136+ component . form . setValue ( '12345678' ) ;
137+ fixture . detectChanges ( ) ;
138+ await fixture . whenStable ( ) ;
139+
140+ // Reset to pristine state
141+ component . form . markAsPristine ( ) ;
142+ expect ( component . form . pristine ) . equal ( true ) ;
143+
144+ // Apply a mask to the existing value - should NOT mark as dirty
145+ component . mask . set ( '0000-0000' ) ;
146+ fixture . detectChanges ( ) ;
147+ await fixture . whenStable ( ) ;
148+
149+ // Form should still be pristine
150+ expect ( component . form . pristine ) . equal ( true ) ;
151+ expect ( component . form . dirty ) . equal ( false ) ;
152+ } ) ;
153+
154+ it ( 'should not mark form as dirty when mask changes with phone pattern and triggerOnMaskChange is false' , async ( ) => {
155+ component . mask . set ( '(000) 000-0000' ) ;
156+ component . triggerOnMaskChange . set ( false ) ;
157+ fixture . detectChanges ( ) ;
158+
159+ component . form . setValue ( '1234567890' ) ;
160+ fixture . detectChanges ( ) ;
161+ await fixture . whenStable ( ) ;
162+
163+ // Reset to pristine state
164+ component . form . markAsPristine ( ) ;
165+ expect ( component . form . pristine ) . equal ( true ) ;
166+
167+ // Change to a different phone mask format - should NOT mark as dirty
168+ component . mask . set ( '000-000-0000' ) ;
169+ fixture . detectChanges ( ) ;
170+ await fixture . whenStable ( ) ;
171+
172+ // Should remain pristine when triggerOnMaskChange is false
173+ expect ( component . form . pristine ) . equal ( true ) ;
174+ expect ( component . form . dirty ) . equal ( false ) ;
101175 } ) ;
102176} ) ;
0 commit comments