@@ -36,3 +36,58 @@ impl Logger for RGSSLogger {
36
36
println ! ( "{:<5} [{} : {}, {}] {}" , record. level. to_string( ) , record. module_path, record. file, record. line, record. args) ;
37
37
}
38
38
}
39
+
40
+ #[ cfg( test) ]
41
+ pub mod tests {
42
+ use std:: collections:: HashMap ;
43
+ use std:: sync:: { Mutex } ;
44
+ use lightning:: util:: logger:: { Level , Logger , Record } ;
45
+
46
+ pub struct TestLogger {
47
+ level : Level ,
48
+ pub ( crate ) id : String ,
49
+ pub lines : Mutex < HashMap < ( String , String ) , usize > > ,
50
+ }
51
+
52
+ impl TestLogger {
53
+ pub fn new ( ) -> TestLogger {
54
+ Self :: with_id ( "" . to_owned ( ) )
55
+ }
56
+ pub fn with_id ( id : String ) -> TestLogger {
57
+ TestLogger {
58
+ level : Level :: Trace ,
59
+ id,
60
+ lines : Mutex :: new ( HashMap :: new ( ) ) ,
61
+ }
62
+ }
63
+ pub fn enable ( & mut self , level : Level ) {
64
+ self . level = level;
65
+ }
66
+ pub fn assert_log ( & self , module : String , line : String , count : usize ) {
67
+ let log_entries = self . lines . lock ( ) . unwrap ( ) ;
68
+ assert_eq ! ( log_entries. get( & ( module, line) ) , Some ( & count) ) ;
69
+ }
70
+
71
+ /// Search for the number of occurrence of the logged lines which
72
+ /// 1. belongs to the specified module and
73
+ /// 2. contains `line` in it.
74
+ /// And asserts if the number of occurrences is the same with the given `count`
75
+ pub fn assert_log_contains ( & self , module : & str , line : & str , count : usize ) {
76
+ let log_entries = self . lines . lock ( ) . unwrap ( ) ;
77
+ let l: usize = log_entries. iter ( ) . filter ( |& ( & ( ref m, ref l) , _c) | {
78
+ m == module && l. contains ( line)
79
+ } ) . map ( |( _, c) | { c } ) . sum ( ) ;
80
+ assert_eq ! ( l, count)
81
+ }
82
+ }
83
+
84
+ impl Logger for TestLogger {
85
+ fn log ( & self , record : & Record ) {
86
+ * self . lines . lock ( ) . unwrap ( ) . entry ( ( record. module_path . to_string ( ) , format ! ( "{}" , record. args) ) ) . or_insert ( 0 ) += 1 ;
87
+ if record. level >= self . level {
88
+ // #[cfg(feature = "std")]
89
+ println ! ( "{:<5} {} [{} : {}, {}] {}" , record. level. to_string( ) , self . id, record. module_path, record. file, record. line, record. args) ;
90
+ }
91
+ }
92
+ }
93
+ }
0 commit comments