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