@@ -371,216 +371,132 @@ mod test {
371
371
}
372
372
373
373
#[ test]
374
- fn from_level_filter ( ) {
375
- // ErrorLevel
376
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Off ) ;
377
- assert_eq ! ( v, Verbosity :: new( 0 , 1 ) ) ;
378
-
379
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Error ) ;
380
- assert_eq ! ( v, Verbosity :: new( 0 , 0 ) ) ;
381
-
382
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Warn ) ;
383
- assert_eq ! ( v, Verbosity :: new( 1 , 0 ) ) ;
384
-
385
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Info ) ;
386
- assert_eq ! ( v, Verbosity :: new( 2 , 0 ) ) ;
387
-
388
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Debug ) ;
389
- assert_eq ! ( v, Verbosity :: new( 3 , 0 ) ) ;
390
-
391
- let v = Verbosity :: < ErrorLevel > :: from ( LevelFilter :: Trace ) ;
392
- assert_eq ! ( v, Verbosity :: new( 4 , 0 ) ) ;
393
-
394
- // WarnLevel
395
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Off ) ;
396
- assert_eq ! ( v, Verbosity :: new( 0 , 2 ) ) ;
397
-
398
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Error ) ;
399
- assert_eq ! ( v, Verbosity :: new( 0 , 1 ) ) ;
400
-
401
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Warn ) ;
402
- assert_eq ! ( v, Verbosity :: new( 0 , 0 ) ) ;
403
-
404
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Info ) ;
405
- assert_eq ! ( v, Verbosity :: new( 1 , 0 ) ) ;
406
-
407
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Debug ) ;
408
- assert_eq ! ( v, Verbosity :: new( 2 , 0 ) ) ;
374
+ fn from_level_filter_error_level ( ) {
375
+ let tests = [
376
+ ( LevelFilter :: Off , Verbosity :: < ErrorLevel > :: new ( 0 , 1 ) ) ,
377
+ ( LevelFilter :: Error , Verbosity :: < ErrorLevel > :: new ( 0 , 0 ) ) ,
378
+ ( LevelFilter :: Warn , Verbosity :: < ErrorLevel > :: new ( 1 , 0 ) ) ,
379
+ ( LevelFilter :: Info , Verbosity :: < ErrorLevel > :: new ( 2 , 0 ) ) ,
380
+ ( LevelFilter :: Debug , Verbosity :: < ErrorLevel > :: new ( 3 , 0 ) ) ,
381
+ ( LevelFilter :: Trace , Verbosity :: < ErrorLevel > :: new ( 4 , 0 ) ) ,
382
+ ] ;
383
+ for ( filter, expected) in tests. iter ( ) {
384
+ let verbosity = Verbosity :: from ( * filter) ;
385
+ assert_eq ! ( verbosity, * expected, ) ;
386
+ assert_eq ! ( verbosity. log_level_filter( ) , * filter, ) ;
387
+ }
388
+ }
409
389
410
- let v = Verbosity :: < WarnLevel > :: from ( LevelFilter :: Trace ) ;
411
- assert_eq ! ( v, Verbosity :: new( 3 , 0 ) ) ;
390
+ #[ test]
391
+ fn from_level_filter_warn_level ( ) {
392
+ let tests = [
393
+ ( LevelFilter :: Off , Verbosity :: < WarnLevel > :: new ( 0 , 2 ) ) ,
394
+ ( LevelFilter :: Error , Verbosity :: < WarnLevel > :: new ( 0 , 1 ) ) ,
395
+ ( LevelFilter :: Warn , Verbosity :: < WarnLevel > :: new ( 0 , 0 ) ) ,
396
+ ( LevelFilter :: Info , Verbosity :: < WarnLevel > :: new ( 1 , 0 ) ) ,
397
+ ( LevelFilter :: Debug , Verbosity :: < WarnLevel > :: new ( 2 , 0 ) ) ,
398
+ ( LevelFilter :: Trace , Verbosity :: < WarnLevel > :: new ( 3 , 0 ) ) ,
399
+ ] ;
400
+ for ( filter, expected) in tests. iter ( ) {
401
+ let verbosity = Verbosity :: from ( * filter) ;
402
+ assert_eq ! ( verbosity, * expected, ) ;
403
+ assert_eq ! ( verbosity. log_level_filter( ) , * filter, ) ;
404
+ }
405
+ }
412
406
413
- // InfoLevel
414
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Off ) ;
415
- assert_eq ! ( v, Verbosity :: new( 0 , 3 ) ) ;
407
+ #[ test]
408
+ fn from_level_filter_info_level ( ) {
409
+ let tests = [
410
+ ( LevelFilter :: Off , Verbosity :: < InfoLevel > :: new ( 0 , 3 ) ) ,
411
+ ( LevelFilter :: Error , Verbosity :: < InfoLevel > :: new ( 0 , 2 ) ) ,
412
+ ( LevelFilter :: Warn , Verbosity :: < InfoLevel > :: new ( 0 , 1 ) ) ,
413
+ ( LevelFilter :: Info , Verbosity :: < InfoLevel > :: new ( 0 , 0 ) ) ,
414
+ ( LevelFilter :: Debug , Verbosity :: < InfoLevel > :: new ( 1 , 0 ) ) ,
415
+ ( LevelFilter :: Trace , Verbosity :: < InfoLevel > :: new ( 2 , 0 ) ) ,
416
+ ] ;
417
+ for ( filter, expected) in tests. iter ( ) {
418
+ let verbosity = Verbosity :: from ( * filter) ;
419
+ assert_eq ! ( verbosity, * expected, ) ;
420
+ assert_eq ! ( verbosity. log_level_filter( ) , * filter, ) ;
421
+ }
422
+ }
416
423
417
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Error ) ;
418
- assert_eq ! ( v, Verbosity :: new( 0 , 2 ) ) ;
424
+ #[ test]
425
+ #[ cfg( feature = "serde" ) ]
426
+ fn serde_error_level ( ) {
427
+ use serde_test:: { assert_tokens, Token } ;
419
428
420
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Warn ) ;
421
- assert_eq ! ( v, Verbosity :: new( 0 , 1 ) ) ;
429
+ let tests = [
430
+ ( Verbosity :: < ErrorLevel > :: new ( 0 , 1 ) , "OFF" ) ,
431
+ ( Verbosity :: < ErrorLevel > :: new ( 0 , 0 ) , "ERROR" ) ,
432
+ ( Verbosity :: < ErrorLevel > :: new ( 1 , 0 ) , "WARN" ) ,
433
+ ( Verbosity :: < ErrorLevel > :: new ( 2 , 0 ) , "INFO" ) ,
434
+ ( Verbosity :: < ErrorLevel > :: new ( 3 , 0 ) , "DEBUG" ) ,
435
+ ( Verbosity :: < ErrorLevel > :: new ( 4 , 0 ) , "TRACE" ) ,
436
+ ] ;
422
437
423
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Info ) ;
424
- assert_eq ! ( v, Verbosity :: new( 0 , 0 ) ) ;
438
+ // check that the verbosity round-trips through serde
439
+ for ( verbosity, variant) in tests. iter ( ) {
440
+ assert_tokens (
441
+ verbosity,
442
+ & [ Token :: UnitVariant {
443
+ name : "LevelFilter" ,
444
+ variant,
445
+ } ] ,
446
+ ) ;
447
+ }
448
+ }
425
449
426
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Debug ) ;
427
- assert_eq ! ( v, Verbosity :: new( 1 , 0 ) ) ;
450
+ #[ test]
451
+ #[ cfg( feature = "serde" ) ]
452
+ fn serde_warn_level ( ) {
453
+ use serde_test:: { assert_tokens, Token } ;
428
454
429
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Trace ) ;
430
- assert_eq ! ( v, Verbosity :: new( 2 , 0 ) ) ;
455
+ let tests = [
456
+ ( Verbosity :: < WarnLevel > :: new ( 0 , 2 ) , "OFF" ) ,
457
+ ( Verbosity :: < WarnLevel > :: new ( 0 , 1 ) , "ERROR" ) ,
458
+ ( Verbosity :: < WarnLevel > :: new ( 0 , 0 ) , "WARN" ) ,
459
+ ( Verbosity :: < WarnLevel > :: new ( 1 , 0 ) , "INFO" ) ,
460
+ ( Verbosity :: < WarnLevel > :: new ( 2 , 0 ) , "DEBUG" ) ,
461
+ ( Verbosity :: < WarnLevel > :: new ( 3 , 0 ) , "TRACE" ) ,
462
+ ] ;
431
463
432
- let v = Verbosity :: < InfoLevel > :: from ( LevelFilter :: Trace ) ;
433
- assert_eq ! ( v, Verbosity :: new( 2 , 0 ) ) ;
464
+ // check that the verbosity round-trips through serde
465
+ for ( verbosity, variant) in tests. iter ( ) {
466
+ assert_tokens (
467
+ verbosity,
468
+ & [ Token :: UnitVariant {
469
+ name : "LevelFilter" ,
470
+ variant,
471
+ } ] ,
472
+ ) ;
473
+ }
434
474
}
435
475
436
476
#[ test]
437
477
#[ cfg( feature = "serde" ) ]
438
- fn serde ( ) {
478
+ fn serde_info_level ( ) {
439
479
use serde_test:: { assert_tokens, Token } ;
440
480
441
- assert_tokens (
442
- & Verbosity :: < ErrorLevel > :: new ( 0 , 1 ) ,
443
- & [ Token :: UnitVariant {
444
- name : "LevelFilter" ,
445
- variant : "OFF" ,
446
- } ] ,
447
- ) ;
448
-
449
- assert_tokens (
450
- & Verbosity :: < ErrorLevel > :: new ( 0 , 0 ) ,
451
- & [ Token :: UnitVariant {
452
- name : "LevelFilter" ,
453
- variant : "ERROR" ,
454
- } ] ,
455
- ) ;
456
-
457
- assert_tokens (
458
- & Verbosity :: < ErrorLevel > :: new ( 1 , 0 ) ,
459
- & [ Token :: UnitVariant {
460
- name : "LevelFilter" ,
461
- variant : "WARN" ,
462
- } ] ,
463
- ) ;
464
-
465
- assert_tokens (
466
- & Verbosity :: < ErrorLevel > :: new ( 2 , 0 ) ,
467
- & [ Token :: UnitVariant {
468
- name : "LevelFilter" ,
469
- variant : "INFO" ,
470
- } ] ,
471
- ) ;
472
-
473
- assert_tokens (
474
- & Verbosity :: < ErrorLevel > :: new ( 3 , 0 ) ,
475
- & [ Token :: UnitVariant {
476
- name : "LevelFilter" ,
477
- variant : "DEBUG" ,
478
- } ] ,
479
- ) ;
480
-
481
- assert_tokens (
482
- & Verbosity :: < ErrorLevel > :: new ( 4 , 0 ) ,
483
- & [ Token :: UnitVariant {
484
- name : "LevelFilter" ,
485
- variant : "TRACE" ,
486
- } ] ,
487
- ) ;
488
-
489
- assert_tokens (
490
- & Verbosity :: < WarnLevel > :: new ( 0 , 2 ) ,
491
- & [ Token :: UnitVariant {
492
- name : "LevelFilter" ,
493
- variant : "OFF" ,
494
- } ] ,
495
- ) ;
496
-
497
- assert_tokens (
498
- & Verbosity :: < WarnLevel > :: new ( 0 , 1 ) ,
499
- & [ Token :: UnitVariant {
500
- name : "LevelFilter" ,
501
- variant : "ERROR" ,
502
- } ] ,
503
- ) ;
504
-
505
- assert_tokens (
506
- & Verbosity :: < WarnLevel > :: new ( 0 , 0 ) ,
507
- & [ Token :: UnitVariant {
508
- name : "LevelFilter" ,
509
- variant : "WARN" ,
510
- } ] ,
511
- ) ;
512
-
513
- assert_tokens (
514
- & Verbosity :: < WarnLevel > :: new ( 1 , 0 ) ,
515
- & [ Token :: UnitVariant {
516
- name : "LevelFilter" ,
517
- variant : "INFO" ,
518
- } ] ,
519
- ) ;
520
-
521
- assert_tokens (
522
- & Verbosity :: < WarnLevel > :: new ( 2 , 0 ) ,
523
- & [ Token :: UnitVariant {
524
- name : "LevelFilter" ,
525
- variant : "DEBUG" ,
526
- } ] ,
527
- ) ;
528
-
529
- assert_tokens (
530
- & Verbosity :: < WarnLevel > :: new ( 3 , 0 ) ,
531
- & [ Token :: UnitVariant {
532
- name : "LevelFilter" ,
533
- variant : "TRACE" ,
534
- } ] ,
535
- ) ;
536
-
537
- assert_tokens (
538
- & Verbosity :: < InfoLevel > :: new ( 0 , 3 ) ,
539
- & [ Token :: UnitVariant {
540
- name : "LevelFilter" ,
541
- variant : "OFF" ,
542
- } ] ,
543
- ) ;
544
-
545
- assert_tokens (
546
- & Verbosity :: < InfoLevel > :: new ( 0 , 2 ) ,
547
- & [ Token :: UnitVariant {
548
- name : "LevelFilter" ,
549
- variant : "ERROR" ,
550
- } ] ,
551
- ) ;
552
-
553
- assert_tokens (
554
- & Verbosity :: < InfoLevel > :: new ( 0 , 1 ) ,
555
- & [ Token :: UnitVariant {
556
- name : "LevelFilter" ,
557
- variant : "WARN" ,
558
- } ] ,
559
- ) ;
560
-
561
- assert_tokens (
562
- & Verbosity :: < InfoLevel > :: new ( 0 , 0 ) ,
563
- & [ Token :: UnitVariant {
564
- name : "LevelFilter" ,
565
- variant : "INFO" ,
566
- } ] ,
567
- ) ;
568
-
569
- assert_tokens (
570
- & Verbosity :: < InfoLevel > :: new ( 1 , 0 ) ,
571
- & [ Token :: UnitVariant {
572
- name : "LevelFilter" ,
573
- variant : "DEBUG" ,
574
- } ] ,
575
- ) ;
576
-
577
- assert_tokens (
578
- & Verbosity :: < InfoLevel > :: new ( 2 , 0 ) ,
579
- & [ Token :: UnitVariant {
580
- name : "LevelFilter" ,
581
- variant : "TRACE" ,
582
- } ] ,
583
- ) ;
481
+ let tests = [
482
+ ( Verbosity :: < InfoLevel > :: new ( 0 , 3 ) , "OFF" ) ,
483
+ ( Verbosity :: < InfoLevel > :: new ( 0 , 2 ) , "ERROR" ) ,
484
+ ( Verbosity :: < InfoLevel > :: new ( 0 , 1 ) , "WARN" ) ,
485
+ ( Verbosity :: < InfoLevel > :: new ( 0 , 0 ) , "INFO" ) ,
486
+ ( Verbosity :: < InfoLevel > :: new ( 1 , 0 ) , "DEBUG" ) ,
487
+ ( Verbosity :: < InfoLevel > :: new ( 2 , 0 ) , "TRACE" ) ,
488
+ ] ;
489
+
490
+ // check that the verbosity round-trips through serde
491
+ for ( verbosity, variant) in tests. iter ( ) {
492
+ assert_tokens (
493
+ verbosity,
494
+ & [ Token :: UnitVariant {
495
+ name : "LevelFilter" ,
496
+ variant,
497
+ } ] ,
498
+ ) ;
499
+ }
584
500
}
585
501
586
502
#[ test]
@@ -596,13 +512,16 @@ mod test {
596
512
verbose : Verbosity < InfoLevel > ,
597
513
}
598
514
599
- // round-trips
515
+ // round-trips through serde. The default serialization is the uppercase name of the variant
516
+ // as this is how log::LevelFilter is serialized.
600
517
let toml = "meaning_of_life = 42\n verbose = \" DEBUG\" \n " ;
601
518
let cli: Cli = toml:: from_str ( toml) . unwrap ( ) ;
602
519
assert_eq ! ( cli. verbose. log_level_filter( ) , LevelFilter :: Debug ) ;
603
520
assert_eq ! ( toml:: to_string( & cli) . unwrap( ) , toml) ;
604
521
605
- // is case-insensitive
522
+ // Checks that deserializing a lowercase level also works fine. Serializing is likely less
523
+ // frequent than deserializing from a config file, so this is a more common case than the
524
+ // above serialize then deserialize test.
606
525
let toml = "meaning_of_life = 42\n verbose = \" debug\" \n " ;
607
526
let cli: Cli = toml:: from_str ( toml) . unwrap ( ) ;
608
527
assert_eq ! ( cli. verbose. log_level_filter( ) , LevelFilter :: Debug ) ;
0 commit comments