2018-07-13 21:33:27 +02:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""Utilities/helpers for testing"""
|
|
|
|
|
|
|
|
import os
|
2018-08-16 17:34:05 +02:00
|
|
|
import sys
|
2018-07-13 21:33:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
class HidePrints:
|
|
|
|
"""
|
|
|
|
Context manager that hides all standard output within its body.
|
|
|
|
The optional hide_prints argument can be used to quickly enable printing during debugging of tests.
|
|
|
|
|
|
|
|
|
|
|
|
Use (This will result in all console output of noisy_function to be suppressed):
|
|
|
|
from tests.utils import HidePrints
|
|
|
|
with HidePrints():
|
|
|
|
noise_function()
|
|
|
|
"""
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def hide(func, *args, **kwargs):
|
|
|
|
"""Decorator that hides all prints of the decorated function.
|
|
|
|
|
|
|
|
Use:
|
|
|
|
from tests.utils import HidePrints
|
|
|
|
@HidePrints.hide
|
|
|
|
def noise()
|
|
|
|
print("NOISE")
|
|
|
|
"""
|
|
|
|
|
|
|
|
def silencer(*args, **kwargs):
|
|
|
|
with HidePrints():
|
|
|
|
func(*args, **kwargs)
|
|
|
|
return silencer
|
|
|
|
|
|
|
|
def __init__(self, hide_prints=True):
|
|
|
|
"""Create object with hide_prints=False to disable print hiding"""
|
|
|
|
self.hide = hide_prints
|
|
|
|
|
|
|
|
def __enter__(self):
|
|
|
|
"""Redirect stdout to /dev/null, save old stdout"""
|
|
|
|
if self.hide:
|
|
|
|
self._original_stdout = sys.stdout
|
|
|
|
devnull = open(os.devnull, "w")
|
|
|
|
sys.stdout = devnull
|
|
|
|
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
|
|
"""Reinstate old stdout"""
|
|
|
|
if self.hide:
|
|
|
|
sys.stdout = self._original_stdout
|