Changeset: 4c6d497a64b2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4c6d497a64b2
Modified Files:
        testing/Mtest.py.in
Branch: Jan2022
Log Message:

Make production of HTML files an option.
Option is ON by default if program is called Mtest.py and can be turned
off with the --no-html flag.  It is OFF if program is called Mz.py and
can be turned on with the --produce-html flag.


diffs (260 lines):

diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -47,6 +47,7 @@ approve = False
 initdb = None
 single_in_memory = False
 restart = False
+produce_html = True
 
 # extra mserver5 options
 mserver5_opts = []
@@ -301,8 +302,10 @@ def splitcommand(cmd):
 def remove(file):
     try:
         os.remove(file)
+    except FileNotFound:
+        pass
     except:
-        pass
+        Warn('could not remove {}'.format(file))
 
 def isexecutable(TST, ext = '.sh') :
     if   os.name == "nt":
@@ -1136,7 +1139,7 @@ def SkipTest(env, TST, EXT, REASON, leng
             s = '%-*s' % (length, TST)
         print('%s%s skipped (%s)' % (prompt(), s, REASON))
 
-    if testweb:
+    if testweb or not produce_html:
         return None
 
     f = openutf8(".%s.SKIPPED.html" % TST, "w")
@@ -1445,11 +1448,10 @@ def PerformDir(env, testdir, testlist, a
             for f in alllinks:
                 remove(f)
 
-        if THISFILE == "Mtest.py":
-            if not testweb:
-                body = body_bad + body_good
-                CreateHtmlIndex(env, ssout, sserr, *body)
-                elem = AddSubToHtmlIndex(env, TSTDIR, max(FdOut, FdErr, ssout, 
sserr))
+        if not testweb and produce_html:
+            body = body_bad + body_good
+            CreateHtmlIndex(env, ssout, sserr, *body)
+            elem = AddSubToHtmlIndex(env, TSTDIR, max(FdOut, FdErr, ssout, 
sserr))
 
         # remove extra files created by tests
         for f in listdir(TSTTRGDIR):
@@ -1814,41 +1816,6 @@ def StableOutErr(env,par,TST,SYST,RELEAS
     return STABLEout, STABLEerr
 ### StableOutErr(env,par,TST,SYST,RELEASE,DIST,VERSION) #
 
-def CategorizeResult(TST, SockTime):
-    l = '<!--MajorDiffs-->'   # assign something in case file is empty
-    for l in openutf8("%s.out.diff.html" % TST):
-        pass
-    if   l.startswith('<!--NoDiffs-->'):
-        o = F_OK
-    elif l.startswith('<!--MinorDiffs-->'):
-        o = F_WARN
-    elif l.startswith('<!--MajorDiffs-->'):
-        o = F_ERROR
-    else:
-        Warn("Unexpected last line in %s.out.diff.html:\n%s" % (TST, l))
-        ff = openutf8("%s.out.diff.html" % TST, "a")
-        ff.write("\n<!--MajorDiffs-->\n")
-        ff.close()
-        o = F_ERROR
-    l = '<!--MajorDiffs-->'   # assign something in case file is empty
-    for l in openutf8("%s.err.diff.html" % TST):
-        pass
-    if   l.startswith('<!--NoDiffs-->'):
-        e = F_OK
-    elif l.startswith('<!--MinorDiffs-->'):
-        e = F_WARN
-    elif l.startswith('<!--MajorDiffs-->'):
-        e = F_ERROR
-    else:
-        Warn("Unexpected last line in %s.err.diff.html:\n%s" % (TST, l))
-        ff = openutf8("%s.err.diff.html" % TST, "a")
-        ff.write("\n<!--MajorDiffs-->\n")
-        ff.close()
-        e = F_ERROR
-    if e == F_ERROR and SockTime in (F_SOCK, F_TIME, F_RECU, F_ABRT, F_SEGV):
-        e = SockTime
-    return o, e
-
 relcond = {
     # upgrade testing conditionals:
     # key is condition, value is tuple with file name and part of message
@@ -2283,52 +2250,54 @@ def RunTest(env, TST, COND, oktests, len
                     tst = '%s<a target="_blank" 
href="http://bugs.monetdb.org/%s";>%s</a>%s' % (TST[:res.start(0)+1], bugno, 
res.group(0)[1:], TST[res.end(0):])
                 else:
                     tst = TST
-                titlefmt = '-tTest %s%s (id <a href="%s">%s</a>) (<a 
href="%s.%%s.diff.html">%%s</a>)' % (tst, EXT, f, REV, TST)
-            else:
-                # no need (and no space) to add link to bug report:
-                # it's done already elsewhere
-                titlefmt = '-tTest <a href="%s%s">%s%s</a> (id <a 
href="%s">%s</a>) (<a href="%s.%%s.diff.html">%%s</a>)' % (TST, EXT, TST, EXT, 
f, REV, TST)
-        elif testweb:
-            titlefmt = '-tTest %s%s (<a href="%s.%%s.diff.html">%%s</a>)' % 
(TST, EXT, TST)
+        out = openutf8('%s.test.out' % TST).read()
+        if out and [x for x in out.splitlines() if not x.startswith('#')]:
+            FailedOut = F_ERROR
         else:
-            titlefmt = '-tTest <a href="%s%s">%s%s</a> (<a 
href="%s.%%s.diff.html">%%s</a>)' % (TST, EXT, TST, EXT, TST)
-        diff_html = openutf8('%s.out.diff.html' % TST,"w")
-        out = openutf8('%s.test.out' % TST).read()
-        Element('html', None,
-#                 Element('head', None,
-#                         Element('style', None,
-#                                 Text('''
+            FailedOut = F_OK
+        err = openutf8('%s.test.err' % TST).read()
+        if err and [x for x in err.splitlines() if not x.startswith('#')]:
+            if max(sockerr, errcode) in (F_SOCK, F_TIME, F_RECU, F_ABRT, 
F_SEGV):
+                FailedErr = max(sockerr, errcode)
+            else:
+                FailedErr = F_ERROR
+        else:
+            FailedErr = F_OK
+        if produce_html:
+            diff_html = openutf8('%s.out.diff.html' % TST,"w")
+            Element('html', None,
+#                     Element('head', None,
+#                             Element('style', None,
+#                                     Text('''
 # .neutral { color: black; }
 # .deleted { color: red; }
 # .added   { color: green; }
 # '''))),
-                Element('body', None,
-                        Element('pre', None,
-                                Text(out)))).write(diff_html, True)
-        if out and [x for x in out.splitlines() if not x.startswith('#')]:
-            diff_html.write('<!--MajorDiffs-->\n')
-        else:
-            diff_html.write('<!--NoDiffs-->\n')
-        diff_html.close()
-        diff_html = openutf8('%s.err.diff.html' % TST,"w")
-        err = openutf8('%s.test.err' % TST).read()
-        Element('html', None,
-#                 Element('head', None,
-#                         Element('style', None,
-#                                 Text('''
+                    Element('body', None,
+                            Element('pre', None,
+                                    Text(out)))).write(diff_html, True)
+            if FailedOut == F_ERROR:
+                diff_html.write('<!--MajorDiffs-->\n')
+            else:
+                diff_html.write('<!--NoDiffs-->\n')
+            diff_html.close()
+            diff_html = openutf8('%s.err.diff.html' % TST,"w")
+            Element('html', None,
+#                     Element('head', None,
+#                             Element('style', None,
+#                                     Text('''
 # .neutral { color: black; }
 # .deleted { color: red; }
 # .added   { color: green; }
 # '''))),
-                Element('body', None,
-                        Element('pre', None,
-                                Text(err)))).write(diff_html, True)
-        if err and [x for x in err.splitlines() if not x.startswith('#')]:
-            diff_html.write('<!--MajorDiffs-->\n')
-        else:
-            diff_html.write('<!--NoDiffs-->\n')
-        diff_html.close()
-        FailedOut, FailedErr = CategorizeResult(TST, max(sockerr, errcode))
+                    Element('body', None,
+                            Element('pre', None,
+                                    Text(err)))).write(diff_html, True)
+            if FailedErr == F_ERROR:
+                diff_html.write('<!--MajorDiffs-->\n')
+            else:
+                diff_html.write('<!--NoDiffs-->\n')
+            diff_html.close()
         if FailedOut == F_OK and FailedErr == F_OK and testweb:
             for f in ['%s.out.diff.html' % TST, '%s.test.out' % TST,
                       '%s.server.out' % TST, '%s.client.out' % TST,
@@ -2340,7 +2309,7 @@ def RunTest(env, TST, COND, oktests, len
                       '%s%s.FILTERED' % (TST, STABLEerr)]:
                 remove(f)
 
-        if not testweb:
+        if not testweb and produce_html:
             elem = AddTstToHtmlIndex(env, TST, STABLEout, STABLEerr, EXT,
                                      FailedOut, FailedErr)
 
@@ -3134,6 +3103,8 @@ def SetExecEnv(exe,port,verbose) :
 #       MAIN
 
 THISFILE = os.path.basename(sys.argv[0])
+if THISFILE == 'Mz.py':
+    produce_html = False
 THISPATH = os.path.realpath(os.path.dirname(sys.argv[0]))
 TSTDBG = str(2+8)
 TSTTHREADS = "0"
@@ -3393,6 +3364,11 @@ def main(argv) :
     parser.add_argument('--single-in-memory', action='store_true', 
dest='single_in_memory', help='use --in-memory for SingleServer directories')
     parser.add_argument('--report-all-failures', action='store_true', 
dest='report_all_failures', help='report all failing tests, even if many')
     parser.add_argument('--approve', action='store_true', help='produce 
.newtest file in testing directory with calculated content')
+    global produce_html
+    if produce_html:
+        parser.add_argument('--no-html', action='store_false', 
dest='produce_html', help='do not produce HTML files')
+    else:
+        parser.add_argument('--produce-html', action='store_true', 
dest='produce_html', help='produce HTML files')
 
     parser.add_argument('tests', nargs='*', help='The positional arguments are 
either a list of one or more directories to be tested, or a single directory 
followed by a list of tests within that directory.')
     opts = parser.parse_args()
@@ -3411,6 +3387,7 @@ def main(argv) :
     procdebug = opts.procdebug
     global approve
     approve = opts.approve
+    produce_html = opts.produce_html
     addreqs = False
     all_tests = False
     testweb = opts.testweb
@@ -4011,13 +3988,14 @@ def main(argv) :
                         if global_timeout and start_time + global_timeout < 
time.time():
                             print('\nGlobal testing timeout reached\n')
                             break
-                        # after a directory has been tested, create
-                        # the index file so that we can look at test
-                        # results while the tests are running
-                        env['TSTDIR'] = ""
-                        env['TSTTRGDIR'] = os.path.join(TSTTRGBASE, TSTPREF)
-                        body = body_bad + body_good
-                        CreateHtmlIndex(env, F_SKIP, F_SKIP, *body)
+                        if produce_html:
+                            # after a directory has been tested, create
+                            # the index file so that we can look at test
+                            # results while the tests are running
+                            env['TSTDIR'] = ""
+                            env['TSTTRGDIR'] = os.path.join(TSTTRGBASE, 
TSTPREF)
+                            body = body_bad + body_good
+                            CreateHtmlIndex(env, F_SKIP, F_SKIP, *body)
             if quiet:
                 print()
         except KeyboardInterrupt:
@@ -4119,7 +4097,7 @@ VALUES (%s, '%s', '%s', '%s',
 
         env['TSTDIR'] = ""
         env['TSTTRGDIR'] = os.path.join(TSTTRGBASE, TSTPREF)
-        if not testweb:
+        if not testweb and produce_html:
             CreateHtmlIndex(env, F_SKIP, F_SKIP, *body)
 
         Failed = 0
@@ -4162,7 +4140,7 @@ VALUES (%s, '%s', '%s', '%s',
 
 %s
 """ % (how, Failed, num_tests, what))
-            if not testweb:
+            if not testweb and produce_html:
                 print("""\
  First, check the testing results in  %s  !
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to