|
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 | |
|
""" |
|
|
|
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 |
|
|
|
|