test_pretty.py
102 lines
| 2.6 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2283 | #!/usr/bin/env python | ||
# encoding: utf-8 | ||||
""" | ||||
Simple tests for :mod:`IPython.extensions.pretty`. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2008-2009 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 | ||||
#----------------------------------------------------------------------------- | ||||
from unittest import TestCase | ||||
Brian Granger
|
r2738 | from IPython.config.configurable import Configurable | ||
Brian Granger
|
r2760 | from IPython.core.interactiveshell import InteractiveShellABC | ||
Brian Granger
|
r2283 | from IPython.extensions import pretty as pretty_ext | ||
from IPython.external import pretty | ||||
Fernando Perez
|
r2456 | from IPython.testing import decorators as dec | ||
Fernando Perez
|
r2415 | from IPython.testing import tools as tt | ||
Brian Granger
|
r2283 | from IPython.utils.traitlets import Bool | ||
#----------------------------------------------------------------------------- | ||||
# Tests | ||||
#----------------------------------------------------------------------------- | ||||
Brian Granger
|
r2738 | class InteractiveShellStub(Configurable): | ||
Brian Granger
|
r2283 | pprint = Bool(True) | ||
Brian Granger
|
r2738 | InteractiveShellABC.register(InteractiveShellStub) | ||
Brian Granger
|
r2283 | class A(object): | ||
pass | ||||
def a_pprinter(o, p, c): | ||||
return p.text("<A>") | ||||
class TestPrettyResultDisplay(TestCase): | ||||
def setUp(self): | ||||
Brian Granger
|
r2738 | self.ip = InteractiveShellStub() | ||
Brian Granger
|
r2740 | self.prd = pretty_ext.PrettyResultDisplay(shell=self.ip, config=None) | ||
Brian Granger
|
r2283 | |||
Brian Granger
|
r2786 | @dec.skip_known_failure | ||
Brian Granger
|
r2283 | def test_for_type(self): | ||
self.prd.for_type(A, a_pprinter) | ||||
a = A() | ||||
result = pretty.pretty(a) | ||||
self.assertEquals(result, "<A>") | ||||
Fernando Perez
|
r2415 | ipy_src = """ | ||
class A(object): | ||||
def __repr__(self): | ||||
return 'A()' | ||||
class B(object): | ||||
def __repr__(self): | ||||
return 'B()' | ||||
a = A() | ||||
b = B() | ||||
def a_pretty_printer(obj, p, cycle): | ||||
p.text('<A>') | ||||
def b_pretty_printer(obj, p, cycle): | ||||
p.text('<B>') | ||||
a | ||||
b | ||||
ip = get_ipython() | ||||
Brian Granger
|
r2738 | ip.extension_manager.load_extension('pretty') | ||
prd = ip.plugin_manager.get_plugin('pretty_result_display') | ||||
Fernando Perez
|
r2415 | prd.for_type(A, a_pretty_printer) | ||
prd.for_type_by_name(B.__module__, B.__name__, b_pretty_printer) | ||||
a | ||||
b | ||||
""" | ||||
ipy_out = """ | ||||
A() | ||||
B() | ||||
<A> | ||||
<B> | ||||
""" | ||||
Brian Granger
|
r2283 | |||
Fernando Perez
|
r2415 | class TestPrettyInteractively(tt.TempFileMixin): | ||
Fernando Perez
|
r2456 | |||
# XXX Unfortunately, ipexec_validate fails under win32. If someone helps | ||||
# us write a win32-compatible version, we can reactivate this test. | ||||
Brian Granger
|
r2786 | @dec.skip_known_failure | ||
Fernando Perez
|
r2456 | @dec.skip_win32 | ||
Fernando Perez
|
r2415 | def test_printers(self): | ||
self.mktmp(ipy_src, '.ipy') | ||||
tt.ipexec_validate(self.fname, ipy_out) | ||||