Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
linePairs = []
for line in lines:
line = lineAfterContext(line, prefix)
if not line:
linePairs.append([])
continue
pairStrs = line.split(TEST_PAIR_DELIMITER)
pairs = [tuple(s.split(':', 1)) for s in pairStrs]
# Indented line of a multiline value.
if len(pairs[0]) == 1 and line.startswith(' '):
arg, value = linePairs[-1][-1]
looksLikeAString = value[0] in ["'", '"']
prefix = (arg + ': ') + (' ' if looksLikeAString else '')
dedented = line[len(ic.prefix) + len(prefix):]
linePairs[-1][-1] = (arg, value + '\n' + dedented)
else:
items = [
(p[0].strip(), None) if len(p) == 1 # A value, like ic(3).
else (p[0].strip(), p[1].strip()) # A variable, like ic(a).
for p in pairs]
linePairs.append(items)
return linePairs
def stripPrefix(line):
if line.startswith(ic.prefix):
line = line.strip()[len(ic.prefix):]
return line
def configureIcecreamOutput(prefix=None, outputFunction=None,
argToStringFunction=None, includeContext=None):
oldPrefix = ic.prefix
oldOutputFunction = ic.outputFunction
oldArgToStringFunction = ic.argToStringFunction
oldIncludeContext = ic.includeContext
if prefix:
ic.configureOutput(prefix=prefix)
if outputFunction:
ic.configureOutput(outputFunction=outputFunction)
if argToStringFunction:
ic.configureOutput(argToStringFunction=argToStringFunction)
if includeContext:
ic.configureOutput(includeContext=includeContext)
yield
ic.configureOutput(
def testOutputFunction(self):
lst = []
def appendTo(s):
lst.append(s)
with configureIcecreamOutput(ic.prefix, appendTo):
with captureStandardStreams() as (out, err):
ic(a)
assert not out.getvalue() and not err.getvalue()
with configureIcecreamOutput(outputFunction=appendTo):
with captureStandardStreams() as (out, err):
ic(b)
assert not out.getvalue() and not err.getvalue()
pairs = parseOutputIntoPairs(out, '\n'.join(lst), 2)
assert pairs == [[('a', '1')], [('b', '2')]]
def testMultipleArgumentsLongLineWrapped(self):
# A single long line with multiple variables is line wrapped.
val = '*' * int(ic.lineWrapWidth / 4)
valStr = ic.argToStringFunction(val)
v1 = v2 = v3 = v4 = val
with disableColoring(), captureStandardStreams() as (out, err):
ic(v1, v2, v3, v4)
pairs = parseOutputIntoPairs(out, err, 4)
assert pairs == [[(k, valStr)] for k in ['v1', 'v2', 'v3', 'v4']]
lines = err.getvalue().splitlines()
assert (
lines[0].startswith(ic.prefix) and
lines[1].startswith(' ' * len(ic.prefix)) and
lines[2].startswith(' ' * len(ic.prefix)) and
lines[3].startswith(' ' * len(ic.prefix)))
def testMultipleArgumentsLongLineWrapped(self):
# A single long line with multiple variables is line wrapped.
val = '*' * int(ic.lineWrapWidth / 4)
valStr = ic.argToStringFunction(val)
v1 = v2 = v3 = v4 = val
with disableColoring(), captureStandardStreams() as (out, err):
ic(v1, v2, v3, v4)
pairs = parseOutputIntoPairs(out, err, 4)
assert pairs == [[(k, valStr)] for k in ['v1', 'v2', 'v3', 'v4']]
lines = err.getvalue().splitlines()
assert (
lines[0].startswith(ic.prefix) and
lines[1].startswith(' ' * len(ic.prefix)) and
lines[2].startswith(' ' * len(ic.prefix)) and
lines[3].startswith(' ' * len(ic.prefix)))