test_compilerop.py
75 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
Thomas Kluyver
|
r3449 | # coding: utf-8 | ||
Fernando Perez
|
r3175 | """Tests for the compilerop module. | ||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2010 The IPython Development Team. | ||||
# | ||||
# Distributed under the terms of the BSD License. | ||||
# | ||||
# The full license is in the file COPYING.txt, distributed with this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
from __future__ import print_function | ||||
# Stdlib imports | ||||
import linecache | ||||
Thomas Kluyver
|
r3458 | import sys | ||
Fernando Perez
|
r3175 | |||
# Third-party imports | ||||
import nose.tools as nt | ||||
# Our own imports | ||||
from IPython.core import compilerop | ||||
Thomas Kluyver
|
r4731 | from IPython.utils import py3compat | ||
Fernando Perez
|
r3175 | |||
#----------------------------------------------------------------------------- | ||||
# Test functions | ||||
#----------------------------------------------------------------------------- | ||||
def test_code_name(): | ||||
code = 'x=1' | ||||
name = compilerop.code_name(code) | ||||
nt.assert_true(name.startswith('<ipython-input-0')) | ||||
def test_code_name2(): | ||||
code = 'x=1' | ||||
name = compilerop.code_name(code, 9) | ||||
nt.assert_true(name.startswith('<ipython-input-9')) | ||||
Thomas Kluyver
|
r3530 | def test_cache(): | ||
Fernando Perez
|
r3175 | """Test the compiler correctly compiles and caches inputs | ||
""" | ||||
cp = compilerop.CachingCompiler() | ||||
ncache = len(linecache.cache) | ||||
Thomas Kluyver
|
r3530 | cp.cache('x=1') | ||
Fernando Perez
|
r3175 | nt.assert_true(len(linecache.cache) > ncache) | ||
Thomas Kluyver
|
r3458 | def setUp(): | ||
# Check we're in a proper Python 2 environment (some imports, such | ||||
# as GTK, can change the default encoding, which can hide bugs.) | ||||
Thomas Kluyver
|
r4731 | nt.assert_equal(sys.getdefaultencoding(), "utf-8" if py3compat.PY3 else "ascii") | ||
Thomas Kluyver
|
r3458 | |||
Thomas Kluyver
|
r3530 | def test_cache_unicode(): | ||
Thomas Kluyver
|
r3447 | cp = compilerop.CachingCompiler() | ||
ncache = len(linecache.cache) | ||||
Thomas Kluyver
|
r3530 | cp.cache(u"t = 'žćčšđ'") | ||
Thomas Kluyver
|
r3447 | nt.assert_true(len(linecache.cache) > ncache) | ||
Fernando Perez
|
r3175 | |||
def test_compiler_check_cache(): | ||||
"""Test the compiler properly manages the cache. | ||||
""" | ||||
# Rather simple-minded tests that just exercise the API | ||||
cp = compilerop.CachingCompiler() | ||||
Thomas Kluyver
|
r3530 | cp.cache('x=1', 99) | ||
Fernando Perez
|
r3175 | # Ensure now that after clearing the cache, our entries survive | ||
cp.check_cache() | ||||
for k in linecache.cache: | ||||
if k.startswith('<ipython-input-99'): | ||||
break | ||||
else: | ||||
raise AssertionError('Entry for input-99 missing from linecache') | ||||