TextData Coverage and Minor Bug Fixes (#1744)

This had been intended to get 100% coverage for TextData functions, and it does that.
However, some minor bugs requiring source changes arose during testing.
- the Excel CHAR function restricts its argument to 1-255. PhpSpreadsheet CHARACTER
  had been allowing 0+. Also, there is no need to test if iconv exists,
  since it is part of Composer requirements.
- The DOLLAR function had been returning NUM for invalid arguments. Excel returns VALUE.
  Also, negative amounts were not being handled correctly.
- The FIXEDFORMAT function had been returning NUM for invalid arguments. Excel FIXED returns VALUE.
This commit is contained in:
oleibman 2020-12-10 09:35:26 -08:00 committed by GitHub
parent 78774d6ac8
commit 957cb62dab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 82 additions and 18 deletions

View File

@ -27,17 +27,17 @@ class TextData
{
$character = Functions::flattenSingleValue($character);
if ((!is_numeric($character)) || ($character < 0)) {
if (!is_numeric($character)) {
return Functions::VALUE();
}
$character = (int) $character;
if ($character < 1 || $character > 255) {
return Functions::VALUE();
}
if (function_exists('iconv')) {
return iconv('UCS-4LE', 'UTF-8', pack('V', $character));
}
return mb_convert_encoding('&#' . (int) $character . ';', 'UTF-8', 'HTML-ENTITIES');
}
/**
* TRIMNONPRINTABLE.
*
@ -160,7 +160,7 @@ class TextData
// Validate parameters
if (!is_numeric($value) || !is_numeric($decimals)) {
return Functions::NAN();
return Functions::VALUE();
}
$decimals = floor($decimals);
@ -174,6 +174,7 @@ class TextData
}
$value = MathTrig::MROUND($value, $round);
}
$mask = "$mask;($mask)";
return NumberFormat::toFormattedString($value, $mask);
}
@ -265,7 +266,7 @@ class TextData
// Validate parameters
if (!is_numeric($value) || !is_numeric($decimals)) {
return Functions::NAN();
return Functions::VALUE();
}
$decimals = (int) floor($decimals);

View File

@ -9,6 +9,10 @@ return [
'#VALUE!',
-5,
],
[
'#VALUE!',
0,
],
[
'A',
65,
@ -22,27 +26,39 @@ return [
126,
],
[
'⽇',
'Á',
193,
],
[
'ÿ',
255,
],
[
'#VALUE!',
256,
],
[
'#VALUE!', // '⽇',
12103,
],
[
'œ',
'#VALUE!', // 'œ',
0x153,
],
[
'ƒ',
'#VALUE!', // 'ƒ',
0x192,
],
[
'℅',
'#VALUE!', // '℅',
0x2105,
],
[
'∑',
'#VALUE!', // '∑',
0x2211,
],
[
'†',
'#VALUE!', // '†',
0x2020,
],
];

View File

@ -6,11 +6,20 @@ return [
123.456,
2,
],
[
'$123.46',
123.456,
],
[
'$123.32',
123.321,
2,
],
[
'($123.32)',
-123.321,
2,
],
[
'$1,235,000',
1234567,
@ -22,12 +31,17 @@ return [
-5,
],
[
'#NUM!',
'($1,200,000)',
-1234567,
-5,
],
[
'#VALUE!',
'ABC',
2,
],
[
'#NUM!',
'#VALUE!',
123.456,
'ABC',
],

View File

@ -20,13 +20,41 @@ return [
true,
],
[
'#NUM!',
'-123456.79',
-123456.789,
2,
true,
],
[
'123500',
123456.789,
-2,
true,
],
[
'123,500',
123456.789,
-2,
],
[
'-123500',
-123456.789,
-2,
true,
],
[
'-123,500',
-123456.789,
-2,
],
[
'#VALUE!',
'ABC',
2,
null,
],
[
'#NUM!',
'#VALUE!',
123.456,
'ABC',
null,

View File

@ -54,6 +54,11 @@ return [
'Mark Baker',
2,
],
[
1,
'',
'Mark Baker',
],
[
'#VALUE!',
'BITE',