@@ -33,7 +33,7 @@ pub fn parse_statement(input: &str) -> IResult<&str, Statement> {
3333 parse_assertneq_statement,
3434 parse_assertfalse_statement,
3535 parse_asserttrue_statement,
36- parse_test_function_definition_statement, // FIXME: Being Implemented
36+ parse_test_function_definition_statement,
3737 parse_function_definition_statement,
3838 ) ) ( input)
3939}
@@ -300,17 +300,16 @@ fn parse_function_definition_statement(input: &str) -> IResult<&str, Statement>
300300 ) ( input)
301301}
302302
303- // TODO: alterar, não há mais necessidade de checar se o nome é test, usaremos uma keyword "test"
303+
304304fn parse_test_function_definition_statement ( input : & str ) -> IResult < & str , Statement > {
305305 map (
306306 tuple ( (
307- //keyword(DEF_KEYWORD ),
307+ //keyword(TEST_KEYWORD ),
308308 tag ( "test" ) ,
309309 preceded ( multispace1, identifier) ,
310- //identifier,
311310 delimited (
312311 char:: <& str, Error <& str>>( LEFT_PAREN ) ,
313- multispace0, // Permite `()` com espaços, mas sem argumentos
312+ multispace0,
314313 char:: <& str, Error <& str>>( RIGHT_PAREN ) ,
315314 ) ,
316315 parse_block,
@@ -420,19 +419,7 @@ mod tests {
420419 assert_eq ! ( parsed, expected) ;
421420 }
422421
423- #[ test]
424- fn test_parse_assert_statement ( ) {
425- let input = "assert(1 == 2, \" expecting an error\" )" ;
426- let expected = Statement :: Assert (
427- Box :: new ( Expression :: EQ (
428- Box :: new ( Expression :: CInt ( 1 ) ) ,
429- Box :: new ( Expression :: CInt ( 2 ) ) ,
430- ) ) ,
431- Box :: new ( Expression :: CString ( "expecting an error" . to_string ( ) ) ) ,
432- ) ;
433- let parsed = parse_assert_statement ( input) . unwrap ( ) . 1 ;
434- assert_eq ! ( parsed, expected) ;
435- }
422+
436423
437424 #[ test]
438425 #[ ignore]
@@ -591,9 +578,23 @@ mod tests {
591578 }
592579
593580 //TODO: Apresentar Parser de Asserts (Testes)
594- mod assignment_tests {
581+ mod assert_tests {
595582 use super :: * ;
596583
584+ #[ test]
585+ fn test_parse_assert_statement ( ) {
586+ let input = "assert(1 == 2, \" expecting an error\" )" ;
587+ let expected = Statement :: Assert (
588+ Box :: new ( Expression :: EQ (
589+ Box :: new ( Expression :: CInt ( 1 ) ) ,
590+ Box :: new ( Expression :: CInt ( 2 ) ) ,
591+ ) ) ,
592+ Box :: new ( Expression :: CString ( "expecting an error" . to_string ( ) ) ) ,
593+ ) ;
594+ let parsed = parse_assert_statement ( input) . unwrap ( ) . 1 ;
595+ assert_eq ! ( parsed, expected) ;
596+ }
597+
597598 #[ test]
598599 fn test_parse_asserteq_statement ( ) {
599600 let input = "asserteq(1, 2, \" msg\" )" ;
@@ -639,5 +640,110 @@ mod tests {
639640 let parsed = parse_assertfalse_statement ( input) . unwrap ( ) . 1 ;
640641 assert_eq ! ( parsed, expected) ;
641642 }
643+
644+ #[ test]
645+ fn test_parse_assert_statement_invalid_argnumber ( ) {
646+ let input = "assert(False, False, \" should be false\" )" ;
647+
648+ let result = std:: panic:: catch_unwind ( || {
649+ parse_assert_statement ( input)
650+ } ) ;
651+
652+ assert ! ( result. is_err( ) , "Expected panic for invalid number of arguments" ) ;
653+
654+ if let Err ( err) = result {
655+ if let Some ( s) = err. downcast_ref :: < & str > ( ) {
656+ assert_eq ! ( * s, "Assert statement requires exactly 2 arguments" ) ;
657+ } else if let Some ( s) = err. downcast_ref :: < String > ( ) {
658+ assert_eq ! ( s, "Assert statement requires exactly 2 arguments" ) ;
659+ } else {
660+ panic ! ( "Panic occurred, but message is not a string" ) ;
661+ }
662+ }
663+ }
664+
665+ #[ test]
666+ fn test_parse_asserteq_statement_invalid_argnumber ( ) {
667+ let input = "asserteq(1, 2, 3, \" msg\" )" ;
668+
669+ let result = std:: panic:: catch_unwind ( || {
670+ parse_asserteq_statement ( input)
671+ } ) ;
672+
673+ assert ! ( result. is_err( ) , "Expected panic for invalid number of arguments" ) ;
674+
675+ if let Err ( err) = result {
676+ if let Some ( s) = err. downcast_ref :: < & str > ( ) {
677+ assert_eq ! ( * s, "AssertEQ statement requires exactly 3 arguments" ) ;
678+ } else if let Some ( s) = err. downcast_ref :: < String > ( ) {
679+ assert_eq ! ( s, "AssertEQ statement requires exactly 3 arguments" ) ;
680+ } else {
681+ panic ! ( "Panic occurred, but message is not a string" ) ;
682+ }
683+ }
684+ }
685+
686+ #[ test]
687+ fn test_parse_assertneq_statement_invalid_argnumber ( ) {
688+ let input = "assertneq(3, 4, 5, \" fail\" )" ;
689+
690+ let result = std:: panic:: catch_unwind ( || {
691+ parse_assertneq_statement ( input)
692+ } ) ;
693+
694+ assert ! ( result. is_err( ) , "Expected panic for invalid number of arguments" ) ;
695+
696+ if let Err ( err) = result {
697+ if let Some ( s) = err. downcast_ref :: < & str > ( ) {
698+ assert_eq ! ( * s, "AssertNEQ statement requires exactly 3 arguments" ) ;
699+ } else if let Some ( s) = err. downcast_ref :: < String > ( ) {
700+ assert_eq ! ( s, "AssertNEQ statement requires exactly 3 arguments" ) ;
701+ } else {
702+ panic ! ( "Panic occurred, but message is not a string" ) ;
703+ }
704+ }
705+ }
706+
707+ #[ test]
708+ fn test_parse_asserttrue_statement_invalid_argnumber ( ) {
709+ let input = "asserttrue(True, True, \" should be true\" )" ;
710+
711+ let result = std:: panic:: catch_unwind ( || {
712+ parse_asserttrue_statement ( input)
713+ } ) ;
714+
715+ assert ! ( result. is_err( ) , "Expected panic for invalid number of arguments" ) ;
716+
717+ if let Err ( err) = result {
718+ if let Some ( s) = err. downcast_ref :: < & str > ( ) {
719+ assert_eq ! ( * s, "AssertTrue statement requires exactly 2 arguments" ) ;
720+ } else if let Some ( s) = err. downcast_ref :: < String > ( ) {
721+ assert_eq ! ( s, "AssertTrue statement requires exactly 2 arguments" ) ;
722+ } else {
723+ panic ! ( "Panic occurred, but message is not a string" ) ;
724+ }
725+ }
726+ }
727+
728+ #[ test]
729+ fn test_parse_assertfalse_statement_invalid_argnumber ( ) {
730+ let input = "assertfalse(False, False, \" should be false\" )" ;
731+
732+ let result = std:: panic:: catch_unwind ( || {
733+ parse_assertfalse_statement ( input)
734+ } ) ;
735+
736+ assert ! ( result. is_err( ) , "Expected panic for invalid number of arguments" ) ;
737+ if let Err ( err) = result {
738+ if let Some ( s) = err. downcast_ref :: < & str > ( ) {
739+ assert_eq ! ( * s, "AssertFalse statement requires exactly 2 arguments" ) ;
740+ } else if let Some ( s) = err. downcast_ref :: < String > ( ) {
741+ assert_eq ! ( s, "AssertFalse statement requires exactly 2 arguments" ) ;
742+ } else {
743+ panic ! ( "Panic occurred, but message is not a string" ) ;
744+ }
745+ }
746+ }
747+
642748 }
643749}
0 commit comments