extern crate html2md;

use html2md::parse_html;
use pretty_assertions::assert_eq;

#[test]
fn test_tables() {
    let md = parse_html(r#"<table>
  <thead>
    <tr>
      <th scope='col'>Minor1</th>
      <th scope='col'>Minor2</th>
      <th scope='col'>Minor3</th>
      <th scope='col'>Minor4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>col1</td>
      <td>col2</td>
      <td>col3</td>
      <td>col4</td>
    </tr>
  </tbody>
</table>"#);

    assert_eq!(md, "\
|Minor1|Minor2|Minor3|Minor4|
|------|------|------|------|
| col1 | col2 | col3 | col4 |");
}

#[test]
fn test_tables_invalid_more_headers() {
    let md = parse_html(r#"<table>
  <thead>
    <tr>
      <th scope='col'>Minor1</th>
      <th scope='col'>Minor2</th>
      <th scope='col'>Minor3</th>
      <th scope='col'>Minor4</th>
      <th scope='col'>Minor5</th>
      <th scope='col'>Minor6</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>col1</td>
      <td>col2</td>
      <td>col3</td>
      <td>col4</td>
    </tr>
  </tbody>
</table>"#);

    assert_eq!(md, "\
|Minor1|Minor2|Minor3|Minor4|Minor5|Minor6|
|------|------|------|------|------|------|
| col1 | col2 | col3 | col4 |      |      |");
}

#[test]
fn test_tables_invalid_more_rows() {
    let md = parse_html(r#"<table>
  <thead>
    <tr>
      <th scope='col'>Minor1</th>
      <th scope='col'>Minor2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>col1</td>
      <td>col2</td>
      <td>col3</td>
      <td>col4</td>
    </tr>
  </tbody>
</table>"#);

    assert_eq!(md, "\
|Minor1|Minor2|    |    |
|------|------|----|----|
| col1 | col2 |col3|col4|");
}

#[test]
fn test_tables_odd_column_width() {
    let md = parse_html(r#"<table>
  <thead>
    <tr>
      <th scope='col'>Minor</th>
      <th scope='col'>Major</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>col1</td>
      <td>col2</td>
    </tr>
  </tbody>
</table>"#);

    assert_eq!(md, "\
|Minor|Major|
|-----|-----|
|col1 |col2 |");
}

#[test]
fn test_tables_alignment() {
    let md = parse_html(r#"<table>
  <thead>
    <tr>
      <th align='right'>Minor1</th>
      <th align='center'>Minor2</th>
      <th align='right'>Minor3</th>
      <th align='left'>Minor4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>col1</td>
      <td>col2</td>
      <td>col3</td>
      <td>col4</td>
    </tr>
  </tbody>
</table>"#);

    assert_eq!(md, "\
|Minor1|Minor2|Minor3|Minor4|
|-----:|:----:|-----:|:-----|
| col1 | col2 | col3 | col4 |");
}

#[test]
fn test_tables_wild_example() {
    let md = parse_html(r#"
<table style="width: 100%;">
    <thead>
    <tr>
        <th>One ring<br></th>
        <th>Patterns<br></th>
        <th>Titanic<br></th>
        <th><br></th>
        <th><br></th>
        <th><br></th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td style="width: 16.6667%;">One ring to rule them all<br></td>
        <td style="width: 16.6667%;">There's one for the sorrow <br></td>
        <td style="width: 16.6667%;">Roll on, Titanic, roll<br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
    </tr>
    <tr>
        <td style="width: 16.6667%;">One ring to find them<br></td>
        <td style="width: 16.6667%;">And two for the joy<br></td>
        <td style="width: 16.6667%;">You're the pride of White Star Line<br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
    </tr>
    <tr>
        <td style="width: 16.6667%;">One ring to bring them all<br></td>
        <td style="width: 16.6667%;">And three for the girls<br></td>
        <td style="width: 16.6667%;">Roll on, Titanic, roll<br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
    </tr>
    <tr>
        <td style="width: 16.6667%;">And in the darkness bind them<br></td>
        <td style="width: 16.6667%;">And four for the boys<br></td>
        <td style="width: 16.6667%;">Into the mists of time<br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
        <td style="width: 16.6667%;"><br></td>
    </tr>
    </tbody>
</table>"#);

    assert_eq!(md, "\
|          One ring           |         Patterns         |              Titanic              |   |   |   |
|-----------------------------|--------------------------|-----------------------------------|---|---|---|
|  One ring to rule them all  |There's one for the sorrow|      Roll on, Titanic, roll       |   |   |   |
|    One ring to find them    |   And two for the joy    |You're the pride of White Star Line|   |   |   |
| One ring to bring them all  | And three for the girls  |      Roll on, Titanic, roll       |   |   |   |
|And in the darkness bind them|  And four for the boys   |      Into the mists of time       |   |   |   |");
}