12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970openCommonopenOUnitopenCst_mlmoduleV=Visitor_ml(*****************************************************************************)(* Unit tests *)(*****************************************************************************)letunittest="parsing_ml">:::["regression files">::(fun()->letdir=Filename.concatConfig_pfff.path"/tests/ml/parsing"inletfiles=Common2.glob(spf"%s/*.ml"dir)infiles|>List.iter(funfile->trylet_=Parse_ml.parse_programfilein()withParse_info.Parsing_error_->assert_failure(spf"it should correctly parse %s"file)));(* Check that the visitor implementation correctly visit all AST
* subelements, even when they are deep inside the AST tree (e.g.
* sub-sub expressions inside parenthesis).
*)"visitor">::(fun()->Common2.with_tmp_file~ext:".ml"~str:"open Foo1
module A = Foo2
"(funfile->letast=Parse_ml.parse_programfileinletcnt=ref0inletvisitor=V.mk_visitor{V.default_visitorwithV.kmodule_expr=(fun(k,_)x->(matchxwith|ModuleName((_qu,_name))->incrcnt|_->());kx);V.kitem=(fun(k,_)x->(matchxwith|Open(_tok,(_qu,_name))->incrcnt;|_->());kx);V.kqualifier=(fun(_k,_)xs->(matchxswith|[Name(s,_),_tok]->pr2s;incrcnt;|_->()););}invisitor(Programast);assert_equal2!cnt;()));]