@@ -338,3 +338,131 @@ impl Log for Logger {
338
338
// everything else flushes by itself
339
339
}
340
340
}
341
+
342
+ #[ cfg( test) ]
343
+ mod tests {
344
+ use super :: * ;
345
+ use std:: fs:: File ;
346
+ use std:: io:: BufReader ;
347
+ use std:: io:: BufRead ;
348
+ use std:: fs:: remove_file;
349
+ use log:: MetadataBuilder ;
350
+
351
+ fn validate_logs (
352
+ log_path : & str ,
353
+ expected : & [ ( & ' static str , & ' static str , & ' static str ) ] ,
354
+ ) -> bool {
355
+ let f = File :: open ( log_path) . unwrap ( ) ;
356
+ let mut reader = BufReader :: new ( f) ;
357
+
358
+ let mut line = String :: new ( ) ;
359
+ for tuple in expected {
360
+ line. clear ( ) ;
361
+ reader. read_line ( & mut line) . unwrap ( ) ;
362
+ assert ! ( line. contains( & tuple. 0 ) ) ;
363
+ assert ! ( line. contains( & tuple. 1 ) ) ;
364
+ assert ! ( line. contains( & tuple. 2 ) ) ;
365
+ }
366
+ false
367
+ }
368
+
369
+ #[ test]
370
+ fn test_default_values ( ) {
371
+ let l = Logger :: new ( ) ;
372
+ assert_eq ! ( l. level_info. code, log:: Level :: Warn ) ;
373
+ assert_eq ! ( l. level_info. writer, Destination :: Stderr ) ;
374
+ assert_eq ! ( l. show_line_numbers, true ) ;
375
+ assert_eq ! ( l. show_level, true ) ;
376
+ format ! ( "{:?}" , l. level_info. code) ;
377
+ format ! ( "{:?}" , l. level_info. writer) ;
378
+ format ! ( "{:?}" , l. show_line_numbers) ;
379
+ format ! ( "{:?}" , l) ;
380
+ }
381
+
382
+ #[ test]
383
+ fn test_init ( ) {
384
+ let l = Logger :: new ( ) . set_include_origin ( false , true ) ;
385
+ assert_eq ! ( l. show_line_numbers, false ) ;
386
+
387
+ let l = Logger :: new ( )
388
+ . set_include_origin ( true , true )
389
+ . set_include_level ( true )
390
+ . set_level ( log:: Level :: Info ) ;
391
+ assert_eq ! ( l. show_line_numbers, true ) ;
392
+ assert_eq ! ( l. show_file_path, true ) ;
393
+ assert_eq ! ( l. show_level, true ) ;
394
+
395
+ assert ! ( l. init( Some ( String :: from( "tmp.log" ) ) ) . is_ok( ) ) ;
396
+ info ! ( "info" ) ;
397
+ warn ! ( "warning" ) ;
398
+
399
+ let l = Logger :: new ( ) ;
400
+ assert ! ( l. init( None ) . is_ok( ) ) ;
401
+
402
+ info ! ( "info" ) ;
403
+ warn ! ( "warning" ) ;
404
+ error ! ( "error" ) ;
405
+
406
+ // here we also test that the second initialization had no effect given that the
407
+ // logging system can only be initialized once per program
408
+ validate_logs (
409
+ "tmp.log" ,
410
+ & [
411
+ ( "[INFO" , "lib.rs" , "info" ) ,
412
+ ( "[WARN" , "lib.rs" , "warn" ) ,
413
+ ( "[INFO" , "lib.rs" , "info" ) ,
414
+ ( "[WARN" , "lib.rs" , "warn" ) ,
415
+ ( "[ERROR" , "lib.rs" , "error" ) ,
416
+ ] ,
417
+ ) ;
418
+ remove_file ( "tmp.log" ) . unwrap ( ) ;
419
+
420
+ let l = Logger :: new ( ) ;
421
+ unsafe {
422
+ if let Err ( e) = set_boxed_logger ( Box :: new ( l) ) {
423
+ INIT_RES = Err ( LoggerError :: NeverInitialized ( format ! ( "{}" , e) ) ) ;
424
+ }
425
+ assert ! ( format!( "{:?}" , INIT_RES ) . contains( "NeverInitialized" ) ) ;
426
+ }
427
+ let l = Logger :: new ( ) ;
428
+ assert ! ( l. init( None ) . is_err( ) ) ;
429
+ unsafe {
430
+ assert ! ( format!( "{:?}" , INIT_RES ) . contains( "Poisoned" ) ) ;
431
+ }
432
+
433
+ let l = Logger :: new ( )
434
+ . set_include_level ( true )
435
+ . set_include_origin ( false , false ) ;
436
+ let error_metadata = MetadataBuilder :: new ( ) . level ( Level :: Error ) . build ( ) ;
437
+ let log_record = log:: Record :: builder ( ) . metadata ( error_metadata) . build ( ) ;
438
+ Logger :: log ( & l, & log_record) ;
439
+ let l = Logger :: new ( )
440
+ . set_include_level ( false )
441
+ . set_include_origin ( true , true ) ;
442
+ Logger :: log ( & l, & log_record) ;
443
+ }
444
+
445
+ #[ test]
446
+ fn test_get_default_destination ( ) {
447
+ assert_eq ! (
448
+ get_default_destination( log:: Level :: Error ) ,
449
+ Destination :: Stderr
450
+ ) ;
451
+ assert_eq ! (
452
+ get_default_destination( log:: Level :: Warn ) ,
453
+ Destination :: Stderr
454
+ ) ;
455
+ assert_eq ! (
456
+ get_default_destination( log:: Level :: Info ) ,
457
+ Destination :: Stdout
458
+ ) ;
459
+ assert_eq ! (
460
+ get_default_destination( log:: Level :: Debug ) ,
461
+ Destination :: Stdout
462
+ ) ;
463
+ assert_eq ! (
464
+ get_default_destination( log:: Level :: Trace ) ,
465
+ Destination :: Stdout
466
+ ) ;
467
+ }
468
+ }
0 commit comments