[Sqlalchemy-commits] [5868] sqlalchemy/trunk: - coverage dumps out separate reports for individual
Brought to you by:
zzzeek
From: <co...@sq...> - 2009-03-29 20:23:11
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[5868] sqlalchemy/trunk: - coverage dumps out separate reports for individual packages</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>5868</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2009-03-29 16:23:05 -0400 (Sun, 29 Mar 2009)</dd> </dl> <h3>Log Message</h3> <pre>- coverage dumps out separate reports for individual packages - other coverage tips</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunkREADMEunittests">sqlalchemy/trunk/README.unittests</a></li> <li><a href="#sqlalchemytrunktestprofilingalltestspy">sqlalchemy/trunk/test/profiling/alltests.py</a></li> <li><a href="#sqlalchemytrunktesttestlibconfigpy">sqlalchemy/trunk/test/testlib/config.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunkREADMEunittests"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/README.unittests (5867 => 5868)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/README.unittests 2009-03-29 18:39:54 UTC (rev 5867) +++ sqlalchemy/trunk/README.unittests 2009-03-29 20:23:05 UTC (rev 5868) </span><span class="lines">@@ -131,6 +131,9 @@ </span><span class="cx"> This will create a new annotated file ./lib/sqlalchemy/sql.py,cover. Pretty </span><span class="cx"> cool! </span><span class="cx"> </span><ins>+BIG COVERAGE TIP !!! There is an issue where existing .pyc files may +store the incorrect filepaths, which will break the coverage system. If +coverage numbers are coming out as low/zero, try deleting all .pyc files. </ins><span class="cx"> </span><span class="cx"> TESTING NEW DIALECTS </span><span class="cx"> -------------------- </span></span></pre></div> <a id="sqlalchemytrunktestprofilingalltestspy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/profiling/alltests.py (5867 => 5868)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/profiling/alltests.py 2009-03-29 18:39:54 UTC (rev 5867) +++ sqlalchemy/trunk/test/profiling/alltests.py 2009-03-29 20:23:05 UTC (rev 5868) </span><span class="lines">@@ -11,6 +11,9 @@ </span><span class="cx"> 'profiling.zoomark_orm', </span><span class="cx"> ) </span><span class="cx"> alltests = unittest.TestSuite() </span><ins>+ if testenv.testlib.config.coverage_enabled: + return alltests + </ins><span class="cx"> for name in modules_to_test: </span><span class="cx"> mod = __import__(name) </span><span class="cx"> for token in name.split('.')[1:]: </span></span></pre></div> <a id="sqlalchemytrunktesttestlibconfigpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/testlib/config.py (5867 => 5868)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/testlib/config.py 2009-03-29 18:39:54 UTC (rev 5867) +++ sqlalchemy/trunk/test/testlib/config.py 2009-03-29 20:23:05 UTC (rev 5868) </span><span class="lines">@@ -9,6 +9,7 @@ </span><span class="cx"> </span><span class="cx"> options = None </span><span class="cx"> file_config = None </span><ins>+coverage_enabled = False </ins><span class="cx"> </span><span class="cx"> base_config = """ </span><span class="cx"> [db] </span><span class="lines">@@ -77,24 +78,50 @@ </span><span class="cx"> elif opt_str.endswith('-debug'): </span><span class="cx"> logging.getLogger(value).setLevel(logging.DEBUG) </span><span class="cx"> </span><del>-def _start_coverage(option, opt_str, value, parser): </del><ins>+def _start_cumulative_coverage(option, opt_str, value, parser): + _start_coverage(option, opt_str, value, parser, erase=False) + +def _start_coverage(option, opt_str, value, parser, erase=True): </ins><span class="cx"> import sys, atexit, coverage </span><span class="cx"> true_out = sys.stdout </span><del>- - def _iter_covered_files(): - import sqlalchemy - for rec in os.walk(os.path.dirname(sqlalchemy.__file__)): </del><ins>+ + global coverage_enabled + coverage_enabled = True + + def _iter_covered_files(mod, recursive=True): + + if recursive: + ff = os.walk + else: + ff = os.listdir + + for rec in ff(os.path.dirname(mod.__file__)): </ins><span class="cx"> for x in rec[2]: </span><span class="cx"> if x.endswith('.py'): </span><span class="cx"> yield os.path.join(rec[0], x) </span><ins>+ </ins><span class="cx"> def _stop(): </span><span class="cx"> coverage.stop() </span><span class="cx"> true_out.write("\nPreparing coverage report...\n") </span><del>- coverage.report(list(_iter_covered_files()), - show_missing=False, ignore_errors=False, - file=true_out) </del><ins>+ + from sqlalchemy import sql, orm, engine, \ + ext, databases, log + + import sqlalchemy + + for modset in [ + _iter_covered_files(sqlalchemy, recursive=False), + _iter_covered_files(databases), + _iter_covered_files(engine), + _iter_covered_files(ext), + _iter_covered_files(orm), + ]: + coverage.report(list(modset), + show_missing=False, ignore_errors=False, + file=true_out) </ins><span class="cx"> atexit.register(_stop) </span><del>- coverage.erase() </del><ins>+ if erase: + coverage.erase() </ins><span class="cx"> coverage.start() </span><span class="cx"> </span><span class="cx"> def _list_dbs(*args): </span><span class="lines">@@ -151,6 +178,8 @@ </span><span class="cx"> help="Add a dialect-specific table option, key=value") </span><span class="cx"> opt("--coverage", action="callback", callback=_start_coverage, </span><span class="cx"> help="Dump a full coverage report after running tests") </span><ins>+opt("--cumulative-coverage", action="callback", callback=_start_cumulative_coverage, + help="Like --coverage, but accumlate coverage into the current DB") </ins><span class="cx"> opt("--profile", action="append", dest="profile_targets", default=[], </span><span class="cx"> help="Enable a named profile target (multiple OK.)") </span><span class="cx"> opt("--profile-sort", action="store", dest="profile_sort", default=None, </span></span></pre> </div> </div> </body> </html> |