package mailer import ( "testing" ) func TestHTML2Text(t *testing.T) { scenarios := []struct { html string expected string }{ { "", "", }, { "ab c", "ab c", }, { "<!-- test html comment -->", "", }, { "<!-- test html comment --> a ", "a", }, { "<span>a</span>b<span>c</span>", "abc", }, { `<a href="a/b/c">test</span>`, "[test](a/b/c)", }, { `<a href="">test</span>`, "[test]", }, { "<span>a</span> <span>b</span>", "a b", }, { "<span>a</span> b <span>c</span>", "a b c", }, { "<span>a</span> b <div>c</div>", "a b \r\nc", }, { ` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width,initial-scale=1" /> <style> body { padding: 0; } </style> </head> <body> <!-- test html comment --> <style> body { padding: 0; } </style> <div class="wrapper"> <div class="content"> <p>Lorem ipsum</p> <p>Dolor sit amet</p> <p> <a href="a/b/c">Verify</a> </p> <br> <p> <a href="a/b/c"><strong>Verify2.1</strong> <strong>Verify2.2</strong></a> </p> <br> <br> <div> <div> <div> <ul> <li>ul.test1</li> <li>ul.test2</li> <li>ul.test3</li> </ul> <ol> <li>ol.test1</li> <li>ol.test2</li> <li>ol.test3</li> </ol> </div> </div> </div> <select> <option>Option 1</option> <option>Option 2</option> </select> <textarea>test</textarea> <input type="text" value="test" /> <button>test</button> <p> Thanks,<br/> PocketBase team </p> </div> </div> </body> </html> `, "Lorem ipsum \r\nDolor sit amet \r\n[Verify](a/b/c) \r\n[Verify2.1 Verify2.2](a/b/c) \r\n\r\n- ul.test1 \r\n- ul.test2 \r\n- ul.test3 \r\n- ol.test1 \r\n- ol.test2 \r\n- ol.test3 \r\nThanks,\r\nPocketBase team", }, } for i, s := range scenarios { result, err := html2Text(s.html) if err != nil { t.Errorf("(%d) Unexpected error %v", i, err) } if result != s.expected { t.Errorf("(%d) Expected \n(%q)\n%v,\n\ngot:\n\n(%q)\n%v", i, s.expected, s.expected, result, result) } } }