HF_Agents_Final_Project / tests /test_markdown_table_parser.py
Yago Bolivar
feat: implement markdown table parser with comprehensive test suite
f4e197f
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