monkey patch argparse.ArgumentParser.exit so it doesn't break tests
also ensure we get real output on sys.exit if its called when stdout/err is overridden
This commit is contained in:
@@ -27,6 +27,51 @@ del os, sys, path
|
|||||||
# --------
|
# --------
|
||||||
|
|
||||||
|
|
||||||
|
# -----------------------------------------
|
||||||
|
# Ensure we get stdout & stderr on sys.exit
|
||||||
|
if 1:
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def exit(status):
|
||||||
|
import io
|
||||||
|
if isinstance(sys.stdout, io.StringIO):
|
||||||
|
globals().update(sys.exit.exit_data)
|
||||||
|
_stdout.write("\nsys.exit(%d) with message:\n" % status)
|
||||||
|
|
||||||
|
sys.stdout.seek(0)
|
||||||
|
sys.stderr.seek(0)
|
||||||
|
_stdout.write(sys.stdout.read())
|
||||||
|
_stderr.write(sys.stderr.read())
|
||||||
|
|
||||||
|
_stdout.write("\n")
|
||||||
|
|
||||||
|
_stdout.flush()
|
||||||
|
_stderr.flush()
|
||||||
|
_exit(status)
|
||||||
|
|
||||||
|
exit.exit_data = {
|
||||||
|
"_exit": sys.exit,
|
||||||
|
"_stdout": sys.stdout,
|
||||||
|
"_stderr": sys.stderr,
|
||||||
|
}
|
||||||
|
sys.exit = exit
|
||||||
|
del exit
|
||||||
|
del sys
|
||||||
|
# --------
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# Don't Exit when argparse fails to parse args
|
||||||
|
import argparse
|
||||||
|
def argparse_fake_exit(self, status, message):
|
||||||
|
sys.__stdout__.write(message)
|
||||||
|
raise Exception(message)
|
||||||
|
|
||||||
|
argparse.ArgumentParser.exit = argparse_fake_exit
|
||||||
|
del argparse_fake_exit
|
||||||
|
del argparse
|
||||||
|
# --------
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
@@ -117,6 +162,14 @@ def bam_run(argv, cwd=None):
|
|||||||
|
|
||||||
with CHDir(cwd):
|
with CHDir(cwd):
|
||||||
import bam
|
import bam
|
||||||
|
|
||||||
|
if 1:
|
||||||
|
sys.stdout.write(" running: ")
|
||||||
|
if cwd is not None:
|
||||||
|
sys.stdout.write("cd %r ; " % cwd)
|
||||||
|
sys.stdout.write("bam %s\n" % " ".join(argv))
|
||||||
|
# input('press_key!:')
|
||||||
|
|
||||||
with StdIO() as fakeio:
|
with StdIO() as fakeio:
|
||||||
bam.main(argv)
|
bam.main(argv)
|
||||||
ret = fakeio.read()
|
ret = fakeio.read()
|
||||||
@@ -275,6 +328,29 @@ class BamListTest(BamSessionTestCase):
|
|||||||
ret = json.loads(stdout)
|
ret = json.loads(stdout)
|
||||||
|
|
||||||
|
|
||||||
|
class BamCommitTest(BamSessionTestCase):
|
||||||
|
"""Test for the `bam create` command. We run it with --json for easier command
|
||||||
|
output parsing.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args):
|
||||||
|
self.init_defaults()
|
||||||
|
super().__init__(*args)
|
||||||
|
|
||||||
|
def test_ls(self):
|
||||||
|
self.init_repo()
|
||||||
|
|
||||||
|
d = os.path.join(self.path_local_store, self.proj_name)
|
||||||
|
co_id = "mysession"
|
||||||
|
|
||||||
|
stdout, stderr = bam_run(["create", "--json"], d)
|
||||||
|
|
||||||
|
self.assertEqual("", stderr)
|
||||||
|
|
||||||
|
import json
|
||||||
|
ret = json.loads(stdout)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
p = server()
|
p = server()
|
||||||
unittest.main(exit=False)
|
unittest.main(exit=False)
|
||||||
|
Reference in New Issue
Block a user