@@ -234,7 +234,26 @@ fn detect_validator(task_dir: &Path, validator: &str) -> Result<Arc<SourceFile>>
234234 Ok ( validators. pop ( ) . map ( Arc :: new) . unwrap ( ) )
235235}
236236
237- pub fn parse (
237+ /// Finds a generator with the specified name.
238+ pub fn get_generator ( generator : & str , task_dir : & Path ) -> Result < Arc < SourceFile > > {
239+ let mut generators = find_source_file (
240+ task_dir,
241+ vec ! [ & format!( "gen/{generator}.*" ) ] ,
242+ task_dir,
243+ "Input file generator at" ,
244+ None ,
245+ WriteBinTo :: None ,
246+ ) ;
247+ if generators. len ( ) > 1 {
248+ let paths = generators. iter ( ) . map ( |s| s. name ( ) ) . collect :: < Vec < _ > > ( ) ;
249+ bail ! ( "Multiple generators found: {:?}" , paths) ;
250+ } else if generators. is_empty ( ) {
251+ bail ! ( "No generator `{generator}` found" ) ;
252+ }
253+ Ok ( generators. pop ( ) . map ( Arc :: new) . unwrap ( ) )
254+ }
255+
256+ pub ( super ) fn parse (
238257 task_dir : & Path ,
239258 config : & TaskYAML ,
240259 grader_map : Arc < GraderMap > ,
@@ -298,24 +317,6 @@ pub fn parse(
298317 }
299318 }
300319
301- let get_generator = |generator : & str | {
302- let mut generators = find_source_file (
303- task_dir,
304- vec ! [ & format!( "gen/{generator}.*" ) ] ,
305- task_dir,
306- "Input file generator at" ,
307- None ,
308- WriteBinTo :: None ,
309- ) ;
310- if generators. len ( ) > 1 {
311- let paths = generators. iter ( ) . map ( |s| s. name ( ) ) . collect :: < Vec < _ > > ( ) ;
312- bail ! ( "Multiple generators found: {:?}" , paths) ;
313- } else if generators. is_empty ( ) {
314- bail ! ( "No generator `{generator}` found" ) ;
315- }
316- Ok ( generators. pop ( ) . map ( Arc :: new) . unwrap ( ) )
317- } ;
318-
319320 let mut process_group = |name : & str , group : & mut GroupConfig | -> Result < ( ) > {
320321 group. resolve_repeats ( ) ;
321322 let mut constants = constants. clone ( ) ;
@@ -361,7 +362,7 @@ pub fn parse(
361362 . push ( id) ;
362363 }
363364 let generator = testcase. generator ( ) . unwrap_or ( generator) ;
364- let generator = get_generator ( generator) ?;
365+ let generator = get_generator ( generator, task_dir ) ?;
365366 let input_generator =
366367 InputGenerator :: Custom ( generator, testcase. args ( ) . instantiate ( & constants) ?) ;
367368 testcases. insert (
0 commit comments