from markdownify import markdownify as md, ATX, ATX_CLOSED, BACKSLASH, UNDERSCORE nested_uls = """ """ nested_ols = """
  1. 1
    1. a
      1. I
      2. II
      3. III
    2. b
    3. c
  2. 2
  3. 3
  4. """ table = """
    Firstname Lastname Age
    Jill Smith 50
    Eve Jackson 94
    """ table_with_html_content = """
    Firstname Lastname Age
    Jill Smith 50
    Eve Jackson 94
    """ table_with_header_column = """
    Firstname Lastname Age
    Jill Smith 50
    Eve Jackson 94
    """ table_head_body = """
    Firstname Lastname Age
    Jill Smith 50
    Eve Jackson 94
    """ table_missing_text = """
    Lastname Age
    Jill 50
    Eve Jackson 94
    """ table_missing_head = """
    Firstname Lastname Age
    Jill Smith 50
    Eve Jackson 94
    """ def test_chomp(): assert md(' ') == ' ' assert md(' ') == ' ' assert md(' ') == ' ' assert md(' ') == ' ' assert md(' s ') == ' **s** ' assert md(' s ') == ' **s** ' assert md(' s ') == ' **s** ' assert md(' s ') == ' **s** ' def test_a(): assert md('Google') == '[Google](https://google.com)' assert md('https://google.com', autolinks=False) == '[https://google.com](https://google.com)' assert md('https://google.com') == '' assert md('https://community.kde.org/Get_Involved') == '' assert md('https://community.kde.org/Get_Involved', autolinks=False) == '[https://community.kde.org/Get\\_Involved](https://community.kde.org/Get_Involved)' def test_a_spaces(): assert md('foo Google bar') == 'foo [Google](http://google.com) bar' assert md('foo Google bar') == 'foo [Google](http://google.com) bar' assert md('foo Google bar') == 'foo [Google](http://google.com) bar' assert md('foo bar') == 'foo bar' def test_a_with_title(): text = md('Google') assert text == r'[Google](http://google.com "The \"Goog\"")' def test_a_shortcut(): text = md('http://google.com') assert text == '' def test_a_no_autolinks(): text = md('http://google.com', autolinks=False) assert text == '[http://google.com](http://google.com)' def test_b(): assert md('Hello') == '**Hello**' def test_b_spaces(): assert md('foo Hello bar') == 'foo **Hello** bar' assert md('foo Hello bar') == 'foo **Hello** bar' assert md('foo Hello bar') == 'foo **Hello** bar' assert md('foo bar') == 'foo bar' def test_blockquote(): assert md('
    Hello
    ') == '\n> Hello\n\n' def test_blockquote_with_paragraph(): assert md('
    Hello

    handsome

    ') == '\n> Hello\n\nhandsome\n\n' def test_nested_blockquote(): text = md('
    And she was like
    Hello
    ') assert text == '\n> And she was like \n> > Hello\n> \n> \n\n' def test_br(): assert md('a
    b
    c') == 'a \nb \nc' def test_em(): assert md('Hello') == '*Hello*' def test_em_spaces(): assert md('foo Hello bar') == 'foo *Hello* bar' assert md('foo Hello bar') == 'foo *Hello* bar' assert md('foo Hello bar') == 'foo *Hello* bar' assert md('foo bar') == 'foo bar' def test_h1(): assert md('

    Hello

    ') == 'Hello\n=====\n\n' def test_h2(): assert md('

    Hello

    ') == 'Hello\n-----\n\n' def test_hn(): assert md('

    Hello

    ') == '### Hello\n\n' assert md('
    Hello
    ') == '###### Hello\n\n' def test_hn_chained(): assert md('

    First

    \n

    Second

    \n

    Third

    ', heading_style=ATX) == '# First\n\n\n## Second\n\n\n### Third\n\n' assert md('X

    First

    ', heading_style=ATX) == 'X# First\n\n' def test_hn_nested_tag_heading_style(): assert md('

    A

    P

    C

    ', heading_style=ATX_CLOSED) == '# A P C #\n\n' assert md('

    A

    P

    C

    ', heading_style=ATX) == '# A P C\n\n' def test_hn_nested_simple_tag(): tag_to_markdown = [ ("strong", "**strong**"), ("b", "**b**"), ("em", "*em*"), ("i", "*i*"), ("p", "p"), ("a", "a"), ("div", "div"), ("blockquote", "blockquote"), ] for tag, markdown in tag_to_markdown: assert md('

    A <' + tag + '>' + tag + ' B

    ') == '### A ' + markdown + ' B\n\n' assert md('

    A
    B

    ', heading_style=ATX) == '### A B\n\n' # Nested lists not supported # assert md('

    A
    • li1
    • l2

    ', heading_style=ATX) == '### A li1 li2 B\n\n' def test_hn_nested_img(): assert md('Alt text') == '![Alt text](/path/to/img.jpg "Optional title")' assert md('Alt text') == '![Alt text](/path/to/img.jpg)' image_attributes_to_markdown = [ ("", ""), ("alt='Alt Text'", "Alt Text"), ("alt='Alt Text' title='Optional title'", "Alt Text"), ] for image_attributes, markdown in image_attributes_to_markdown: assert md('

    A B

    ') == '### A ' + markdown + ' B\n\n' def test_hr(): assert md('Hello
    World') == 'Hello\n\n---\n\nWorld' assert md('Hello
    World') == 'Hello\n\n---\n\nWorld' assert md('

    Hello

    \n
    \n

    World

    ') == 'Hello\n\n\n\n\n---\n\n\nWorld\n\n' def test_head(): assert md('head') == 'head' def test_atx_headings(): assert md('

    Hello

    ', heading_style=ATX) == '# Hello\n\n' assert md('

    Hello

    ', heading_style=ATX) == '## Hello\n\n' def test_atx_closed_headings(): assert md('

    Hello

    ', heading_style=ATX_CLOSED) == '# Hello #\n\n' assert md('

    Hello

    ', heading_style=ATX_CLOSED) == '## Hello ##\n\n' def test_i(): assert md('Hello') == '*Hello*' def test_ol(): assert md('
    1. a
    2. b
    ') == '1. a\n2. b\n' assert md('
    1. a
    2. b
    ') == '3. a\n4. b\n' def test_p(): assert md('

    hello

    ') == 'hello\n\n' def test_strong(): assert md('Hello') == '**Hello**' def test_ul(): assert md('
    • a
    • b
    ') == '* a\n* b\n' def test_nested_ols(): assert md(nested_ols) == '\n1. 1\n\t1. a\n\t\t1. I\n\t\t2. II\n\t\t3. III\n\t2. b\n\t3. c\n2. 2\n3. 3\n' def test_inline_ul(): assert md('

    foo

    • a
    • b

    bar

    ') == 'foo\n\n* a\n* b\n\nbar\n\n' def test_nested_uls(): """ Nested ULs should alternate bullet characters. """ assert md(nested_uls) == '\n* 1\n\t+ a\n\t\t- I\n\t\t- II\n\t\t- III\n\t+ b\n\t+ c\n* 2\n* 3\n' def test_bullets(): assert md(nested_uls, bullets='-') == '\n- 1\n\t- a\n\t\t- I\n\t\t- II\n\t\t- III\n\t- b\n\t- c\n- 2\n- 3\n' def test_li_text(): assert md('
    • foo bar
    • foo bar
    • foo bar space.
    ') == '* foo [bar](#)\n* foo bar\n* foo **bar** *space*.\n' def test_img(): assert md('Alt text') == '![Alt text](/path/to/img.jpg "Optional title")' assert md('Alt text') == '![Alt text](/path/to/img.jpg)' def test_div(): assert md('Hello World') == 'Hello World' def test_table(): assert md(table) == '\n\n| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |\n\n' assert md(table_with_html_content) == '\n\n| Firstname | Lastname | Age |\n| --- | --- | --- |\n| **Jill** | *Smith* | [50](#) |\n| Eve | Jackson | 94 |\n\n' assert md(table_with_header_column) == '\n\n| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |\n\n' assert md(table_head_body) == '\n\n| Firstname | Lastname | Age |\n| --- | --- | --- |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |\n\n' assert md(table_missing_text) == '\n\n| | Lastname | Age |\n| --- | --- | --- |\n| Jill | | 50 |\n| Eve | Jackson | 94 |\n\n' assert md(table_missing_head) == '\n\n| | | |\n| --- | --- | --- |\n| Firstname | Lastname | Age |\n| Jill | Smith | 50 |\n| Eve | Jackson | 94 |\n\n' def test_strong_em_symbol(): assert md('Hello', strong_em_symbol=UNDERSCORE) == '__Hello__' assert md('Hello', strong_em_symbol=UNDERSCORE) == '__Hello__' assert md('Hello', strong_em_symbol=UNDERSCORE) == '_Hello_' assert md('Hello', strong_em_symbol=UNDERSCORE) == '_Hello_' def test_newline_style(): assert md('a
    b
    c', newline_style=BACKSLASH) == 'a\\\nb\\\nc'