import pytest from src.markdown_table_parser import parse_markdown_table def test_simple_table(): md_table = """ | Name | Age | City | |-------|-----|-----------| | Alice | 30 | New York | | Bob | 24 | Paris | """ expected = { 'Name': ['Alice', 'Bob'], 'Age': ['30', '24'], 'City': ['New York', 'Paris'] } assert parse_markdown_table(md_table) == expected def test_gaia_question_table(): md_table = """ |*|a|b|c|d|e| |---|---|---|---|---|---| |a|a|b|c|b|d| |b|b|c|a|e|c| |c|c|a|b|b|a| |d|b|e|b|e|d| |e|d|b|a|d|c| """ expected = { '*': ['a', 'b', 'c', 'd', 'e'], 'a': ['a', 'b', 'c', 'b', 'd'], 'b': ['b', 'c', 'a', 'e', 'b'], 'c': ['c', 'a', 'b', 'b', 'a'], 'd': ['b', 'e', 'b', 'e', 'd'], 'e': ['d', 'c', 'a', 'd', 'c'] } assert parse_markdown_table(md_table) == expected def test_table_with_empty_cells(): md_table = """ | Header1 | Header2 | Header3 | |---------|---------|---------| | A | | C | | D | E | | """ expected = { 'Header1': ['A', 'D'], 'Header2': ['', 'E'], 'Header3': ['C', ''] } assert parse_markdown_table(md_table) == expected def test_no_data_rows(): md_table = """ | Col1 | Col2 | |------|------| """ expected = { 'Col1': [], 'Col2': [] } assert parse_markdown_table(md_table) == expected def test_malformed_table_missing_separator(): md_table = """ | HeaderA | HeaderB | | Val1 | Val2 | """ assert parse_markdown_table(md_table) is None def test_malformed_table_column_mismatch(): md_table = """ | H1 | H2 | |----|----| | C1 | C2 | C3 | """ # Current implementation skips rows with mismatched column counts expected = { 'H1': [], 'H2': [] } assert parse_markdown_table(md_table) == expected def test_not_a_table(): text = "This is just some plain text, not a table." assert parse_markdown_table(text) is None def test_empty_string(): assert parse_markdown_table("") is None def test_table_with_extra_spacing(): md_table = """ | Name | Age | City | |---------|-------|-------------| | Alice | 30 | New York | | Bob | 24 | Paris | """ expected = { 'Name': ['Alice', 'Bob'], 'Age': ['30', '24'], 'City': ['New York', 'Paris'] } assert parse_markdown_table(md_table) == expected def test_table_in_larger_text(): text_with_table = """ Some text before the table. | Key | Value | |-----|-------| | K1 | V1 | | K2 | V2 | Some text after the table. """ expected = { 'Key': ['K1', 'K2'], 'Value': ['V1', 'V2'] } assert parse_markdown_table(text_with_table) == expected def test_table_with_different_separator_styles(): md_table = """ | Syntax | Description | | :-------- | :-----------: | | Header | Title | | Paragraph | Text | """ expected = { 'Syntax': ['Header', 'Paragraph'], 'Description': ['Title', 'Text'] } assert parse_markdown_table(md_table) == expected