@@ -96,3 +96,71 @@ test('when parse strings instead of array then throw', () => {
9696 program . parse ( 'node' , 'test' ) ;
9797 } ) . toThrow ( ) ;
9898} ) ;
99+
100+ describe ( 'parse parameter is treated as readonly, per TypeScript declaration' , ( ) => {
101+ test ( 'when parse called then parameter does not change' , ( ) => {
102+ const program = new commander . Command ( ) ;
103+ program . option ( '--debug' ) ;
104+ const original = [ 'node' , '--debug' , 'arg' ] ;
105+ const param = original . slice ( ) ;
106+ program . parse ( param ) ;
107+ expect ( param ) . toEqual ( original ) ;
108+ } ) ;
109+
110+ test ( 'when parse called and parsed args later changed then parameter does not change' , ( ) => {
111+ const program = new commander . Command ( ) ;
112+ program . option ( '--debug' ) ;
113+ const original = [ 'node' , '--debug' , 'arg' ] ;
114+ const param = original . slice ( ) ;
115+ program . parse ( param ) ;
116+ program . args . length = 0 ;
117+ program . rawArgs . length = 0 ;
118+ expect ( param ) . toEqual ( original ) ;
119+ } ) ;
120+
121+ test ( 'when parse called and param later changed then parsed args do not change' , ( ) => {
122+ const program = new commander . Command ( ) ;
123+ program . option ( '--debug' ) ;
124+ const param = [ 'node' , '--debug' , 'arg' ] ;
125+ program . parse ( param ) ;
126+ const oldArgs = program . args . slice ( ) ;
127+ const oldRawArgs = program . rawArgs . slice ( ) ;
128+ param . length = 0 ;
129+ expect ( program . args ) . toEqual ( oldArgs ) ;
130+ expect ( program . rawArgs ) . toEqual ( oldRawArgs ) ;
131+ } ) ;
132+ } ) ;
133+
134+ describe ( 'parseAsync parameter is treated as readonly, per TypeScript declaration' , ( ) => {
135+ test ( 'when parse called then parameter does not change' , async ( ) => {
136+ const program = new commander . Command ( ) ;
137+ program . option ( '--debug' ) ;
138+ const original = [ 'node' , '--debug' , 'arg' ] ;
139+ const param = original . slice ( ) ;
140+ await program . parseAsync ( param ) ;
141+ expect ( param ) . toEqual ( original ) ;
142+ } ) ;
143+
144+ test ( 'when parseAsync called and parsed args later changed then parameter does not change' , async ( ) => {
145+ const program = new commander . Command ( ) ;
146+ program . option ( '--debug' ) ;
147+ const original = [ 'node' , '--debug' , 'arg' ] ;
148+ const param = original . slice ( ) ;
149+ await program . parseAsync ( param ) ;
150+ program . args . length = 0 ;
151+ program . rawArgs . length = 0 ;
152+ expect ( param ) . toEqual ( original ) ;
153+ } ) ;
154+
155+ test ( 'when parseAsync called and param later changed then parsed args do not change' , async ( ) => {
156+ const program = new commander . Command ( ) ;
157+ program . option ( '--debug' ) ;
158+ const param = [ 'node' , '--debug' , 'arg' ] ;
159+ await program . parseAsync ( param ) ;
160+ const oldArgs = program . args . slice ( ) ;
161+ const oldRawArgs = program . rawArgs . slice ( ) ;
162+ param . length = 0 ;
163+ expect ( program . args ) . toEqual ( oldArgs ) ;
164+ expect ( program . rawArgs ) . toEqual ( oldRawArgs ) ;
165+ } ) ;
166+ } ) ;
0 commit comments