##// END OF EJS Templates
allow async output on the most recent request...
allow async output on the most recent request Keeps track of the most recent request, so async output is still allowed

File last commit:

r11024:4571a5fb
r16359:5703415d
Show More
test_image_handler.py
94 lines | 3.3 KiB | text/x-python | PythonLexer
#-----------------------------------------------------------------------------
# Copyright (C) 2012 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.
#-----------------------------------------------------------------------------
import os
import sys
import unittest
import base64
from IPython.kernel import KernelClient
from IPython.terminal.console.interactiveshell import ZMQTerminalInteractiveShell
from IPython.utils.tempdir import TemporaryDirectory
from IPython.testing.tools import monkeypatch
from IPython.testing.decorators import skip_without
from IPython.utils.ipstruct import Struct
SCRIPT_PATH = os.path.join(
os.path.abspath(os.path.dirname(__file__)), 'writetofile.py')
class ZMQTerminalInteractiveShellTestCase(unittest.TestCase):
def setUp(self):
client = KernelClient()
self.shell = ZMQTerminalInteractiveShell(kernel_client=client)
self.raw = b'dummy data'
self.mime = 'image/png'
self.data = {self.mime: base64.encodestring(self.raw).decode('ascii')}
def test_no_call_by_default(self):
def raise_if_called(*args, **kwds):
assert False
shell = self.shell
shell.handle_image_PIL = raise_if_called
shell.handle_image_stream = raise_if_called
shell.handle_image_tempfile = raise_if_called
shell.handle_image_callable = raise_if_called
shell.handle_image(None, None) # arguments are dummy
@skip_without('PIL')
def test_handle_image_PIL(self):
import PIL.Image
open_called_with = []
show_called_with = []
def fake_open(arg):
open_called_with.append(arg)
return Struct(show=lambda: show_called_with.append(None))
with monkeypatch(PIL.Image, 'open', fake_open):
self.shell.handle_image_PIL(self.data, self.mime)
self.assertEqual(len(open_called_with), 1)
self.assertEqual(len(show_called_with), 1)
self.assertEqual(open_called_with[0].getvalue(), self.raw)
def check_handler_with_file(self, inpath, handler):
shell = self.shell
configname = '{0}_image_handler'.format(handler)
funcname = 'handle_image_{0}'.format(handler)
assert hasattr(shell, configname)
assert hasattr(shell, funcname)
with TemporaryDirectory() as tmpdir:
outpath = os.path.join(tmpdir, 'data')
cmd = [sys.executable, SCRIPT_PATH, inpath, outpath]
setattr(shell, configname, cmd)
getattr(shell, funcname)(self.data, self.mime)
# cmd is called and file is closed. So it's safe to open now.
with open(outpath, 'rb') as file:
transferred = file.read()
self.assertEqual(transferred, self.raw)
def test_handle_image_stream(self):
self.check_handler_with_file('-', 'stream')
def test_handle_image_tempfile(self):
self.check_handler_with_file('{file}', 'tempfile')
def test_handle_image_callable(self):
called_with = []
self.shell.callable_image_handler = called_with.append
self.shell.handle_image_callable(self.data, self.mime)
self.assertEqual(len(called_with), 1)
assert called_with[0] is self.data