<html><head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="OUnit" rel="Chapter" href="OUnit.html"> <link title="OUnit2" rel="Chapter" href="OUnit2.html"> <link title="OUnitThreads" rel="Chapter" href="OUnitThreads.html"> <link title="OUnitUtils" rel="Chapter" href="OUnitUtils.html"> <link title="OUnitPropList" rel="Chapter" href="OUnitPropList.html"> <link title="OUnitPlugin" rel="Chapter" href="OUnitPlugin.html"> <link title="OUnitChooser" rel="Chapter" href="OUnitChooser.html"> <link title="OUnitResultSummary" rel="Chapter" href="OUnitResultSummary.html"> <link title="OUnitLoggerStd" rel="Chapter" href="OUnitLoggerStd.html"> <link title="OUnitLoggerHTML" rel="Chapter" href="OUnitLoggerHTML.html"> <link title="OUnitLoggerHTMLData" rel="Chapter" href="OUnitLoggerHTMLData.html"> <link title="OUnitLoggerJUnit" rel="Chapter" href="OUnitLoggerJUnit.html"> <link title="OUnitAssert" rel="Chapter" href="OUnitAssert.html"> <link title="OUnitBracket" rel="Chapter" href="OUnitBracket.html"> <link title="OUnitTest" rel="Chapter" href="OUnitTest.html"> <link title="OUnitState" rel="Chapter" href="OUnitState.html"> <link title="OUnitRunner" rel="Chapter" href="OUnitRunner.html"> <link title="OUnitRunnerProcesses" rel="Chapter" href="OUnitRunnerProcesses.html"> <link title="OUnitCore" rel="Chapter" href="OUnitCore.html"> <link title="OUnitLogger" rel="Chapter" href="OUnitLogger.html"> <link title="OUnitConf" rel="Chapter" href="OUnitConf.html"> <link title="OUnitShared" rel="Chapter" href="OUnitShared.html"> <link title="OUnitCache" rel="Chapter" href="OUnitCache.html"> <link title="OUnitTestData" rel="Chapter" href="OUnitTestData.html"> <link title="OUnitCheckEnv" rel="Chapter" href="OUnitCheckEnv.html"> <link title="OUnitDiff" rel="Chapter" href="OUnitDiff.html"><title>OUnit user guide : OUnitLoggerStd.format_log_event</title> </head> <body> <code class="code"><span class="keyword">let</span> format_log_event ev = <br> <span class="keyword">let</span> rlst = ref [] <span class="keyword">in</span><br> <span class="keyword">let</span> timestamp_str = <span class="constructor">OUnitUtils</span>.date_iso8601 ev.timestamp <span class="keyword">in</span><br> <span class="keyword">let</span> spf pre fmt = <br> <span class="constructor">Printf</span>.ksprintf<br> (multiline <br> (<span class="keyword">fun</span> l <span class="keywordsign">-></span><br> rlst := (timestamp_str^<span class="string">" "</span>^ev.shard^<span class="string">" "</span>^pre^<span class="string">": "</span>^l) :: !rlst))<br> fmt<br> <span class="keyword">in</span><br> <span class="keyword">let</span> ispf fmt = spf <span class="string">"I"</span> fmt <span class="keyword">in</span><br> <span class="keyword">let</span> wspf fmt = spf <span class="string">"W"</span> fmt <span class="keyword">in</span><br> <span class="keyword">let</span> espf fmt = spf <span class="string">"E"</span> fmt <span class="keyword">in</span><br> <span class="keyword">let</span> format_result path result =<br> <span class="keyword">let</span> path_str = string_of_path path <span class="keyword">in</span><br> <span class="keyword">match</span> result <span class="keyword">with</span> <br> <span class="keywordsign">|</span> <span class="constructor">RTimeout</span> test_length <span class="keywordsign">-></span><br> espf <span class="string">"Test %s timed out after %.1fs"</span><br> path_str (delay_of_length test_length)<br> <span class="keywordsign">|</span> <span class="constructor">RError</span> (msg, backtrace_opt) <span class="keywordsign">-></span><br> espf <span class="string">"Test %s exited with an error."</span> path_str;<br> espf <span class="string">"%s in test %s."</span> msg path_str;<br> <span class="constructor">OUnitUtils</span>.opt (espf <span class="string">"%s"</span>) backtrace_opt<br> <span class="keywordsign">|</span> <span class="constructor">RFailure</span> (msg, _, backtrace_opt) <span class="keywordsign">-></span><br> espf <span class="string">"Test %s has failed."</span> path_str;<br> espf <span class="string">"%s in test %s."</span> msg path_str;<br> <span class="constructor">OUnitUtils</span>.opt (espf <span class="string">"%s"</span>) backtrace_opt<br> <span class="keywordsign">|</span> <span class="constructor">RTodo</span> msg <span class="keywordsign">-></span> wspf <span class="string">"TODO test %s: %s."</span> path_str msg<br> <span class="keywordsign">|</span> <span class="constructor">RSkip</span> msg <span class="keywordsign">-></span> wspf <span class="string">"Skip test %s: %s."</span> path_str msg<br> <span class="keywordsign">|</span> <span class="constructor">RSuccess</span> <span class="keywordsign">-></span> ispf <span class="string">"Test %s is successful."</span> path_str<br> <span class="keyword">in</span><br> <br> <span class="keyword">begin</span><br> <span class="keyword">match</span> ev.event <span class="keyword">with</span><br> <span class="keywordsign">|</span> <span class="constructor">GlobalEvent</span> e <span class="keywordsign">-></span><br> <span class="keyword">begin</span><br> <span class="keyword">match</span> e <span class="keyword">with</span><br> <span class="keywordsign">|</span> <span class="constructor">GConf</span> (k, v) <span class="keywordsign">-></span> ispf <span class="string">"Configuration %s = %S"</span> k v<br> <span class="keywordsign">|</span> <span class="constructor">GLog</span> (<span class="keywordsign">`</span><span class="constructor">Error</span>, str) <span class="keywordsign">-></span> espf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">GLog</span> (<span class="keywordsign">`</span><span class="constructor">Warning</span>, str) <span class="keywordsign">-></span> wspf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">GLog</span> (<span class="keywordsign">`</span><span class="constructor">Info</span>, str) <span class="keywordsign">-></span> ispf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">GStart</span> <span class="keywordsign">-></span> ispf <span class="string">"Start testing."</span><br> <span class="keywordsign">|</span> <span class="constructor">GEnd</span> <span class="keywordsign">-></span> ispf <span class="string">"End testing."</span><br> <span class="keywordsign">|</span> <span class="constructor">GResults</span> (running_time, results, test_case_count) <span class="keywordsign">-></span><br> <span class="keyword">let</span> countr = count results <span class="keyword">in</span><br> ispf <span class="string">"=============="</span>;<br> ispf <span class="string">"Summary:"</span>;<br> <span class="constructor">List</span>.iter<br> (<span class="keyword">fun</span> (path, test_result, _) <span class="keywordsign">-></span><br> format_result path test_result)<br> results;<br> <span class="comment">(* Print final verdict *)</span><br> ispf <span class="string">"Ran: %d tests in: %.2f seconds."</span><br> (<span class="constructor">List</span>.length results) running_time;<br> ispf <span class="string">"Cases: %d."</span> test_case_count;<br> ispf <span class="string">"Tried: %d."</span> (<span class="constructor">List</span>.length results);<br> ispf <span class="string">"Errors: %d."</span> (countr is_error);<br> ispf <span class="string">"Failures: %d."</span> (countr is_failure);<br> ispf <span class="string">"Skip: %d."</span> (countr is_skip);<br> ispf <span class="string">"Todo: %d."</span> (countr is_todo);<br> ispf <span class="string">"Timeout: %d."</span> (countr is_timeout)<br> <span class="keyword">end</span><br> <br> <span class="keywordsign">|</span> <span class="constructor">TestEvent</span> (path, e) <span class="keywordsign">-></span><br> <span class="keyword">begin</span><br> <span class="keyword">let</span> path_str = string_of_path path <span class="keyword">in</span><br> <span class="keyword">match</span> e <span class="keyword">with</span><br> <span class="keywordsign">|</span> <span class="constructor">EStart</span> <span class="keywordsign">-></span> ispf <span class="string">"Start test %s."</span> path_str<br> <span class="keywordsign">|</span> <span class="constructor">EEnd</span> <span class="keywordsign">-></span> ispf <span class="string">"End test %s."</span> path_str<br> <span class="keywordsign">|</span> <span class="constructor">EResult</span> result <span class="keywordsign">-></span> format_result path result<br> <span class="keywordsign">|</span> <span class="constructor">ELog</span> (<span class="keywordsign">`</span><span class="constructor">Error</span>, str) <span class="keywordsign">-></span> espf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">ELog</span> (<span class="keywordsign">`</span><span class="constructor">Warning</span>, str) <span class="keywordsign">-></span> wspf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">ELog</span> (<span class="keywordsign">`</span><span class="constructor">Info</span>, str) <span class="keywordsign">-></span> ispf <span class="string">"%s"</span> str<br> <span class="keywordsign">|</span> <span class="constructor">ELogRaw</span> str <span class="keywordsign">-></span> ispf <span class="string">"%s"</span> str<br> <span class="keyword">end</span><br> <span class="keyword">end</span>;<br> <span class="constructor">List</span>.rev !rlst</code></body></html>