1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
# stdlib
import json
import re
import sys
# 3rd party
from coincidence.selectors import not_windows, only_windows
from faker import Faker
from faker.providers import bank, company, internet, phone_number, python
# this package
from domdf_python_tools.terminal import Echo, br, clear, interrupt, overtype
fake = Faker()
fake.add_provider(internet)
fake.add_provider(bank)
fake.add_provider(company)
fake.add_provider(phone_number)
fake.add_provider(python)
def test_br(capsys):
br()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ['', '']
br()
print("foo")
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ['', "foo", '']
print("foo")
br()
print("bar")
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["foo", '', "bar", '']
@only_windows(reason="Different test used for POSIX")
def test_interrupt_windows(capsys):
interrupt()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["(Press Ctrl-C to quit at any time)", '']
@not_windows(reason="Different test used for Windows")
def test_interrupt_posix(capsys):
interrupt()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["(Press Ctrl-D to quit at any time)", '']
# @only_windows(reason="Different test used for POSIX")
# def test_clear_windows(capsys):
# clear()
#
# captured = capsys.readouterr()
# stdout = captured.out.split("\n")
# assert stdout == ['(Press Ctrl-C to quit at any time.)', '']
#
@not_windows(reason="Different test used for Windows")
def test_clear_posix(capsys):
clear()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["\u001bc"]
print("Hello World!")
clear()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["Hello World!", "\u001bc"]
def test_overtype(capsys):
print("Waiting...", end='')
overtype("foo", "bar")
sys.stdout.flush()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["Waiting...\rfoo bar"]
print("Waiting...", end='')
overtype("foo", "bar", sep='')
sys.stdout.flush()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["Waiting...\rfoobar"]
print("Waiting...", end='')
overtype("foo", "bar", sep='-', end='\n')
sys.stdout.flush()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout == ["Waiting...\rfoo-bar", '']
sys.stderr.write("Waiting...")
overtype("foo", "bar", file=sys.stderr)
sys.stdout.flush()
captured = capsys.readouterr()
stderr = captured.err.split('\n')
assert stderr == ["Waiting...\rfoo bar"]
def test_echo(capsys):
with Echo():
abc = "a variable"
var = 1234
captured = capsys.readouterr()
stdout = captured.out.split('\n')
data = {
"abc": "a variable",
"var": 1234,
}
dictionary = json.dumps(data).replace('"', "'")
assert stdout == [f" {dictionary}", '']
# def test_echo_pprint(capsys):
# Lots of variables, which should be pretty printed
with Echo():
name = fake.name()
address = fake.address()
ip_address = fake.ipv4_private()
iban = fake.iban()
employer = fake.company()
telephone = fake.phone_number()
alive = fake.pybool()
z_other = fake.pydict()
captured = capsys.readouterr()
stdout = captured.out.split('\n')
assert stdout[0] == " {{'address': '{}',".format(address.replace('\n', "\\n"))
assert stdout[1] == f" 'alive': {alive},"
assert stdout[2] == f" 'employer': '{employer}',"
assert stdout[3] == f" 'iban': '{iban}',"
assert stdout[4] == f" 'ip_address': '{ip_address}',"
assert stdout[5] == f" 'name': '{name}',"
assert stdout[6] == f" 'telephone': '{telephone}',"
assert stdout[7].startswith(" 'z_other': {")
assert stdout[7].endswith(',')
for line in range(8, 13, 1):
assert re.match(r"^\s*'.*':.*[,}]$", stdout[line])
assert stdout[-2].endswith('}')
assert stdout[-1] == ''
|