@@ -130,6 +130,7 @@ impl Parser {
130130 state = self . parse_line ( state, line, line_num, & mut cards) ?;
131131 }
132132 self . finalize ( state, last_line, & mut cards) ?;
133+
133134 Ok ( cards)
134135 }
135136
@@ -359,6 +360,10 @@ impl Parser {
359360
360361#[ cfg( test) ]
361362mod tests {
363+ use std:: env:: temp_dir;
364+
365+ use serial_test:: serial;
366+
362367 use super :: * ;
363368
364369 #[ test]
@@ -590,6 +595,37 @@ mod tests {
590595 Ok ( ( ) )
591596 }
592597
598+ #[ test]
599+ fn test_identical_basic_cards ( ) -> Fallible < ( ) > {
600+ let input = "Q: foo\n A: bar\n \n Q: foo\n A: bar\n \n " ;
601+ let parser = make_test_parser ( ) ;
602+ let cards = parser. parse ( input) ?;
603+ assert_eq ! ( cards. len( ) , 1 ) ;
604+ Ok ( ( ) )
605+ }
606+
607+ #[ test]
608+ fn test_identical_cloze_cards ( ) -> Fallible < ( ) > {
609+ let input = "C: foo [bar]\n \n C: foo [bar]" ;
610+ let parser = make_test_parser ( ) ;
611+ let cards = parser. parse ( input) ?;
612+ assert_eq ! ( cards. len( ) , 1 ) ;
613+ Ok ( ( ) )
614+ }
615+
616+ #[ test]
617+ #[ serial]
618+ fn test_identical_cards_across_files ( ) -> Fallible < ( ) > {
619+ let directory = temp_dir ( ) ;
620+ let file1 = directory. join ( "file1.md" ) ;
621+ let file2 = directory. join ( "file2.md" ) ;
622+ std:: fs:: write ( & file1, "Q: foo\n A: bar" ) ?;
623+ std:: fs:: write ( & file2, "Q: foo\n A: bar" ) ?;
624+ let deck = parse_deck ( & directory) ?;
625+ assert_eq ! ( deck. len( ) , 1 ) ;
626+ Ok ( ( ) )
627+ }
628+
593629 fn make_test_parser ( ) -> Parser {
594630 Parser :: new ( "test_deck" . to_string ( ) , PathBuf :: from ( "test.md" ) )
595631 }
0 commit comments