@@ -504,6 +504,9 @@ fn parse_trait(trait_block: syn::ItemTrait, raw_trait: &syn::Item) -> proc_macro
504
504
}
505
505
}
506
506
}
507
+
508
+ fields. extend ( quote ! { print_string: :: std:: sync:: Mutex <Option <String >>, } ) ;
509
+ ctor. extend ( quote ! { print_string : :: std:: sync:: Mutex :: new( None ) , } ) ;
507
510
508
511
let mock_method_body = generate_mock_method_body ( & pubtok, & mock_method_name) ;
509
512
let static_struct_name = concat ! ( "STATIC__" , trait_name) ;
@@ -536,6 +539,21 @@ fn parse_trait(trait_block: syn::ItemTrait, raw_trait: &syn::Item) -> proc_macro
536
539
#fields
537
540
}
538
541
542
+ #[ allow( dead_code) ]
543
+ #[ allow( non_camel_case_types) ]
544
+ impl #generics :: std:: fmt:: Debug for #impl_name #generics #where_clause {
545
+ fn fmt( & self , f: & mut :: std:: fmt:: Formatter <' _>) -> :: std:: fmt:: Result {
546
+ // panic!("Printing mocks is not supported. Do not call println on mocks.");
547
+ let print_string = self . print_string. lock( ) . unwrap( ) ;
548
+ let mut message = "This is the default message for a mock object. You can set the print behavior via a call to 'set_print_string'" ;
549
+ if print_string. as_ref( ) . is_some( ) {
550
+ message = print_string. as_ref( ) . unwrap( ) ;
551
+ }
552
+
553
+ f. pad( & message)
554
+ }
555
+ }
556
+
539
557
// Your mocks may not use all of these functions, so it's fine to allow
540
558
// dead code in this impl block.
541
559
#[ allow( dead_code) ]
@@ -546,6 +564,11 @@ fn parse_trait(trait_block: syn::ItemTrait, raw_trait: &syn::Item) -> proc_macro
546
564
pub fn new( ) -> #impl_name #generics {
547
565
#impl_name { #ctor }
548
566
}
567
+
568
+ pub fn set_print_string( & self , arg_string: String ) {
569
+ let mut print_string = self . print_string. lock( ) . unwrap( ) ;
570
+ * print_string = Some ( arg_string) ;
571
+ }
549
572
}
550
573
551
574
#mock_method_body
0 commit comments