File size: 3,328 Bytes
f4e197f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
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
|