'',
'end' => '',
'break' => '
',
'links' => false,
'flowed' => false,
'delsp' => false,
'wrap' => false,
'space' => '_', // replace UTF-8 non-breaking space for simpler testing
'nobr_start' => '>',
'nobr_end' => '<',
];
$data[] = [" aaaa", ">_aaaa<", $options];
$data[] = ["aa>aa", ">aa>aa<", $options];
$data[] = ["aaaa aaaa", ">aaaa_aaaa<", $options];
$data[] = ["aaaa aaaa", ">aaaa__aaaa<", $options];
$data[] = ["aaaa aaaa", ">aaaa___aaaa<", $options];
$data[] = ["aaaa\taaaa", ">aaaa____aaaa<", $options];
$data[] = ["aaaa\naaaa", "aaaa
aaaa", $options];
$data[] = ["aaaa\n aaaa", "aaaa
>_aaaa<", $options];
$data[] = ["aaaa\n aaaa", "aaaa
>__aaaa<", $options];
$data[] = ["aaaa\n aaaa", "aaaa
>___aaaa<", $options];
$data[] = ["\n", "
", $options];
$data[] = ["\taaaa", ">____aaaa<", $options];
$data[] = ["\naaaa", "
aaaa", $options];
$data[] = ["\n aaaa", "
>_aaaa<", $options];
$data[] = ["\n aaaa", "
>__aaaa<", $options];
$data[] = ["\n aaaa", "
>___aaaa<", $options];
$data[] = ["aaaa\n\nbbbb", "aaaa
bbbb", $options];
$data[] = [">aaaa \n>aaaa", "
>aaaa_<", $options]; $data[] = [">aaaa\n>aaaa", "
aaaa
aaaa", $options]; $data[] = [">aaaa \n>bbbb\ncccc dddd", "
aaaa
>aaaa_<>cccc_dddd<", $options]; $data[] = ["aaaa-bbbb/cccc", ">aaaa-bbbb/cccc<", $options]; $data[] = ["aaaa-bbbb\r\tcccc", ">aaaa-bbbb____cccc<", $options]; $options['flowed'] = true; $data[] = [" aaaa", "aaaa", $options]; $data[] = ["aaaa aaaa", ">aaaa_aaaa<", $options]; $data[] = ["aaaa aaaa", ">aaaa__aaaa<", $options]; $data[] = ["aaaa aaaa", ">aaaa___aaaa<", $options]; $data[] = ["aaaa\taaaa", ">aaaa____aaaa<", $options]; $data[] = ["aaaa\naaaa", "aaaa
bbbb
aaaa aaaa", $options]; $data[] = [">aaaa\n>aaaa", "
aaaa", $options]; $data[] = [">aaaa \n>bbbb\ncccc dddd", "
aaaa
aaaa bbbb>cccc_dddd<", $options]; $data[] = ["\x02\x03", ">\x02\x03<", $options]; $options['flowed'] = true; $options['delsp'] = true; $data[] = [" aaaa", "aaaa", $options]; $data[] = ["aaaa aaaa", ">aaaa_aaaa<", $options]; $data[] = ["aaaa aaaa", ">aaaa__aaaa<", $options]; $data[] = ["aaaa aaaa", ">aaaa___aaaa<", $options]; $data[] = ["aaaa\taaaa", ">aaaa____aaaa<", $options]; $data[] = ["aaaa\naaaa", "aaaa
aaaaaaaa", $options]; $data[] = [">aaaa\n>aaaa", "
aaaa", $options]; $data[] = [">aaaa \n>bbbb\ncccc dddd", "
aaaa
aaaabbbb>cccc_dddd<", $options]; $options['flowed'] = false; $options['delsp'] = false; $options['wrap'] = true; $data[] = [">>aaaa bbbb\n>>\n>>>\n>cccc\n\ndddd eeee", "
aaaa bbbbcccc
aaaa
bbbb
cccc
", $options]; return $data; } /** * Test text to html conversion * * @dataProvider data_text2html */ function test_text2html($input, $output, $options) { $t2h = new rcube_text2html($input, false, $options); $html = $t2h->get_html(); $this->assertEquals($output, $html); } /** * Test XSS issue */ function test_text2html_xss() { $input = "\n[]:##str_replacement_0##\n"; $t2h = new rcube_text2html($input); $html = $t2h->get_html(); $expected = "test
Test2 [1]' . "
\n
\n" . '[1] http://d2.tld