"""Tests for the line-based transformers in IPython.core.inputtransformer2 Line-based transformers are the simpler ones; token-based transformers are more complex. See test_inputtransformer2 for tests for token-based transformers. """ import pytest from IPython.core import inputtransformer2 as ipt2 CELL_MAGIC = ("""\ %%foo arg body 1 body 2 """, """\ get_ipython().run_cell_magic('foo', 'arg', 'body 1\\nbody 2\\n') """) def test_cell_magic(): for sample, expected in [CELL_MAGIC]: assert ipt2.cell_magic(sample.splitlines(keepends=True)) == expected.splitlines( keepends=True ) CLASSIC_PROMPT = ("""\ >>> for a in range(5): ... print(a) """, """\ for a in range(5): print(a) """) CLASSIC_PROMPT_L2 = ("""\ for a in range(5): ... print(a) ... print(a ** 2) """, """\ for a in range(5): print(a) print(a ** 2) """) def test_classic_prompt(): for sample, expected in [CLASSIC_PROMPT, CLASSIC_PROMPT_L2]: assert ipt2.classic_prompt( sample.splitlines(keepends=True) ) == expected.splitlines(keepends=True) IPYTHON_PROMPT = ("""\ In [1]: for a in range(5): ...: print(a) """, """\ for a in range(5): print(a) """) IPYTHON_PROMPT_L2 = ("""\ for a in range(5): ...: print(a) ...: print(a ** 2) """, """\ for a in range(5): print(a) print(a ** 2) """) IPYTHON_PROMPT_VI_INS = ( """\ [ins] In [11]: def a(): ...: 123 ...: ...: 123 """, """\ def a(): 123 123 """, ) IPYTHON_PROMPT_VI_NAV = ( """\ [nav] In [11]: def a(): ...: 123 ...: ...: 123 """, """\ def a(): 123 123 """, ) def test_ipython_prompt(): for sample, expected in [ IPYTHON_PROMPT, IPYTHON_PROMPT_L2, IPYTHON_PROMPT_VI_INS, IPYTHON_PROMPT_VI_NAV, ]: assert ipt2.ipython_prompt( sample.splitlines(keepends=True) ) == expected.splitlines(keepends=True) INDENT_SPACES = ("""\ if True: a = 3 """, """\ if True: a = 3 """) INDENT_TABS = ("""\ \tif True: \t\tb = 4 """, """\ if True: \tb = 4 """) def test_leading_indent(): for sample, expected in [INDENT_SPACES, INDENT_TABS]: assert ipt2.leading_indent( sample.splitlines(keepends=True) ) == expected.splitlines(keepends=True) LEADING_EMPTY_LINES = ("""\ \t if True: a = 3 b = 4 """, """\ if True: a = 3 b = 4 """) ONLY_EMPTY_LINES = ("""\ \t """, """\ \t """) def test_leading_empty_lines(): for sample, expected in [LEADING_EMPTY_LINES, ONLY_EMPTY_LINES]: assert ipt2.leading_empty_lines( sample.splitlines(keepends=True) ) == expected.splitlines(keepends=True) CRLF_MAGIC = ([ "%%ls\r\n" ], [ "get_ipython().run_cell_magic('ls', '', '')\n" ]) def test_crlf_magic(): for sample, expected in [CRLF_MAGIC]: assert ipt2.cell_magic(sample) == expected