test_text.py
140 lines
| 4.9 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r4538 | # encoding: utf-8 | ||
"""Tests for IPython.utils.text""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2011 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
MinRK
|
r4654 | import math | ||
Matthias BUSSONNIER
|
r7387 | import random | ||
Fernando Perez
|
r4538 | |||
import nose.tools as nt | ||||
from nose import with_setup | ||||
from IPython.testing import decorators as dec | ||||
from IPython.utils import text | ||||
#----------------------------------------------------------------------------- | ||||
# Globals | ||||
#----------------------------------------------------------------------------- | ||||
def test_columnize(): | ||||
Fernando Perez
|
r4539 | """Basic columnize tests.""" | ||
size = 5 | ||||
items = [l*size for l in 'abc'] | ||||
out = text.columnize(items, displaywidth=80) | ||||
nt.assert_equals(out, 'aaaaa bbbbb ccccc\n') | ||||
Matthias BUSSONNIER
|
r7387 | out = text.columnize(items, displaywidth=12) | ||
Fernando Perez
|
r4539 | nt.assert_equals(out, 'aaaaa ccccc\nbbbbb\n') | ||
Matthias BUSSONNIER
|
r7387 | out = text.columnize(items, displaywidth=10) | ||
nt.assert_equals(out, 'aaaaa\nbbbbb\nccccc\n') | ||||
def test_columnize_random(): | ||||
"""Test with random input to hopfully catch edge case """ | ||||
for nitems in [random.randint(2,70) for i in range(2,20)]: | ||||
displaywidth = random.randint(20,200) | ||||
rand_len = [random.randint(2,displaywidth) for i in range(nitems)] | ||||
items = ['x'*l for l in rand_len] | ||||
out = text.columnize(items, displaywidth=displaywidth) | ||||
longer_line = max([len(x) for x in out.split('\n')]) | ||||
longer_element = max(rand_len) | ||||
if longer_line > displaywidth: | ||||
print "Columnize displayed something lager than displaywidth : %s " % longer_line | ||||
print "longer element : %s " % longer_element | ||||
print "displaywidth : %s " % displaywidth | ||||
print "number of element : %s " % nitems | ||||
print "size of each element :\n %s" % rand_len | ||||
assert False | ||||
Fernando Perez
|
r4539 | |||
Matthias BUSSONNIER
|
r7387 | def test_columnize_medium(): | ||
"""Test with inputs than shouldn't be wider tahn 80 """ | ||||
size = 40 | ||||
items = [l*size for l in 'abc'] | ||||
out = text.columnize(items, displaywidth=80) | ||||
nt.assert_equals(out, '\n'.join(items+[''])) | ||||
Fernando Perez
|
r4539 | |||
def test_columnize_long(): | ||||
"""Test columnize with inputs longer than the display window""" | ||||
size = 11 | ||||
items = [l*size for l in 'abc'] | ||||
out = text.columnize(items, displaywidth=size-1) | ||||
nt.assert_equals(out, '\n'.join(items+[''])) | ||||
MinRK
|
r4654 | |||
Thomas Kluyver
|
r5354 | def eval_formatter_check(f): | ||
Thomas Kluyver
|
r5355 | ns = dict(n=12, pi=math.pi, stuff='hello there', os=os, u=u"café", b="café") | ||
Thomas Kluyver
|
r4891 | s = f.format("{n} {n//4} {stuff.split()[0]}", **ns) | ||
MinRK
|
r4654 | nt.assert_equals(s, "12 3 hello") | ||
s = f.format(' '.join(['{n//%i}'%i for i in range(1,8)]), **ns) | ||||
nt.assert_equals(s, "12 6 4 3 2 2 1") | ||||
s = f.format('{[n//i for i in range(1,8)]}', **ns) | ||||
nt.assert_equals(s, "[12, 6, 4, 3, 2, 2, 1]") | ||||
s = f.format("{stuff!s}", **ns) | ||||
nt.assert_equals(s, ns['stuff']) | ||||
s = f.format("{stuff!r}", **ns) | ||||
nt.assert_equals(s, repr(ns['stuff'])) | ||||
Thomas Kluyver
|
r5355 | # Check with unicode: | ||
s = f.format("{u}", **ns) | ||||
nt.assert_equals(s, ns['u']) | ||||
# This decodes in a platform dependent manner, but it shouldn't error out | ||||
s = f.format("{b}", **ns) | ||||
MinRK
|
r4654 | nt.assert_raises(NameError, f.format, '{dne}', **ns) | ||
Thomas Kluyver
|
r5354 | def eval_formatter_slicing_check(f): | ||
MinRK
|
r4654 | ns = dict(n=12, pi=math.pi, stuff='hello there', os=os) | ||
s = f.format(" {stuff.split()[:]} ", **ns) | ||||
nt.assert_equals(s, " ['hello', 'there'] ") | ||||
s = f.format(" {stuff.split()[::-1]} ", **ns) | ||||
nt.assert_equals(s, " ['there', 'hello'] ") | ||||
s = f.format("{stuff[::2]}", **ns) | ||||
nt.assert_equals(s, ns['stuff'][::2]) | ||||
nt.assert_raises(SyntaxError, f.format, "{n:x}", **ns) | ||||
Thomas Kluyver
|
r5354 | def eval_formatter_no_slicing_check(f): | ||
MinRK
|
r4654 | ns = dict(n=12, pi=math.pi, stuff='hello there', os=os) | ||
s = f.format('{n:x} {pi**2:+f}', **ns) | ||||
nt.assert_equals(s, "c +9.869604") | ||||
Thomas Kluyver
|
r5501 | s = f.format('{stuff[slice(1,4)]}', **ns) | ||
nt.assert_equals(s, 'ell') | ||||
MinRK
|
r4654 | nt.assert_raises(SyntaxError, f.format, "{a[:]}") | ||
Thomas Kluyver
|
r5354 | def test_eval_formatter(): | ||
f = text.EvalFormatter() | ||||
eval_formatter_check(f) | ||||
eval_formatter_no_slicing_check(f) | ||||
def test_full_eval_formatter(): | ||||
f = text.FullEvalFormatter() | ||||
eval_formatter_check(f) | ||||
eval_formatter_slicing_check(f) | ||||
def test_dollar_formatter(): | ||||
f = text.DollarFormatter() | ||||
eval_formatter_check(f) | ||||
eval_formatter_slicing_check(f) | ||||
ns = dict(n=12, pi=math.pi, stuff='hello there', os=os) | ||||
s = f.format("$n", **ns) | ||||
nt.assert_equals(s, "12") | ||||
s = f.format("$n.real", **ns) | ||||
nt.assert_equals(s, "12") | ||||
s = f.format("$n/{stuff[:5]}", **ns) | ||||
nt.assert_equals(s, "12/hello") | ||||
Thomas Kluyver
|
r5365 | s = f.format("$n $$HOME", **ns) | ||
nt.assert_equals(s, "12 $HOME") | ||||
Thomas Kluyver
|
r5375 | s = f.format("${foo}", foo="HOME") | ||
nt.assert_equals(s, "$HOME") | ||||