# -*- 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
# <http://www.gnu.org/licenses/>.
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