# -*- coding: utf-8 -*- # # Copyright © 2017 markdown-link-style contributors. # # This file is part of markdown-link-style. # # markdown-link-style is free software: you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # markdown-link-style is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with markdown-link-style (see COPYING). If not, see # . import os import os.path import sys from io import StringIO from random import randint from unittest import mock from mistune import Renderer, Markdown from nose.tools import * from pkg_resources import resource_string, resource_filename from markdown_link_style._version import __version__ from mdl_style import * from mdl_style import _get_args, _mdl_stylize def _get_data(f): rs = resource_string(__name__, '/'.join(['data', f])) return rs.decode() def _get_data_path(f): return resource_filename(__name__, '/'.join(['data', f])) class TestLSRendererIL(object): """Test class for mdl_style.LSRenderer inline link style. """ def setup(self): self.md = LSMarkdown(link_style='inline') def test_autolink_00(self): d = _get_data('autolink_00.md') d_expected = _get_data('autolink_00-expected.md') assert_equals(self.md(d), d_expected) def test_link_footnote_to_inline_style_conversion_00(self): d = _get_data('inline_link_style_00.md') expected_result = _get_data('inline_link_style_00-expected.md') assert_equal(self.md(d), expected_result) def test_link_footnote_to_inline_style_conversion_01(self): d = _get_data('inline_link_style_01.md') expected_result = _get_data('inline_link_style_01-expected.md') assert_equal(self.md(d), expected_result) def test_renderer_parses_images_00(self): d = _get_data('inline_parses_images_00.md') expected_result = _get_data( 'inline_parses_images_00-expected.md') assert_equal(self.md(d), expected_result) def test_renderer_does_not_parse_link_breaks_00(self): d = _get_data('does_not_parse_link_breaks_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_headers_00(self): d = _get_data('does_not_parse_headers_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_blockquotes_00(self): d = _get_data('does_not_parse_blockquotes_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_lists_00(self): d = _get_data('does_not_parse_lists_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_codeblocks_00(self): d = _get_data('does_not_parse_codeblocks_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_hrules_00(self): d = _get_data('does_not_parse_hrules_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_emphasis_00(self): d = _get_data('does_not_parse_emphasis_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_code_00(self): d = _get_data('does_not_parse_code_00.md') assert_equal(self.md(d), d) def teardown(self): pass class TestLSRendererFN(object): """Test class for mdl_style.LSRenderer footnote link style. """ def setup(self): self.md = LSMarkdown(link_style='footnote') def test_autolink_00(self): d = _get_data('autolink_00.md') d_expected = _get_data('autolink_00-expected.md') assert_equals(self.md(d), d_expected) def test_link_inline_to_footnote_style_conversion_00(self): d = _get_data('footnote_link_style_00.md') expected_result = _get_data( 'footnote_link_style_00-expected.md') assert_equal(self.md(d), expected_result) def test_link_inline_to_footnote_style_conversion_01(self): d = _get_data('footnote_link_style_01.md') expected_result = _get_data( 'footnote_link_style_01-expected.md') assert_equal(self.md(d), expected_result) def test_renderer_parses_images_00(self): d = _get_data('footnote_parses_images_00.md') expected_result = _get_data( 'footnote_parses_images_00-expected.md') assert_equal(self.md(d), expected_result) def test_renderer_does_not_parse_link_breaks_00(self): d = _get_data('does_not_parse_link_breaks_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_headers_00(self): d = _get_data('does_not_parse_headers_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_blockquotes_00(self): d = _get_data('does_not_parse_blockquotes_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_lists_00(self): d = _get_data('does_not_parse_lists_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_codeblocks_00(self): d = _get_data('does_not_parse_codeblocks_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_hrules_00(self): d = _get_data('does_not_parse_hrules_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_emphasis_00(self): d = _get_data('does_not_parse_emphasis_00.md') assert_equal(self.md(d), d) def test_renderer_does_not_parse_code_00(self): d = _get_data('does_not_parse_code_00.md') assert_equal(self.md(d), d) def teardown(self): pass class TestMdlStyleMdlStylize(object): """Testing mdl_style._mdl_stylize. """ @classmethod def setup_class(self): self.test_data = {} self.test_data['inline'] = {} self.test_data['inline']['in'] = _get_data( 'inline_link_style_00.md') self.test_data['inline']['out'] = _get_data( 'inline_link_style_00-expected.md') self.test_data['footnote'] = {} self.test_data['footnote']['in'] = _get_data( 'footnote_link_style_00.md') self.test_data['footnote']['out'] = _get_data( 'footnote_link_style_00-expected.md') self.in_file = 'in_file.md' self.out_file = 'out_file.md' def setup(self): self.link_style = ['inline', 'footnote'][randint(0, 1)] with open(self.in_file, 'w') as f: f.write(self.test_data[self.link_style]['in']) def test_mdl_stylize_infile(self): args = _get_args([self.link_style, self.in_file]) _mdl_stylize(args) # the test. with open(self.in_file, 'r') as f: assert_equal(f.read(), self.test_data[self.link_style]['out']) def test_mdl_stylize_infile_outfile(self): args = _get_args([self.link_style, self.in_file, self.out_file]) _mdl_stylize(args) with open(self.out_file, 'r') as f: assert_equal(f.read(), self.test_data[self.link_style]['out']) def teardown(self): if os.path.isfile(self.in_file): os.remove(self.in_file) if os.path.isfile(self.out_file): os.remove(self.out_file) class TestMdlStyleGetArgs(object): """Testing mdl_style._get_args. """ def setup(self): self.out = None @raises(SystemExit) def test_get_args_version(self): real_exit = sys.exit def mock_exit(args): assert_equal(sys.stdout.getvalue(), __version__ + '\n') real_exit(args) with mock.patch('sys.stdout', new_callable=StringIO) as out, \ mock.patch('sys.exit', new=mock_exit): raw_args = ['--version'] _get_args(raw_args) def test_get_args_inline_infile(self): lstyle = 'inline' md_file = 'autolink_00.md' raw_args = [lstyle, _get_data_path(md_file)] args = _get_args(raw_args) assert_equal(args.link_style, lstyle) assert_equal(args.in_file.read(), _get_data(md_file)) def test_get_args_inline_infile_outfile(self): lstyle = 'inline' md_file = 'autolink_00.md' raw_args = [lstyle, _get_data_path(md_file), 'outfile.md'] args = _get_args(raw_args) assert_equal(args.link_style, lstyle) assert_equal(args.in_file.read(), _get_data(md_file)) assert_equal(type(args.out_file), str) def test_get_args_footnote_infile(self): lstyle = 'footnote' md_file = 'autolink_00.md' raw_args = [lstyle, _get_data_path(md_file)] args = _get_args(raw_args) assert_equal(args.link_style, lstyle) assert_equal(args.in_file.read(), _get_data(md_file)) def test_get_args_footnote_infile_outfile(self): lstyle = 'footnote' md_file = 'autolink_00.md' raw_args = [lstyle, _get_data_path(md_file), 'outfile.md'] args = _get_args(raw_args) assert_equal(args.link_style, lstyle) assert_equal(args.in_file.read(), _get_data(md_file)) assert_equal(type(args.out_file), str) def teardown(self): pass