You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2021/02/04 08:08:58 UTC

[buildstream] 01/04: test

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch gokcen/refactor_runcli
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit f29cd0f3d843c38367764b5d6314dbe7a19777a7
Author: Gökçen Nurlu <gn...@bloomberg.net>
AuthorDate: Fri Nov 2 18:25:01 2018 +0000

    test
---
 tests/testutils/runcli.py | 52 ++++++++---------------------------------------
 1 file changed, 9 insertions(+), 43 deletions(-)

diff --git a/tests/testutils/runcli.py b/tests/testutils/runcli.py
index ce5864b..6942216 100644
--- a/tests/testutils/runcli.py
+++ b/tests/testutils/runcli.py
@@ -7,6 +7,7 @@ import itertools
 import traceback
 import subprocess
 from contextlib import contextmanager, ExitStack
+from click.testing import CliRunner
 from ruamel import yaml
 import pytest
 
@@ -185,9 +186,10 @@ class Result():
         return list(pulled)
 
 
-class Cli():
+class Cli(CliRunner):
 
     def __init__(self, directory, verbose=True, default_options=None):
+        super().__init__(mix_stderr=False)
         self.directory = directory
         self.config = None
         self.verbose = verbose
@@ -297,49 +299,13 @@ class Cli():
         return result
 
     def invoke(self, cli, args=None, color=False, binary_capture=False, **extra):
-        exc_info = None
-        exception = None
-        exit_code = 0
-
-        # Temporarily redirect sys.stdin to /dev/null to ensure that
-        # Popen doesn't attempt to read pytest's dummy stdin.
-        old_stdin = sys.stdin
-        with open(os.devnull) as devnull:
-            sys.stdin = devnull
-            capture_kind = FDCaptureBinary if binary_capture else FDCapture
-            capture = MultiCapture(out=True, err=True, in_=False, Capture=capture_kind)
-            capture.start_capturing()
+        r = super().invoke(cli, args, color=color)
 
-            try:
-                cli.main(args=args or (), prog_name=cli.name, **extra)
-            except SystemExit as e:
-                if e.code != 0:
-                    exception = e
-
-                exc_info = sys.exc_info()
-
-                exit_code = e.code
-                if not isinstance(exit_code, int):
-                    sys.stdout.write('Program exit code was not an integer: ')
-                    sys.stdout.write(str(exit_code))
-                    sys.stdout.write('\n')
-                    exit_code = 1
-            except Exception as e:
-                exception = e
-                exit_code = -1
-                exc_info = sys.exc_info()
-            finally:
-                sys.stdout.flush()
-
-        sys.stdin = old_stdin
-        out, err = capture.readouterr()
-        capture.stop_capturing()
-
-        return Result(exit_code=exit_code,
-                      exception=exception,
-                      exc_info=exc_info,
-                      output=out,
-                      stderr=err)
+        return Result(exit_code=r.exit_code,
+                      exception=r.exception,
+                      exc_info=r.exc_info,
+                      output=r.stdout,
+                      stderr=r.stderr)
 
     # Fetch an element state by name by
     # invoking bst show on the project with the CLI