@@ -312,49 +312,96 @@ mod __rust_begin_short_backtrace {
312
312
#[ cfg( test) ]
313
313
mod tests {
314
314
use crate :: {
315
- prelude:: { IntoScheduleConfigs , Resource , Schedule , SystemSet } ,
315
+ prelude:: { Component , Resource , Schedule } ,
316
316
schedule:: ExecutorKind ,
317
- system:: Commands ,
317
+ system:: { Populated , Res , ResMut , Single } ,
318
318
world:: World ,
319
319
} ;
320
320
321
- #[ derive( Resource ) ]
322
- struct R1 ;
323
-
324
- #[ derive( Resource ) ]
325
- struct R2 ;
321
+ #[ derive( Component ) ]
322
+ struct TestComponent ;
326
323
327
324
const EXECUTORS : [ ExecutorKind ; 3 ] = [
328
325
ExecutorKind :: Simple ,
329
326
ExecutorKind :: SingleThreaded ,
330
327
ExecutorKind :: MultiThreaded ,
331
328
] ;
332
329
330
+ #[ derive( Resource , Default ) ]
331
+ struct TestState {
332
+ populated_ran : bool ,
333
+ single_ran : bool ,
334
+ }
335
+
336
+ fn set_single_state ( mut _single : Single < & TestComponent > , mut state : ResMut < TestState > ) {
337
+ state. single_ran = true ;
338
+ }
339
+
340
+ fn set_populated_state (
341
+ mut _populated : Populated < & TestComponent > ,
342
+ mut state : ResMut < TestState > ,
343
+ ) {
344
+ state. populated_ran = true ;
345
+ }
346
+
333
347
#[ test]
334
- fn invalid_system_param_skips ( ) {
348
+ fn single_and_populated_skipped_and_run ( ) {
335
349
for executor in EXECUTORS {
336
- invalid_system_param_skips_core ( executor) ;
350
+ std:: println!( "Testing executor: {:?}" , executor) ;
351
+
352
+ let mut world = World :: new ( ) ;
353
+ world. init_resource :: < TestState > ( ) ;
354
+
355
+ let mut schedule = Schedule :: default ( ) ;
356
+ schedule. set_executor_kind ( executor) ;
357
+ schedule. add_systems ( ( set_single_state, set_populated_state) ) ;
358
+ schedule. run ( & mut world) ;
359
+
360
+ let state = world. get_resource :: < TestState > ( ) . unwrap ( ) ;
361
+ assert ! ( !state. single_ran) ;
362
+ assert ! ( !state. populated_ran) ;
363
+
364
+ world. spawn ( TestComponent ) ;
365
+
366
+ schedule. run ( & mut world) ;
367
+ let state = world. get_resource :: < TestState > ( ) . unwrap ( ) ;
368
+ assert ! ( state. single_ran) ;
369
+ assert ! ( state. populated_ran) ;
337
370
}
338
371
}
339
372
340
- fn invalid_system_param_skips_core ( executor : ExecutorKind ) {
373
+ fn look_for_missing_resource ( _res : Res < TestState > ) { }
374
+
375
+ #[ test]
376
+ #[ should_panic]
377
+ fn missing_resource_panics_simple ( ) {
378
+ let mut world = World :: new ( ) ;
379
+ let mut schedule = Schedule :: default ( ) ;
380
+
381
+ schedule. set_executor_kind ( ExecutorKind :: Simple ) ;
382
+ schedule. add_systems ( look_for_missing_resource) ;
383
+ schedule. run ( & mut world) ;
384
+ }
385
+
386
+ #[ test]
387
+ #[ should_panic]
388
+ fn missing_resource_panics_single_threaded ( ) {
341
389
let mut world = World :: new ( ) ;
342
390
let mut schedule = Schedule :: default ( ) ;
343
- schedule. set_executor_kind ( executor) ;
344
- schedule. add_systems (
345
- (
346
- // This system depends on a system that is always skipped.
347
- ( |mut commands : Commands | {
348
- commands. insert_resource ( R2 ) ;
349
- } ) ,
350
- )
351
- . chain ( ) ,
352
- ) ;
391
+
392
+ schedule. set_executor_kind ( ExecutorKind :: SingleThreaded ) ;
393
+ schedule. add_systems ( look_for_missing_resource) ;
353
394
schedule. run ( & mut world) ;
354
- assert ! ( world. get_resource:: <R1 >( ) . is_none( ) ) ;
355
- assert ! ( world. get_resource:: <R2 >( ) . is_some( ) ) ;
356
395
}
357
396
358
- #[ derive( SystemSet , Hash , Debug , PartialEq , Eq , Clone ) ]
359
- struct S1 ;
397
+ #[ test]
398
+ #[ should_panic]
399
+ fn missing_resource_panics_multi_threaded ( ) {
400
+ let mut world = World :: new ( ) ;
401
+ let mut schedule = Schedule :: default ( ) ;
402
+
403
+ schedule. set_executor_kind ( ExecutorKind :: MultiThreaded ) ;
404
+ schedule. add_systems ( look_for_missing_resource) ;
405
+ schedule. run ( & mut world) ;
406
+ }
360
407
}
0 commit comments