2021-03-24 10:53:12 +01:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
|
|
|
|
$dirname_file = dirname(__FILE__);
|
2021-04-02 21:00:09 +02:00
|
|
|
require_once "$dirname_file/../lib-htmgem.inc.php";
|
2021-03-24 10:53:12 +01:00
|
|
|
require_once "$dirname_file/utils.inc.php";
|
2021-04-04 21:16:01 +02:00
|
|
|
require_once "$dirname_file/../lib-io.inc.php";
|
2021-03-24 10:53:12 +01:00
|
|
|
|
|
|
|
function translateHtml($text): string {
|
2021-04-02 21:00:09 +02:00
|
|
|
$gt_html = new htmgem\GemtextTranslate_html($text);
|
|
|
|
return strval($gt_html->translatedGemtext);
|
2021-03-24 10:53:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
final class translateToHtmlTest extends TestCase {
|
|
|
|
|
2021-03-25 15:24:51 +01:00
|
|
|
protected static function noSeveralSpaces($text): string {
|
|
|
|
# Replaces several spaces (0x20) by only one
|
|
|
|
return preg_replace("/ +/", " ", $text);
|
|
|
|
}
|
|
|
|
|
2021-03-24 10:53:12 +01:00
|
|
|
public function test_translate_gemtext_smallTextSets(): void {
|
|
|
|
$line1 = " Hello, how are you? ";
|
|
|
|
$line2 = " Nice to meet you! ";
|
2021-03-25 15:24:51 +01:00
|
|
|
$rline1 = self::noSeveralSpaces(rtrim($line1));
|
|
|
|
$rline2 = self::noSeveralSpaces(rtrim($line2));
|
2021-03-24 10:53:12 +01:00
|
|
|
$this->assertSame(
|
|
|
|
"",
|
|
|
|
translateHtml(null),
|
|
|
|
"Null line"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"",
|
|
|
|
translateHtml(""),
|
|
|
|
"Empty line"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>$rline1</p>\n",
|
|
|
|
translateHtml($line1),
|
|
|
|
"Only one line"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>$rline1</p>\n",
|
|
|
|
translateHtml($line1."\n"),
|
|
|
|
"Only one line with a line feed"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>$rline1</p>\n<p>$rline2</p>\n",
|
|
|
|
translateHtml($line1."\n".$line2),
|
|
|
|
"Two lines, one line feed in between"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>$rline1</p>\n<p>$rline2</p>\n",
|
|
|
|
translateHtml("$line1\n$line2\n"),
|
|
|
|
"Two lines, one line feed after each"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function test_decoration(): void {
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong></strong></p>\n",
|
|
|
|
translateHtml(":**"),
|
|
|
|
"** Empty strong: the strongness goes until the end"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong>**</strong></p>\n",
|
|
|
|
translateHtml(":****"),
|
|
|
|
"** Two stars"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong>ok</strong></p>\n",
|
|
|
|
translateHtml(":**ok**"),
|
|
|
|
"** normal case with a word"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong>nice</strong></p>\n",
|
|
|
|
translateHtml(":**nice"),
|
|
|
|
"** a word with no end stars"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong>nice</strong></p>\n",
|
|
|
|
translateHtml(":**nice"),
|
|
|
|
"** a word with no end stars"
|
|
|
|
);
|
|
|
|
$this->assertSame(
|
|
|
|
"<p>:<strong>**one two three</strong></p>\n",
|
|
|
|
translateHtml(":****one two three"),
|
|
|
|
"** a word with no end stars"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#TODO: don't stop when problems are found, list all the faulty files
|
|
|
|
public function test_translate_html_files_with_html(): void {
|
2021-04-04 21:16:01 +02:00
|
|
|
/** NOTE: the UTF-16 files must result in the same content as UTF-8 ones.
|
|
|
|
* command to convert from UTF-8 to UTF-16: iconv -f utf8 -r utf16 text.gmi
|
|
|
|
*/
|
2021-04-04 22:23:38 +02:00
|
|
|
foreach(getFiles(dirname(__FILE__)."/files_with_html", "gmi") as $filePathname) {
|
2021-03-24 10:53:12 +01:00
|
|
|
$fileContentGmi = file_get_contents($filePathname);
|
2021-04-04 21:16:01 +02:00
|
|
|
\htmgem\io\convertToUTF8($fileContentGmi);
|
2021-03-24 10:53:12 +01:00
|
|
|
$fileContentHtml = file_get_contents($filePathname.".html");
|
|
|
|
$this->assertSame(
|
|
|
|
$fileContentHtml,
|
|
|
|
translateHtml($fileContentGmi),
|
|
|
|
"Translation to HTML: $filePathname"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-04 22:23:38 +02:00
|
|
|
public function test_line_feeds(): void {
|
|
|
|
/** NOTE: the UTF-16 files must result in the same content as UTF-8 ones.
|
|
|
|
* command to convert from UTF-8 to UTF-16: iconv -f utf8 -r utf16 text.gmi
|
|
|
|
*/
|
|
|
|
foreach(getFiles(dirname(__FILE__)."/files_with_html", "txt") as $filePathname) {
|
|
|
|
$fileContentGmi = file_get_contents($filePathname);
|
|
|
|
\htmgem\io\convertToUTF8($fileContentGmi);
|
|
|
|
$fileContentHtml = file_get_contents($filePathname.".html");
|
|
|
|
$this->assertSame(
|
|
|
|
$fileContentHtml,
|
|
|
|
translateHtml($fileContentGmi),
|
|
|
|
"Line feeds, translation to HTML: $filePathname"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-24 10:53:12 +01:00
|
|
|
}
|