@@ -312,17 +312,14 @@ 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:: { Commands , 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 ,
@@ -331,30 +328,77 @@ mod tests {
331
328
] ;
332
329
333
330
#[ test]
334
- fn invalid_system_param_skips ( ) {
331
+ fn single_and_populated_skipped_and_run ( ) {
335
332
for executor in EXECUTORS {
336
- invalid_system_param_skips_core ( executor) ;
333
+ std:: println!( "Testing executor: {:?}" , executor) ;
334
+
335
+ let mut world = World :: new ( ) ;
336
+ world. init_resource :: < TestState > ( ) ;
337
+
338
+ let mut schedule = Schedule :: default ( ) ;
339
+ schedule. set_executor_kind ( executor) ;
340
+ schedule. add_systems ( ( set_single_state, set_populated_state) ) ;
341
+ schedule. run ( & mut world) ;
342
+
343
+ let state = world. get_resource :: < TestState > ( ) . unwrap ( ) ;
344
+ assert ! ( !state. single_ran) ;
345
+ assert ! ( !state. populated_ran) ;
346
+
347
+ world. spawn ( TestComponent ) ;
348
+
349
+ schedule. run ( & mut world) ;
350
+ let state = world. get_resource :: < TestState > ( ) . unwrap ( ) ;
351
+ assert ! ( state. single_ran) ;
352
+ assert ! ( state. populated_ran) ;
337
353
}
338
354
}
339
355
340
- fn invalid_system_param_skips_core ( executor : ExecutorKind ) {
356
+ #[ derive( Resource , Default ) ]
357
+ struct TestState {
358
+ populated_ran : bool ,
359
+ single_ran : bool ,
360
+ }
361
+
362
+ fn set_single_state ( mut _single : Single < & TestComponent > , mut state : ResMut < TestState > ) {
363
+ state. single_ran = true ;
364
+ }
365
+
366
+ fn set_populated_state ( mut _commands : Commands , mut state : ResMut < TestState > ) {
367
+ state. populated_ran = true ;
368
+ }
369
+
370
+ fn look_for_missing_resource ( _res : Res < TestState > ) { }
371
+
372
+ #[ test]
373
+ #[ should_panic]
374
+ fn missing_resource_panics_simple ( ) {
375
+ let mut world = World :: new ( ) ;
376
+ let mut schedule = Schedule :: default ( ) ;
377
+
378
+ schedule. set_executor_kind ( ExecutorKind :: Simple ) ;
379
+ schedule. add_systems ( look_for_missing_resource) ;
380
+ schedule. run ( & mut world) ;
381
+ }
382
+
383
+ #[ test]
384
+ #[ should_panic]
385
+ fn missing_resource_panics_single_threaded ( ) {
341
386
let mut world = World :: new ( ) ;
342
387
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
- ) ;
388
+
389
+ schedule. set_executor_kind ( ExecutorKind :: SingleThreaded ) ;
390
+ schedule. add_systems ( look_for_missing_resource) ;
353
391
schedule. run ( & mut world) ;
354
- assert ! ( world. get_resource:: <R1 >( ) . is_none( ) ) ;
355
- assert ! ( world. get_resource:: <R2 >( ) . is_some( ) ) ;
356
392
}
357
393
358
- #[ derive( SystemSet , Hash , Debug , PartialEq , Eq , Clone ) ]
359
- struct S1 ;
394
+ #[ test]
395
+ #[ should_panic]
396
+ fn missing_resource_panics_multi_threaded ( ) {
397
+ let mut world = World :: new ( ) ;
398
+ let mut schedule = Schedule :: default ( ) ;
399
+
400
+ schedule. set_executor_kind ( ExecutorKind :: MultiThreaded ) ;
401
+ schedule. add_systems ( look_for_missing_resource) ;
402
+ schedule. run ( & mut world) ;
403
+ }
360
404
}
0 commit comments