##// END OF EJS Templates
Fix Mixin Inheritence in Xunit unittest....
Fix Mixin Inheritence in Xunit unittest. Some unittest were weird mixin, properly make the base class an TestCase, and use setup/teardown to set local attributes. This adds compatibility with PyTest

File last commit:

r24260:1b7d82f1
r25113:3ac47845
Show More
test_text.py
213 lines | 7.6 KiB | text/x-python | PythonLexer
Fernando Perez
Add failing test: columnize called with very long entries....
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
update EvalFormatter to allow arbitrary expressions...
r4654 import math
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387 import random
Thomas Kluyver
Fix EvalFormatter test for Python 3.4...
r13990 import sys
Fernando Perez
Add failing test: columnize called with very long entries....
r4538
import nose.tools as nt
Thomas Kluyver
Simplify some pathlib imports
r24258 from pathlib import Path
Fernando Perez
Add failing test: columnize called with very long entries....
r4538
from IPython.utils import text
#-----------------------------------------------------------------------------
# Globals
#-----------------------------------------------------------------------------
def test_columnize():
Fernando Perez
Fix bug where tab-completion with very long filenames would crash the qt console....
r4539 """Basic columnize tests."""
size = 5
naught101
add some extra tests for row-first columnize
r21616 items = [l*size for l in 'abcd']
Fernando Perez
Fix bug where tab-completion with very long filenames would crash the qt console....
r4539 out = text.columnize(items, displaywidth=80)
naught101
add some extra tests for row-first columnize
r21616 nt.assert_equal(out, 'aaaaa bbbbb ccccc ddddd\n')
out = text.columnize(items, displaywidth=25)
nt.assert_equal(out, 'aaaaa ccccc\nbbbbb ddddd\n')
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387 out = text.columnize(items, displaywidth=12)
naught101
add some extra tests for row-first columnize
r21616 nt.assert_equal(out, 'aaaaa ccccc\nbbbbb ddddd\n')
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387 out = text.columnize(items, displaywidth=10)
naught101
add some extra tests for row-first columnize
r21616 nt.assert_equal(out, 'aaaaa\nbbbbb\nccccc\nddddd\n')
out = text.columnize(items, row_first=True, displaywidth=80)
nt.assert_equal(out, 'aaaaa bbbbb ccccc ddddd\n')
out = text.columnize(items, row_first=True, displaywidth=25)
nt.assert_equal(out, 'aaaaa bbbbb\nccccc ddddd\n')
out = text.columnize(items, row_first=True, displaywidth=12)
nt.assert_equal(out, 'aaaaa bbbbb\nccccc ddddd\n')
out = text.columnize(items, row_first=True, displaywidth=10)
nt.assert_equal(out, 'aaaaa\nbbbbb\nccccc\nddddd\n')
naught101
Add spread option, to allow columns to fill space.
r21621 out = text.columnize(items, displaywidth=40, spread=True)
nt.assert_equal(out, 'aaaaa bbbbb ccccc ddddd\n')
out = text.columnize(items, displaywidth=20, spread=True)
nt.assert_equal(out, 'aaaaa ccccc\nbbbbb ddddd\n')
out = text.columnize(items, displaywidth=12, spread=True)
nt.assert_equal(out, 'aaaaa ccccc\nbbbbb ddddd\n')
out = text.columnize(items, displaywidth=10, spread=True)
nt.assert_equal(out, 'aaaaa\nbbbbb\nccccc\nddddd\n')
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387
def test_columnize_random():
luz.paz
Misc. typos fixes...
r24132 """Test with random input to hopefully catch edge case """
naught101
add some extra tests for row-first columnize
r21616 for row_first in [True, False]:
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, row_first=row_first, 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, "row_first={0}".format(row_first)
Fernando Perez
Fix bug where tab-completion with very long filenames would crash the qt console....
r4539
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387 def test_columnize_medium():
naught101
add some extra tests for row-first columnize
r21616 """Test with inputs than shouldn't be wider than 80"""
Matthias BUSSONNIER
re-write columnize, with intermediate step....
r7387 size = 40
items = [l*size for l in 'abc']
naught101
add some extra tests for row-first columnize
r21616 for row_first in [True, False]:
out = text.columnize(items, row_first=row_first, displaywidth=80)
nt.assert_equal(out, '\n'.join(items+['']), "row_first={0}".format(row_first))
Fernando Perez
Fix bug where tab-completion with very long filenames would crash the qt console....
r4539
def test_columnize_long():
"""Test columnize with inputs longer than the display window"""
size = 11
items = [l*size for l in 'abc']
naught101
add some extra tests for row-first columnize
r21616 for row_first in [True, False]:
out = text.columnize(items, row_first=row_first, displaywidth=size-1)
nt.assert_equal(out, '\n'.join(items+['']), "row_first={0}".format(row_first))
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654
Thomas Kluyver
Add DollarFormatter and tests.
r5354 def eval_formatter_check(f):
Thomas Kluyver
Use DollarFormatter to fill in names in ! shell calls....
r5355 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os, u=u"café", b="café")
Thomas Kluyver
Various fixes to tests in IPython.utils.
r4891 s = f.format("{n} {n//4} {stuff.split()[0]}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12 3 hello")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format(' '.join(['{n//%i}'%i for i in range(1,8)]), **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12 6 4 3 2 2 1")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format('{[n//i for i in range(1,8)]}', **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "[12, 6, 4, 3, 2, 2, 1]")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format("{stuff!s}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, ns['stuff'])
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format("{stuff!r}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, repr(ns['stuff']))
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
Thomas Kluyver
Use DollarFormatter to fill in names in ! shell calls....
r5355 # Check with unicode:
s = f.format("{u}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, ns['u'])
Thomas Kluyver
Use DollarFormatter to fill in names in ! shell calls....
r5355 # This decodes in a platform dependent manner, but it shouldn't error out
s = f.format("{b}", **ns)
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 nt.assert_raises(NameError, f.format, '{dne}', **ns)
Thomas Kluyver
Add DollarFormatter and tests.
r5354 def eval_formatter_slicing_check(f):
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
s = f.format(" {stuff.split()[:]} ", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, " ['hello', 'there'] ")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format(" {stuff.split()[::-1]} ", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, " ['there', 'hello'] ")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format("{stuff[::2]}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, ns['stuff'][::2])
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 nt.assert_raises(SyntaxError, f.format, "{n:x}", **ns)
Thomas Kluyver
Add DollarFormatter and tests.
r5354 def eval_formatter_no_slicing_check(f):
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654 s = f.format('{n:x} {pi**2:+f}', **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "c +9.869604")
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
Thomas Kluyver
Sort out the different implementations of EvalFormatter, so we usually use the simple one.
r5501 s = f.format('{stuff[slice(1,4)]}', **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, 'ell')
Hugo
Drop support for Python 3.3
r24260
s = f.format("{a[:]}", a=[1, 2])
nt.assert_equal(s, "[1, 2]")
MinRK
update EvalFormatter to allow arbitrary expressions...
r4654
Thomas Kluyver
Add DollarFormatter and tests.
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)
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541
Thomas Kluyver
Add DollarFormatter and tests.
r5354 ns = dict(n=12, pi=math.pi, stuff='hello there', os=os)
s = f.format("$n", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12")
Thomas Kluyver
Add DollarFormatter and tests.
r5354 s = f.format("$n.real", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12")
Thomas Kluyver
Add DollarFormatter and tests.
r5354 s = f.format("$n/{stuff[:5]}", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12/hello")
Thomas Kluyver
Allow 2033 to get literal $ in shell commands.
r5365 s = f.format("$n $$HOME", **ns)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "12 $HOME")
Thomas Kluyver
Add test for to specify name of an environment variable.
r5375 s = f.format("${foo}", foo="HOME")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(s, "$HOME")
Fernando Perez
Add robust email-quote-stripping function to text utilities.
r7713
Fernando Perez
Fix logic for longest_substring when only one input....
r7715 def test_long_substr():
data = ['hi']
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(text.long_substr(data), 'hi')
Fernando Perez
Fix logic for longest_substring when only one input....
r7715
def test_long_substr2():
data = ['abc', 'abd', 'abf', 'ab']
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(text.long_substr(data), 'ab')
Fernando Perez
Fix logic for longest_substring when only one input....
r7715
Bradley M. Froehle
Fix: longest_substr([]) -> ''...
r8147 def test_long_substr_empty():
data = []
nt.assert_equal(text.long_substr(data), '')
Fernando Perez
Fix logic for longest_substring when only one input....
r7715
Fernando Perez
Add robust email-quote-stripping function to text utilities.
r7713 def test_strip_email():
src = """\
>> >>> def f(x):
>> ... return x+1
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541 >> ...
Fernando Perez
Add robust email-quote-stripping function to text utilities.
r7713 >> >>> zz = f(2.5)"""
cln = """\
>>> def f(x):
... return x+1
Marin Gilles
Revert "added absolute_import to utils.text module + test"...
r21541 ...
Fernando Perez
Add robust email-quote-stripping function to text utilities.
r7713 >>> zz = f(2.5)"""
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(text.strip_email_quotes(src), cln)
Fernando Perez
Fix logic for longest_substring when only one input....
r7715
def test_strip_email2():
src = '> > > list()'
cln = 'list()'
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(text.strip_email_quotes(src), cln)
Thomas Kluyver
Add tests for things in utils
r15516
def test_LSString():
lss = text.LSString("abc\ndef")
nt.assert_equal(lss.l, ['abc', 'def'])
nt.assert_equal(lss.s, 'abc def')
Marin Gilles
test fix to try path for cwd
r21547 lss = text.LSString(os.getcwd())
Min RK
use pathlib for utils.text.paths...
r22249 nt.assert_is_instance(lss.p[0], Path)
Thomas Kluyver
Add tests for things in utils
r15516
def test_SList():
sl = text.SList(['a 11', 'b 1', 'a 2'])
nt.assert_equal(sl.n, 'a 11\nb 1\na 2')
nt.assert_equal(sl.s, 'a 11 b 1 a 2')
nt.assert_equal(sl.grep(lambda x: x.startswith('a')), text.SList(['a 11', 'a 2']))
nt.assert_equal(sl.fields(0), text.SList(['a', 'b', 'a']))
Marin Gilles
Re-added fix without whitespace mess
r21542 nt.assert_equal(sl.sort(field=1, nums=True), text.SList(['b 1', 'a 2', 'a 11']))