:- begin_tests(md_header).
:- use_module(prolog/md/md_header).

% Tests for different headers.

md_header_string(String, Header, Rest):-
    string_codes(String, Codes),
    phrase(md_header(Tmp), Codes, RestCodes), !,
    string_codes(Rest, RestCodes),
    Tmp = Header.

% Setext-styled first-level header.

test(header_1):-
    md_header_string("abc\n===\nrest", h1("abc"), "rest").

% Setext-styled second-level header.

test(header_2):-
    md_header_string("abc\n---\nrest", h2("abc"), "rest").

% Atx-styled level 1.

test(header_3):-
    md_header_string("# abc\nrest", h1("abc"), "rest").

% Atx-styled level 2.

test(header_4):-
    md_header_string("## abc\nrest", h2("abc"), "rest").

% Atx-styled level 3.

test(header_5):-
    md_header_string("### abc\nrest", h3("abc"), "rest").

% Atx-styled level 4.

test(header_6):-
    md_header_string("#### abc\nrest", h4("abc"), "rest").

% Atx-styled level 5.

test(header_7):-
    md_header_string("##### abc\nrest", h5("abc"), "rest").

% Atx-styled level 6.

test(header_8):-
    md_header_string("###### abc\nrest", h6("abc"), "rest").

% Atx-styled, # at end.

test(header_9):-
    md_header_string("# abc#\nrest", h1("abc"), "rest").

% Atx-styled, multiple # at end, space.

test(header_10):-
    md_header_string("# abc ##\nrest", h1("abc"), "rest").

% Atx-styled, escaped #.

test(header_11):-
    md_header_string("# abc\\#def\nrest", h1("abc#def"), "rest").

% Atx-styled, escaped #, one # at end.

test(header_12):-
    md_header_string("# abc\\#def #\nrest", h1("abc#def"), "rest").

:- end_tests(md_header).
