@@ -95,6 +95,7 @@ fn test_plan_command_basic() {
9595 vec ! [ ] , // include_acronyms
9696 vec ! [ ] , // exclude_acronyms
9797 vec ! [ ] , // only_acronyms
98+ true , // enable_plural_variants
9899 false , // ignore_ambiguous
99100 Some ( temp_dir. path ( ) ) , // working_dir
100101 None , // atomic_config
@@ -143,6 +144,7 @@ fn test_plan_command_with_styles() {
143144 vec ! [ ] , // include_acronyms
144145 vec ! [ ] , // exclude_acronyms
145146 vec ! [ ] , // only_acronyms
147+ true , // enable_plural_variants
146148 false , // ignore_ambiguous
147149 Some ( temp_dir. path ( ) ) , // working_dir
148150 None , // atomic_config
@@ -187,6 +189,7 @@ fn test_plan_command_with_styles() {
187189 vec ! [ ] , // include_acronyms
188190 vec ! [ ] , // exclude_acronyms
189191 vec ! [ ] , // only_acronyms
192+ true , // enable_plural_variants
190193 false , // ignore_ambiguous
191194 Some ( temp_dir. path ( ) ) , // working_dir
192195 None , // atomic_config
@@ -201,6 +204,97 @@ fn test_plan_command_with_styles() {
201204 ) ;
202205}
203206
207+ #[ test]
208+ fn test_plan_command_plural_variant_toggle ( ) {
209+ let temp_dir = TempDir :: new ( ) . unwrap ( ) ;
210+ let test_file = temp_dir. child ( "sample.ts" ) ;
211+ test_file
212+ . write_str (
213+ "type DeployRequest = {}\n \
214+ type DeployRequestList = DeployRequest[];\n \
215+ export const load = (): Promise<DeployRequestList> => Promise.resolve([]);\n ",
216+ )
217+ . unwrap ( ) ;
218+
219+ let ( enabled_result, _) = plan_operation (
220+ "DeployRequests" ,
221+ "DeployApprovalRequests" ,
222+ vec ! [ PathBuf :: from( "." ) ] , // paths
223+ vec ! [ ] , // include
224+ vec ! [ ] , // exclude
225+ true , // respect_gitignore
226+ 0 , // unrestricted_level
227+ true , // rename_files
228+ true , // rename_dirs
229+ & [ ] , // exclude_styles
230+ & [ ] , // include_styles
231+ & [ ] , // only_styles
232+ vec ! [ ] , // exclude_match
233+ None , // exclude_matching_lines
234+ None , // plan_out
235+ None , // preview_format
236+ true , // dry_run
237+ true , // fixed_table_width
238+ false , // use_color
239+ false , // no_acronyms
240+ vec ! [ ] , // include_acronyms
241+ vec ! [ ] , // exclude_acronyms
242+ vec ! [ ] , // only_acronyms
243+ true , // enable_plural_variants
244+ false , // ignore_ambiguous
245+ Some ( temp_dir. path ( ) ) , // working_dir
246+ None , // atomic_config
247+ )
248+ . unwrap ( ) ;
249+
250+ let plan_enabled = enabled_result
251+ . plan
252+ . expect ( "plan result should include plan" ) ;
253+ assert ! ( plan_enabled. matches. iter( ) . any( |m| m
254+ . line_after
255+ . as_deref( )
256+ . is_some_and( |line| line. contains( "DeployApprovalRequestList" ) ) ) ) ;
257+
258+ let ( disabled_result, _) = plan_operation (
259+ "DeployRequests" ,
260+ "DeployApprovalRequests" ,
261+ vec ! [ PathBuf :: from( "." ) ] ,
262+ vec ! [ ] ,
263+ vec ! [ ] ,
264+ true ,
265+ 0 ,
266+ true ,
267+ true ,
268+ & [ ] ,
269+ & [ ] ,
270+ & [ ] ,
271+ vec ! [ ] ,
272+ None ,
273+ None ,
274+ None ,
275+ true ,
276+ true ,
277+ false ,
278+ false ,
279+ vec ! [ ] ,
280+ vec ! [ ] ,
281+ vec ! [ ] ,
282+ false , // enable_plural_variants
283+ false ,
284+ Some ( temp_dir. path ( ) ) ,
285+ None ,
286+ )
287+ . unwrap ( ) ;
288+
289+ let plan_disabled = disabled_result
290+ . plan
291+ . expect ( "plan result should include plan" ) ;
292+ assert ! ( plan_disabled. matches. iter( ) . all( |m| m
293+ . line_after
294+ . as_deref( )
295+ . is_none_or( |line| !line. contains( "DeployApprovalRequestList" ) ) ) ) ;
296+ }
297+
204298#[ test]
205299fn test_plan_command_with_includes ( ) {
206300 let temp_dir = TempDir :: new ( ) . unwrap ( ) ;
0 commit comments