From 8c38390038edcebd55f9dec8359ef983f3813425 Mon Sep 17 00:00:00 2001 From: Albert Krewinkel <albert@zeitkraut.de> Date: Fri, 27 Nov 2020 21:21:25 +0100 Subject: [PATCH] HTML reader tests: improve test coverage of new features --- src/Text/Pandoc/Readers/HTML/Table.hs | 3 +- test/html-reader.html | 76 ++++++++++++++++++ test/html-reader.native | 109 ++++++++++++++++++++++++++ 3 files changed, 187 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Readers/HTML/Table.hs b/src/Text/Pandoc/Readers/HTML/Table.hs index 5a783988f..91639fa4c 100644 --- a/src/Text/Pandoc/Readers/HTML/Table.hs +++ b/src/Text/Pandoc/Readers/HTML/Table.hs @@ -214,7 +214,8 @@ normalize :: [ColWidth] -> TableHead -> [TableBody] -> TableFoot -> Either String ([ColSpec], TableHead, [TableBody], TableFoot) normalize widths head' bodies foot = do let rows = headRows head' <> concatMap bodyRows bodies <> footRows foot - let rowLength = length . rowCells + let cellWidth (Cell _ _ _ (ColSpan cs) _) = cs + let rowLength = foldr (\cell acc -> cellWidth cell + acc) 0 . rowCells let ncols = maximum (map rowLength rows) let tblType = tableType (map rowCells rows) -- fail on empty table diff --git a/test/html-reader.html b/test/html-reader.html index ae937af82..4b688cb20 100644 --- a/test/html-reader.html +++ b/test/html-reader.html @@ -487,6 +487,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote> </tbody> </table> <hr /> +<p>Row headers</p> <table> <thead> <tr> @@ -656,6 +657,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote> </tbody> </table> <hr /> +<p>tbody tags omitted</p> <table> <tr> <td>1</td> @@ -669,6 +671,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote> </tr> </table> <hr /> +<p>empty head</p> <table> <thead> </thead> @@ -686,6 +689,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote> </tbody> </table> <hr /> +<p>explicit body and foot</p> <table> <tbody> <tr> @@ -702,6 +706,78 @@ An e-mail address: nobody [at] nowhere.net<blockquote> </tr> </tfoot> </table> +<h2>Colspans and Rowspans</h2> +<table> + <tr> + <td colspan="2">1 and 2</td> + <td>3</td> + </tr> + <tr> + <td colspan="3">4, 5, and 6</td> + </tr> +</table> +<hr/> +<table> + <thead> + <tr> + <th colspan="3">Numbers</th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan="2">1 and 4</td> + <td>2</td> + <td>3</td> + </tr> + <tr> + <td>5</td> + <td>6</td> + </tr> + </tbody> +</table> +<h2>Attributes</h2> +<table id="attrib-test-table"> + <thead class="table-head"> + <tr class="table-head-row"> + <th abbr="x" colspan="3">Cat X</th> + </tr> + <tbody data-part="body" class="main"> + <tr data-part="row"> + <td data-part="cell">1</td> + <td valign="bottom">2</td> + <td style="color: #151950">3</td> + </tr> + </tbody> + <tfoot class="summary"> + <tr bgcolor="#ccc"> + <td data-square="true">4</td> + <td>5</td> + <td>6</td> + </tr> + </tfoot> +</table> +<h2>Tag omission</h2> +<p>thead, tbody, and tfoot</p> +<table> + <thead> + <tr> + <td>X</td> + <td>Y</td> + <td>Z</td> + </tr> + <tbody> + <tr> + <td>1</td> + <td>2</td> + <td>3</td> + </tr> + <tfoot> + <tr> + <td>4</td> + <td>5</td> + <td>6</td> + </tr> +</table> <h2>Empty Tables</h2> <p>This section should be empty.</p> <table> diff --git a/test/html-reader.native b/test/html-reader.native index ea74c25e1..04ec55d1e 100644 --- a/test/html-reader.native +++ b/test/html-reader.native @@ -395,6 +395,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl (TableFoot ("",[],[]) []) ,HorizontalRule +,Para [Str "Row",Space,Str "headers"] ,Table ("",[],[]) (Caption Nothing []) [(AlignDefault,ColWidthDefault) @@ -647,6 +648,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl (TableFoot ("",[],[]) []) ,HorizontalRule +,Para [Str "tbody",Space,Str "tags",Space,Str "omitted"] ,Table ("",[],[]) (Caption Nothing []) [(AlignDefault,ColWidthDefault) @@ -673,6 +675,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl (TableFoot ("",[],[]) []) ,HorizontalRule +,Para [Str "empty",Space,Str "head"] ,Table ("",[],[]) (Caption Nothing []) [(AlignDefault,ColWidthDefault) @@ -699,6 +702,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl (TableFoot ("",[],[]) []) ,HorizontalRule +,Para [Str "explicit",Space,Str "body",Space,Str "and",Space,Str "foot"] ,Table ("",[],[]) (Caption Nothing []) [(AlignDefault,ColWidthDefault) @@ -723,5 +727,110 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl [Plain [Str "5"]] ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "6"]]]]) +,Header 2 ("colspans-and-rowspans",[],[]) [Str "Colspans",Space,Str "and",Space,Str "Rowspans"] +,Table ("",[],[]) (Caption Nothing + []) + [(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault)] + (TableHead ("",[],[]) + []) + [(TableBody ("",[],[]) (RowHeadColumns 0) + [] + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2) + [Plain [Str "1",Space,Str "and",Space,Str "2"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "3"]]] + ,Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3) + [Plain [Str "4,",Space,Str "5,",Space,Str "and",Space,Str "6"]]]])] + (TableFoot ("",[],[]) + []) +,HorizontalRule +,Table ("",[],[]) (Caption Nothing + []) + [(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault)] + (TableHead ("",[],[]) + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3) + [Plain [Str "Numbers"]]]]) + [(TableBody ("",[],[]) (RowHeadColumns 0) + [] + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1) + [Plain [Str "1",Space,Str "and",Space,Str "4"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "2"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "3"]]] + ,Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "5"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "6"]]]])] + (TableFoot ("",[],[]) + []) +,Header 2 ("attributes",[],[]) [Str "Attributes"] +,Table ("attrib-test-table",[],[]) (Caption Nothing + []) + [(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault)] + (TableHead ("",["table-head"],[]) + [Row ("",["table-head-row"],[]) + [Cell ("",[],[("abbr","x")]) AlignDefault (RowSpan 1) (ColSpan 3) + [Plain [Str "Cat",Space,Str "X"]]]]) + [(TableBody ("",["main"],[("part","body")]) (RowHeadColumns 0) + [] + [Row ("",[],[("part","row")]) + [Cell ("",[],[("part","cell")]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "1"]] + ,Cell ("",[],[("valign","bottom")]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "2"]] + ,Cell ("",[],[("style","color: #151950")]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "3"]]]])] + (TableFoot ("",["summary"],[]) + [Row ("",[],[("bgcolor","#ccc")]) + [Cell ("",[],[("square","true")]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "4"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "5"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "6"]]]]) +,Header 2 ("tag-omission",[],[]) [Str "Tag",Space,Str "omission"] +,Para [Str "thead,",Space,Str "tbody,",Space,Str "and",Space,Str "tfoot"] +,Table ("",[],[]) (Caption Nothing + []) + [(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault) + ,(AlignDefault,ColWidthDefault)] + (TableHead ("",[],[]) + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "X"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "Y"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "Z"]]]]) + [(TableBody ("",[],[]) (RowHeadColumns 0) + [] + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "1"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "2"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "3"]]]])] + (TableFoot ("",[],[]) + [Row ("",[],[]) + [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "4"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "5"]] + ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) + [Plain [Str "6"]]]]) ,Header 2 ("empty-tables",[],[]) [Str "Empty",Space,Str "Tables"] ,Para [Str "This",Space,Str "section",Space,Str "should",Space,Str "be",Space,Str "empty."]]