@@ -395,13 +395,193 @@ mod tests {
395
395
assert ! ( !enabled( & logger. directives, Level :: Debug , "crate2" ) ) ;
396
396
}
397
397
398
+ // Some of our tests are only correct or complete when they cover the full
399
+ // universe of variants for log::Level. In the unlikely event that a new
400
+ // variant is added in the future, this test will detect the scenario and
401
+ // alert us to the need to review and update the tests. In such a
402
+ // situation, this test will fail to compile, and the error message will
403
+ // look something like this:
404
+ //
405
+ // error[E0004]: non-exhaustive patterns: `NewVariant` not covered
406
+ // --> src/filter/mod.rs:413:15
407
+ // |
408
+ // 413 | match level_universe {
409
+ // | ^^^^^^^^^^^^^^ pattern `NewVariant` not covered
410
+ #[ test]
411
+ fn ensure_tests_cover_level_universe ( ) {
412
+ let level_universe: Level = Level :: Trace ; // use of trace variant is arbitrary
413
+ match level_universe {
414
+ Level :: Error | Level :: Warn | Level :: Info | Level :: Debug | Level :: Trace => ( ) ,
415
+ }
416
+ }
417
+
398
418
#[ test]
399
419
fn parse_default ( ) {
400
420
let logger = Builder :: new ( ) . parse ( "info,crate1::mod1=warn" ) . build ( ) ;
401
421
assert ! ( enabled( & logger. directives, Level :: Warn , "crate1::mod1" ) ) ;
402
422
assert ! ( enabled( & logger. directives, Level :: Info , "crate2::mod2" ) ) ;
403
423
}
404
424
425
+ #[ test]
426
+ fn parse_default_bare_level_off_lc ( ) {
427
+ let logger = Builder :: new ( ) . parse ( "off" ) . build ( ) ;
428
+ assert ! ( !enabled( & logger. directives, Level :: Error , "" ) ) ;
429
+ assert ! ( !enabled( & logger. directives, Level :: Warn , "" ) ) ;
430
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
431
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
432
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
433
+ }
434
+
435
+ #[ test]
436
+ fn parse_default_bare_level_off_uc ( ) {
437
+ let logger = Builder :: new ( ) . parse ( "OFF" ) . build ( ) ;
438
+ assert ! ( !enabled( & logger. directives, Level :: Error , "" ) ) ;
439
+ assert ! ( !enabled( & logger. directives, Level :: Warn , "" ) ) ;
440
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
441
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
442
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
443
+ }
444
+
445
+ #[ test]
446
+ fn parse_default_bare_level_error_lc ( ) {
447
+ let logger = Builder :: new ( ) . parse ( "error" ) . build ( ) ;
448
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
449
+ assert ! ( !enabled( & logger. directives, Level :: Warn , "" ) ) ;
450
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
451
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
452
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
453
+ }
454
+
455
+ #[ test]
456
+ fn parse_default_bare_level_error_uc ( ) {
457
+ let logger = Builder :: new ( ) . parse ( "ERROR" ) . build ( ) ;
458
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
459
+ assert ! ( !enabled( & logger. directives, Level :: Warn , "" ) ) ;
460
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
461
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
462
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
463
+ }
464
+
465
+ #[ test]
466
+ fn parse_default_bare_level_warn_lc ( ) {
467
+ let logger = Builder :: new ( ) . parse ( "warn" ) . build ( ) ;
468
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
469
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
470
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
471
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
472
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
473
+ }
474
+
475
+ #[ test]
476
+ fn parse_default_bare_level_warn_uc ( ) {
477
+ let logger = Builder :: new ( ) . parse ( "WARN" ) . build ( ) ;
478
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
479
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
480
+ assert ! ( !enabled( & logger. directives, Level :: Info , "" ) ) ;
481
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
482
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
483
+ }
484
+
485
+ #[ test]
486
+ fn parse_default_bare_level_info_lc ( ) {
487
+ let logger = Builder :: new ( ) . parse ( "info" ) . build ( ) ;
488
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
489
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
490
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
491
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
492
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
493
+ }
494
+
495
+ #[ test]
496
+ fn parse_default_bare_level_info_uc ( ) {
497
+ let logger = Builder :: new ( ) . parse ( "INFO" ) . build ( ) ;
498
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
499
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
500
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
501
+ assert ! ( !enabled( & logger. directives, Level :: Debug , "" ) ) ;
502
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
503
+ }
504
+
505
+ #[ test]
506
+ fn parse_default_bare_level_debug_lc ( ) {
507
+ let logger = Builder :: new ( ) . parse ( "debug" ) . build ( ) ;
508
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
509
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
510
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
511
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
512
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
513
+ }
514
+
515
+ #[ test]
516
+ fn parse_default_bare_level_debug_uc ( ) {
517
+ let logger = Builder :: new ( ) . parse ( "DEBUG" ) . build ( ) ;
518
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
519
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
520
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
521
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
522
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
523
+ }
524
+
525
+ #[ test]
526
+ fn parse_default_bare_level_trace_lc ( ) {
527
+ let logger = Builder :: new ( ) . parse ( "trace" ) . build ( ) ;
528
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
529
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
530
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
531
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
532
+ assert ! ( enabled( & logger. directives, Level :: Trace , "" ) ) ;
533
+ }
534
+
535
+ #[ test]
536
+ fn parse_default_bare_level_trace_uc ( ) {
537
+ let logger = Builder :: new ( ) . parse ( "TRACE" ) . build ( ) ;
538
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
539
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
540
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
541
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
542
+ assert ! ( enabled( & logger. directives, Level :: Trace , "" ) ) ;
543
+ }
544
+
545
+ // In practice, the desired log level is typically specified by a token
546
+ // that is either all lowercase (e.g., 'trace') or all uppercase (.e.g,
547
+ // 'TRACE'), but this tests serves as a reminder that
548
+ // log::Level::from_str() ignores all case variants.
549
+ #[ test]
550
+ fn parse_default_bare_level_debug_mixed ( ) {
551
+ {
552
+ let logger = Builder :: new ( ) . parse ( "Debug" ) . build ( ) ;
553
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
554
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
555
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
556
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
557
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
558
+ }
559
+ {
560
+ let logger = Builder :: new ( ) . parse ( "debuG" ) . build ( ) ;
561
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
562
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
563
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
564
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
565
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
566
+ }
567
+ {
568
+ let logger = Builder :: new ( ) . parse ( "deBug" ) . build ( ) ;
569
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
570
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
571
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
572
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
573
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
574
+ }
575
+ {
576
+ let logger = Builder :: new ( ) . parse ( "DeBuG" ) . build ( ) ; // LaTeX flavor!
577
+ assert ! ( enabled( & logger. directives, Level :: Error , "" ) ) ;
578
+ assert ! ( enabled( & logger. directives, Level :: Warn , "" ) ) ;
579
+ assert ! ( enabled( & logger. directives, Level :: Info , "" ) ) ;
580
+ assert ! ( enabled( & logger. directives, Level :: Debug , "" ) ) ;
581
+ assert ! ( !enabled( & logger. directives, Level :: Trace , "" ) ) ;
582
+ }
583
+ }
584
+
405
585
#[ test]
406
586
fn match_full_path ( ) {
407
587
let logger = make_logger_filter ( vec ! [
@@ -569,6 +749,36 @@ mod tests {
569
749
assert ! ( filter. is_none( ) ) ;
570
750
}
571
751
752
+ #[ test]
753
+ fn parse_spec_global_bare_warn_lc ( ) {
754
+ // test parse_spec with no crate, in isolation, all lowercase
755
+ let ( dirs, filter) = parse_spec ( "warn" ) ;
756
+ assert_eq ! ( dirs. len( ) , 1 ) ;
757
+ assert_eq ! ( dirs[ 0 ] . name, None ) ;
758
+ assert_eq ! ( dirs[ 0 ] . level, LevelFilter :: Warn ) ;
759
+ assert ! ( filter. is_none( ) ) ;
760
+ }
761
+
762
+ #[ test]
763
+ fn parse_spec_global_bare_warn_uc ( ) {
764
+ // test parse_spec with no crate, in isolation, all uppercase
765
+ let ( dirs, filter) = parse_spec ( "WARN" ) ;
766
+ assert_eq ! ( dirs. len( ) , 1 ) ;
767
+ assert_eq ! ( dirs[ 0 ] . name, None ) ;
768
+ assert_eq ! ( dirs[ 0 ] . level, LevelFilter :: Warn ) ;
769
+ assert ! ( filter. is_none( ) ) ;
770
+ }
771
+
772
+ #[ test]
773
+ fn parse_spec_global_bare_warn_mixed ( ) {
774
+ // test parse_spec with no crate, in isolation, mixed case
775
+ let ( dirs, filter) = parse_spec ( "wArN" ) ;
776
+ assert_eq ! ( dirs. len( ) , 1 ) ;
777
+ assert_eq ! ( dirs[ 0 ] . name, None ) ;
778
+ assert_eq ! ( dirs[ 0 ] . level, LevelFilter :: Warn ) ;
779
+ assert ! ( filter. is_none( ) ) ;
780
+ }
781
+
572
782
#[ test]
573
783
fn parse_spec_valid_filter ( ) {
574
784
let ( dirs, filter) = parse_spec ( "crate1::mod1=error,crate1::mod2,crate2=debug/abc" ) ;
0 commit comments