class TestMarkdownParserItalic(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_italic_strips_star_characters(self): parse_string = '*Italic*' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<em>Italic</em>') def test_italic_with_single_bold_text_inside_reduces(self): parse_string = '*Italic with **Bold** text*' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<em>Italic with <strong>Bold</strong> text</em>') def test_italic_with_multiple_bold_text_inside_reduces(self): parse_string = '*Italic with **Bold** and another **Bold** text*' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<em>Italic with <strong>Bold</strong> and another <strong>Bold</strong> text</em>') def test_italic_with_bold_at_start_and_end(self): parse_string = '***Bold** inside of italic and at **End***' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<em><strong>Bold</strong> inside of italic and at <strong>End</strong></em>')
class TestMarkdownParserHeading(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_single_heading_returns_h1(self): parse_string = ''' # hello ''' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<h1>hello</h1>') def test_double_heading_returns_h2(self): parse_string = ''' ## hello ''' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<h2>hello</h2>')
class TestMarkdownParserUnorderedList(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_unorderedlist_with_two_bullet_points(self): parse_string = ''' - first - second ''' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<ul><li>first</li><li>second</li></ul>')
class TestMarkdownParserBold(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_bold_strips_star_characters(self): parse_string = '**Bold**' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong>Bold</strong>') def test_bold_strips_multiple_star_characters(self): parse_string = '****Bold****' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong>Bold</strong>') def test_single_strikethrough_within_bold(self): parse_string = '****Bold text with ~~strikethrough~~****' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong>Bold text with <del>strikethrough</del></strong>') def test_multiple_strikethrough_within_bold(self): parse_string = '****Bold text with ~~multiple~~ ~~strikethroughs~~****' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong>Bold text with <del>multiple</del> <del>strikethroughs</del></strong>') def test_italic_single_within_bold_at_end(self): parse_string = '****Bold text with *Italic*****' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong>Bold text with <em>Italic</em></strong>') def test_italic_multiple_within_bold_at_begin_and_end(self): parse_string = '*****Italic* Bold text with *Italic*****' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<strong><em>Italic</em> Bold text with <em>Italic</em></strong>')
def setUp(self): self.parser = MarkdownParser(use_file=False)
class TestMarkdownParserBlockQuote(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_blockquote_does_not_capture_greater_than_with_non_whitespace_before( self): parse_string = ''' textbefore> greater than sign > capture me > second line to capture''' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), 'textbefore> greater than sign') self.assertEqual( markdown_list[1].to_html(), '<blockquote>capture me second line to capture </blockquote>') def test_blockquote_captures_lines_with_no_greater_than_sign_preceded_by_line_with_greater_than_sign( self): parse_string = ''' > first one level block quote with spaces ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>first one level block quote with spaces </blockquote>' ) def test_blockquote_captures_lines_with_no_spaces_or_greater_than_preceded_by_line_with_greater_than( self): parse_string = ''' >blockquote with no spaces at beginning of some lines ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>blockquote with no spaces at beginning of some lines </blockquote>' ) def test_blockquote_captures_lines_with_three_spaces_at_beginning(self): parse_string = ''' > three spaces > starting from here and also not beginning with greater than sign ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>three spaces starting from here and also not beginning with greater than sign </blockquote>' ) def test_blockquote_single_and_two_level(self): parse_string = ''' >two level blockquote >>very very basic ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>two level blockquote <blockquote>very very basic </blockquote></blockquote>' ) def test_blockquote_splits_blockquotes_separated_by_line_with_no_bracket_single_and_double_mixed( self): parse_string = ''' > first level >> second >> no greater than on next line >> this should be a new block quote >> with this in it and also this ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>first level <blockquote>second no greater than on next line </blockquote><blockquote> this should be a new block quote with this in it and also this </blockquote></blockquote>' ) def test_blockquote_does_not_split_blockquotes_on_one_level_blockquote_between_double_blockquotes( self): parse_string = ''' > 1 >> 2 >> 3 > 4 >> 5 >> 6 7 ''' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<blockquote>1 <blockquote>2 3 4 5 6 7 </blockquote></blockquote>')
import os from markdownparser import MarkdownParser from models.codeblock import CodeBlock markdown_parser = MarkdownParser() def get_header(): header_string = '' main_script_path = os.path.abspath(__file__) main_script_directory = os.path.split(main_script_path)[0] head_relative_file_path = 'html/head.html' header_file_absolute_path = os.path.join(main_script_directory, head_relative_file_path) with open(header_file_absolute_path, 'r') as header_file: header_string = header_file.read() return header_string def get_scripts(): script_string = "" main_script_path = os.path.abspath(__file__) main_script_directory = os.path.split(main_script_path)[0] scripts_relative_file_path = 'html/scripts.html'
class TestMarkdownParserStrikethrough(unittest.TestCase): def setUp(self): self.parser = MarkdownParser(use_file=False) def test_italic_inside_strikethrough(self): parse_string = '~~*strikethrough and italics*~~' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<del><em>strikethrough and italics</em></del>') def test_mixed_bold_italic_inside_strikethrough(self): parse_string = '~~***bold and italics***~~' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<del><em><strong>bold and italics</strong></em></del>') def test_strikethrough_multiple_tildas_returns_strikethrough_text(self): parse_string = '~~~~multiple strikes~~~~' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<del>multiple strikes</del>') def test_strikethrough_multiple_tildas_and_tilda_in_middle(self): parse_string = '~~~~strike ~ through~~~~' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<del>strike ~ through</del>') def test_strikethrough_with_single_bold_inside_reduces_to_strike_and_bold( self): parse_string = '~~**strike and bold**~~' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<del><strong>strike and bold</strong></del>') def test_strikethrough_with_multiple_bold_inside_reduces_to_strike_and_bold( self): parse_string = '~~**strike** and **bold**~~' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<del><strong>strike</strong> and <strong>bold</strong></del>') def test_strikethrough_with_multiple_italic_reduces_strike_and_italic( self): parse_string = '~~*strike* and *italic*~~' markdown_list = self.parser.parse(parse_string) self.assertEqual(markdown_list[0].to_html(), '<del><em>strike</em> and <em>italic</em></del>') def test_strikethrough_with_multiple_bold_and_italic_inside_reduces_bold_and_italic( self): parse_string = '~~*strike* and *italic* and **bold** and **another bold**~~' markdown_list = self.parser.parse(parse_string) self.assertEqual( markdown_list[0].to_html(), '<del><em>strike</em> and <em>italic</em> and <strong>bold</strong> and <strong>another bold</strong></del>' )