summaryrefslogblamecommitdiffstats
path: root/tests/test_mdl_style.py
blob: 23372fd312daca456b8e75fbd85d740a8970997e (plain) (tree)
1
2
3

                       
                                                       
















                                                                      

              



                       
                          


                         
                                      
                        
                                                            
 
 

                                                    
                                             




                                                         


                                                             












                                                             




                                                                       




                                                                       
                                             
                                                   

                                                  

                                                 
                                                          
                                                         

                                   
                                                      


                                                     
                                                          


                                                         
                                                    


                                                   
                                                         


                                                        
                                                     


                                                    
                                                       


                                                      
                                                   


                                                  







                                                               

                    

                                                   




                                                         

                                                               

                                                 
                                                 
 

                                                               

                                                 

                                                 
                                             
                                                     

                                                    

                                                 
                                                          


                                                         
                                                      


                                                     
                                                          


                                                         
                                                    


                                                   
                                                         


                                                        
                                                     


                                                    
                                                       


                                                      
                                                   


                                                  
                       
            


























































                                                                        































































                                                                      
# -*- 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