|
- # Copyright 2020 Huawei Technologies Co., Ltd
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # ==============================================================================
- import os
- import sys
- import tempfile
- from contextlib import contextmanager
-
- class Capture():
- def start(self):
- self._old_stdout = sys.stdout
- self._stdout_fd = self._old_stdout.fileno()
- self._saved_stdout_fd = os.dup(self._stdout_fd)
- self._file = sys.stdout = tempfile.TemporaryFile(mode='w+t')
- self.output = ''
- os.dup2(self._file.fileno(), self._stdout_fd)
-
- def stop(self):
- os.dup2(self._saved_stdout_fd, self._stdout_fd)
- os.close(self._saved_stdout_fd)
- sys.stdout = self._old_stdout
- self._file.seek(0)
- self.output = self._file.read()
- self._file.close()
-
- @contextmanager
- def capture(cap):
- cap.start()
- try:
- yield cap
- finally:
- cap.stop()
-
- def check_output(output, patterns):
- assert output, "Capture output failed!"
- for pattern in patterns:
- assert output.find(pattern) != -1, "Unexpected output:\n" + output + "\n--- pattern ---\n" + pattern
|