Additional edge-case tests

This commit is contained in:
MarkBaker
2023-03-10 05:16:51 +01:00
parent 9c2deb125f
commit 36e9e864e6
24 changed files with 187 additions and 19 deletions
@@ -61,6 +61,8 @@ class DateDifTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerDATEDIF(): array
@@ -85,6 +87,8 @@ class DateDifTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDATEDIF(): array
@@ -85,6 +85,8 @@ class DateTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerDATE(): array
@@ -109,6 +111,8 @@ class DateTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDATE(): array
@@ -48,7 +48,7 @@ class DateValueTest extends TestCase
private function parseTemplatedExpectation(string $expectedResult): string
{
return DateValue::fromString(
return (string) DateValue::fromString(
(new DateTimeImmutable(
str_replace('Y', (new DateTimeImmutable('now'))->format('Y'), $expectedResult)
))->format('Y-m-d')
@@ -66,7 +66,8 @@ class DateValueTest extends TestCase
$expectedResult = $this->parseTemplatedExpectation($expectedResult);
}
$result = DateValue::fromString(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = DateValue::fromString(...$args);
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8);
}
@@ -112,6 +113,8 @@ class DateValueTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8);
$spreadsheet->disconnectWorksheets();
}
public function providerDATEVALUE(): array
@@ -136,6 +139,8 @@ class DateValueTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDATEVALUE(): array
@@ -38,7 +38,8 @@ class DayTest extends TestCase
*/
public function testDirectCallToDAY($expectedResultExcel, ...$args): void
{
$result = DateParts::day(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = DateParts::day(...$args);
self::assertSame($expectedResultExcel, $result);
}
@@ -76,6 +77,8 @@ class DayTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerDAY(): array
@@ -92,6 +95,7 @@ class DayTest extends TestCase
{
Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
/** @scrutinizer ignore-call */
$result = DateParts::day(...$args);
self::assertSame($expectedResultOpenOffice, $result);
}
@@ -136,6 +140,8 @@ class DayTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDAY(): array
@@ -145,6 +151,12 @@ class DayTest extends TestCase
];
}
public function testDirectCallToDAYWithNull(): void
{
$result = DateParts::day(null);
self::assertSame(0, $result);
}
/**
* @dataProvider providerDayArray
*/
@@ -23,7 +23,8 @@ class Days360Test extends TestCase
*/
public function testDirectCallToDAYS360($expectedResult, ...$args): void
{
$result = Days360::between(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = Days360::between(...$args);
self::assertSame($expectedResult, $result);
}
@@ -61,6 +62,8 @@ class Days360Test extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerDAYS360(): array
@@ -85,6 +88,8 @@ class Days360Test extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDAYS360(): array
@@ -60,6 +60,8 @@ class DaysTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerDAYS(): array
@@ -84,6 +86,8 @@ class DaysTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyDAYS(): array
@@ -58,6 +58,28 @@ class EDateTest extends TestCase
self::assertSame($expectedResult, $result);
}
/**
* @dataProvider providerEDATE
*
* @param mixed $expectedResult
*/
public function testEDATEInWorksheet($expectedResult, ...$args): void
{
$arguments = new FormulaArguments(...$args);
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$argumentCells = $arguments->populateWorksheet($worksheet);
$formula = "=EDATE({$argumentCells})";
$result = $worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerEDATE(): array
{
return require 'tests/data/Calculation/DateTime/EDATE.php';
@@ -80,6 +102,8 @@ class EDateTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyEDATE(): array
@@ -58,6 +58,28 @@ class EoMonthTest extends TestCase
self::assertSame($expectedResult, $result);
}
/**
* @dataProvider providerEOMONTH
*
* @param mixed $expectedResult
*/
public function testEOMONTHInWorksheet($expectedResult, ...$args): void
{
$arguments = new FormulaArguments(...$args);
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$argumentCells = $arguments->populateWorksheet($worksheet);
$formula = "=EOMONTH({$argumentCells})";
$result = $worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerEOMONTH(): array
{
return require 'tests/data/Calculation/DateTime/EOMONTH.php';
@@ -80,6 +102,8 @@ class EoMonthTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyEOMONTH(): array
@@ -18,7 +18,8 @@ class HourTest extends TestCase
*/
public function testDirectCallToHOUR($expectedResult, ...$args): void
{
$result = TimeParts::hour(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = TimeParts::hour(...$args);
self::assertSame($expectedResult, $result);
}
@@ -56,6 +57,8 @@ class HourTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerHOUR(): array
@@ -80,6 +83,8 @@ class HourTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyHOUR(): array
@@ -39,7 +39,8 @@ class IsoWeekNumTest extends TestCase
*/
public function testDirectCallToISOWEEKNUM($expectedResult, ...$args): void
{
$result = Week::isoWeekNumber(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = Week::isoWeekNumber(...$args);
self::assertSame($expectedResult, $result);
}
@@ -60,6 +61,28 @@ class IsoWeekNumTest extends TestCase
self::assertSame($expectedResult, $result);
}
/**
* @dataProvider providerISOWEEKNUM
*
* @param mixed $expectedResult
*/
public function testISOWEEKNUMInWorksheet($expectedResult, ...$args): void
{
$arguments = new FormulaArguments(...$args);
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$argumentCells = $arguments->populateWorksheet($worksheet);
$formula = "=ISOWEEKNUM({$argumentCells})";
$result = $worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerISOWEEKNUM(): array
{
return require 'tests/data/Calculation/DateTime/ISOWEEKNUM.php';
@@ -82,6 +105,8 @@ class IsoWeekNumTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyISOWEEKNUM(): array
@@ -100,6 +125,7 @@ class IsoWeekNumTest extends TestCase
{
SharedDate::setExcelCalendar(SharedDate::CALENDAR_MAC_1904);
/** @scrutinizer ignore-call */
$result = Week::isoWeekNumber(...$args);
self::assertSame($expectedResult, $result);
}
@@ -18,7 +18,8 @@ class MinuteTest extends TestCase
*/
public function testDirectCallToMINUTE($expectedResult, ...$args): void
{
$result = TimeParts::MINUTE(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = TimeParts::MINUTE(...$args);
self::assertSame($expectedResult, $result);
}
@@ -56,6 +57,8 @@ class MinuteTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerMINUTE(): array
@@ -80,6 +83,8 @@ class MinuteTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyMINUTE(): array
@@ -18,7 +18,8 @@ class MonthTest extends TestCase
*/
public function testDirectCallToMONTH($expectedResultExcel, ...$args): void
{
$result = DateParts::month(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = DateParts::month(...$args);
self::assertSame($expectedResultExcel, $result);
}
@@ -56,6 +57,8 @@ class MonthTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerMONTH(): array
@@ -80,6 +83,8 @@ class MonthTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyMONTH(): array
@@ -55,6 +55,8 @@ class NetworkDaysTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerNETWORKDAYS(): array
@@ -79,6 +81,8 @@ class NetworkDaysTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyNETWORKDAYS(): array
@@ -17,7 +17,8 @@ class SecondTest extends TestCase
*/
public function testDirectCallToSECOND($expectedResult, ...$args): void
{
$result = TimeParts::second(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = TimeParts::second(...$args);
self::assertSame($expectedResult, $result);
}
@@ -55,6 +56,8 @@ class SecondTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerSECOND(): array
@@ -79,6 +82,8 @@ class SecondTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappySECOND(): array
@@ -89,6 +89,8 @@ class TimeTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyTIME(): array
@@ -38,7 +38,8 @@ class TimeValueTest extends TestCase
*/
public function testDirectCallToTIMEVALUE($expectedResult, ...$args): void
{
$result = TimeValue::fromString(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = TimeValue::fromString(...$args);
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8);
}
@@ -76,6 +77,8 @@ class TimeValueTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8);
$spreadsheet->disconnectWorksheets();
}
public function providerTIMEVALUE(): array
@@ -122,6 +125,8 @@ class TimeValueTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyTIMEVALUE(): array
@@ -37,7 +37,8 @@ class WeekDayTest extends TestCase
*/
public function testDirectCallToWEEKDAY($expectedResult, ...$args): void
{
$result = Week::day(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = Week::day(...$args);
self::assertSame($expectedResult, $result);
}
@@ -75,6 +76,8 @@ class WeekDayTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerWEEKDAY(): array
@@ -99,6 +102,8 @@ class WeekDayTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyWEEKDAY(): array
@@ -38,7 +38,8 @@ class WeekNumTest extends TestCase
*/
public function testDirectCallToWEEKNUM($expectedResult, ...$args): void
{
$result = Week::number(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = Week::number(...$args);
self::assertSame($expectedResult, $result);
}
@@ -76,6 +77,8 @@ class WeekNumTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerWEEKNUM(): array
@@ -100,6 +103,8 @@ class WeekNumTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyWEEKNUM(): array
@@ -118,6 +123,7 @@ class WeekNumTest extends TestCase
{
SharedDate::setExcelCalendar(SharedDate::CALENDAR_MAC_1904);
/** @scrutinizer ignore-call */
$result = Week::number(...$args);
self::assertSame($expectedResult, $result);
}
@@ -55,6 +55,8 @@ class WorkDayTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerWORKDAY(): array
@@ -79,6 +81,8 @@ class WorkDayTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyWORKDAY(): array
@@ -56,6 +56,8 @@ class YearFracTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertEqualsWithDelta($expectedResult, $result, 1.0e-6);
$spreadsheet->disconnectWorksheets();
}
public function providerYEARFRAC(): array
@@ -80,6 +82,8 @@ class YearFracTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyYEARFRAC(): array
@@ -17,7 +17,8 @@ class YearTest extends TestCase
*/
public function testDirectCallToYEAR($expectedResultExcel, ...$args): void
{
$result = DateParts::year(/** @scrutinizer ignore-type */ ...$args);
/** @scrutinizer ignore-call */
$result = DateParts::year(...$args);
self::assertSame($expectedResultExcel, $result);
}
@@ -55,6 +56,8 @@ class YearTest extends TestCase
->getCell('A1')
->getCalculatedValue();
self::assertSame($expectedResult, $result);
$spreadsheet->disconnectWorksheets();
}
public function providerYEAR(): array
@@ -79,6 +82,8 @@ class YearTest extends TestCase
$worksheet->setCellValue('A1', $formula)
->getCell('A1')
->getCalculatedValue();
$spreadsheet->disconnectWorksheets();
}
public function providerUnhappyYEAR(): array
@@ -52,7 +52,7 @@ class FormulaArguments
{
$columns = [];
foreach ($value as $column) {
$columns[] = self::stringify($column);
$columns[] = $this->stringify($column);
}
return implode(',', $columns);
@@ -66,9 +66,9 @@ class FormulaArguments
$matrix = [];
foreach ($value as $row) {
if (is_array($row)) {
$matrix[] = self::matrixRows($row);
$matrix[] = $this->matrixRows($row);
} else {
$matrix[] = self::stringify($row);
$matrix[] = $this->stringify($row);
}
}
@@ -81,7 +81,7 @@ class FormulaArguments
private function stringify($value): string
{
if (is_array($value)) {
return '{' . self::makeMatrix($value) . '}';
return '{' . $this->makeMatrix($value) . '}';
} elseif (null === $value) {
return '';
} elseif (is_string($value)) {