mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-08-31 04:28:51 +00:00
270 lines
9.7 KiB
PHP
270 lines
9.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Helper;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Helper\TextGrid;
|
|
use PhpOffice\PhpSpreadsheet\Helper\TextGridRightAlign;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class TextGridTest extends TestCase
|
|
{
|
|
/** @param mixed[] $expected */
|
|
#[DataProvider('providerTextGrid')]
|
|
public function testTextGrid(
|
|
bool $cli,
|
|
bool $rowDividers,
|
|
bool $rowHeaders,
|
|
bool $columnHeaders,
|
|
array $expected
|
|
): void {
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->fromArray([
|
|
[6, '=TEXT(A1,"yyyy-mm-dd hh:mm")', null, 0.572917],
|
|
['="6"', '=TEXT(A2,"yyyy-mm-dd hh:mm")', null, '1<>2'],
|
|
['xyz', '=TEXT(A3,"yyyy-mm-dd hh:mm")'],
|
|
], strictNullComparison: true);
|
|
/** @var mixed[][] */
|
|
$temp = $sheet->toArray(null, true, true, true);
|
|
$textGrid = new TextGrid(
|
|
$temp,
|
|
$cli,
|
|
rowDividers: $rowDividers,
|
|
rowHeaders: $rowHeaders,
|
|
columnHeaders: $columnHeaders
|
|
);
|
|
$result = $textGrid->render();
|
|
// Note that, for cli, string will end with PHP_EOL,
|
|
// so explode will add an extra null-string element
|
|
// to its array output.
|
|
$lines = explode(PHP_EOL, $result);
|
|
self::assertSame($expected, $lines);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public static function providerTextGrid(): array
|
|
{
|
|
return [
|
|
'cli default values' => [
|
|
true, false, true, true,
|
|
[
|
|
' +-----+------------------+---+----------+',
|
|
' | A | B | C | D |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'| 1 | 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'| 2 | 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'| 3 | xyz | xyz | | |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'',
|
|
],
|
|
],
|
|
'html default values' => [
|
|
false, false, true, true,
|
|
[
|
|
'<pre>',
|
|
' +-----+------------------+---+----------+',
|
|
' | A | B | C | D |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'| 1 | 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'| 2 | 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'| 3 | xyz | xyz | | |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'</pre>',
|
|
],
|
|
],
|
|
'cli rowDividers' => [
|
|
true, true, true, true,
|
|
[
|
|
' +-----+------------------+---+----------+',
|
|
' | A | B | C | D |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'| 1 | 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'| 2 | 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'| 3 | xyz | xyz | | |',
|
|
'+---+-----+------------------+---+----------+',
|
|
'',
|
|
],
|
|
],
|
|
'cli no columnHeaders' => [
|
|
true, false, true, false,
|
|
[
|
|
'+---+-----+------------------+--+----------+',
|
|
'| 1 | 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'| 2 | 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'| 3 | xyz | xyz | | |',
|
|
'+---+-----+------------------+--+----------+',
|
|
'',
|
|
],
|
|
],
|
|
'cli no row headers' => [
|
|
true, false, false, true,
|
|
[
|
|
'+-----+------------------+---+----------+',
|
|
'| A | B | C | D |',
|
|
'+-----+------------------+---+----------+',
|
|
'| 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'| 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'| xyz | xyz | | |',
|
|
'+-----+------------------+---+----------+',
|
|
'',
|
|
],
|
|
],
|
|
'cli row dividers, no row nor column headers' => [
|
|
true, true, false, false,
|
|
[
|
|
'+-----+------------------+--+----------+',
|
|
'| 6 | 1900-01-06 00:00 | | 0.572917 |',
|
|
'+-----+------------------+--+----------+',
|
|
'| 6 | 1900-01-06 00:00 | | 1<>2 |',
|
|
'+-----+------------------+--+----------+',
|
|
'| xyz | xyz | | |',
|
|
'+-----+------------------+--+----------+',
|
|
'',
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
public function testBool(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->fromArray([
|
|
[0, 1],
|
|
[true, false],
|
|
[true, true],
|
|
], strictNullComparison: true);
|
|
/** @var mixed[][] */
|
|
$temp = $sheet->toArray(null, true, false, true);
|
|
$textGrid = new TextGrid(
|
|
$temp,
|
|
true,
|
|
rowDividers: false,
|
|
rowHeaders: false,
|
|
columnHeaders: false,
|
|
);
|
|
$expected = [
|
|
'+------+-------+',
|
|
'| 0 | 1 |',
|
|
'| TRUE | FALSE |',
|
|
'| TRUE | TRUE |',
|
|
'+------+-------+',
|
|
'',
|
|
];
|
|
$result = $textGrid->render();
|
|
$lines = explode(PHP_EOL, $result);
|
|
self::assertSame($expected, $lines);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testNumbersDefault(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->fromArray([
|
|
[0, 1, 'string1'],
|
|
[18, 13.25, 'string2'],
|
|
[100, 2.5, 'string12'],
|
|
], strictNullComparison: true);
|
|
$sheet->getStyle('B1:B3')->getNumberFormat()
|
|
->setFormatCode('0.00');
|
|
/** @var mixed[][] */
|
|
$temp = $sheet->toArray(null, true, true, true);
|
|
$textGrid = new TextGrid(
|
|
$temp,
|
|
true,
|
|
rowDividers: false,
|
|
rowHeaders: false,
|
|
columnHeaders: false,
|
|
);
|
|
$expected = [
|
|
'+-----+-------+----------+',
|
|
'| 0 | 1.00 | string1 |',
|
|
'| 18 | 13.25 | string2 |',
|
|
'| 100 | 2.50 | string12 |',
|
|
'+-----+-------+----------+',
|
|
'',
|
|
];
|
|
$result = $textGrid->render();
|
|
$lines = explode(PHP_EOL, $result);
|
|
self::assertSame($expected, $lines);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testNumbersRight(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->fromArray([
|
|
[0, 1, '$1,234.56'],
|
|
[18, 13.25, 'string2'],
|
|
[100, 2.5, 'string123456'],
|
|
], strictNullComparison: true);
|
|
$sheet->getStyle('B1:B3')->getNumberFormat()
|
|
->setFormatCode('0.00');
|
|
/** @var mixed[][] */
|
|
$temp = $sheet->toArray(null, true, true, true);
|
|
$textGrid = new TextGrid(
|
|
$temp,
|
|
true,
|
|
rowDividers: false,
|
|
rowHeaders: false,
|
|
columnHeaders: false,
|
|
numbersRight: TextGridRightAlign::numeric,
|
|
);
|
|
$expected = [
|
|
'+-----+-------+--------------+',
|
|
'| 0 | 1.00 | $1,234.56 |',
|
|
'| 18 | 13.25 | string2 |',
|
|
'| 100 | 2.50 | string123456 |',
|
|
'+-----+-------+--------------+',
|
|
'',
|
|
];
|
|
$result = $textGrid->render();
|
|
$lines = explode(PHP_EOL, $result);
|
|
self::assertSame($expected, $lines);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testExtendedNumbersRight(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->fromArray([
|
|
[0, 1, '$1,234.56'],
|
|
[18, 13.25, 'string2'],
|
|
[100, 2.5, 'string123456'],
|
|
], strictNullComparison: true);
|
|
$sheet->getStyle('B1:B3')->getNumberFormat()
|
|
->setFormatCode('0.00');
|
|
/** @var mixed[][] */
|
|
$temp = $sheet->toArray(null, true, true, true);
|
|
$textGrid = new TextGridExtended(
|
|
$temp,
|
|
true,
|
|
rowDividers: false,
|
|
rowHeaders: false,
|
|
columnHeaders: false,
|
|
);
|
|
$textGrid->setNumbersRight(TextGridRightAlign::numeric);
|
|
$expected = [
|
|
'+-----+-------+--------------+',
|
|
'| 0 | 1.00 | $1,234.56 |',
|
|
'| 18 | 13.25 | string2 |',
|
|
'| 100 | 2.50 | string123456 |',
|
|
'+-----+-------+--------------+',
|
|
'',
|
|
];
|
|
$result = $textGrid->render();
|
|
$lines = explode(PHP_EOL, $result);
|
|
self::assertSame($expected, $lines);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|