<?php
if (!defined('ABSPATH')) exit;
require(__DIR__ . "/../src/Html2Text.php");
class Html2TextTest extends \PHPUnit\Framework\TestCase {
 // delete all failures before we run
 public static function setUpBeforeClass(): void {
 foreach (new DirectoryIterator(__DIR__ . '/failures') as $fileInfo) {
 if ($fileInfo->getFileName()[0] != '.') {
 unlink($fileInfo->getPathname());
 }
 }
 }
 public function testFile(string $test): void {
 $this->doTestWithResults($test, $test, []);
 }
 function doTestWithResults(string $test, string $result, $options = []): void {
 $html = __DIR__ . "/html/$test.html";
 $txt = __DIR__ . "/txt/$result.txt";
 $this->assertTrue(file_exists($html), "File '{$html}' does not exist");
 $this->assertTrue(file_exists($txt), "File '{$txt}' does not exist");
 $input = file_get_contents($html);
 $expected = \Soundasleep\Html2Text::fixNewlines(file_get_contents($txt));
 $output = \Soundasleep\Html2Text::convert($input, $options);
 if ($output != $expected) {
 file_put_contents(__DIR__ . "/failures/$result.output", $output);
 }
 $this->assertEquals($expected, $output, "{$html} file failed to convert to {$txt}");
 }
 public function providerFiles(): array {
 return [
 ['basic'],
 ['anchors'],
 ['more-anchors'],
 ['test3'],
 ['test4'],
 ['table'],
 ['nbsp'],
 ['lists'],
 ['pre'],
 ['newlines'],
 ['nested-divs'],
 ['blockquotes'],
 ['full_email'],
 ['images'],
 ['non-breaking-spaces'],
 ['utf8-example'],
 ['msoffice'],
 ['dom-processing'],
 ['empty'],
 ['huge-msoffice'],
 ['zero-width-non-joiners'],
 ];
 }
 public function testInvalidXML(): void {
 $this->expectWarning();
 $this->doTestWithResults("invalid", "invalid", ['ignore_errors' => false]);
 }
 public function testInvalidXMLIgnore(): void {
 $this->doTestWithResults("invalid", "invalid", ['ignore_errors' => true]);
 }
 public function testInvalidXMLIgnoreOldSyntax(): void {
 // for BC, allow old #convert(text, bool) syntax
 $this->doTestWithResults("invalid", "invalid", true);
 }
 public function testInvalidOption(): void {
 $this->expectException(InvalidArgumentException::class);
 $this->doTestWithResults("basic", "basic", ['invalid_option' => true]);
 }
 public function testBasicDropLinks(): void {
 $this->doTestWithResults("basic", "basic.no-links", ['drop_links' => true]);
 }
 public function testAnchorsDropLinks(): void {
 $this->doTestWithResults("anchors", "anchors.no-links", ['drop_links' => true]);
 }
 public function testWindows1252(): void {
 $this->doTestWithResults("windows-1252-example", "windows-1252-example", ['char_set' => 'windows-1252']);
 }
}