def test_parse_cells_horizontal_split(): split_rules = {SlideType.SUBSLIDE: [Token.SPLIT()]} cells = list(parse_cells(TOKENS, split_rules)) assert cells == [ Cell('markdown', 'slide', [ '# 111\n', '\n', '* bullet point\n', '* bullet point 2\n', '\n', '```python\n', 'def random():\n', ' return 4\n', '```', ]), Cell('markdown', 'subslide', [ '```python\n', 'print(random())\n', '```', ]), Cell('markdown', 'subslide', [ 'Text.\n', '## 222\n', '\n', '```python skip\n', 'import itertools\n', '```\n', '\n', 'Hello world.', ]), ]
def test_format_doc(): cells = [ Cell('markdown', 'fragment', ['foo \n', ' bar\n']), Cell('code', 'subslide', ['def random():\n', ' return 4\n']), ] doc = format_doc(cells) assert doc['cells'] == list(format_cells(cells)) assert (doc['nbformat'], doc['nbformat_minor']) == (4, 2) assert doc['metadata']['celltoolbar'] == 'Slideshow' assert doc['metadata']['language_info']['name'] == 'python' assert doc['metadata']['livereveal']['autolaunch'] is True doc = format_doc(cells, autolaunch=False) assert doc['metadata']['livereveal']['autolaunch'] is False
def test_parse_cells_no_splits(): cells = list(parse_cells(TOKENS, {})) assert cells == [ Cell('markdown', 'slide', [ '# 111\n', '\n', '* bullet point\n', '* bullet point 2\n', '\n', '```python\n', 'def random():\n', ' return 4\n', '```\n', '\n', '---\n', '\n', '```python\n', 'print(random())\n', '```\n', '\n', '---\n', '\n', 'Text.\n', '## 222\n', '\n', '```python skip\n', 'import itertools\n', '```\n', '\n', 'Hello world.', ]), ]
def test_cell(): cell1 = Cell() assert cell1.cell_type is CellType.MARKDOWN assert cell1.slide_type is SlideType.CONTINUE assert cell1.source == [] cell2 = Cell(CellType.CODE, SlideType.SLIDE, ['foo', 'bar']) assert cell2.cell_type is CellType.CODE assert cell2.slide_type is SlideType.SLIDE assert cell2.source == ['foo', 'bar'] cell3 = Cell('code', 'slide', ['foo', 'bar']) assert cell3.cell_type is CellType.CODE assert cell3.slide_type is SlideType.SLIDE assert cell3.source == ['foo', 'bar'] assert cell1 != cell2 assert cell2 == cell3
def test_format_cell(): cell = Cell('markdown', 'fragment', ['foo \n', ' bar\n']) assert format_cell(cell) == { 'cell_type': 'markdown', 'metadata': { 'scrolled': True, 'slideshow': { 'slide_type': 'fragment', }, }, 'source': ['foo \n', ' bar\n'], } cell = Cell('markdown', 'subslide', []) assert format_cell(cell) == { 'cell_type': 'markdown', 'metadata': { 'scrolled': True, 'slideshow': { 'slide_type': 'subslide', }, }, 'source': [], } cell = Cell('code', 'subslide', ['def random():\n', ' return 4\n']) assert format_cell(cell) == { 'cell_type': 'code', 'metadata': { 'scrolled': True, 'slideshow': { 'slide_type': 'subslide', }, }, 'source': ['def random():\n', ' return 4\n'], 'outputs': [], 'execution_count': None, }
def parse_cells( tokens: Iterable[Token], split_rules: Dict[SlideType, List[Token]], ) -> Iterable[Cell]: slide_type = SlideType.SLIDE for cell_type, content in _split_cells(tokens, split_rules): if cell_type is None: if slide_type is None or content.rank < slide_type.rank: slide_type = content continue source = clean_source(content) if source: yield Cell(cell_type, slide_type or SlideType.CONTINUE, source) slide_type = None
def test_parse_cells_combine_split(): split_rules = { SlideType.SLIDE: [Token.TITLE(level=1)], SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1), Token.TITLE(level=2)], SlideType.FRAGMENT: [Token.SPLIT()], SlideType.CONTINUE: [Token.START_CODE(), Token.END_CODE()], SlideType.SKIP: [Token.START_CODE(skip=True)], } cells = list(parse_cells(TOKENS, split_rules)) assert cells == [ Cell('markdown', 'slide', ['# 111']), Cell('markdown', 'subslide', ['* bullet point\n', '* bullet point 2']), Cell('code', '-', ['def random():\n', ' return 4']), Cell('code', 'fragment', ['print(random())']), Cell('markdown', 'fragment', ['Text.']), Cell('markdown', 'subslide', ['## 222']), Cell('code', 'skip', ['import itertools']), Cell('markdown', '-', ['Hello world.']), ]
def test_parse_cells_code_split(): split_rules = { SlideType.CONTINUE: [Token.START_CODE(), Token.END_CODE()], SlideType.SKIP: [Token.START_CODE(skip=True)], } cells = list(parse_cells(TOKENS, split_rules)) assert cells == [ Cell('markdown', 'slide', [ '# 111\n', '\n', '* bullet point\n', '* bullet point 2', ]), Cell('code', '-', ['def random():\n', ' return 4']), Cell('markdown', '-', ['---']), Cell('code', '-', ['print(random())']), Cell('markdown', '-', ['---\n', '\n', 'Text.\n', '## 222']), Cell('code', 'skip', ['import itertools']), Cell('markdown', '-', ['Hello world.']), ]
def test_format_cells(): c1 = Cell('markdown', 'fragment', ['foo \n', ' bar\n']) c2 = Cell('code', 'subslide', ['def random():\n', ' return 4\n']) assert list(format_cells([c1, c2])) == [format_cell(c1), format_cell(c2)]
def test_parse_cells_slide_hierarchy(): tokens = [ Token.TITLE('# 111\n', level=1), Token.AFTER_TITLE(level=1), Token.SPLIT('---\n'), Token.LINE('foo\n'), Token.SPLIT('---\n'), Token.LINE('bar\n'), Token.TITLE('## secret\n', level=2), Token.AFTER_TITLE(level=2), Token.LINE('baz\n'), Token.TITLE('## secret\n', level=2), Token.AFTER_TITLE(level=2), Token.START_CODE(language='python'), Token.LINE('x = 0\n'), Token.END_CODE(), ] split_rules = { SlideType.SLIDE: [Token.TITLE(level=1)], SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1)], SlideType.FRAGMENT: [Token.SPLIT()], SlideType.CONTINUE: [ Token.TITLE(level=2), Token.START_CODE(), Token.END_CODE(), ], SlideType.SKIP: [Token.AFTER_TITLE(level=2)], } cells = list(parse_cells(tokens, split_rules)) assert cells == [ Cell('markdown', 'slide', ['# 111']), Cell('markdown', 'subslide', ['foo']), # Ignore Token.SPLIT Cell('markdown', 'fragment', ['bar']), Cell('markdown', '-', ['## secret']), Cell('markdown', 'skip', ['baz']), Cell('markdown', '-', ['## secret']), # Go back to normal side Cell('code', '-', ['x = 0']), # START_CODE resets slide type ] split_rules = { SlideType.SLIDE: [Token.TITLE(level=1)], SlideType.FRAGMENT: [Token.SPLIT()], SlideType.CONTINUE: [Token.START_CODE(), Token.END_CODE()], SlideType.SKIP: [Token.AFTER_TITLE(level=2)], } cells = list(parse_cells(tokens, split_rules)) assert cells == [ Cell('markdown', 'slide', ['# 111']), Cell('markdown', 'fragment', ['foo']), Cell('markdown', 'fragment', ['bar\n', '## secret']), Cell('markdown', 'skip', ['baz\n', '## secret']), Cell('code', '-', ['x = 0']), ]
def test_parse_cells_title_splits(): split_rules = { SlideType.SLIDE: [Token.TITLE(level=1)], SlideType.SUBSLIDE: [Token.TITLE(level=2)], } cells = list(parse_cells(TOKENS, split_rules)) assert cells == [ Cell('markdown', 'slide', [ '# 111\n', '\n', '* bullet point\n', '* bullet point 2\n', '\n', '```python\n', 'def random():\n', ' return 4\n', '```\n', '\n', '---\n', '\n', '```python\n', 'print(random())\n', '```\n', '\n', '---\n', '\n', 'Text.', ]), Cell('markdown', 'subslide', [ '## 222\n', '\n', '```python skip\n', 'import itertools\n', '```\n', '\n', 'Hello world.', ]), ] split_rules = { SlideType.SLIDE: [Token.TITLE(level=1)], SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1), Token.TITLE(level=2)], } cells = list(parse_cells(TOKENS, split_rules)) assert cells == [ Cell('markdown', 'slide', ['# 111']), Cell('markdown', 'subslide', [ '* bullet point\n', '* bullet point 2\n', '\n', '```python\n', 'def random():\n', ' return 4\n', '```\n', '\n', '---\n', '\n', '```python\n', 'print(random())\n', '```\n', '\n', '---\n', '\n', 'Text.', ]), Cell('markdown', 'subslide', [ '## 222\n', '\n', '```python skip\n', 'import itertools\n', '```\n', '\n', 'Hello world.', ]), ]