##// END OF EJS Templates
Use low overhead object heritence in Js (Object.create vs new)...
Use low overhead object heritence in Js (Object.create vs new) the use of XX.prototype = new YY(); Does trigger the constructor of YY without the nead for it. `Object.create` does go around this limitation and target browser that are relatively Old. Cf https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create for more info It might help to get rid of some logic in constructors that check wether some options are passed in, that were causing errors on noteboko load. Typically `if(element){ }` on Abstract `Cell` constructor.

File last commit:

r11024:4571a5fb
r18377:848742ff
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