12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879openCommonopenOUnitmoduleFlag=Flag_parsing(*****************************************************************************)(* Helpers *)(*****************************************************************************)letparsefile=Common.save_excursionFlag.error_recoveryfalse(fun()->Common.save_excursionFlag.show_parsing_errorfalse(fun()->Common.save_excursionFlag.verbose_parsingfalse(fun()->Parse_cpp.parsefile)))(*****************************************************************************)(* Unit tests *)(*****************************************************************************)letunittest="parsing_cpp">:::[(*-----------------------------------------------------------------------*)(* Lexing *)(*-----------------------------------------------------------------------*)(* todo:
* - make sure parse int correctly, and float, and that actually does
* not return multiple tokens for 42.42
* - ...
*)(*-----------------------------------------------------------------------*)(* Parsing *)(*-----------------------------------------------------------------------*)"regression files">::(fun()->letdir=Filename.concatConfig_pfff.path"/tests/cpp/parsing"inletfiles=Common2.glob(spf"%s/*.cpp"dir)@Common2.glob(spf"%s/*.h"dir)infiles|>List.iter(funfile->trylet_ast=parsefilein()withParse_info.Parsing_error_->assert_failure(spf"it should correctly parse %s"file)));"rejecting bad code">::(fun()->letdir=Filename.concatConfig_pfff.path"/tests/cpp/parsing_errors"inletfiles=Common2.glob(spf"%s/*.cpp"dir)infiles|>List.iter(funfile->trylet_ast=parsefileinassert_failure(spf"it should have thrown a Parse_error %s"file)with|Parse_info.Parsing_error_->()|exn->assert_failure(spf"throwing wrong exn %s on %s"(Common.exn_to_sexn)file)));(* parsing C files (and not C++ files) possibly containing C++ keywords *)"C regression files">::(fun()->letdir=Filename.concatConfig_pfff.path"/tests/c/parsing"inletfiles=Common2.glob(spf"%s/*.c"dir)(* @ Common2.glob (spf "%s/*.h" dir) *)infiles|>List.iter(funfile->trylet_ast=parsefilein()withParse_info.Parsing_error_->assert_failure(spf"it should correctly parse %s"file)));(*-----------------------------------------------------------------------*)(* Misc *)(*-----------------------------------------------------------------------*)]