From 1fe3626dac6eada2858509770ce195aa9ee173a2 Mon Sep 17 00:00:00 2001 From: Blacknife Date: Sat, 23 Nov 2024 11:12:34 +0300 Subject: [PATCH 01/21] fix `Conditional formatting a cell` documentation --- docs/topics/recipes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/recipes.md b/docs/topics/recipes.md index b5a392703..8b27155d9 100644 --- a/docs/topics/recipes.md +++ b/docs/topics/recipes.md @@ -1293,8 +1293,8 @@ style object: ```php $spreadsheet->getActiveSheet() - ->duplicateStyle( - $spreadsheet->getActiveSheet()->getStyle('B2'), + ->duplicateConditionalStyle( + $spreadsheet->getActiveSheet()->getConditionalStyles('B2'), 'B3:B7' ); ``` From d647fe7ee7d4264a875b7393d0c836cf277110d3 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:56:26 -0800 Subject: [PATCH 02/21] Use Php Attributes Rather than Annotations for PhpUnit With PhpUnit 10 came the ability to use Php attributes rather than doc-block annotations for things like "data provider". PhpUnit 11 deprecates the use of annotations, and PhpUnit 12 will not not permit their use. Since PhpUnit 11 requires Php8.2+, we cannot adopt it as long as we support Php8.1, which will continue to be the case for some time. However, there is no penalty for early adoption. Php-cs-fixer can use: ``` 'php_unit_attributes' => ['keep_annotations' => false], ``` This allows us to run `composer fix` to automate all the needed changes. No manual changes were needed for any of the test members. With this change, PhpUnit 9 can no longer be used with the test suite. File composer.json is updated to reflect that reality, and phpunit9.xml.dist, which has been supplied in case anyone needed to use PhpUnit 9, is no longer required, and is thus deleted. For now, PhpUnit 11 is not being added as a possibility. No source code is changed in this PR. --- .php-cs-fixer.dist.php | 1 + CONTRIBUTING.md | 2 +- composer.json | 2 +- phpunit.xml.dist | 1 + phpunit9.xml.dist | 15 ---- .../Calculation/ArrayFormulaTest.php | 4 +- .../Calculation/BinaryComparisonTest.php | 4 +- .../CalculationFunctionListTest.php | 4 +- .../Calculation/CalculationSettingsTest.php | 4 +- .../Calculation/CalculationTest.php | 7 +- .../DefinedNamesCalculationTest.php | 16 ++--- .../Engine/FormattedNumberSlashTest.php | 12 +--- .../Engine/FormattedNumberTest.php | 16 ++--- .../Calculation/Engine/RangeTest.php | 15 ++-- .../Engine/StructuredReferenceSlashTest.php | 8 +-- .../Engine/StructuredReferenceTest.php | 8 +-- .../Calculation/FormulaAsStringTest.php | 4 +- .../Calculation/FormulaParserTest.php | 4 +- .../Functions/Database/DAverageTest.php | 8 +-- .../Functions/Database/DCountATest.php | 8 +-- .../Functions/Database/DCountTest.php | 8 +-- .../Functions/Database/DGetTest.php | 8 +-- .../Functions/Database/DMaxTest.php | 8 +-- .../Functions/Database/DMinTest.php | 8 +-- .../Functions/Database/DProductTest.php | 8 +-- .../Functions/Database/DStDevPTest.php | 8 +-- .../Functions/Database/DStDevTest.php | 8 +-- .../Functions/Database/DSumTest.php | 8 +-- .../Functions/Database/DVarPTest.php | 8 +-- .../Functions/Database/DVarTest.php | 8 +-- .../Functions/DateTime/DateDifTest.php | 20 ++---- .../Functions/DateTime/DateTest.php | 24 ++----- .../Functions/DateTime/DateValueTest.php | 20 ++---- .../Functions/DateTime/DayTest.php | 28 ++------ .../Functions/DateTime/Days360Test.php | 20 ++---- .../Functions/DateTime/DaysTest.php | 20 ++---- .../Functions/DateTime/EDateTest.php | 20 ++---- .../Functions/DateTime/EoMonthTest.php | 20 ++---- .../Functions/DateTime/HourTest.php | 20 ++---- .../Functions/DateTime/IsoWeekNumTest.php | 24 ++----- .../Functions/DateTime/MinuteTest.php | 20 ++---- .../Functions/DateTime/MonthTest.php | 20 ++---- .../Functions/DateTime/NetworkDaysTest.php | 20 ++---- .../Functions/DateTime/SecondTest.php | 20 ++---- .../Functions/DateTime/TimeTest.php | 20 ++---- .../Functions/DateTime/TimeValueTest.php | 20 ++---- .../Functions/DateTime/WeekDayTest.php | 20 ++---- .../Functions/DateTime/WeekNumTest.php | 24 ++----- .../Functions/DateTime/WorkDayTest.php | 20 ++---- .../Functions/DateTime/YearFracTest.php | 20 ++---- .../Functions/DateTime/YearTest.php | 20 ++---- .../Functions/Engineering/BesselITest.php | 20 ++---- .../Functions/Engineering/BesselJTest.php | 20 ++---- .../Functions/Engineering/BesselKTest.php | 20 ++---- .../Functions/Engineering/BesselYTest.php | 20 ++---- .../Functions/Engineering/Bin2DecTest.php | 24 ++----- .../Functions/Engineering/Bin2HexTest.php | 24 ++----- .../Functions/Engineering/Bin2OctTest.php | 24 ++----- .../Functions/Engineering/BitAndTest.php | 20 ++---- .../Functions/Engineering/BitLShiftTest.php | 20 ++---- .../Functions/Engineering/BitOrTest.php | 20 ++---- .../Functions/Engineering/BitRShiftTest.php | 20 ++---- .../Functions/Engineering/BitXorTest.php | 20 ++---- .../Functions/Engineering/ComplexTest.php | 16 ++--- .../Functions/Engineering/ConvertUoMTest.php | 20 ++---- .../Functions/Engineering/Dec2BinTest.php | 24 ++----- .../Functions/Engineering/Dec2HexTest.php | 24 ++----- .../Functions/Engineering/Dec2OctTest.php | 24 ++----- .../Functions/Engineering/DeltaTest.php | 20 ++---- .../Functions/Engineering/ErfCTest.php | 20 ++---- .../Functions/Engineering/ErfPreciseTest.php | 16 ++--- .../Functions/Engineering/ErfTest.php | 20 ++---- .../Functions/Engineering/GeStepTest.php | 20 ++---- .../Functions/Engineering/Hex2BinTest.php | 24 ++----- .../Functions/Engineering/Hex2DecTest.php | 24 ++----- .../Functions/Engineering/Hex2OctTest.php | 24 ++----- .../Functions/Engineering/ImAbsTest.php | 20 ++---- .../Functions/Engineering/ImArgumentTest.php | 16 ++--- .../Functions/Engineering/ImConjugateTest.php | 20 ++---- .../Functions/Engineering/ImCosTest.php | 20 ++---- .../Functions/Engineering/ImCoshTest.php | 20 ++---- .../Functions/Engineering/ImCotTest.php | 20 ++---- .../Functions/Engineering/ImCscTest.php | 20 ++---- .../Functions/Engineering/ImCschTest.php | 20 ++---- .../Functions/Engineering/ImDivTest.php | 20 ++---- .../Functions/Engineering/ImExpTest.php | 20 ++---- .../Functions/Engineering/ImLnTest.php | 20 ++---- .../Functions/Engineering/ImLog10Test.php | 20 ++---- .../Functions/Engineering/ImLog2Test.php | 20 ++---- .../Functions/Engineering/ImPowerTest.php | 20 ++---- .../Functions/Engineering/ImProductTest.php | 15 ++-- .../Functions/Engineering/ImRealTest.php | 20 ++---- .../Functions/Engineering/ImSecTest.php | 20 ++---- .../Functions/Engineering/ImSechTest.php | 20 ++---- .../Functions/Engineering/ImSinTest.php | 20 ++---- .../Functions/Engineering/ImSinhTest.php | 20 ++---- .../Functions/Engineering/ImSqrtTest.php | 20 ++---- .../Functions/Engineering/ImSubTest.php | 20 ++---- .../Functions/Engineering/ImSumTest.php | 15 ++-- .../Functions/Engineering/ImTanTest.php | 20 ++---- .../Functions/Engineering/ImaginaryTest.php | 20 ++---- .../Functions/Engineering/Oct2BinTest.php | 24 ++----- .../Functions/Engineering/Oct2DecTest.php | 24 ++----- .../Functions/Engineering/Oct2HexTest.php | 24 ++----- .../Functions/Financial/AccrintMTest.php | 4 +- .../Functions/Financial/AccrintTest.php | 4 +- .../Functions/Financial/AmorDegRcTest.php | 4 +- .../Functions/Financial/AmorLincTest.php | 4 +- .../Functions/Financial/CoupDayBsTest.php | 4 +- .../Functions/Financial/CoupDaysNcTest.php | 4 +- .../Functions/Financial/CoupDaysTest.php | 4 +- .../Functions/Financial/CoupNcdTest.php | 4 +- .../Functions/Financial/CoupNumTest.php | 4 +- .../Functions/Financial/CoupPcdTest.php | 4 +- .../Functions/Financial/CumIpmtTest.php | 4 +- .../Functions/Financial/CumPrincTest.php | 4 +- .../Functions/Financial/DbTest.php | 4 +- .../Functions/Financial/DdbTest.php | 4 +- .../Functions/Financial/DiscTest.php | 4 +- .../Functions/Financial/DollarDeTest.php | 8 +-- .../Functions/Financial/DollarFrTest.php | 4 +- .../Functions/Financial/EffectTest.php | 4 +- .../Functions/Financial/FvScheduleTest.php | 4 +- .../Functions/Financial/FvTest.php | 4 +- .../Functions/Financial/HelpersTest.php | 4 +- .../Functions/Financial/IPmtTest.php | 4 +- .../Functions/Financial/IntRateTest.php | 4 +- .../Functions/Financial/IrrTest.php | 4 +- .../Functions/Financial/IsPmtTest.php | 4 +- .../Functions/Financial/MirrTest.php | 4 +- .../Functions/Financial/NPerTest.php | 4 +- .../Functions/Financial/NominalTest.php | 4 +- .../Functions/Financial/NpvTest.php | 4 +- .../Functions/Financial/PDurationTest.php | 4 +- .../Functions/Financial/PmtTest.php | 4 +- .../Functions/Financial/PpmtTest.php | 4 +- .../Functions/Financial/PriceDiscTest.php | 4 +- .../Functions/Financial/PriceMatTest.php | 4 +- .../Functions/Financial/PriceTest.php | 8 +-- .../Functions/Financial/PvTest.php | 4 +- .../Functions/Financial/RateTest.php | 4 +- .../Functions/Financial/ReceivedTest.php | 4 +- .../Functions/Financial/RriTest.php | 4 +- .../Functions/Financial/SlnTest.php | 4 +- .../Functions/Financial/SydTest.php | 4 +- .../Functions/Financial/TBillEqTest.php | 4 +- .../Functions/Financial/TBillPriceTest.php | 4 +- .../Functions/Financial/TBillYieldTest.php | 4 +- .../Functions/Financial/UsDollarTest.php | 4 +- .../Functions/Financial/XNpvTest.php | 4 +- .../Functions/Financial/XirrTest.php | 4 +- .../Functions/Financial/YieldDiscTest.php | 4 +- .../Functions/Financial/YieldMatTest.php | 4 +- .../Functions/Information/ErrorTypeTest.php | 8 +-- .../Functions/Information/IsBlankTest.php | 8 +-- .../Functions/Information/IsErrTest.php | 8 +-- .../Functions/Information/IsErrorTest.php | 8 +-- .../Functions/Information/IsEvenTest.php | 8 +-- .../Functions/Information/IsLogicalTest.php | 8 +-- .../Functions/Information/IsNaTest.php | 8 +-- .../Functions/Information/IsNonTextTest.php | 8 +-- .../Functions/Information/IsNumberTest.php | 8 +-- .../Functions/Information/IsOddTest.php | 8 +-- .../Functions/Information/IsTextTest.php | 8 +-- .../Functions/Information/NTest.php | 4 +- .../Functions/Information/TypeTest.php | 4 +- .../Calculation/Functions/Logical/AndTest.php | 8 +-- .../Functions/Logical/IfErrorTest.php | 8 +-- .../Functions/Logical/IfNaTest.php | 8 +-- .../Calculation/Functions/Logical/IfTest.php | 4 +- .../Calculation/Functions/Logical/IfsTest.php | 8 +-- .../Calculation/Functions/Logical/NotTest.php | 8 +-- .../Calculation/Functions/Logical/OrTest.php | 8 +-- .../Functions/Logical/SwitchTest.php | 8 +-- .../Calculation/Functions/Logical/XorTest.php | 8 +-- .../LookupRef/AddressInternationalTest.php | 8 +-- .../Functions/LookupRef/AddressTest.php | 8 +-- .../Functions/LookupRef/ChooseTest.php | 8 +-- .../LookupRef/ColumnOnSpreadsheetTest.php | 4 +- .../Functions/LookupRef/ColumnTest.php | 4 +- .../LookupRef/ColumnsOnSpreadsheetTest.php | 4 +- .../Functions/LookupRef/ColumnsTest.php | 8 +-- .../Functions/LookupRef/FormulaTextTest.php | 4 +- .../Functions/LookupRef/HLookupTest.php | 12 +--- .../Functions/LookupRef/HyperlinkTest.php | 8 +-- .../LookupRef/IndexOnSpreadsheetTest.php | 8 +-- .../Functions/LookupRef/IndexTest.php | 8 +-- .../LookupRef/IndirectInternationalTest.php | 12 +--- .../Functions/LookupRef/IndirectTest.php | 8 +-- .../Functions/LookupRef/LookupTest.php | 8 +-- .../Functions/LookupRef/MatchTest.php | 12 +--- .../LookupRef/MatrixHelperFunctionsTest.php | 8 +-- .../Functions/LookupRef/OffsetTest.php | 4 +- .../LookupRef/RowOnSpreadsheetTest.php | 4 +- .../Functions/LookupRef/RowTest.php | 4 +- .../LookupRef/RowsOnSpreadsheetTest.php | 4 +- .../Functions/LookupRef/RowsTest.php | 8 +-- .../Functions/LookupRef/SortByTest.php | 8 +-- .../Functions/LookupRef/SortTest.php | 16 ++--- .../Functions/LookupRef/TransposeTest.php | 4 +- .../Functions/LookupRef/UniqueTest.php | 4 +- .../Functions/LookupRef/VLookupTest.php | 8 +-- .../Functions/MathTrig/AbsTest.php | 8 +-- .../Functions/MathTrig/AcosTest.php | 8 +-- .../Functions/MathTrig/AcoshTest.php | 8 +-- .../Functions/MathTrig/AcotTest.php | 8 +-- .../Functions/MathTrig/AcothTest.php | 8 +-- .../Functions/MathTrig/ArabicTest.php | 8 +-- .../Functions/MathTrig/AsinTest.php | 8 +-- .../Functions/MathTrig/AsinhTest.php | 8 +-- .../Functions/MathTrig/Atan2Test.php | 8 +-- .../Functions/MathTrig/AtanTest.php | 8 +-- .../Functions/MathTrig/AtanhTest.php | 8 +-- .../Functions/MathTrig/BaseTest.php | 8 +-- .../Functions/MathTrig/CeilingMathTest.php | 8 +-- .../Functions/MathTrig/CeilingPreciseTest.php | 8 +-- .../Functions/MathTrig/CeilingTest.php | 8 +-- .../Functions/MathTrig/CombinATest.php | 8 +-- .../Functions/MathTrig/CombinTest.php | 8 +-- .../Functions/MathTrig/CosTest.php | 8 +-- .../Functions/MathTrig/CoshTest.php | 8 +-- .../Functions/MathTrig/CotTest.php | 8 +-- .../Functions/MathTrig/CothTest.php | 8 +-- .../Functions/MathTrig/CscTest.php | 8 +-- .../Functions/MathTrig/CschTest.php | 8 +-- .../Functions/MathTrig/DegreesTest.php | 8 +-- .../Functions/MathTrig/EvenTest.php | 8 +-- .../Functions/MathTrig/ExpTest.php | 8 +-- .../Functions/MathTrig/FactDoubleTest.php | 8 +-- .../Functions/MathTrig/FactTest.php | 12 +--- .../Functions/MathTrig/FloorMathTest.php | 8 +-- .../Functions/MathTrig/FloorPreciseTest.php | 8 +-- .../Functions/MathTrig/FloorTest.php | 8 +-- .../Functions/MathTrig/GcdTest.php | 4 +- .../Functions/MathTrig/IntTest.php | 8 +-- .../Functions/MathTrig/LcmTest.php | 4 +- .../Calculation/Functions/MathTrig/LnTest.php | 8 +-- .../Functions/MathTrig/Log10Test.php | 8 +-- .../Functions/MathTrig/LogTest.php | 8 +-- .../Functions/MathTrig/MInverseTest.php | 4 +- .../Functions/MathTrig/MMultTest.php | 4 +- .../Functions/MathTrig/MRoundTest.php | 8 +-- .../Functions/MathTrig/MdeTermTest.php | 4 +- .../Functions/MathTrig/ModTest.php | 8 +-- .../Functions/MathTrig/MultinomialTest.php | 4 +- .../Functions/MathTrig/OddTest.php | 8 +-- .../Calculation/Functions/MathTrig/PiTest.php | 4 +- .../Functions/MathTrig/PowerTest.php | 8 +-- .../Functions/MathTrig/ProductTest.php | 4 +- .../Functions/MathTrig/QuotientTest.php | 8 +-- .../Functions/MathTrig/RadiansTest.php | 8 +-- .../Functions/MathTrig/RandBetweenTest.php | 8 +-- .../Functions/MathTrig/RomanTest.php | 8 +-- .../Functions/MathTrig/RoundDownTest.php | 8 +-- .../Functions/MathTrig/RoundTest.php | 8 +-- .../Functions/MathTrig/RoundUpTest.php | 8 +-- .../Functions/MathTrig/SecTest.php | 8 +-- .../Functions/MathTrig/SechTest.php | 8 +-- .../Functions/MathTrig/SequenceTest.php | 3 +- .../Functions/MathTrig/SeriesSumTest.php | 8 +-- .../Functions/MathTrig/SignTest.php | 8 +-- .../Functions/MathTrig/SinTest.php | 8 +-- .../Functions/MathTrig/SinhTest.php | 8 +-- .../Functions/MathTrig/SqrtPiTest.php | 8 +-- .../Functions/MathTrig/SqrtTest.php | 8 +-- .../Functions/MathTrig/SubTotalTest.php | 12 +--- .../Functions/MathTrig/SumIfTest.php | 4 +- .../Functions/MathTrig/SumIfsTest.php | 4 +- .../Functions/MathTrig/SumProductTest.php | 4 +- .../Functions/MathTrig/SumSqTest.php | 4 +- .../Functions/MathTrig/SumTest.php | 12 +--- .../Functions/MathTrig/SumX2MY2Test.php | 4 +- .../Functions/MathTrig/SumX2PY2Test.php | 4 +- .../Functions/MathTrig/SumXMY2Test.php | 4 +- .../Functions/MathTrig/TanTest.php | 8 +-- .../Functions/MathTrig/TanhTest.php | 8 +-- .../Functions/MathTrig/TruncTest.php | 12 +--- .../Functions/Statistical/AveDevTest.php | 4 +- .../Functions/Statistical/AverageATest.php | 4 +- .../Functions/Statistical/AverageIfTest.php | 4 +- .../Functions/Statistical/AverageIfsTest.php | 4 +- .../Functions/Statistical/AverageTest.php | 4 +- .../Functions/Statistical/BetaDistTest.php | 8 +-- .../Functions/Statistical/BetaInvTest.php | 8 +-- .../Statistical/BinomDistRangeTest.php | 8 +-- .../Functions/Statistical/BinomDistTest.php | 8 +-- .../Functions/Statistical/BinomInvTest.php | 8 +-- .../Statistical/ChiDistLeftTailTest.php | 8 +-- .../Statistical/ChiDistRightTailTest.php | 8 +-- .../Statistical/ChiInvLeftTailTest.php | 8 +-- .../Statistical/ChiInvRightTailTest.php | 8 +-- .../Functions/Statistical/ChiTestTest.php | 4 +- .../Functions/Statistical/ConfidenceTest.php | 8 +-- .../Functions/Statistical/CorrelTest.php | 4 +- .../Functions/Statistical/CountATest.php | 4 +- .../Functions/Statistical/CountBlankTest.php | 4 +- .../Functions/Statistical/CountIfTest.php | 4 +- .../Functions/Statistical/CountIfsTest.php | 4 +- .../Functions/Statistical/CountTest.php | 16 ++--- .../Functions/Statistical/CovarTest.php | 4 +- .../Functions/Statistical/DevSqTest.php | 4 +- .../Functions/Statistical/ExponDistTest.php | 8 +-- .../Functions/Statistical/FDistTest.php | 8 +-- .../Functions/Statistical/FisherInvTest.php | 8 +-- .../Functions/Statistical/FisherTest.php | 8 +-- .../Functions/Statistical/ForecastTest.php | 8 +-- .../Functions/Statistical/GammaDistTest.php | 8 +-- .../Functions/Statistical/GammaInvTest.php | 8 +-- .../Functions/Statistical/GammaLnTest.php | 8 +-- .../Functions/Statistical/GammaTest.php | 8 +-- .../Functions/Statistical/GaussTest.php | 8 +-- .../Functions/Statistical/GeoMeanTest.php | 4 +- .../Functions/Statistical/GrowthTest.php | 4 +- .../Functions/Statistical/HarMeanTest.php | 4 +- .../Functions/Statistical/HypGeomDistTest.php | 8 +-- .../Functions/Statistical/InterceptTest.php | 4 +- .../Functions/Statistical/KurtTest.php | 4 +- .../Functions/Statistical/LargeTest.php | 4 +- .../Functions/Statistical/LinEstTest.php | 4 +- .../Functions/Statistical/LogEstTest.php | 4 +- .../Functions/Statistical/LogInvTest.php | 8 +-- .../Statistical/LogNormDist2Test.php | 8 +-- .../Functions/Statistical/LogNormDistTest.php | 8 +-- .../Functions/Statistical/MaxATest.php | 4 +- .../Functions/Statistical/MaxIfsTest.php | 4 +- .../Functions/Statistical/MaxTest.php | 4 +- .../Functions/Statistical/MedianTest.php | 4 +- .../Functions/Statistical/MinATest.php | 4 +- .../Functions/Statistical/MinIfsTest.php | 4 +- .../Functions/Statistical/MinTest.php | 4 +- .../Functions/Statistical/ModeTest.php | 4 +- .../Statistical/NegBinomDistTest.php | 8 +-- .../Functions/Statistical/NormDistTest.php | 8 +-- .../Functions/Statistical/NormInvTest.php | 8 +-- .../Functions/Statistical/NormSDist2Test.php | 8 +-- .../Functions/Statistical/NormSDistTest.php | 8 +-- .../Functions/Statistical/NormSInvTest.php | 8 +-- .../Functions/Statistical/PercentRankTest.php | 3 +- .../Functions/Statistical/PercentileTest.php | 4 +- .../Functions/Statistical/PermutTest.php | 8 +-- .../Statistical/PermutationATest.php | 8 +-- .../Functions/Statistical/PoissonTest.php | 8 +-- .../Functions/Statistical/QuartileTest.php | 4 +- .../Functions/Statistical/RankTest.php | 3 +- .../Functions/Statistical/RsqTest.php | 4 +- .../Functions/Statistical/SkewTest.php | 4 +- .../Functions/Statistical/SlopeTest.php | 4 +- .../Functions/Statistical/SmallTest.php | 4 +- .../Functions/Statistical/StDevATest.php | 8 +-- .../Functions/Statistical/StDevPATest.php | 8 +-- .../Functions/Statistical/StDevPTest.php | 8 +-- .../Functions/Statistical/StDevTest.php | 8 +-- .../Functions/Statistical/StandardizeTest.php | 8 +-- .../Functions/Statistical/SteyxTest.php | 4 +- .../Functions/Statistical/TDistTest.php | 8 +-- .../Functions/Statistical/TinvTest.php | 8 +-- .../Functions/Statistical/TrendTest.php | 4 +- .../Functions/Statistical/TrimMeanTest.php | 4 +- .../Functions/Statistical/VarATest.php | 8 +-- .../Functions/Statistical/VarPATest.php | 8 +-- .../Functions/Statistical/VarPTest.php | 8 +-- .../Functions/Statistical/VarTest.php | 8 +-- .../Functions/Statistical/WeibullTest.php | 8 +-- .../Functions/Statistical/ZTestTest.php | 8 +-- .../Functions/TextData/ArrayToTextTest.php | 4 +- .../TextData/CharNonPrintableTest.php | 4 +- .../Functions/TextData/CharTest.php | 8 +-- .../Functions/TextData/CleanTest.php | 8 +-- .../Functions/TextData/CodeTest.php | 8 +-- .../Functions/TextData/ConcatTest.php | 4 +- .../TextData/ConcatenateGnumericTest.php | 3 +- .../Functions/TextData/ConcatenateTest.php | 4 +- .../Functions/TextData/DollarTest.php | 8 +-- .../Functions/TextData/ExactTest.php | 8 +-- .../Functions/TextData/FindTest.php | 8 +-- .../Functions/TextData/FixedTest.php | 8 +-- .../Functions/TextData/LeftTest.php | 23 ++----- .../Functions/TextData/LenTest.php | 8 +-- .../Functions/TextData/LowerTest.php | 12 +--- .../Functions/TextData/MidTest.php | 23 ++----- .../Functions/TextData/NumberValueTest.php | 8 +-- .../Functions/TextData/OpenOfficeTest.php | 4 +- .../Functions/TextData/ProperTest.php | 12 +--- .../Functions/TextData/ReplaceTest.php | 8 +-- .../Functions/TextData/ReptTest.php | 8 +-- .../Functions/TextData/RightTest.php | 23 ++----- .../Functions/TextData/SearchTest.php | 8 +-- .../Functions/TextData/SubstituteTest.php | 8 +-- .../Calculation/Functions/TextData/TTest.php | 8 +-- .../Functions/TextData/TextAfterTest.php | 4 +- .../Functions/TextData/TextBeforeTest.php | 4 +- .../Functions/TextData/TextJoinTest.php | 8 +-- .../Functions/TextData/TextSplitTest.php | 4 +- .../Functions/TextData/TextTest.php | 8 +-- .../Functions/TextData/TrimTest.php | 8 +-- .../Functions/TextData/UpperTest.php | 12 +--- .../Functions/TextData/ValueTest.php | 8 +-- .../Functions/TextData/ValueToTextTest.php | 4 +- .../Functions/Web/UrlEncodeTest.php | 4 +- .../Functions/Web/WebServiceTest.php | 4 +- .../Calculation/FunctionsTest.php | 4 +- .../Calculation/InternalFunctionsTest.php | 8 +-- .../Calculation/MergedCellTest.php | 8 +-- .../Calculation/MissingArgumentsTest.php | 4 +- .../Calculation/ParseFormulaTest.php | 4 +- .../Calculation/RefErrorTest.php | 4 +- .../Calculation/RowColumnReferenceTest.php | 4 +- .../StructuredReferenceFormulaTest.php | 4 +- .../Calculation/TranslationTest.php | 4 +- .../Cell/AddressHelperTest.php | 36 +++------- .../Cell/AdvancedValueBinderTest.php | 24 ++----- .../Cell/CellAddressTest.php | 28 ++------ .../Cell/CellDetachTest.php | 8 +-- tests/PhpSpreadsheetTests/Cell/CellTest.php | 12 +--- .../Cell/CoordinateTest.php | 68 +++++-------------- .../Cell/DefaultValueBinderTest.php | 8 +-- .../Cell/StringValueBinderTest.php | 24 ++----- .../CellReferenceHelperTest.php | 32 +++------ .../Chart/Charts32CatAxValAxTest.php | 4 +- .../Chart/Charts32XmlTest.php | 8 +-- .../Chart/Issue562Test.php | 4 +- .../DefinedNameFormulaTest.php | 4 +- .../Document/EpochTest.php | 8 +-- .../Document/PropertiesTest.php | 12 +--- .../Document/SecurityTest.php | 4 +- .../DocumentGeneratorTest.php | 8 +-- .../Functional/ActiveSheetTest.php | 3 +- .../Functional/ColumnWidthTest.php | 4 +- .../Functional/CommentsTest.php | 3 +- .../Functional/ConditionalStopIfTrueTest.php | 4 +- .../Functional/EnclosureTest.php | 4 +- .../Functional/FreezePaneTest.php | 16 ++--- .../Functional/MergedCellsTest.php | 4 +- .../Functional/PrintAreaTest.php | 4 +- .../Functional/ReadBlankCellsTest.php | 6 +- .../Functional/ReadFilterTest.php | 6 +- .../Functional/SelectedCellsTest.php | 3 +- .../Functional/StreamTest.php | 7 +- .../TypeAttributePreservationTest.php | 6 +- .../Functional/WorkbookViewAttributesTest.php | 3 +- .../Helper/DimensionTest.php | 8 +-- tests/PhpSpreadsheetTests/Helper/HtmlTest.php | 4 +- .../Helper/SampleCoverageTest.php | 4 +- .../PhpSpreadsheetTests/Helper/SampleTest.php | 10 +-- tests/PhpSpreadsheetTests/IOFactoryTest.php | 12 +--- tests/PhpSpreadsheetTests/NamedRange2Test.php | 4 +- .../Reader/Csv/CsvEncodingTest.php | 16 ++--- .../Reader/Csv/CsvIssue2232Test.php | 8 +-- .../Reader/Csv/CsvLineEndingTest.php | 8 +-- .../Reader/Csv/CsvNumberFormatLocaleTest.php | 14 ++-- .../Reader/Csv/CsvNumberFormatTest.php | 12 +--- .../Reader/Csv/CsvTest.php | 12 +--- .../Reader/Gnumeric/ArrayFormula2Test.php | 4 +- .../Reader/Gnumeric/ArrayFormulaTest.php | 4 +- .../Reader/Gnumeric/GnumericStylesTest.php | 24 ++----- .../Reader/Gnumeric/PageSetupTest.php | 8 +-- .../Reader/Html/HtmlBorderTest.php | 4 +- .../Reader/Html/HtmlCharsetTest.php | 4 +- .../Reader/Html/HtmlLibxmlTest.php | 3 +- .../Reader/Html/HtmlPhpunit10Test.php | 3 +- .../Reader/Html/HtmlTest.php | 4 +- .../Reader/Ods/ArrayFormulaTest.php | 4 +- .../Reader/Security/XmlScannerTest.php | 20 ++---- .../Reader/Xls/ColorMapTest.php | 4 +- .../Xls/ConditionalFormattingBasicTest.php | 4 +- .../ConditionalFormattingExpressionTest.php | 4 +- .../Reader/Xls/DataValidationTest.php | 4 +- .../Reader/Xls/ErrorCodeMapTest.php | 4 +- .../Reader/Xlsx/AutoFilterTest.php | 4 +- .../Reader/Xlsx/DataValidationTest.php | 3 +- .../Reader/Xlsx/DirectorySeparatorTest.php | 16 ++--- .../Reader/Xlsx/GridlinesTest.php | 4 +- .../Reader/Xlsx/XlsxTest.php | 3 +- .../Reader/Xml/XmlStyleCoverageTest.php | 8 +-- .../Reader/Xml/XmlTest.php | 4 +- tests/PhpSpreadsheetTests/RefRangeTest.php | 4 +- .../ReferenceHelper4Test.php | 4 +- .../ReferenceHelperTest.php | 8 +-- .../Shared/CodePageTest.php | 3 +- .../PhpSpreadsheetTests/Shared/Date2Test.php | 16 ++--- tests/PhpSpreadsheetTests/Shared/DateTest.php | 31 +++------ .../Shared/DrawingTest.php | 8 +-- .../Shared/ExactFontTest.php | 2 +- .../PhpSpreadsheetTests/Shared/Font2Test.php | 4 +- .../Shared/FontFileNameTest.php | 20 ++---- tests/PhpSpreadsheetTests/Shared/FontTest.php | 16 ++--- .../Shared/OLEPhpunit10Test.php | 3 +- .../Shared/PasswordHasherTest.php | 4 +- .../Shared/PasswordReloadTest.php | 4 +- .../Shared/Trend/ExponentialBestFitTest.php | 3 +- .../Shared/Trend/LinearBestFitTest.php | 3 +- tests/PhpSpreadsheetTests/SpreadsheetTest.php | 4 +- .../Style/ColorIndexTest.php | 4 +- tests/PhpSpreadsheetTests/Style/ColorTest.php | 16 ++--- .../ConditionalFormatting/CellMatcherTest.php | 40 +++-------- .../Wizard/CellValueWizardTest.php | 24 ++----- .../Wizard/DateValueWizardTest.php | 4 +- .../Wizard/ExpressionWizardTest.php | 8 +-- .../Wizard/WizardFactoryTest.php | 7 +- .../NumberFormat/Wizard/AccountingTest.php | 12 +--- .../NumberFormat/Wizard/CurrencyTest.php | 12 +--- .../Style/NumberFormat/Wizard/DateTest.php | 3 +- .../NumberFormat/Wizard/DateTimeTest.php | 3 +- .../NumberFormat/Wizard/DurationTest.php | 3 +- .../Style/NumberFormat/Wizard/NumberTest.php | 8 +-- .../NumberFormat/Wizard/PercentageTest.php | 8 +-- .../NumberFormat/Wizard/ScientificTest.php | 8 +-- .../Style/NumberFormat/Wizard/TimeTest.php | 3 +- .../Style/NumberFormatTest.php | 13 ++-- .../AutoFilter/AutoFilterAverageTop10Test.php | 12 +--- .../AutoFilterCustomNumericTest.php | 4 +- .../AutoFilter/AutoFilterCustomTextTest.php | 8 +-- .../AutoFilter/AutoFilterMonthTest.php | 4 +- .../AutoFilter/AutoFilterQuarterTest.php | 4 +- .../AutoFilter/AutoFilterTodayTest.php | 4 +- .../AutoFilter/AutoFilterWeekTest.php | 4 +- .../AutoFilter/AutoFilterYearTest.php | 4 +- .../Worksheet/AutoFilter/RuleCustomTest.php | 4 +- .../Worksheet/ColumnCellIterator2Test.php | 16 ++--- .../Worksheet/ColumnDimension2Test.php | 4 +- .../Worksheet/ColumnIteratorEmptyTest.php | 16 ++--- .../Worksheet/ConditionalStyleTest.php | 8 +-- .../Worksheet/Issue4112Test.php | 3 +- .../Worksheet/MergeBehaviourTest.php | 4 +- .../Worksheet/PageMarginsTest.php | 24 ++----- .../Worksheet/RowCellIterator2Test.php | 16 ++--- .../Worksheet/RowDimensionSaveTest.php | 4 +- .../Worksheet/RowIteratorEmptyTest.php | 16 ++--- .../Worksheet/Table/TableTest.php | 12 +--- .../Worksheet/WorksheetTest.php | 40 +++-------- .../Writer/Dompdf/PaperSizeArrayTest.php | 3 +- .../Writer/Html/HtmlCommentsTest.php | 4 +- .../Writer/Html/HtmlNumberFormatTest.php | 8 +-- .../Writer/Html/LongTitleTest.php | 4 +- .../Writer/Html/MemoryDrawingOffsetTest.php | 4 +- .../Writer/Html/XssVulnerabilityTest.php | 4 +- .../Writer/PreCalcTest.php | 4 +- .../Writer/RetainSelectedCellsTest.php | 5 +- .../Writer/Xls/VisibilityTest.php | 12 +--- .../Xlsx/ArrayFormulaValidationTest.php | 4 +- .../Writer/Xlsx/ConditionalTest.php | 24 ++----- .../Writer/Xlsx/DrawingsTest.php | 3 +- .../Writer/Xlsx/FloatsRetainedTest.php | 4 +- .../Writer/Xlsx/FunctionPrefixTest.php | 4 +- .../Writer/Xlsx/Issue2266Test.php | 4 +- .../Writer/Xlsx/Issue3951Test.php | 4 +- .../Writer/Xlsx/LocaleFloatsTest.php | 6 +- .../Writer/Xlsx/VisibilityTest.php | 12 +--- tests/bootstrap.php | 1 - 549 files changed, 1263 insertions(+), 3742 deletions(-) delete mode 100644 phpunit9.xml.dist diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index c4711f12a..6348cc005 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -146,6 +146,7 @@ $config 'ordered_imports' => true, 'ordered_interfaces' => true, 'ordered_traits' => true, + 'php_unit_attributes' => ['keep_annotations' => false], 'php_unit_construct' => true, 'php_unit_dedicate_assert' => true, 'php_unit_dedicate_assert_internal_type' => true, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 209a9199e..709792031 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,7 @@ This makes it easier to see exactly what is being tested when reviewing the PR. 2. Tag subject must be the version number, eg: `1.2.3` 3. Tag body must be a copy-paste of the changelog entries. 3. Push the tag with `git push --tags`, GitHub Actions will create a GitHub release automatically, and the release details will automatically be sent to packagist. -4. By default, Github remove markdown headings in the Release Notes. You can either edit to restore these, or, probably preferably, change the default comment character on your system - `git config core.commentChar ';'`. +4. By default, Github removes markdown headings in the Release Notes. You can either edit to restore these, or, probably preferably, change the default comment character on your system - `git config core.commentChar ";"`. > **Note:** Tagged releases are made from the `master` branch. Only in an emergency should a tagged release be made from the `release` branch. (i.e. cherry-picked hot-fixes.) However, there are 3 branches which have been updated to apply security patches, and those may be tagged if future security updates are needed. - release1291 diff --git a/composer.json b/composer.json index 6acb8333c..7f1777676 100644 --- a/composer.json +++ b/composer.json @@ -95,7 +95,7 @@ "phpcompatibility/php-compatibility": "^9.3", "phpstan/phpstan": "^1.1", "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.6 || ^10.5", + "phpunit/phpunit": "^10.5", "squizlabs/php_codesniffer": "^3.7", "tecnickcom/tcpdf": "^6.5" }, diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 207d8ec97..d3e845c1e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,6 +3,7 @@ + ./tests/PhpSpreadsheetTests diff --git a/phpunit9.xml.dist b/phpunit9.xml.dist deleted file mode 100644 index 896b73339..000000000 --- a/phpunit9.xml.dist +++ /dev/null @@ -1,15 +0,0 @@ - - - - - ./src - - - - - - - - ./tests/PhpSpreadsheetTests - - diff --git a/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php b/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php index f1847fb64..976e8d54b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class ArrayFormulaTest extends TestCase { - /** - * @dataProvider providerArrayFormulae - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerArrayFormulae')] public function testArrayFormula(string $formula, mixed $expectedResult): void { $result = Calculation::getInstance()->_calculateFormulaValue($formula); diff --git a/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php b/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php index 86b869756..5ceabe022 100644 --- a/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php @@ -24,9 +24,7 @@ class BinaryComparisonTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerBinaryComparison - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinaryComparison')] public function testBinaryComparisonOperation( mixed $operand1, mixed $operand2, diff --git a/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php b/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php index 978162667..7a5e062ef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php @@ -24,9 +24,7 @@ class CalculationFunctionListTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerGetFunctions - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGetFunctions')] public function testGetFunctions(array|string $functionCall): void { self::assertIsCallable($functionCall); diff --git a/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php b/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php index afaf58d0e..d57161fd5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php @@ -29,9 +29,7 @@ class CalculationSettingsTest extends TestCase $calculation->setLocale($this->locale); } - /** - * @dataProvider providerCanLoadAllSupportedLocales - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCanLoadAllSupportedLocales')] public function testCanLoadAllSupportedLocales(string $locale): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php b/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php index 4910eb0ba..3a4e67aef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php @@ -27,9 +27,7 @@ class CalculationTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerBinaryComparisonOperation - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinaryComparisonOperation')] public function testBinaryComparisonOperation(string $formula, mixed $expectedResultExcel, mixed $expectedResultOpenOffice): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); @@ -374,9 +372,8 @@ class CalculationTest extends TestCase * be set in cache * @param string[] $shouldNotBeSetInCacheCells coordinates of cells that must * not be set in cache because of pruning - * - * @dataProvider dataProviderBranchPruningFullExecution */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderBranchPruningFullExecution')] public function testFullExecutionDataPruning( mixed $expectedResult, array $dataArray, diff --git a/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php b/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php index d011f3c7f..4485a591e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class DefinedNamesCalculationTest extends TestCase { - /** - * @dataProvider namedRangeCalculationTest1 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('namedRangeCalculationTest1')] public function testNamedRangeCalculations1(string $cellAddress, float $expectedValue): void { $inputFileType = 'Xlsx'; @@ -24,9 +22,7 @@ class DefinedNamesCalculationTest extends TestCase self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}"); } - /** - * @dataProvider namedRangeCalculationTest2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('namedRangeCalculationTest2')] public function testNamedRangeCalculationsWithAdjustedRateValue(string $cellAddress, float $expectedValue): void { $inputFileType = 'Xlsx'; @@ -41,9 +37,7 @@ class DefinedNamesCalculationTest extends TestCase self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}"); } - /** - * @dataProvider namedRangeCalculationTest1 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('namedRangeCalculationTest1')] public function testNamedFormulaCalculations1(string $cellAddress, float $expectedValue): void { $inputFileType = 'Xlsx'; @@ -56,9 +50,7 @@ class DefinedNamesCalculationTest extends TestCase self::assertSame($expectedValue, $calculatedCellValue, "Failed calculation for cell {$cellAddress}"); } - /** - * @dataProvider namedRangeCalculationTest2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('namedRangeCalculationTest2')] public function testNamedFormulaeCalculationsWithAdjustedRateValue(string $cellAddress, float $expectedValue): void { $inputFileType = 'Xlsx'; diff --git a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php index c23f73870..d9dd25142 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php @@ -17,9 +17,7 @@ class FormattedNumberSlashTest extends TestCase StringHelper::setThousandsSeparator(null); } - /** - * @dataProvider providerNumbers - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumbers')] public function testNumber(float $expected, string $value, string $thousandsSeparator = ',', string $decimalSeparator = '.'): void { StringHelper::setThousandsSeparator($thousandsSeparator); @@ -38,9 +36,7 @@ class FormattedNumberSlashTest extends TestCase ]; } - /** - * @dataProvider providerPercentages - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPercentages')] public function testPercentage(string $expected, string $value, string $thousandsSeparator = ',', string $decimalSeparator = '.'): void { $originalValue = $value; @@ -61,9 +57,7 @@ class FormattedNumberSlashTest extends TestCase ]; } - /** - * @dataProvider providerCurrencies - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrencies')] public function testCurrencies(string $expected, string $value, string $thousandsSeparator = ',', string $decimalSeparator = '.', ?string $currencyCode = null): void { $originalValue = $value; diff --git a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php index fef4d66b5..3410a04c6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class FormattedNumberTest extends TestCase { - /** - * @dataProvider providerNumbers - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumbers')] public function testNumber(float $expected, string $value): void { FormattedNumber::convertToNumberIfFormatted($value); @@ -31,9 +29,7 @@ class FormattedNumberTest extends TestCase ]; } - /** - * @dataProvider providerFractions - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFractions')] public function testFraction(string $expected, string $value): void { $originalValue = $value; @@ -60,9 +56,7 @@ class FormattedNumberTest extends TestCase ]; } - /** - * @dataProvider providerPercentages - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPercentages')] public function testPercentage(string $expected, string $value): void { $originalValue = $value; @@ -189,9 +183,7 @@ class FormattedNumberTest extends TestCase ]; } - /** - * @dataProvider providerCurrencies - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrencies')] public function testCurrencies(string $expected, string $value): void { $originalValue = $value; diff --git a/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php b/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php index aa7bc529d..85ed7fdc4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php @@ -33,9 +33,7 @@ class RangeTest extends TestCase } } - /** - * @dataProvider providerRangeEvaluation - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeEvaluation')] public function testRangeEvaluation(string $formula, int|string $expectedResult): void { $this->spreadSheet = $this->getSpreadsheet(); @@ -97,9 +95,7 @@ class RangeTest extends TestCase $workSheet->getCell('E1')->getCalculatedValue(); } - /** - * @dataProvider providerNamedRangeEvaluation - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNamedRangeEvaluation')] public function testNamedRangeEvaluation(array $ranges, string $formula, int $expectedResult): void { $this->spreadSheet = $this->getSpreadsheet(); @@ -134,11 +130,10 @@ class RangeTest extends TestCase } /** - * @dataProvider providerUTF8NamedRangeEvaluation - * * @param string[] $names * @param string[] $ranges */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUTF8NamedRangeEvaluation')] public function testUTF8NamedRangeEvaluation(array $names, array $ranges, string $formula, int $expectedResult): void { $this->spreadSheet = $this->getSpreadsheet(); @@ -162,9 +157,7 @@ class RangeTest extends TestCase ]; } - /** - * @dataProvider providerCompositeNamedRangeEvaluation - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCompositeNamedRangeEvaluation')] public function testCompositeNamedRangeEvaluation(string $composite, int $expectedSum, int $expectedCount): void { if ($this->incompleteMessage !== '') { diff --git a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php index bd94002f9..68e5f3ade 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php @@ -54,9 +54,7 @@ class StructuredReferenceSlashTest extends TestCase parent::tearDown(); } - /** - * @dataProvider structuredReferenceProviderColumnData - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProviderColumnData')] public function testStructuredReferenceColumns(string $expectedCellRange, string $structuredReference): void { $spreadsheet = $this->getSpreadsheet(); @@ -65,9 +63,7 @@ class StructuredReferenceSlashTest extends TestCase self::assertSame($expectedCellRange, $cellRange); } - /** - * @dataProvider structuredReferenceProviderRowData - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProviderRowData')] public function testStructuredReferenceRows(string $expectedCellRange, string $structuredReference): void { $spreadsheet = $this->getSpreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php index 459795701..40223813d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php @@ -70,9 +70,7 @@ class StructuredReferenceTest extends TestCase $structuredReferenceObject->parse($cell); } - /** - * @dataProvider structuredReferenceProviderColumnData - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProviderColumnData')] public function testStructuredReferenceColumns(string $expectedCellRange, string $structuredReference): void { $cell = $this->spreadSheet->getActiveSheet()->getCell('E5'); @@ -82,9 +80,7 @@ class StructuredReferenceTest extends TestCase self::assertSame($expectedCellRange, $cellRange); } - /** - * @dataProvider structuredReferenceProviderRowData - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProviderRowData')] public function testStructuredReferenceRows(string $expectedCellRange, string $structuredReference): void { $cell = $this->spreadSheet->getActiveSheet()->getCell('E5'); diff --git a/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php b/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php index aeb13e0b5..ab6c40e67 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class FormulaAsStringTest extends TestCase { - /** - * @dataProvider providerFunctionsAsString - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFunctionsAsString')] public function testFunctionsAsString(mixed $expectedResult, string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php b/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php index 10ce2cd48..a747710de 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php @@ -31,9 +31,7 @@ class FormulaParserTest extends TestCase self::assertSame(0, $result->getTokenCount()); } - /** - * @dataProvider providerFormulaParser - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormulaParser')] public function testFormulaParser(string $formula, array $expectedResult): void { $formula = "=$formula"; diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php index 18978afa0..75d381ea7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DAverageTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDAverage - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAverage')] public function testDirectCallToDAverage(int|float|string $expectedResult, array $database, string|int|null $field, array $criteria): void { $result = DAverage::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDAverage - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAverage')] public function testDAverageAsWorksheetFormula(int|float|string $expectedResult, array $database, string|int|null $field, array $criteria): void { $this->prepareWorksheetWithFormula('DAVERAGE', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php index 6ddcfd6cb..2a9fd2f40 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DCountATest extends SetupTeardownDatabases { - /** - * @dataProvider providerDCountA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDCountA')] public function testDirectCallToDCountA(int|string $expectedResult, array $database, string $field, array $criteria): void { $result = DCountA::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDCountA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDCountA')] public function testDCountAAsWorksheetFormula(int|string $expectedResult, array $database, string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DCOUNTA', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php index ded350b93..4a3e18cef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DCountTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDCount - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDCount')] public function testDirectCallToDCount(int|string $expectedResult, array $database, string|int|null $field, array $criteria): void { $result = DCount::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDCount - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDCount')] public function testDCountAsWorksheetFormula(int|string $expectedResult, array $database, string|int|null $field, array $criteria): void { $this->prepareWorksheetWithFormula('DCOUNT', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php index 052261604..57b9e9bdb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DGetTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDGet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDGet')] public function testDirectCallToDGet(string|int $expectedResult, array $database, ?string $field, array $criteria): void { $result = DGet::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDGet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDGet')] public function testDGetAsWorksheetFormula(string|int $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DGET', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php index 2689fa3cf..ec8fa3ff8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DMaxTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDMax - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDMax')] public function testDirectCallToDMax(int|string $expectedResult, array $database, string|null|int $field, array $criteria): void { $result = DMax::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDMax - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDMax')] public function testDMaxAsWorksheetFormula(int|string $expectedResult, array $database, string|null|int $field, array $criteria): void { $this->prepareWorksheetWithFormula('DMAX', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php index c1e553dc1..5fb3d121f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DMinTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDMin - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDMin')] public function testDirectCallToDMin(int|float|string $expectedResult, array $database, string|null|int $field, array $criteria): void { $result = DMin::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDMin - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDMin')] public function testDMinAsWorksheetFormula(int|float|string $expectedResult, array $database, string|null|int $field, array $criteria): void { $this->prepareWorksheetWithFormula('DMIN', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php index 57590ee25..dd86903b5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php @@ -10,18 +10,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DProductTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDProduct - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDProduct')] public function testDirectCallToDProduct(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DProduct::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDProduct - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDProduct')] public function testDProductAsWorksheetFormula(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DPRODUCT', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php index bb80b211b..349abcae5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DStDevPTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDStDevP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDStDevP')] public function testDirectCallToDStDevP(float|int|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DStDevP::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDStDevP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDStDevP')] public function testDStDevPAsWorksheetFormula(float|int|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DSTDEVP', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php index 73eb7a410..2edd578c4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DStDevTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDStDev - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDStDev')] public function testDirectCallToDStDev(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DStDev::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDStDev - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDStDev')] public function testDStDevAsWorksheetFormula(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DSTDEV', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php index 3589e8959..6f97f49f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DSumTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDSum - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDSum')] public function testDirectCallToDSum(int|float|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DSum::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDSum - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDSum')] public function testDSumAsWorksheetFormula(int|float|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DSUM', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php index c880bb62e..a3bbbf32a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DVarPTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDVarP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDVarP')] public function testDirectCallToDVarP(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DVarP::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDVarP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDVarP')] public function testDVarPAsWorksheetFormula(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DVARP', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php index 7a0e923f9..0a77db76e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php @@ -9,18 +9,14 @@ use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError; class DVarTest extends SetupTeardownDatabases { - /** - * @dataProvider providerDVar - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDVar')] public function testDirectCallToDVar(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $result = DVar::evaluate($database, $field, $criteria); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerDVar - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDVar')] public function testDVarAsWorksheetFormula(float|string $expectedResult, array $database, ?string $field, array $criteria): void { $this->prepareWorksheetWithFormula('DVAR', $database, $field, $criteria); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php index 79cc6f0a7..e6d81c882 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php @@ -16,18 +16,14 @@ use PHPUnit\Framework\TestCase; class DateDifTest extends TestCase { - /** - * @dataProvider providerDATEDIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEDIF')] public function testDirectCallToDATEDIF(array|int|string $expectedResult, string ...$args): void { $result = Difference::interval(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDATEDIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEDIF')] public function testDATEDIFAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -39,9 +35,7 @@ class DateDifTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDATEDIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEDIF')] public function testDATEDIFInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -64,9 +58,7 @@ class DateDifTest extends TestCase return require 'tests/data/Calculation/DateTime/DATEDIF.php'; } - /** - * @dataProvider providerUnhappyDATEDIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDATEDIF')] public function testDATEDIFUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -99,9 +91,7 @@ class DateDifTest extends TestCase self::assertSame(31, Days::between($obj1, $obj2)); } - /** - * @dataProvider providerDateDifArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateDifArray')] public function testDateDifArray(array $expectedResult, string $startDate, string $endDate, ?string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php index 57d535a03..043c35b7b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php @@ -36,18 +36,14 @@ class DateTest extends TestCase Functions::setReturnDateType($this->returnDateType); } - /** - * @dataProvider providerDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATE')] public function testDirectCallToDATE(float|string $expectedResult, int|string $year, float|int|string $month, float|int|string $day): void { $result = Date::fromYMD($year, $month, $day); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATE')] public function testDATEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -59,9 +55,7 @@ class DateTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATE')] public function testDATEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -84,9 +78,7 @@ class DateTest extends TestCase return require 'tests/data/Calculation/DateTime/DATE.php'; } - /** - * @dataProvider providerUnhappyDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDATE')] public function testDATEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -144,9 +136,7 @@ class DateTest extends TestCase self::assertEquals($result, ExcelError::NAN()); } - /** - * @dataProvider providerDateArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateArray')] public function testDateArray(array $expectedResult, string $year, string $month, string $day): void { $calculation = Calculation::getInstance(); @@ -210,9 +200,7 @@ class DateTest extends TestCase ]; } - /** - * @dataProvider providerDateArrayException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateArrayException')] public function testDateArrayException(string $year, string $month, string $day): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php index 27b652e42..4c2d0d4bc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php @@ -54,9 +54,7 @@ class DateValueTest extends TestCase return (string) $x; } - /** - * @dataProvider providerDATEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEVALUE')] public function testDirectCallToDATEVALUE(int|string $expectedResult, bool|int|string $value): void { if ($this->expectationIsTemplate($expectedResult)) { @@ -67,9 +65,7 @@ class DateValueTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8); } - /** - * @dataProvider providerDATEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEVALUE')] public function testDATEVALUEAsFormula(float|int|string $expectedResult, mixed ...$args): void { if ($this->expectationIsTemplate($expectedResult)) { @@ -85,9 +81,7 @@ class DateValueTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8); } - /** - * @dataProvider providerDATEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDATEVALUE')] public function testDATEVALUEInWorksheet(float|int|string $expectedResult, mixed ...$args): void { if ($this->expectationIsTemplate($expectedResult)) { @@ -123,9 +117,7 @@ class DateValueTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerUnhappyDATEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDATEVALUE')] public function testDATEVALUEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -183,9 +175,7 @@ class DateValueTest extends TestCase self::assertEquals('#VALUE!', DateValue::fromString('1900-02-29')); } - /** - * @dataProvider providerDateValueArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateValueArray')] public function testDateValueArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php index c439d0375..e507deef6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php @@ -30,18 +30,14 @@ class DayTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAY')] public function testDirectCallToDAY(mixed $expectedResultExcel, mixed ...$args): void { $result = DateParts::day(...$args); self::assertSame($expectedResultExcel, $result); } - /** - * @dataProvider providerDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAY')] public function testDAYAsFormula(mixed $expectedResultExcel, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class DayTest extends TestCase self::assertSame($expectedResultExcel, $result); } - /** - * @dataProvider providerDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAY')] public function testDAYInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -78,9 +72,7 @@ class DayTest extends TestCase return require 'tests/data/Calculation/DateTime/DAY.php'; } - /** - * @dataProvider providerDAYOpenOffice - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYOpenOffice')] public function testDirectCallToDAYOpenOffice(mixed $expectedResultOpenOffice, mixed ...$args): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -89,9 +81,7 @@ class DayTest extends TestCase self::assertSame($expectedResultOpenOffice, $result); } - /** - * @dataProvider providerDAYOpenOffice - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYOpenOffice')] public function testDAYAsFormulaOpenOffice(mixed $expectedResultOpenOffice, mixed ...$args): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -110,9 +100,7 @@ class DayTest extends TestCase return require 'tests/data/Calculation/DateTime/DAYOpenOffice.php'; } - /** - * @dataProvider providerUnhappyDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDAY')] public function testDAYUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -144,9 +132,7 @@ class DayTest extends TestCase self::assertSame(0, $result); } - /** - * @dataProvider providerDayArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDayArray')] public function testDayArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php index 9f8c9a608..1967b0965 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php @@ -16,18 +16,14 @@ use PHPUnit\Framework\TestCase; class Days360Test extends TestCase { - /** - * @dataProvider providerDAYS360 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS360')] public function testDirectCallToDAYS360(mixed $expectedResult, mixed ...$args): void { $result = Days360::between(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDAYS360 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS360')] public function testDAYS360AsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -39,9 +35,7 @@ class Days360Test extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDAYS360 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS360')] public function testDAYS360InWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -64,9 +58,7 @@ class Days360Test extends TestCase return require 'tests/data/Calculation/DateTime/DAYS360.php'; } - /** - * @dataProvider providerUnhappyDAYS360 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDAYS360')] public function testDAYS360UnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -99,9 +91,7 @@ class Days360Test extends TestCase self::assertSame(31, Days::between($obj1, $obj2)); } - /** - * @dataProvider providerDays360Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDays360Array')] public function testDays360Array(array $expectedResult, string $startDate, string $endDate, ?string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php index 8a783a3ec..7ba4f5ecf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php @@ -15,18 +15,14 @@ use PHPUnit\Framework\TestCase; class DaysTest extends TestCase { - /** - * @dataProvider providerDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS')] public function testDirectCallToDAYS(int|string $expectedResult, int|string $date1, int|string $date2): void { $result = Days::between($date1, $date2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS')] public function testDAYSAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class DaysTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDAYS')] public function testDAYSInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class DaysTest extends TestCase return require 'tests/data/Calculation/DateTime/DAYS.php'; } - /** - * @dataProvider providerUnhappyDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDAYS')] public function testDAYSUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -98,9 +90,7 @@ class DaysTest extends TestCase self::assertSame(31, Days::between($obj1, $obj2)); } - /** - * @dataProvider providerDaysArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDaysArray')] public function testDaysArray(array $expectedResult, string $startDate, string $endDate): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php index a1618cf0d..3b5b05434 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php @@ -30,18 +30,14 @@ class EDateTest extends TestCase Functions::setReturnDateType($this->returnDateType); } - /** - * @dataProvider providerEDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEDATE')] public function testDirectCallToEDATE(mixed $expectedResult, mixed ...$args): void { $result = Month::adjust(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerEDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEDATE')] public function testEDATEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class EDateTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerEDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEDATE')] public function testEDATEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -78,9 +72,7 @@ class EDateTest extends TestCase return require 'tests/data/Calculation/DateTime/EDATE.php'; } - /** - * @dataProvider providerUnhappyEDATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyEDATE')] public function testEDATEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -129,9 +121,7 @@ class EDateTest extends TestCase self::assertEquals($result->format('d-M-Y'), '26-Dec-2011'); } - /** - * @dataProvider providerEDateArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEDateArray')] public function testEDateArray(array $expectedResult, string $dateValues, string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php index a6d573896..1b5a74795 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php @@ -30,18 +30,14 @@ class EoMonthTest extends TestCase Functions::setReturnDateType($this->returnDateType); } - /** - * @dataProvider providerEOMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEOMONTH')] public function testDirectCallToEOMONTH(mixed $expectedResult, mixed ...$args): void { $result = Month::lastDay(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerEOMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEOMONTH')] public function testEOMONTHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class EoMonthTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerEOMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEOMONTH')] public function testEOMONTHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -78,9 +72,7 @@ class EoMonthTest extends TestCase return require 'tests/data/Calculation/DateTime/EOMONTH.php'; } - /** - * @dataProvider providerUnhappyEOMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyEOMONTH')] public function testEOMONTHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -128,9 +120,7 @@ class EoMonthTest extends TestCase self::assertSame($result->format('d-M-Y'), '31-Dec-2011'); } - /** - * @dataProvider providerEoMonthArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEoMonthArray')] public function testEoMonthArray(array $expectedResult, string $dateValues, string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php index c787aed98..0b4c27a0e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class HourTest extends TestCase { - /** - * @dataProvider providerHOUR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHOUR')] public function testDirectCallToHOUR(mixed $expectedResult, mixed ...$args): void { $result = TimeParts::hour(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerHOUR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHOUR')] public function testHOURAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class HourTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerHOUR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHOUR')] public function testHOURInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class HourTest extends TestCase return require 'tests/data/Calculation/DateTime/HOUR.php'; } - /** - * @dataProvider providerUnhappyHOUR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyHOUR')] public function testHOURUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class HourTest extends TestCase ]; } - /** - * @dataProvider providerHourArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHourArray')] public function testHourArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php index b66fab6ab..863d9f35d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php @@ -30,18 +30,14 @@ class IsoWeekNumTest extends TestCase SharedDate::setExcelCalendar($this->excelCalendar); } - /** - * @dataProvider providerISOWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerISOWEEKNUM')] public function testDirectCallToISOWEEKNUM(mixed $expectedResult, mixed ...$args): void { $result = Week::isoWeekNumber(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerISOWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerISOWEEKNUM')] public function testISOWEEKNUMAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class IsoWeekNumTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerISOWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerISOWEEKNUM')] public function testISOWEEKNUMInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -78,9 +72,7 @@ class IsoWeekNumTest extends TestCase return require 'tests/data/Calculation/DateTime/ISOWEEKNUM.php'; } - /** - * @dataProvider providerUnhappyISOWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyISOWEEKNUM')] public function testISOWEEKNUMUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -106,9 +98,7 @@ class IsoWeekNumTest extends TestCase ]; } - /** - * @dataProvider providerISOWEEKNUM1904 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerISOWEEKNUM1904')] public function testISOWEEKNUMWith1904Calendar(mixed $expectedResult, mixed ...$args): void { SharedDate::setExcelCalendar(SharedDate::CALENDAR_MAC_1904); @@ -122,9 +112,7 @@ class IsoWeekNumTest extends TestCase return require 'tests/data/Calculation/DateTime/ISOWEEKNUM1904.php'; } - /** - * @dataProvider providerIsoWeekNumArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsoWeekNumArray')] public function testIsoWeekNumArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php index 4e354faa2..177a684c6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class MinuteTest extends TestCase { - /** - * @dataProvider providerMINUTE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINUTE')] public function testDirectCallToMINUTE(mixed $expectedResult, mixed ...$args): void { $result = TimeParts::MINUTE(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerMINUTE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINUTE')] public function testMINUTEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class MinuteTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerMINUTE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINUTE')] public function testMINUTEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class MinuteTest extends TestCase return require 'tests/data/Calculation/DateTime/MINUTE.php'; } - /** - * @dataProvider providerUnhappyMINUTE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyMINUTE')] public function testMINUTEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class MinuteTest extends TestCase ]; } - /** - * @dataProvider providerMinuteArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMinuteArray')] public function testMinuteArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php index d3434d1d9..969d07fc0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class MonthTest extends TestCase { - /** - * @dataProvider providerMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMONTH')] public function testDirectCallToMONTH(mixed $expectedResultExcel, mixed ...$args): void { $result = DateParts::month(...$args); self::assertSame($expectedResultExcel, $result); } - /** - * @dataProvider providerMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMONTH')] public function testMONTHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class MonthTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMONTH')] public function testMONTHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class MonthTest extends TestCase return require 'tests/data/Calculation/DateTime/MONTH.php'; } - /** - * @dataProvider providerUnhappyMONTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyMONTH')] public function testMONTHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class MonthTest extends TestCase ]; } - /** - * @dataProvider providerMonthArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMonthArray')] public function testMonthArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php index 0e853040a..a2640f38a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php @@ -12,18 +12,14 @@ use PHPUnit\Framework\TestCase; class NetworkDaysTest extends TestCase { - /** - * @dataProvider providerNETWORKDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNETWORKDAYS')] public function testDirectCallToNETWORKDAYS(mixed $expectedResult, mixed ...$args): void { $result = NetworkDays::count(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerNETWORKDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNETWORKDAYS')] public function testNETWORKDAYSAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -35,9 +31,7 @@ class NetworkDaysTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerNETWORKDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNETWORKDAYS')] public function testNETWORKDAYSInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +54,7 @@ class NetworkDaysTest extends TestCase return require 'tests/data/Calculation/DateTime/NETWORKDAYS.php'; } - /** - * @dataProvider providerUnhappyNETWORKDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyNETWORKDAYS')] public function testNETWORKDAYSUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class NetworkDaysTest extends TestCase ]; } - /** - * @dataProvider providerNetWorkDaysArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNetWorkDaysArray')] public function testNetWorkDaysArray(array $expectedResult, string $startDate, string $endDays, ?string $holidays): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php index 72f9ccb60..151044960 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php @@ -12,18 +12,14 @@ use PHPUnit\Framework\TestCase; class SecondTest extends TestCase { - /** - * @dataProvider providerSECOND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSECOND')] public function testDirectCallToSECOND(mixed $expectedResult, mixed ...$args): void { $result = TimeParts::second(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerSECOND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSECOND')] public function testSECONDAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -35,9 +31,7 @@ class SecondTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerSECOND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSECOND')] public function testSECONDInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +54,7 @@ class SecondTest extends TestCase return require 'tests/data/Calculation/DateTime/SECOND.php'; } - /** - * @dataProvider providerUnhappySECOND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappySECOND')] public function testSECONDUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +80,7 @@ class SecondTest extends TestCase ]; } - /** - * @dataProvider providerSecondArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSecondArray')] public function testSecondArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php index 3f757315b..71e5e02f7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php @@ -36,18 +36,14 @@ class TimeTest extends TestCase Functions::setReturnDateType($this->returnDateType); } - /** - * @dataProvider providerTIME - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTIME')] public function testDirectCallToTIME(float|string $expectedResult, int|string $hour, bool|int $minute, int $second): void { $result = Time::fromHMS($hour, $minute, $second); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12); } - /** - * @dataProvider providerTIME - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTIME')] public function testTIMEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -64,9 +60,7 @@ class TimeTest extends TestCase return require 'tests/data/Calculation/DateTime/TIME.php'; } - /** - * @dataProvider providerUnhappyTIME - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyTIME')] public function testTIMEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -127,9 +121,7 @@ class TimeTest extends TestCase self::assertEquals(0, $result); } - /** - * @dataProvider providerTimeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTimeArray')] public function testTimeArray(array $expectedResult, string $hour, string $minute, string $second): void { $calculation = Calculation::getInstance(); @@ -193,9 +185,7 @@ class TimeTest extends TestCase ]; } - /** - * @dataProvider providerTimeArrayException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTimeArrayException')] public function testTimeArrayException(string $hour, string $minute, string $second): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php index f512d4c45..769254e59 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php @@ -30,18 +30,14 @@ class TimeValueTest extends TestCase Functions::setReturnDateType($this->returnDateType); } - /** - * @dataProvider providerTIMEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTIMEVALUE')] public function testDirectCallToTIMEVALUE(int|float|string $expectedResult, bool|int|string $value): void { $result = TimeValue::fromString($value); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8); } - /** - * @dataProvider providerTIMEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTIMEVALUE')] public function testTIMEVALUEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class TimeValueTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, 1.0e-8); } - /** - * @dataProvider providerTIMEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTIMEVALUE')] public function testTIMEVALUEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +103,7 @@ class TimeValueTest extends TestCase self::assertEquals($result->format('H:i:s'), '07:30:20'); } - /** - * @dataProvider providerUnhappyTIMEVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyTIMEVALUE')] public function testTIMEVALUEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -137,9 +129,7 @@ class TimeValueTest extends TestCase ]; } - /** - * @dataProvider providerTimeValueArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTimeValueArray')] public function testTimeValueArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php index c147b8446..f97be1ec5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php @@ -29,18 +29,14 @@ class WeekDayTest extends TestCase SharedDate::setExcelCalendar($this->excelCalendar); } - /** - * @dataProvider providerWEEKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKDAY')] public function testDirectCallToWEEKDAY(int|string $expectedResult, bool|int|string $dateValue, null|int|string $style = null): void { $result = ($style === null) ? Week::day($dateValue) : Week::day($dateValue, $style); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWEEKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKDAY')] public function testWEEKDAYAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -52,9 +48,7 @@ class WeekDayTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWEEKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKDAY')] public function testWEEKDAYInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -77,9 +71,7 @@ class WeekDayTest extends TestCase return require 'tests/data/Calculation/DateTime/WEEKDAY.php'; } - /** - * @dataProvider providerUnhappyWEEKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyWEEKDAY')] public function testWEEKDAYUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -114,9 +106,7 @@ class WeekDayTest extends TestCase self::assertEquals(6, Week::day(null)); } - /** - * @dataProvider providerWeekDayArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWeekDayArray')] public function testWeekDayArray(array $expectedResult, string $dateValues, string $styles): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php index bff6ec619..a08c13a06 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php @@ -30,18 +30,14 @@ class WeekNumTest extends TestCase SharedDate::setExcelCalendar($this->excelCalendar); } - /** - * @dataProvider providerWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKNUM')] public function testDirectCallToWEEKNUM(mixed $expectedResult, mixed ...$args): void { $result = Week::number(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKNUM')] public function testWEEKNUMAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -53,9 +49,7 @@ class WeekNumTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKNUM')] public function testWEEKNUMInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -78,9 +72,7 @@ class WeekNumTest extends TestCase return require 'tests/data/Calculation/DateTime/WEEKNUM.php'; } - /** - * @dataProvider providerUnhappyWEEKNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyWEEKNUM')] public function testWEEKNUMUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -106,9 +98,7 @@ class WeekNumTest extends TestCase ]; } - /** - * @dataProvider providerWEEKNUM1904 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEEKNUM1904')] public function testWEEKNUMWith1904Calendar(mixed $expectedResult, mixed ...$args): void { SharedDate::setExcelCalendar(SharedDate::CALENDAR_MAC_1904); @@ -122,9 +112,7 @@ class WeekNumTest extends TestCase return require 'tests/data/Calculation/DateTime/WEEKNUM1904.php'; } - /** - * @dataProvider providerWeekNumArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWeekNumArray')] public function testWeekNumArray(array $expectedResult, string $dateValues, string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php index db9d95d17..06c65ff6d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php @@ -12,18 +12,14 @@ use PHPUnit\Framework\TestCase; class WorkDayTest extends TestCase { - /** - * @dataProvider providerWORKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWORKDAY')] public function testDirectCallToWORKDAY(mixed $expectedResult, mixed ...$args): void { $result = WorkDay::date(...$args); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWORKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWORKDAY')] public function testWORKDAYAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -35,9 +31,7 @@ class WorkDayTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerWORKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWORKDAY')] public function testWORKDAYInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +54,7 @@ class WorkDayTest extends TestCase return require 'tests/data/Calculation/DateTime/WORKDAY.php'; } - /** - * @dataProvider providerUnhappyWORKDAY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyWORKDAY')] public function testWORKDAYUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +80,7 @@ class WorkDayTest extends TestCase ]; } - /** - * @dataProvider providerWorkDayArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWorkDayArray')] public function testWorkDayArray(array $expectedResult, string $startDate, string $endDays, ?string $holidays): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php index 74157492a..0ad70f954 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class YearFracTest extends TestCase { - /** - * @dataProvider providerYEARFRAC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEARFRAC')] public function testDirectCallToYEARFRAC(mixed $expectedResult, mixed ...$args): void { $result = YearFrac::fraction(...$args); self::assertEqualsWithDelta($expectedResult, $result, 1.0e-6); } - /** - * @dataProvider providerYEARFRAC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEARFRAC')] public function testYEARFRACAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class YearFracTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, 1.0e-6); } - /** - * @dataProvider providerYEARFRAC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEARFRAC')] public function testYEARFRACInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class YearFracTest extends TestCase return require 'tests/data/Calculation/DateTime/YEARFRAC.php'; } - /** - * @dataProvider providerUnhappyYEARFRAC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyYEARFRAC')] public function testYEARFRACUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class YearFracTest extends TestCase ]; } - /** - * @dataProvider providerYearFracArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYearFracArray')] public function testYearFracArray(array $expectedResult, string $startDate, string $endDate, ?string $methods): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php index 6234900e5..6a7f5a095 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php @@ -12,18 +12,14 @@ use PHPUnit\Framework\TestCase; class YearTest extends TestCase { - /** - * @dataProvider providerYEAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEAR')] public function testDirectCallToYEAR(mixed $expectedResultExcel, mixed ...$args): void { $result = DateParts::year(...$args); self::assertSame($expectedResultExcel, $result); } - /** - * @dataProvider providerYEAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEAR')] public function testYEARAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -35,9 +31,7 @@ class YearTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerYEAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYEAR')] public function testYEARInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +54,7 @@ class YearTest extends TestCase return require 'tests/data/Calculation/DateTime/YEAR.php'; } - /** - * @dataProvider providerUnhappyYEAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyYEAR')] public function testYEARUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +80,7 @@ class YearTest extends TestCase ]; } - /** - * @dataProvider providerYearArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYearArray')] public function testYearArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselITest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselITest.php index 8a659358c..603f23533 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselITest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselITest.php @@ -15,18 +15,14 @@ class BesselITest extends TestCase { const BESSEL_PRECISION = 1E-9; - /** - * @dataProvider providerBESSELI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELI')] public function testDirectCallToBESSELI(mixed $expectedResult, mixed ...$args): void { $result = BesselI::besselI(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELI')] public function testBESSELIAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class BesselITest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELI')] public function testBESSELIInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class BesselITest extends TestCase return require 'tests/data/Calculation/Engineering/BESSELI.php'; } - /** - * @dataProvider providerUnhappyBESSELI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBESSELI')] public function testBESSELIUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -92,9 +84,7 @@ class BesselITest extends TestCase ]; } - /** - * @dataProvider providerBesselIArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBesselIArray')] public function testBesselIArray(array $expectedResult, string $value, string $ord): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselJTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselJTest.php index ce8930505..a4b3b1dd0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselJTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselJTest.php @@ -15,18 +15,14 @@ class BesselJTest extends TestCase { const BESSEL_PRECISION = 1E-8; - /** - * @dataProvider providerBESSELJ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELJ')] public function testDirectCallToBESSELJ(mixed $expectedResult, mixed ...$args): void { $result = BesselJ::besselJ(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELJ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELJ')] public function testBESSELJAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class BesselJTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELJ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELJ')] public function testBESSELJInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class BesselJTest extends TestCase return require 'tests/data/Calculation/Engineering/BESSELJ.php'; } - /** - * @dataProvider providerUnhappyBESSELJ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBESSELJ')] public function testBESSELJUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -92,9 +84,7 @@ class BesselJTest extends TestCase ]; } - /** - * @dataProvider providerBesselJArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBesselJArray')] public function testBesselJArray(array $expectedResult, string $value, string $ord): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselKTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselKTest.php index 8a17b5c82..a810c3133 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselKTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselKTest.php @@ -15,18 +15,14 @@ class BesselKTest extends TestCase { const BESSEL_PRECISION = 1E-12; - /** - * @dataProvider providerBESSELK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELK')] public function testDirectCallToBESSELK(mixed $expectedResult, mixed ...$args): void { $result = BesselK::besselK(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELK')] public function testBESSELKAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class BesselKTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELK')] public function testBESSELKInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class BesselKTest extends TestCase return require 'tests/data/Calculation/Engineering/BESSELK.php'; } - /** - * @dataProvider providerUnhappyBESSELK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBESSELK')] public function testBESSELKUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -92,9 +84,7 @@ class BesselKTest extends TestCase ]; } - /** - * @dataProvider providerBesselKArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBesselKArray')] public function testBesselKArray(array $expectedResult, string $value, string $ord): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselYTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselYTest.php index 598cd95a7..bbd9e58d2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselYTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BesselYTest.php @@ -15,18 +15,14 @@ class BesselYTest extends TestCase { const BESSEL_PRECISION = 1E-12; - /** - * @dataProvider providerBESSELY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELY')] public function testDirectCallToBESSELY(mixed $expectedResult, mixed ...$args): void { $result = BesselY::besselY(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELY')] public function testBESSELYAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class BesselYTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::BESSEL_PRECISION); } - /** - * @dataProvider providerBESSELY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBESSELY')] public function testBESSELYInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class BesselYTest extends TestCase return require 'tests/data/Calculation/Engineering/BESSELY.php'; } - /** - * @dataProvider providerUnhappyBESSELY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBESSELY')] public function testBESSELYUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -92,9 +84,7 @@ class BesselYTest extends TestCase ]; } - /** - * @dataProvider providerBesselYArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBesselYArray')] public function testBesselYArray(array $expectedResult, string $value, string $ord): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php index 1f4c1ad37..afcbb9a0c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php @@ -27,9 +27,7 @@ class Bin2DecTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerBIN2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2DEC')] public function testDirectCallToBIN2DEC(string $expectedResult, bool|int|string $arg1): void { $result = ConvertBinary::toDecimal($arg1); @@ -41,9 +39,7 @@ class Bin2DecTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerBIN2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2DEC')] public function testBIN2DECAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Bin2DecTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerBIN2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2DEC')] public function testBIN2DECInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Bin2DecTest extends TestCase return require 'tests/data/Calculation/Engineering/BIN2DEC.php'; } - /** - * @dataProvider providerUnhappyBIN2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBIN2DEC')] public function testBIN2DECUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Bin2DecTest extends TestCase ]; } - /** - * @dataProvider providerBIN2DECOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2DECOds')] public function testBIN2DECOds(string $expectedResult, bool $arg1): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Bin2DecTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerBin2DecArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBin2DecArray')] public function testBin2DecArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php index b2cf5bc40..8afcdf661 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php @@ -27,9 +27,7 @@ class Bin2HexTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerBIN2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2HEX')] public function testDirectCallToBIN2HEX(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { $result = ($digits === null) ? ConvertBinary::toHex($value) : ConvertBinary::toHex($value, $digits); @@ -41,9 +39,7 @@ class Bin2HexTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerBIN2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2HEX')] public function testBIN2HEXAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Bin2HexTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerBIN2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2HEX')] public function testBIN2HEXInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Bin2HexTest extends TestCase return require 'tests/data/Calculation/Engineering/BIN2HEX.php'; } - /** - * @dataProvider providerUnhappyBIN2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBIN2HEX')] public function testBIN2HEXUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Bin2HexTest extends TestCase ]; } - /** - * @dataProvider providerBIN2HEXOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2HEXOds')] public function testBIN2HEXOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Bin2HexTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerBin2HexArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBin2HexArray')] public function testBin2HexArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php index f0db0c1fb..2c320f488 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php @@ -27,9 +27,7 @@ class Bin2OctTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerBIN2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2OCT')] public function testDirectCallToBIN2OCT(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { $result = ($digits === null) ? ConvertBinary::toOctal($value) : ConvertBinary::toOctal($value, $digits); @@ -41,9 +39,7 @@ class Bin2OctTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerBIN2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2OCT')] public function testBIN2OCTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Bin2OctTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerBIN2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2OCT')] public function testBIN2OCTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Bin2OctTest extends TestCase return require 'tests/data/Calculation/Engineering/BIN2OCT.php'; } - /** - * @dataProvider providerUnhappyBIN2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBIN2OCT')] public function testBIN2OCTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Bin2OctTest extends TestCase ]; } - /** - * @dataProvider providerBIN2OCTOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2OCTOds')] public function testBIN2OCTOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Bin2OctTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerBin2OctArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBin2OctArray')] public function testBin2OctArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php index 1f913cbed..4ad529b26 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class BitAndTest extends TestCase { - /** - * @dataProvider providerBITAND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITAND')] public function testDirectCallToBITAND(float|int|string $expectedResult, null|bool|int|float|string $arg1, null|bool|int|float|string $arg2): void { $result = BitWise::BITAND($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITAND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITAND')] public function testBITANDAsFormula(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class BitAndTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITAND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITAND')] public function testBITANDInWorksheet(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class BitAndTest extends TestCase return require 'tests/data/Calculation/Engineering/BITAND.php'; } - /** - * @dataProvider providerUnhappyBITAND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBITAND')] public function testBITANDUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class BitAndTest extends TestCase ]; } - /** - * @dataProvider providerBitAndArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBitAndArray')] public function testBitAndArray(array $expectedResult, string $number1, string $number2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php index a0bd6b758..82d1f749d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class BitLShiftTest extends TestCase { - /** - * @dataProvider providerBITLSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITLSHIFT')] public function testDirectCallToBITLSHIFT(float|int|string $expectedResult, null|bool|int|float|string $arg1, null|bool|int|float|string $arg2): void { $result = BitWise::BITLSHIFT($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITLSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITLSHIFT')] public function testBITLSHIFTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class BitLShiftTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITLSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITLSHIFT')] public function testBITLSHIFTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class BitLShiftTest extends TestCase return require 'tests/data/Calculation/Engineering/BITLSHIFT.php'; } - /** - * @dataProvider providerUnhappyBITLSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBITLSHIFT')] public function testBITLSHIFTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class BitLShiftTest extends TestCase ]; } - /** - * @dataProvider providerBitLShiftArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBitLShiftArray')] public function testBitLShiftArray(array $expectedResult, string $number, string $bits): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php index f27f731f3..6cc139019 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class BitOrTest extends TestCase { - /** - * @dataProvider providerBITOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITOR')] public function testDirectCallToBITOR(float|int|string $expectedResult, null|bool|int|float|string $arg1, null|bool|int|float|string $arg2): void { $result = BitWise::BITOR($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITOR')] public function testBITORAsFormula(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class BitOrTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITOR')] public function testBITORInWorksheet(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class BitOrTest extends TestCase return require 'tests/data/Calculation/Engineering/BITOR.php'; } - /** - * @dataProvider providerUnhappyBITOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBITOR')] public function testBITORUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class BitOrTest extends TestCase ]; } - /** - * @dataProvider providerBitOrArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBitOrArray')] public function testBitOrArray(array $expectedResult, string $number1, string $number2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php index e68173e36..084932a6b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class BitRShiftTest extends TestCase { - /** - * @dataProvider providerBITRSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITRSHIFT')] public function testDirectCallToBITRSHIFT(float|int|string $expectedResult, null|bool|int|float|string $arg1, null|bool|int|float|string $arg2): void { $result = BitWise::BITRSHIFT($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITRSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITRSHIFT')] public function testBITRSHIFTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class BitRShiftTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITRSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITRSHIFT')] public function testBITRSHIFTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class BitRShiftTest extends TestCase return require 'tests/data/Calculation/Engineering/BITRSHIFT.php'; } - /** - * @dataProvider providerUnhappyBITRSHIFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBITRSHIFT')] public function testBITRSHIFTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class BitRShiftTest extends TestCase ]; } - /** - * @dataProvider providerBitRShiftArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBitRShiftArray')] public function testBitRShiftArray(array $expectedResult, string $number, string $bits): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php index 1c42c0f04..38b59b59d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class BitXorTest extends TestCase { - /** - * @dataProvider providerBITXOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITXOR')] public function testDirectCallToBITXOR(float|int|string $expectedResult, null|bool|int|float|string $arg1, null|bool|int|float|string $arg2): void { $result = BitWise::BITXOR($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITXOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITXOR')] public function testBITXORAsFormula(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class BitXorTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerBITXOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBITXOR')] public function testBITXORInWorksheet(float|int|string $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class BitXorTest extends TestCase return require 'tests/data/Calculation/Engineering/BITXOR.php'; } - /** - * @dataProvider providerUnhappyBITXOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyBITXOR')] public function testBITXORUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +82,7 @@ class BitXorTest extends TestCase ]; } - /** - * @dataProvider providerBitXorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBitXorArray')] public function testBitXorArray(array $expectedResult, string $number1, string $number2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php index 17954601b..1a5933e34 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; class ComplexTest extends TestCase { - /** - * @dataProvider providerCOMPLEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOMPLEX')] public function testDirectCallToCOMPLEX(mixed $expectedResult, mixed ...$args): void { $result = Complex::complex(...$args); @@ -26,9 +24,7 @@ class ComplexTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerCOMPLEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOMPLEX')] public function testCOMPLEXAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -41,9 +37,7 @@ class ComplexTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerCOMPLEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOMPLEX')] public function testCOMPLEXInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -66,9 +60,7 @@ class ComplexTest extends TestCase return require 'tests/data/Calculation/Engineering/COMPLEX.php'; } - /** - * @dataProvider providerComplexArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerComplexArray')] public function testComplexArray(array $expectedResult, string $real, string $imaginary): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php index e8044792a..ad30125d9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php @@ -51,18 +51,14 @@ class ConvertUoMTest extends TestCase self::assertSame(['multiplier' => 1024, 'name' => 'kibi'], $result['ki']); } - /** - * @dataProvider providerCONVERTUOM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONVERTUOM')] public function testDirectCallToCONVERTUOM(float|int|string $expectedResult, float|int|string $value, string $from, string $to): void { $result = ConvertUOM::convert($value, $from, $to); self::assertEqualsWithDelta($expectedResult, $result, self::UOM_PRECISION); } - /** - * @dataProvider providerCONVERTUOM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONVERTUOM')] public function testCONVERTUOMAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -74,9 +70,7 @@ class ConvertUoMTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::UOM_PRECISION); } - /** - * @dataProvider providerCONVERTUOM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONVERTUOM')] public function testCONVERTUOMInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -99,9 +93,7 @@ class ConvertUoMTest extends TestCase return require 'tests/data/Calculation/Engineering/CONVERTUOM.php'; } - /** - * @dataProvider providerUnhappyCONVERTUOM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyCONVERTUOM')] public function testCONVERTUOMUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -129,9 +121,7 @@ class ConvertUoMTest extends TestCase ]; } - /** - * @dataProvider providerConvertUoMArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertUoMArray')] public function testConvertUoMArray(array $expectedResult, string $value, string $fromUoM, string $toUoM): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php index 51f73261f..cdee5b47f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php @@ -26,9 +26,7 @@ class Dec2BinTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerDEC2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2BIN')] public function testDirectCallToDEC2BIN(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { $result = ($digits === null) ? ConvertDecimal::toBinary($value) : ConvertDecimal::toBinary($value, $digits); @@ -40,9 +38,7 @@ class Dec2BinTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerDEC2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2BIN')] public function testDEC2BINAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -55,9 +51,7 @@ class Dec2BinTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerDEC2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2BIN')] public function testDEC2BINInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -80,9 +74,7 @@ class Dec2BinTest extends TestCase return require 'tests/data/Calculation/Engineering/DEC2BIN.php'; } - /** - * @dataProvider providerUnhappyDEC2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDEC2BIN')] public function testDEC2BINUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -108,9 +100,7 @@ class Dec2BinTest extends TestCase ]; } - /** - * @dataProvider providerDEC2BINOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2BINOds')] public function testDEC2BINOds(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -145,9 +135,7 @@ class Dec2BinTest extends TestCase self::assertSame('101', $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerDec2BinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDec2BinArray')] public function testDec2BinArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php index 2be971d81..03a129b06 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php @@ -26,9 +26,7 @@ class Dec2HexTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerDEC2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2HEX')] public function testDirectCallToDEC2HEX(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { $result = ($digits === null) ? ConvertDecimal::toHex($value) : ConvertDecimal::toHex($value, $digits); @@ -40,9 +38,7 @@ class Dec2HexTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerDEC2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2HEX')] public function testDEC2HEXAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -55,9 +51,7 @@ class Dec2HexTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerDEC2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2HEX')] public function testDEC2HEXInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -80,9 +74,7 @@ class Dec2HexTest extends TestCase return require 'tests/data/Calculation/Engineering/DEC2HEX.php'; } - /** - * @dataProvider providerUnhappyDEC2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDEC2HEX')] public function testDEC2HEXUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -108,9 +100,7 @@ class Dec2HexTest extends TestCase ]; } - /** - * @dataProvider providerDEC2HEXOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2HEXOds')] public function testDEC2HEXOds(mixed $expectedResult, bool|float|int|string $value, null|float|int|string $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -152,9 +142,7 @@ class Dec2HexTest extends TestCase self::assertEquals('FFFFFFFFFF', ConvertDecimal::hex32bit(-1, 'FFFFFFFF', true)); } - /** - * @dataProvider providerDec2HexArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDec2HexArray')] public function testDec2HexArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php index 320710701..b99fa9e27 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php @@ -26,9 +26,7 @@ class Dec2OctTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerDEC2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2OCT')] public function testDirectCallToDEC2OCT(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { $result = ($digits === null) ? ConvertDecimal::toOctal($value) : ConvertDecimal::toOctal($value, $digits); @@ -40,9 +38,7 @@ class Dec2OctTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerDEC2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2OCT')] public function testDEC2OCTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -55,9 +51,7 @@ class Dec2OctTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerDEC2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2OCT')] public function testDEC2OCTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -80,9 +74,7 @@ class Dec2OctTest extends TestCase return require 'tests/data/Calculation/Engineering/DEC2OCT.php'; } - /** - * @dataProvider providerUnhappyDEC2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDEC2OCT')] public function testDEC2OCTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -108,9 +100,7 @@ class Dec2OctTest extends TestCase ]; } - /** - * @dataProvider providerDEC2OCTOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEC2OCTOds')] public function testDEC2OCTOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -145,9 +135,7 @@ class Dec2OctTest extends TestCase self::assertSame('21', $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerDec2OctArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDec2OctArray')] public function testDec2OctArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php index 6dbd164ec..54c0eb8f1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class DeltaTest extends TestCase { - /** - * @dataProvider providerDELTA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDELTA')] public function testDirectCallToDELTA(mixed $expectedResult, bool|float|int|string $arg1, null|bool|float|int|string $arg2 = null): void { $result = ($arg2 === null) ? Compare::delta($arg1) : Compare::delta($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDELTA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDELTA')] public function testDELTAAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class DeltaTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerDELTA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDELTA')] public function testDELTAInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class DeltaTest extends TestCase return require 'tests/data/Calculation/Engineering/DELTA.php'; } - /** - * @dataProvider providerUnhappyDELTA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyDELTA')] public function testDELTAUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class DeltaTest extends TestCase ]; } - /** - * @dataProvider providerDeltaArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDeltaArray')] public function testDeltaArray(array $expectedResult, string $a, string $b): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfCTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfCTest.php index 515fe9e8f..2b4927c0e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfCTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfCTest.php @@ -15,18 +15,14 @@ class ErfCTest extends TestCase { const ERF_PRECISION = 1E-14; - /** - * @dataProvider providerERFC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFC')] public function testDirectCallToERFC(mixed $expectedResult, mixed ...$args): void { $result = ErfC::ERFC(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERFC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFC')] public function testERFCAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class ErfCTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERFC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFC')] public function testERFCInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class ErfCTest extends TestCase return require 'tests/data/Calculation/Engineering/ERFC.php'; } - /** - * @dataProvider providerUnhappyERFC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyERFC')] public function testERFCUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -91,9 +83,7 @@ class ErfCTest extends TestCase ]; } - /** - * @dataProvider providerErfCArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerErfCArray')] public function testErfCArray(array $expectedResult, string $lower): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfPreciseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfPreciseTest.php index edc59284a..1dd8ab8de 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfPreciseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfPreciseTest.php @@ -14,18 +14,14 @@ class ErfPreciseTest extends TestCase { const ERF_PRECISION = 1E-14; - /** - * @dataProvider providerERFPRECISE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFPRECISE')] public function testDirectCallToERFPRECISE(mixed $expectedResult, mixed ...$args): void { $result = Erf::ERFPRECISE(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERFPRECISE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFPRECISE')] public function testERFPRECISEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -37,9 +33,7 @@ class ErfPreciseTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERFPRECISE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERFPRECISE')] public function testERFPRECISEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -62,9 +56,7 @@ class ErfPreciseTest extends TestCase return require 'tests/data/Calculation/Engineering/ERFPRECISE.php'; } - /** - * @dataProvider providerErfPreciseArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerErfPreciseArray')] public function testErfPreciseArray(array $expectedResult, string $limit): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfTest.php index e9d239238..7fd9bcb33 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ErfTest.php @@ -15,18 +15,14 @@ class ErfTest extends TestCase { const ERF_PRECISION = 1E-14; - /** - * @dataProvider providerERF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERF')] public function testDirectCallToERF(mixed $expectedResult, mixed ...$args): void { $result = Erf::erf(...$args); self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERF')] public function testERFAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class ErfTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::ERF_PRECISION); } - /** - * @dataProvider providerERF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerERF')] public function testERFInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class ErfTest extends TestCase return require 'tests/data/Calculation/Engineering/ERF.php'; } - /** - * @dataProvider providerUnhappyERF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyERF')] public function testERFUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -91,9 +83,7 @@ class ErfTest extends TestCase ]; } - /** - * @dataProvider providerErfArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerErfArray')] public function testErfArray(array $expectedResult, string $lower, string $upper = 'NULL'): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php index 34b42ceae..f39a8cbdf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php @@ -13,18 +13,14 @@ use PHPUnit\Framework\TestCase; class GeStepTest extends TestCase { - /** - * @dataProvider providerGESTEP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGESTEP')] public function testDirectCallToGESTEP(int|string $expectedResult, bool|float|int|string $arg1, null|bool|float|int|string $arg2 = null): void { $result = ($arg2 === null) ? Compare::geStep($arg1) : Compare::geStep($arg1, $arg2); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerGESTEP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGESTEP')] public function testGESTEPAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -36,9 +32,7 @@ class GeStepTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerGESTEP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGESTEP')] public function testGESTEPInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -61,9 +55,7 @@ class GeStepTest extends TestCase return require 'tests/data/Calculation/Engineering/GESTEP.php'; } - /** - * @dataProvider providerUnhappyGESTEP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyGESTEP')] public function testGESTEPUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -89,9 +81,7 @@ class GeStepTest extends TestCase ]; } - /** - * @dataProvider providerGeStepArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGeStepArray')] public function testGeStepArray(array $expectedResult, string $a, string $b): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php index bcd263235..abbe31712 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php @@ -27,9 +27,7 @@ class Hex2BinTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerHEX2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2BIN')] public function testDirectCallToHEX2BIN(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { $result = ($digits === null) ? ConvertHex::toBinary($value) : ConvertHex::toBinary($value, $digits); @@ -41,9 +39,7 @@ class Hex2BinTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerHEX2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2BIN')] public function testHEX2BINAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Hex2BinTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerHEX2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2BIN')] public function testHEX2BINInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Hex2BinTest extends TestCase return require 'tests/data/Calculation/Engineering/HEX2BIN.php'; } - /** - * @dataProvider providerUnhappyHEX2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyHEX2BIN')] public function testHEX2BINUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Hex2BinTest extends TestCase ]; } - /** - * @dataProvider providerHEX2BINOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2BINOds')] public function testHEX2BINOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Hex2BinTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerHex2BinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHex2BinArray')] public function testHex2BinArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php index 7586b43ea..888fba09d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php @@ -27,9 +27,7 @@ class Hex2DecTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerHEX2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2DEC')] public function testDirectCallToHEX2DEC(mixed $expectedResult, bool|float|int|string $value): void { $result = ConvertHex::toDecimal($value); @@ -41,9 +39,7 @@ class Hex2DecTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerHEX2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2DEC')] public function testHEX2DECAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Hex2DecTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerHEX2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2DEC')] public function testHEX2DECInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Hex2DecTest extends TestCase return require 'tests/data/Calculation/Engineering/HEX2DEC.php'; } - /** - * @dataProvider providerUnhappyHEX2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyHEX2DEC')] public function testHEX2DECUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Hex2DecTest extends TestCase ]; } - /** - * @dataProvider providerHEX2DECOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2DECOds')] public function testHEX2DECOds(mixed $expectedResult, bool|float|int|string $value): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Hex2DecTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerHex2DecArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHex2DecArray')] public function testHex2DecArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php index 603d4b2dc..ef02a41cb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php @@ -27,9 +27,7 @@ class Hex2OctTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerHEX2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2OCT')] public function testDirectCallToHEX2OCT(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { $result = ($digits === null) ? ConvertHex::toOctal($value) : ConvertHex::toOctal($value, $digits); @@ -41,9 +39,7 @@ class Hex2OctTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerHEX2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2OCT')] public function testHEX2OCTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Hex2OctTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerHEX2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2OCT')] public function testHEX2OCTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Hex2OctTest extends TestCase return require 'tests/data/Calculation/Engineering/HEX2OCT.php'; } - /** - * @dataProvider providerUnhappyHEX2OCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyHEX2OCT')] public function testHEX2OCTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Hex2OctTest extends TestCase ]; } - /** - * @dataProvider providerHEX2OCTOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHEX2OCTOds')] public function testHEX2OCTOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Hex2OctTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerHex2OctArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHex2OctArray')] public function testHex2OctArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImAbsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImAbsTest.php index 2325a3b13..b1029fa7c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImAbsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImAbsTest.php @@ -15,18 +15,14 @@ class ImAbsTest extends TestCase { const COMPLEX_PRECISION = 1E-12; - /** - * @dataProvider providerIMABS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMABS')] public function testDirectCallToIMABS(float|int|string $expectedResult, string $arg): void { $result = ComplexFunctions::IMABS($arg); self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMABS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMABS')] public function testIMABSAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -38,9 +34,7 @@ class ImAbsTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMABS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMABS')] public function testIMABSInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -63,9 +57,7 @@ class ImAbsTest extends TestCase return require 'tests/data/Calculation/Engineering/IMABS.php'; } - /** - * @dataProvider providerUnhappyIMABS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMABS')] public function testIMABSUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -91,9 +83,7 @@ class ImAbsTest extends TestCase ]; } - /** - * @dataProvider providerImAbsArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImAbsArray')] public function testImAbsArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php index 6b15ddaf9..e701d5a30 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php @@ -21,18 +21,14 @@ class ImArgumentTest extends TestCase Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); } - /** - * @dataProvider providerIMARGUMENT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMARGUMENT')] public function testDirectCallToIMARGUMENT(float|int|string $expectedResult, string $arg): void { $result = ComplexFunctions::IMARGUMENT($arg); self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMARGUMENT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMARGUMENT')] public function testIMARGUMENTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -44,9 +40,7 @@ class ImArgumentTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMARGUMENT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMARGUMENT')] public function testIMARGUMENTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -69,9 +63,7 @@ class ImArgumentTest extends TestCase return require 'tests/data/Calculation/Engineering/IMARGUMENT.php'; } - /** - * @dataProvider providerUnhappyIMARGUMENT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMARGUMENT')] public function testIMARGUMENTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php index 213331eb5..d3588c756 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php @@ -25,9 +25,7 @@ class ImConjugateTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCONJUGATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCONJUGATE')] public function testDirectCallToIMCONJUGATE(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCONJUGATE($arg); @@ -42,9 +40,7 @@ class ImConjugateTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCONJUGATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCONJUGATE')] public function testIMCONJUGATEAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImConjugateTest extends TestCase ); } - /** - * @dataProvider providerIMCONJUGATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCONJUGATE')] public function testIMCONJUGATEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImConjugateTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCONJUGATE.php'; } - /** - * @dataProvider providerUnhappyIMCONJUGATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCONJUGATE')] public function testIMCONJUGATEUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImConjugateTest extends TestCase ]; } - /** - * @dataProvider providerImConjugateArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImConjugateArray')] public function testImConjugateArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php index ef7332f32..77b2e61db 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php @@ -25,9 +25,7 @@ class ImCosTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCOS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOS')] public function testDirectCallToIMCOS(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCOS($arg); @@ -42,9 +40,7 @@ class ImCosTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCOS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOS')] public function testIMCOSAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImCosTest extends TestCase ); } - /** - * @dataProvider providerIMCOS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOS')] public function testIMCOSInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImCosTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCOS.php'; } - /** - * @dataProvider providerUnhappyIMCOS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCOS')] public function testIMCOSUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImCosTest extends TestCase ]; } - /** - * @dataProvider providerImCosArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImCosArray')] public function testImCosArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php index a972e7d1f..be3532cce 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php @@ -25,9 +25,7 @@ class ImCoshTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCOSH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOSH')] public function testDirectCallToIMCOSH(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCOSH($arg); @@ -42,9 +40,7 @@ class ImCoshTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCOSH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOSH')] public function testIMCOSHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImCoshTest extends TestCase ); } - /** - * @dataProvider providerIMCOSH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOSH')] public function testIMCOSHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImCoshTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCOSH.php'; } - /** - * @dataProvider providerUnhappyIMCOSH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCOSH')] public function testIMCOSHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImCoshTest extends TestCase ]; } - /** - * @dataProvider providerImCoshArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImCoshArray')] public function testImCoshArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php index 97f88b604..3cba95456 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php @@ -25,9 +25,7 @@ class ImCotTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOT')] public function testDirectCallToIMCOT(float|string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCOT($arg); @@ -42,9 +40,7 @@ class ImCotTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOT')] public function testIMCOTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImCotTest extends TestCase ); } - /** - * @dataProvider providerIMCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOT')] public function testIMCOTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImCotTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCOT.php'; } - /** - * @dataProvider providerUnhappyIMCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCOT')] public function testIMCOTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImCotTest extends TestCase ]; } - /** - * @dataProvider providerImCotArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImCotArray')] public function testImCotArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php index d694bc9d7..83cc422dc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php @@ -25,9 +25,7 @@ class ImCscTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSC')] public function testDirectCallToIMCSC(float|string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCSC($arg); @@ -42,9 +40,7 @@ class ImCscTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSC')] public function testIMCSCAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImCscTest extends TestCase ); } - /** - * @dataProvider providerIMCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSC')] public function testIMCSCInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImCscTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCSC.php'; } - /** - * @dataProvider providerUnhappyIMCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCSC')] public function testIMCSCUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImCscTest extends TestCase ]; } - /** - * @dataProvider providerImCscArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImCscArray')] public function testImCscArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php index cf1a88817..834fa2a0f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php @@ -25,9 +25,7 @@ class ImCschTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSCH')] public function testDirectCallToIMCSCH(float|string $expectedResult, string $arg): void { $result = ComplexFunctions::IMCSCH($arg); @@ -42,9 +40,7 @@ class ImCschTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSCH')] public function testIMCSCHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImCschTest extends TestCase ); } - /** - * @dataProvider providerIMCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSCH')] public function testIMCSCHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImCschTest extends TestCase return require 'tests/data/Calculation/Engineering/IMCSCH.php'; } - /** - * @dataProvider providerUnhappyIMCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMCSCH')] public function testIMCSCHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImCschTest extends TestCase ]; } - /** - * @dataProvider providerImCschArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImCschArray')] public function testImCschArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php index 9c73efa81..5c709752b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php @@ -25,9 +25,7 @@ class ImDivTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMDIV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMDIV')] public function testDirectCallToIMDIV(string $expectedResult, string $dividend, string $divisor): void { $result = ComplexOperations::IMDIV($dividend, $divisor); @@ -42,9 +40,7 @@ class ImDivTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMDIV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMDIV')] public function testIMDIVAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImDivTest extends TestCase ); } - /** - * @dataProvider providerIMDIV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMDIV')] public function testIMDIVInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImDivTest extends TestCase return require 'tests/data/Calculation/Engineering/IMDIV.php'; } - /** - * @dataProvider providerUnhappyIMDIV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMDIV')] public function testIMDIVUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -117,9 +109,7 @@ class ImDivTest extends TestCase ]; } - /** - * @dataProvider providerImDivArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImDivArray')] public function testImDivArray(array $expectedResult, string $dividend, string $divisor): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php index 23541b2cc..c9b480fb8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php @@ -25,9 +25,7 @@ class ImExpTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMEXP')] public function testDirectCallToIMEXP(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMEXP($arg); @@ -42,9 +40,7 @@ class ImExpTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMEXP')] public function testIMEXPAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImExpTest extends TestCase ); } - /** - * @dataProvider providerIMEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMEXP')] public function testIMEXPInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImExpTest extends TestCase return require 'tests/data/Calculation/Engineering/IMEXP.php'; } - /** - * @dataProvider providerUnhappyIMEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMEXP')] public function testIMEXPUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImExpTest extends TestCase ]; } - /** - * @dataProvider providerImExpArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImExpArray')] public function testImExpArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php index 655ae31c5..0e0c5a558 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php @@ -25,9 +25,7 @@ class ImLnTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLN')] public function testDirectCallToIMLN(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMLN($arg); @@ -42,9 +40,7 @@ class ImLnTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLN')] public function testIMLNAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImLnTest extends TestCase ); } - /** - * @dataProvider providerIMLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLN')] public function testIMLNInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImLnTest extends TestCase return require 'tests/data/Calculation/Engineering/IMLN.php'; } - /** - * @dataProvider providerUnhappyIMLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMLN')] public function testIMLNUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImLnTest extends TestCase ]; } - /** - * @dataProvider providerImLnArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImLnArray')] public function testImLnArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php index c7940c600..08d5a7ffa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php @@ -25,9 +25,7 @@ class ImLog10Test extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG10')] public function testDirectCallToIMLOG10(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMLOG10($arg); @@ -42,9 +40,7 @@ class ImLog10Test extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG10')] public function testIMLOG10AsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImLog10Test extends TestCase ); } - /** - * @dataProvider providerIMLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG10')] public function testIMLOG10InWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImLog10Test extends TestCase return require 'tests/data/Calculation/Engineering/IMLOG10.php'; } - /** - * @dataProvider providerUnhappyIMLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMLOG10')] public function testIMLOG10UnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImLog10Test extends TestCase ]; } - /** - * @dataProvider providerImLog10Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImLog10Array')] public function testImLog10Array(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php index 42ab29cf6..02e6cdbed 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php @@ -25,9 +25,7 @@ class ImLog2Test extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMLOG2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG2')] public function testDirectCallToIMLOG2(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMLOG2($arg); @@ -42,9 +40,7 @@ class ImLog2Test extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMLOG2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG2')] public function testIMLOG2AsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImLog2Test extends TestCase ); } - /** - * @dataProvider providerIMLOG2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG2')] public function testIMLOG2InWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImLog2Test extends TestCase return require 'tests/data/Calculation/Engineering/IMLOG2.php'; } - /** - * @dataProvider providerUnhappyIMLOG2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMLOG2')] public function testIMLOG2UnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImLog2Test extends TestCase ]; } - /** - * @dataProvider providerImLog2Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImLog2Array')] public function testImLog2Array(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php index 4a33ba6a3..edb3a1724 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php @@ -25,9 +25,7 @@ class ImPowerTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPOWER')] public function testDirectCallToIMPOWER(float|int|string $expectedResult, string $arg1, float|int|string $arg2): void { $result = ComplexFunctions::IMPOWER($arg1, $arg2); @@ -42,9 +40,7 @@ class ImPowerTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPOWER')] public function testIMPOWERAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImPowerTest extends TestCase ); } - /** - * @dataProvider providerIMPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPOWER')] public function testIMPOWERInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImPowerTest extends TestCase return require 'tests/data/Calculation/Engineering/IMPOWER.php'; } - /** - * @dataProvider providerUnhappyIMPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMPOWER')] public function testIMPOWERUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImPowerTest extends TestCase ]; } - /** - * @dataProvider providerImPowerArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImPowerArray')] public function testImPowerArray(array $expectedResult, string $complex, string $real): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php index 256498b71..fb7fc7f8d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php @@ -26,10 +26,9 @@ class ImProductTest extends TestCase } /** - * @dataProvider providerIMPRODUCT - * * @param string ...$args variadic arguments */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPRODUCT')] public function testDirectCallToIMPRODUCT(mixed $expectedResult, ...$args): void { $result = ComplexOperations::IMPRODUCT(...$args); @@ -44,9 +43,7 @@ class ImProductTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPRODUCT')] public function testIMPRODUCTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -62,9 +59,7 @@ class ImProductTest extends TestCase ); } - /** - * @dataProvider providerIMPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPRODUCT')] public function testIMPRODUCTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +85,7 @@ class ImProductTest extends TestCase return require 'tests/data/Calculation/Engineering/IMPRODUCT.php'; } - /** - * @dataProvider providerUnhappyIMPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMPRODUCT')] public function testIMPRODUCTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php index 4cbc4a783..57ef95390 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php @@ -21,18 +21,14 @@ class ImRealTest extends TestCase Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); } - /** - * @dataProvider providerIMREAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMREAL')] public function testDirectCallToIMREAL(float|int|string $expectedResult, float|int|string $arg): void { $result = Complex::IMREAL((string) $arg); self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMREAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMREAL')] public function testIMREALAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -44,9 +40,7 @@ class ImRealTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMREAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMREAL')] public function testIMREALInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -69,9 +63,7 @@ class ImRealTest extends TestCase return require 'tests/data/Calculation/Engineering/IMREAL.php'; } - /** - * @dataProvider providerUnhappyIMREAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMREAL')] public function testIMREALUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -97,9 +89,7 @@ class ImRealTest extends TestCase ]; } - /** - * @dataProvider providerImRealArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImRealArray')] public function testImRealArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php index 583b08494..d37552ab7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php @@ -25,9 +25,7 @@ class ImSecTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSEC')] public function testDirectCallToIMSEC(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMSEC($arg); @@ -42,9 +40,7 @@ class ImSecTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSEC')] public function testIMSECAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSecTest extends TestCase ); } - /** - * @dataProvider providerIMSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSEC')] public function testIMSECInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSecTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSEC.php'; } - /** - * @dataProvider providerUnhappyIMSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSEC')] public function testIMSECUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImSecTest extends TestCase ]; } - /** - * @dataProvider providerImSecArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSecArray')] public function testImSecArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php index c1840a427..808388058 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php @@ -25,9 +25,7 @@ class ImSechTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSECH')] public function testDirectCallToIMSECH(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMSECH($arg); @@ -42,9 +40,7 @@ class ImSechTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSECH')] public function testIMSECHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSechTest extends TestCase ); } - /** - * @dataProvider providerIMSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSECH')] public function testIMSECHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSechTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSECH.php'; } - /** - * @dataProvider providerUnhappyIMSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSECH')] public function testIMSECHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImSechTest extends TestCase ]; } - /** - * @dataProvider providerImSecHArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSecHArray')] public function testImSecHArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php index 347d522e1..e413da1e8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php @@ -25,9 +25,7 @@ class ImSinTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSIN')] public function testDirectCallToIMSIN(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMSIN($arg); @@ -42,9 +40,7 @@ class ImSinTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSIN')] public function testIMSINAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSinTest extends TestCase ); } - /** - * @dataProvider providerIMSIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSIN')] public function testIMSINInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSinTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSIN.php'; } - /** - * @dataProvider providerUnhappyIMSIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSIN')] public function testIMSINUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImSinTest extends TestCase ]; } - /** - * @dataProvider providerImSinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSinArray')] public function testImSinArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php index 4198033fa..99b6b6245 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php @@ -25,9 +25,7 @@ class ImSinhTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSINH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSINH')] public function testDirectCallToIMSINH(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMSINH($arg); @@ -42,9 +40,7 @@ class ImSinhTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSINH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSINH')] public function testIMSINHAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSinhTest extends TestCase ); } - /** - * @dataProvider providerIMSINH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSINH')] public function testIMSINHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSinhTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSINH.php'; } - /** - * @dataProvider providerUnhappyIMSINH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSINH')] public function testIMSINHUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImSinhTest extends TestCase ]; } - /** - * @dataProvider providerImSinHArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSinHArray')] public function testImSinHArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php index 7edf1e032..08ee4b78b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php @@ -25,9 +25,7 @@ class ImSqrtTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSQRT')] public function testDirectCallToIMSQRT(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMSQRT($arg); @@ -42,9 +40,7 @@ class ImSqrtTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSQRT')] public function testIMSQRTAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSqrtTest extends TestCase ); } - /** - * @dataProvider providerIMSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSQRT')] public function testIMSQRTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSqrtTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSQRT.php'; } - /** - * @dataProvider providerUnhappyIMSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSQRT')] public function testIMSQRTUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImSqrtTest extends TestCase ]; } - /** - * @dataProvider providerImSqrtArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSqrtArray')] public function testImSqrtArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php index ff95604ed..cfcd5d3bd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php @@ -25,9 +25,7 @@ class ImSubTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMSUB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUB')] public function testDirectCallToIMSUB(string $expectedResult, string $arg1, string $arg2): void { $result = ComplexOperations::IMSUB($arg1, $arg2); @@ -42,9 +40,7 @@ class ImSubTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSUB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUB')] public function testIMSUBAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImSubTest extends TestCase ); } - /** - * @dataProvider providerIMSUB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUB')] public function testIMSUBInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImSubTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSUB.php'; } - /** - * @dataProvider providerUnhappyIMSUB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSUB')] public function testIMSUBUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -117,9 +109,7 @@ class ImSubTest extends TestCase ]; } - /** - * @dataProvider providerImSubArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImSubArray')] public function testImSubArray(array $expectedResult, string $subidend, string $subisor): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php index 625348de6..dbf6a7463 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php @@ -26,10 +26,9 @@ class ImSumTest extends TestCase } /** - * @dataProvider providerIMSUM - * * @param string ...$args variadic arguments */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUM')] public function testDirectCallToIMSUM(mixed $expectedResult, ...$args): void { $result = ComplexOperations::IMSUM(...$args); @@ -44,9 +43,7 @@ class ImSumTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUM')] public function testIMSUMAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -62,9 +59,7 @@ class ImSumTest extends TestCase ); } - /** - * @dataProvider providerIMSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUM')] public function testIMSUMInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +85,7 @@ class ImSumTest extends TestCase return require 'tests/data/Calculation/Engineering/IMSUM.php'; } - /** - * @dataProvider providerUnhappyIMSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMSUM')] public function testIMSUMUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php index 949e42a64..b4d5af1b8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php @@ -25,9 +25,7 @@ class ImTanTest extends TestCase $this->complexAssert = new ComplexAssert(); } - /** - * @dataProvider providerIMTAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMTAN')] public function testDirectCallToIMTAN(string $expectedResult, string $arg): void { $result = ComplexFunctions::IMTAN($arg); @@ -42,9 +40,7 @@ class ImTanTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerIMTAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMTAN')] public function testIMTANAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -60,9 +56,7 @@ class ImTanTest extends TestCase ); } - /** - * @dataProvider providerIMTAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMTAN')] public function testIMTANInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ class ImTanTest extends TestCase return require 'tests/data/Calculation/Engineering/IMTAN.php'; } - /** - * @dataProvider providerUnhappyIMTAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMTAN')] public function testIMTANUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -116,9 +108,7 @@ class ImTanTest extends TestCase ]; } - /** - * @dataProvider providerImTanArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImTanArray')] public function testImTanArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php index f62cc1d89..4f1f7b85e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php @@ -21,18 +21,14 @@ class ImaginaryTest extends TestCase Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); } - /** - * @dataProvider providerIMAGINARY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMAGINARY')] public function testDirectCallToIMAGINARY(float|int|string $expectedResult, float|int|string $arg): void { $result = Complex::IMAGINARY((string) $arg); self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMAGINARY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMAGINARY')] public function testIMAGINARYAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -44,9 +40,7 @@ class ImaginaryTest extends TestCase self::assertEqualsWithDelta($expectedResult, $result, self::COMPLEX_PRECISION); } - /** - * @dataProvider providerIMAGINARY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMAGINARY')] public function testIMAGINARYInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -69,9 +63,7 @@ class ImaginaryTest extends TestCase return require 'tests/data/Calculation/Engineering/IMAGINARY.php'; } - /** - * @dataProvider providerUnhappyIMAGINARY - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyIMAGINARY')] public function testIMAGINARYUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -97,9 +89,7 @@ class ImaginaryTest extends TestCase ]; } - /** - * @dataProvider providerImaginaryArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerImaginaryArray')] public function testImaginaryArray(array $expectedResult, string $complex): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php index 9e02a442f..be2aeaeaf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php @@ -27,9 +27,7 @@ class Oct2BinTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerOCT2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2BIN')] public function testDirectCallToOCT2BIN(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { $result = ($digits === null) ? ConvertOctal::toBinary($value) : ConvertOctal::toBinary($value, $digits); @@ -41,9 +39,7 @@ class Oct2BinTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerOCT2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2BIN')] public function testOCT2BINAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Oct2BinTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerOCT2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2BIN')] public function testOCT2BINInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Oct2BinTest extends TestCase return require 'tests/data/Calculation/Engineering/OCT2BIN.php'; } - /** - * @dataProvider providerUnhappyOCT2BIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyOCT2BIN')] public function testOCT2BINUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Oct2BinTest extends TestCase ]; } - /** - * @dataProvider providerOCT2BINOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2BINOds')] public function testOCT2BINOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Oct2BinTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerOct2BinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOct2BinArray')] public function testOct2BinArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php index 45a868e6a..911aac805 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php @@ -27,9 +27,7 @@ class Oct2DecTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerOCT2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2DEC')] public function testDirectCallToOCT2DEC(mixed $expectedResult, bool|string $value): void { $result = ConvertOctal::toDecimal($value); @@ -41,9 +39,7 @@ class Oct2DecTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerOCT2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2DEC')] public function testOCT2DECAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Oct2DecTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerOCT2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2DEC')] public function testOCT2DECInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Oct2DecTest extends TestCase return require 'tests/data/Calculation/Engineering/OCT2DEC.php'; } - /** - * @dataProvider providerUnhappyOCT2DEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyOCT2DEC')] public function testOCT2DECUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Oct2DecTest extends TestCase ]; } - /** - * @dataProvider providerOCT2DECOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2DECOds')] public function testOCT2DECOds(mixed $expectedResult, bool|string $value): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Oct2DecTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerOct2DecArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOct2DecArray')] public function testOct2DecArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php index a350bd759..94da193a2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php @@ -27,9 +27,7 @@ class Oct2HexTest extends TestCase Functions::setCompatibilityMode($this->compatibilityMode); } - /** - * @dataProvider providerOCT2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2HEX')] public function testDirectCallToOCT2HEX(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { $result = ($digits === null) ? ConvertOctal::toHex($value) : ConvertOctal::toHex($value, $digits); @@ -41,9 +39,7 @@ class Oct2HexTest extends TestCase return trim($value, '"'); } - /** - * @dataProvider providerOCT2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2HEX')] public function testOCT2HEXAsFormula(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -56,9 +52,7 @@ class Oct2HexTest extends TestCase self::assertSame($expectedResult, $this->trimIfQuoted((string) $result)); } - /** - * @dataProvider providerOCT2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2HEX')] public function testOCT2HEXInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -81,9 +75,7 @@ class Oct2HexTest extends TestCase return require 'tests/data/Calculation/Engineering/OCT2HEX.php'; } - /** - * @dataProvider providerUnhappyOCT2HEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUnhappyOCT2HEX')] public function testOCT2HEXUnhappyPath(string $expectedException, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -109,9 +101,7 @@ class Oct2HexTest extends TestCase ]; } - /** - * @dataProvider providerOCT2HEXOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOCT2HEXOds')] public function testOCT2HEXOds(mixed $expectedResult, bool|float|int|string $value, ?int $digits = null): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ class Oct2HexTest extends TestCase self::assertSame(ExcelError::NAN(), $this->trimIfQuoted((string) $result), 'Excel'); } - /** - * @dataProvider providerOct2HexArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOct2HexArray')] public function testOct2HexArray(array $expectedResult, string $value): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php index 07f99cc2d..9889693ad 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class AccrintMTest extends AllSetupTeardown { - /** - * @dataProvider providerACCRINTM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerACCRINTM')] public function testACCRINTM(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('ACCRINTM', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php index 97bd742df..98bc0654f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class AccrintTest extends AllSetupTeardown { - /** - * @dataProvider providerACCRINT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerACCRINT')] public function testACCRINT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('ACCRINT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php index 459b7674a..77153d396 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class AmorDegRcTest extends AllSetupTeardown { - /** - * @dataProvider providerAMORDEGRC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAMORDEGRC')] public function testAMORDEGRC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('AMORDEGRC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php index 95db9bc19..a963c38d8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class AmorLincTest extends AllSetupTeardown { - /** - * @dataProvider providerAMORLINC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAMORLINC')] public function testAMORLINC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('AMORLINC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php index 15633fd8e..3907f268a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupDayBsTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPDAYBS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPDAYBS')] public function testCOUPDAYBS(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPDAYBS', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php index 7696f61f8..848f763de 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupDaysNcTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPDAYSNC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPDAYSNC')] public function testCOUPDAYSNC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPDAYSNC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php index f7ba0e7be..6d5fe6d65 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupDaysTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPDAYS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPDAYS')] public function testCOUPDAYS(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPDAYS', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php index f3f04792f..fd88e6a3a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupNcdTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPNCD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPNCD')] public function testCOUPNCD(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPNCD', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php index 86360ecb3..792ccad44 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupNumTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPNUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPNUM')] public function testCOUPNUM(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPNUM', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php index 8c02ea048..5566e6b73 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CoupPcdTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUPPCD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUPPCD')] public function testCOUPPCD(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('COUPPCD', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php index a27724ab8..7260f1b55 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CumIpmtTest extends AllSetupTeardown { - /** - * @dataProvider providerCUMIPMT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCUMIPMT')] public function testCUMIPMT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('CUMIPMT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php index b241c2940..80059ca19 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class CumPrincTest extends AllSetupTeardown { - /** - * @dataProvider providerCUMPRINC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCUMPRINC')] public function testCUMPRINC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('CUMPRINC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php index 13856c048..6a39933ad 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class DbTest extends AllSetupTeardown { - /** - * @dataProvider providerDB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDB')] public function testDB(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('DB', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php index 5e513ed64..fce33e5c6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class DdbTest extends AllSetupTeardown { - /** - * @dataProvider providerDDB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDDB')] public function testDDB(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('DDB', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php index 317854edc..48ce7159d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class DiscTest extends AllSetupTeardown { - /** - * @dataProvider providerDISC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDISC')] public function testDISC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('DISC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php index c37937740..cd8b091d8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class DollarDeTest extends AllSetupTeardown { - /** - * @dataProvider providerDOLLARDE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDOLLARDE')] public function testDOLLARDE(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('DOLLARDE', $expectedResult, $args); @@ -21,9 +19,7 @@ class DollarDeTest extends AllSetupTeardown return require 'tests/data/Calculation/Financial/DOLLARDE.php'; } - /** - * @dataProvider providerDollarDeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDollarDeArray')] public function testDollarDeArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php index 992b5a64e..c305ab9e8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class DollarFrTest extends AllSetupTeardown { - /** - * @dataProvider providerDOLLARFR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDOLLARFR')] public function testDOLLARFR(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('DOLLARFR', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php index 4811c64c3..049e3de5e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class EffectTest extends AllSetupTeardown { - /** - * @dataProvider providerEFFECT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEFFECT')] public function testEFFECT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('EFFECT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php index bb72492f5..bc2c8b7a0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class FvScheduleTest extends AllSetupTeardown { - /** - * @dataProvider providerFVSCHEDULE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFVSCHEDULE')] public function testFVSCHEDULE(mixed $expectedResult, mixed $principal = null, ?array $schedule = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php index 1dbfee1af..df0c5db07 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class FvTest extends AllSetupTeardown { - /** - * @dataProvider providerFV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFV')] public function testFV(mixed $expectedResult, array $args): void { $this->runTestCase('FV', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php index 1d5087034..4ccf358dd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class HelpersTest extends TestCase { - /** - * @dataProvider providerDaysPerYear - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDaysPerYear')] public function testDaysPerYear(mixed $expectedResult, int $year, int|string $basis): void { $result = Helpers::daysPerYear($year, $basis); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php index 75faf7927..46d611225 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class IPmtTest extends AllSetupTeardown { - /** - * @dataProvider providerIPMT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIPMT')] public function testIPMT(mixed $expectedResult, array $args): void { $this->runTestCase('IPMT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php index fc111f1cd..307f95f22 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class IntRateTest extends AllSetupTeardown { - /** - * @dataProvider providerINTRATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINTRATE')] public function testINTRATE(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('INTRATE', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php index 08d09c587..ade1cbe46 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class IrrTest extends AllSetupTeardown { - /** - * @dataProvider providerIRR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIRR')] public function testIRR(mixed $expectedResult, mixed $values = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php index ea085fb50..2c460a1a0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class IsPmtTest extends AllSetupTeardown { - /** - * @dataProvider providerISPMT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerISPMT')] public function testISPMT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('ISPMT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php index d2a65dd06..ebdf0ac1b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class MirrTest extends AllSetupTeardown { - /** - * @dataProvider providerMIRR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMIRR')] public function testMIRR(mixed $expectedResult, mixed $values, mixed $financeRate = null, mixed $reinvestRate = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php index 302ad808f..8d36412b7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class NPerTest extends AllSetupTeardown { - /** - * @dataProvider providerNPER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNPER')] public function testNPER(mixed $expectedResult, array $args): void { $this->runTestCase('NPER', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php index 302d5a0c1..df805207b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class NominalTest extends AllSetupTeardown { - /** - * @dataProvider providerNOMINAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNOMINAL')] public function testNOMINAL(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('NOMINAL', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php index c43d819bd..77e1efcb6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class NpvTest extends AllSetupTeardown { - /** - * @dataProvider providerNPV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNPV')] public function testNPV(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('NPV', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php index 7c31158e1..d4cc3095c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PDurationTest extends AllSetupTeardown { - /** - * @dataProvider providerPDURATION - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPDURATION')] public function testPDURATION(mixed $expectedResult, array $args): void { $this->runTestCase('PDURATION', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php index ae3f6ea9f..c8adfb83a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PmtTest extends AllSetupTeardown { - /** - * @dataProvider providerPMT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPMT')] public function testPMT(mixed $expectedResult, array $args): void { $this->runTestCase('PMT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php index 820d315d8..dc3d795f6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PpmtTest extends AllSetupTeardown { - /** - * @dataProvider providerPPMT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPPMT')] public function testPPMT(mixed $expectedResult, array $args): void { $this->runTestCase('PPMT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php index 2abb6effb..065299bdb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PriceDiscTest extends AllSetupTeardown { - /** - * @dataProvider providerPRICEDISC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPRICEDISC')] public function testPRICEDISC(mixed $expectedResult, array $args): void { $this->runTestCase('PRICEDISC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php index a30c196b8..b275fc4bf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PriceMatTest extends AllSetupTeardown { - /** - * @dataProvider providerPRICEMAT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPRICEMAT')] public function testPRICEMAT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('PRICEMAT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php index 56328f882..cb22ff8ca 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PriceTest extends AllSetupTeardown { - /** - * @dataProvider providerPRICE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPRICE')] public function testPRICE(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('PRICE', $expectedResult, $args); @@ -19,9 +17,7 @@ class PriceTest extends AllSetupTeardown return require 'tests/data/Calculation/Financial/PRICE.php'; } - /** - * @dataProvider providerPRICE3 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPRICE3')] public function testPRICE3(mixed $expectedResult, mixed ...$args): void { // These results (PRICE function with basis codes 2 and 3) diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php index ffdb1e25b..d095d311b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class PvTest extends AllSetupTeardown { - /** - * @dataProvider providerPV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPV')] public function testPV(mixed $expectedResult, array $args): void { $this->runTestCase('PV', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php index f36437395..02914cdf5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class RateTest extends AllSetupTeardown { - /** - * @dataProvider providerRATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRATE')] public function testRATE(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('RATE', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php index d5ac3000b..fd13f6a72 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class ReceivedTest extends AllSetupTeardown { - /** - * @dataProvider providerRECEIVED - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRECEIVED')] public function testRECEIVED(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('RECEIVED', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php index ccfd7587b..ea08d3772 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class RriTest extends AllSetupTeardown { - /** - * @dataProvider providerRRI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRRI')] public function testRRI(mixed $expectedResult, array $args): void { $this->runTestCase('RRI', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php index abe5a7a9c..3e67a673c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class SlnTest extends AllSetupTeardown { - /** - * @dataProvider providerSLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSLN')] public function testSLN(mixed $expectedResult, array $args): void { $this->runTestCase('SLN', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php index 6b8561771..6a2534dbf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class SydTest extends AllSetupTeardown { - /** - * @dataProvider providerSYD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSYD')] public function testSYD(mixed $expectedResult, array $args): void { $this->runTestCase('SYD', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php index d18aa5285..e67358d1e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class TBillEqTest extends AllSetupTeardown { - /** - * @dataProvider providerTBILLEQ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTBILLEQ')] public function testTBILLEQ(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('TBILLEQ', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php index c8778fc28..62ca8f1f8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class TBillPriceTest extends AllSetupTeardown { - /** - * @dataProvider providerTBILLPRICE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTBILLPRICE')] public function testTBILLPRICE(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('TBILLPRICE', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php index 30d58c327..807d22f9d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class TBillYieldTest extends AllSetupTeardown { - /** - * @dataProvider providerTBILLYIELD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTBILLYIELD')] public function testTBILLYIELD(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('TBILLYIELD', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php index 91714a169..3bb4af043 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class UsDollarTest extends AllSetupTeardown { - /** - * @dataProvider providerUSDOLLAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUSDOLLAR')] public function testUSDOLLAR(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('USDOLLAR', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php index a94a9210d..65c2fce18 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class XNpvTest extends AllSetupTeardown { - /** - * @dataProvider providerXNPV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerXNPV')] public function testXNPV(mixed $expectedResult, mixed $rate = null, mixed $values = null, mixed $dates = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php index d48bd1b61..76275e8f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class XirrTest extends AllSetupTeardown { - /** - * @dataProvider providerXIRR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerXIRR')] public function testXIRR(mixed $expectedResult, mixed $values = null, mixed $dates = null, mixed $guess = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php index 32f843174..cb5c25ca5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class YieldDiscTest extends AllSetupTeardown { - /** - * @dataProvider providerYIELDDISC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYIELDDISC')] public function testYIELDDISC(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('YIELDDISC', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php index 28c554060..73c799cbc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial; class YieldMatTest extends AllSetupTeardown { - /** - * @dataProvider providerYIELDMAT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYIELDMAT')] public function testYIELDMAT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('YIELDMAT', $expectedResult, $args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php index c0e9eb4d0..eae76a1a6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php @@ -16,9 +16,7 @@ class ErrorTypeTest extends TestCase self::assertSame(ExcelError::NA(), $result); } - /** - * @dataProvider providerErrorType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerErrorType')] public function testErrorType(int|string $expectedResult, mixed $value): void { $result = ExcelError::type($value); @@ -30,9 +28,7 @@ class ErrorTypeTest extends TestCase return require 'tests/data/Calculation/Information/ERROR_TYPE.php'; } - /** - * @dataProvider providerErrorTypeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerErrorTypeArray')] public function testErrorTypeArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php index 8a047a59e..495798fd6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php @@ -16,9 +16,7 @@ class IsBlankTest extends TestCase self::assertTrue($result); } - /** - * @dataProvider providerIsBlank - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsBlank')] public function testIsBlank(bool $expectedResult, mixed $value): void { $result = Value::isBlank($value); @@ -30,9 +28,7 @@ class IsBlankTest extends TestCase return require 'tests/data/Calculation/Information/IS_BLANK.php'; } - /** - * @dataProvider providerIsBlankArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsBlankArray')] public function testIsBlankArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php index a24dde86f..5b93149fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php @@ -16,9 +16,7 @@ class IsErrTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsErr - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsErr')] public function testIsErr(bool $expectedResult, mixed $value): void { $result = ErrorValue::isErr($value); @@ -30,9 +28,7 @@ class IsErrTest extends TestCase return require 'tests/data/Calculation/Information/IS_ERR.php'; } - /** - * @dataProvider providerIsErrArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsErrArray')] public function testIsErrArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php index 765cb8e55..526a379cb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php @@ -16,9 +16,7 @@ class IsErrorTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsError - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsError')] public function testIsError(bool $expectedResult, mixed $value): void { $result = ErrorValue::isError($value); @@ -30,9 +28,7 @@ class IsErrorTest extends TestCase return require 'tests/data/Calculation/Information/IS_ERROR.php'; } - /** - * @dataProvider providerIsErrorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsErrorArray')] public function testIsErrorArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php index 0ebf0ed05..c8293d6df 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php @@ -17,9 +17,7 @@ class IsEvenTest extends TestCase self::assertSame(ExcelError::NAME(), $result); } - /** - * @dataProvider providerIsEven - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsEven')] public function testIsEven(bool|string $expectedResult, mixed $value): void { $result = Value::isEven($value); @@ -31,9 +29,7 @@ class IsEvenTest extends TestCase return require 'tests/data/Calculation/Information/IS_EVEN.php'; } - /** - * @dataProvider providerIsEvenArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsEvenArray')] public function testIsEvenArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php index ea53a56dc..e00cccb3b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php @@ -16,9 +16,7 @@ class IsLogicalTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsLogical - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsLogical')] public function testIsLogical(bool $expectedResult, mixed $value): void { $result = Value::isLogical($value); @@ -30,9 +28,7 @@ class IsLogicalTest extends TestCase return require 'tests/data/Calculation/Information/IS_LOGICAL.php'; } - /** - * @dataProvider providerIsLogicalArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsLogicalArray')] public function testIsLogicalArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php index 87e6be25b..72b841367 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php @@ -16,9 +16,7 @@ class IsNaTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsNa - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNa')] public function testIsNa(bool $expectedResult, mixed $value): void { $result = ErrorValue::isNa($value); @@ -30,9 +28,7 @@ class IsNaTest extends TestCase return require 'tests/data/Calculation/Information/IS_NA.php'; } - /** - * @dataProvider providerIsNaArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNaArray')] public function testIsNaArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php index e84c835cc..c639c93a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php @@ -16,9 +16,7 @@ class IsNonTextTest extends TestCase self::assertTrue($result); } - /** - * @dataProvider providerIsNonText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNonText')] public function testIsNonText(bool $expectedResult, mixed $value): void { $result = Value::isNonText($value); @@ -30,9 +28,7 @@ class IsNonTextTest extends TestCase return require 'tests/data/Calculation/Information/IS_NONTEXT.php'; } - /** - * @dataProvider providerIsNonTextArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNonTextArray')] public function testIsNonTextArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php index 91850022c..180fbc22d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php @@ -16,9 +16,7 @@ class IsNumberTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsNumber - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNumber')] public function testIsNumber(bool $expectedResult, mixed $value): void { $result = Value::isNumber($value); @@ -30,9 +28,7 @@ class IsNumberTest extends TestCase return require 'tests/data/Calculation/Information/IS_NUMBER.php'; } - /** - * @dataProvider providerIsNumberArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsNumberArray')] public function testIsNumberArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php index fb94d483c..6ff3d6ec3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php @@ -17,9 +17,7 @@ class IsOddTest extends TestCase self::assertSame(ExcelError::NAME(), $result); } - /** - * @dataProvider providerIsOdd - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsOdd')] public function testIsOdd(bool|string $expectedResult, mixed $value): void { $result = Value::isOdd($value); @@ -31,9 +29,7 @@ class IsOddTest extends TestCase return require 'tests/data/Calculation/Information/IS_ODD.php'; } - /** - * @dataProvider providerIsOddArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsOddArray')] public function testIsOddArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php index 0fee579c0..f75e2ff17 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php @@ -16,9 +16,7 @@ class IsTextTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerIsText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsText')] public function testIsText(bool $expectedResult, mixed $value): void { $result = Value::isText($value); @@ -30,9 +28,7 @@ class IsTextTest extends TestCase return require 'tests/data/Calculation/Information/IS_TEXT.php'; } - /** - * @dataProvider providerIsTextArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsTextArray')] public function testIsTextArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php index 2224ad87a..8c534dba2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php @@ -15,9 +15,7 @@ class NTest extends TestCase self::assertSame(0, $result); } - /** - * @dataProvider providerN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerN')] public function testN(mixed $expectedResult, mixed $value): void { $result = Value::asNumber($value); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php index 4b36ccd6d..63ff4712b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php @@ -15,9 +15,7 @@ class TypeTest extends TestCase self::assertSame(1, $result); } - /** - * @dataProvider providerTYPE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTYPE')] public function testTYPE(int $expectedResult, mixed $value): void { $result = Value::type($value); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php index 277318cf2..e1eb46aa1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Logical; class AndTest extends AllSetupTeardown { - /** - * @dataProvider providerAND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAND')] public function testAND(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('AND', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class AndTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/AND.php'; } - /** - * @dataProvider providerANDLiteral - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerANDLiteral')] public function testANDLiteral(bool|string $expectedResult, float|int|string $formula): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php index 6329c9b0e..adb98070d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class IfErrorTest extends AllSetupTeardown { - /** - * @dataProvider providerIFERROR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIFERROR')] public function testIFERROR(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('IFERROR', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class IfErrorTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/IFERROR.php'; } - /** - * @dataProvider providerIfErrorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIfErrorArray')] public function testIfErrorArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php index a629bd7ab..f0fb8fdaa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class IfNaTest extends AllSetupTeardown { - /** - * @dataProvider providerIFNA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIFNA')] public function testIFNA(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('IFNA', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class IfNaTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/IFNA.php'; } - /** - * @dataProvider providerIfNaArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIfNaArray')] public function testIfNaArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php index fc631043a..ebe5f3b54 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Logical; class IfTest extends AllSetupTeardown { - /** - * @dataProvider providerIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIF')] public function testIF(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('IF', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php index eeb38b9a2..ff52852d8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class IfsTest extends AllSetupTeardown { - /** - * @dataProvider providerIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIFS')] public function testIFS(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('IFS', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class IfsTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/IFS.php'; } - /** - * @dataProvider providerIfsArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIfsArray')] public function testIfsArray(array $expectedResult, string $bool1, string $argument1, string $bool2, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php index db53b3894..a4a071643 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NotTest extends AllSetupTeardown { - /** - * @dataProvider providerNOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNOT')] public function testNOT(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('NOT', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NotTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/NOT.php'; } - /** - * @dataProvider providerNotArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNotArray')] public function testNotArray(array $expectedResult, string $argument1): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php index c54448e03..1b975aa0d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Logical; class OrTest extends AllSetupTeardown { - /** - * @dataProvider providerOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOR')] public function testOR(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('OR', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class OrTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/OR.php'; } - /** - * @dataProvider providerORLiteral - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerORLiteral')] public function testORLiteral(bool|string $expectedResult, float|int|string $formula): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php index c07daa8b4..b1311f38c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SwitchTest extends AllSetupTeardown { - /** - * @dataProvider providerSwitch - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSwitch')] public function testSWITCH(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('SWITCH', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class SwitchTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/SWITCH.php'; } - /** - * @dataProvider providerSwitchArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSwitchArray')] public function testIfsArray(array $expectedResult, int $expression, int $value1, string $result1, int $value2, string $result2, string $default): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php index e319cbb4a..ea4a8bb06 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Logical; class XorTest extends AllSetupTeardown { - /** - * @dataProvider providerXOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerXOR')] public function testXOR(mixed $expectedResult, mixed ...$args): void { $this->runTestCase('XOR', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class XorTest extends AllSetupTeardown return require 'tests/data/Calculation/Logical/XOR.php'; } - /** - * @dataProvider providerXORLiteral - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerXORLiteral')] public function xtestXORLiteral(mixed $expectedResult, string $formula): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php index d7aa9101c..0c9b84e9e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php @@ -24,9 +24,7 @@ class AddressInternationalTest extends AllSetupTeardown parent::tearDown(); } - /** - * @dataProvider providerInternational - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInternational')] public function testR1C1International(string $locale, string $r, string $c): void { if ($locale !== '') { @@ -55,9 +53,7 @@ class AddressInternationalTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCompatibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCompatibility')] public function testCompatibilityInternational(string $compatibilityMode, string $r, string $c): void { Functions::setCompatibilityMode($compatibilityMode); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php index 0bb9833ab..0fa5b2f8d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class AddressTest extends TestCase { - /** - * @dataProvider providerADDRESS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerADDRESS')] public function testADDRESS(mixed $expectedResult, mixed ...$args): void { $result = LookupRef\Address::cell(...$args); @@ -24,9 +22,7 @@ class AddressTest extends TestCase return require 'tests/data/Calculation/LookupRef/ADDRESS.php'; } - /** - * @dataProvider providerAddressArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAddressArray')] public function testAddressArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php index 7a495a5ca..815ee8f2d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class ChooseTest extends TestCase { - /** - * @dataProvider providerCHOOSE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHOOSE')] public function testCHOOSE(mixed $expectedResult, mixed ...$args): void { $result = LookupRef\Selection::choose(...$args); @@ -24,9 +22,7 @@ class ChooseTest extends TestCase return require 'tests/data/Calculation/LookupRef/CHOOSE.php'; } - /** - * @dataProvider providerChooseArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerChooseArray')] public function testChooseArray(array $expectedResult, string $values, array $selections): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php index de7a6cc22..3382a1e38 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\NamedRange; class ColumnOnSpreadsheetTest extends AllSetupTeardown { - /** - * @dataProvider providerCOLUMNonSpreadsheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOLUMNonSpreadsheet')] public function testColumnOnSpreadsheet(mixed $expectedResult, string $cellReference = 'omitted'): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php index 9b007b0a9..eb16ae6d8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\LookupRef; class ColumnTest extends AllSetupTeardown { - /** - * @dataProvider providerCOLUMN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOLUMN')] public function testCOLUMN(mixed $expectedResult, null|array|string $cellReference = null): void { $result = LookupRef\RowColumnInformation::COLUMN($cellReference); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php index 76c866e5c..f3814d4f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\NamedRange; class ColumnsOnSpreadsheetTest extends AllSetupTeardown { - /** - * @dataProvider providerCOLUMNSonSpreadsheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOLUMNSonSpreadsheet')] public function testColumnsOnSpreadsheet(mixed $expectedResult, string $cellReference = 'omitted'): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php index 641119a9d..74696967d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class ColumnsTest extends TestCase { - /** - * @dataProvider providerCOLUMNS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOLUMNS')] public function testCOLUMNS(mixed $expectedResult, null|array|string $arg): void { $result = LookupRef\RowColumnInformation::COLUMNS($arg); @@ -24,9 +22,7 @@ class ColumnsTest extends TestCase return require 'tests/data/Calculation/LookupRef/COLUMNS.php'; } - /** - * @dataProvider providerColumnsArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColumnsArray')] public function testColumnsArray(int $expectedResult, string $argument): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php index 23a52cab3..0b13cc8fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php @@ -11,9 +11,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\LookupRef\Formula; */ class FormulaTextTest extends AllSetupTeardown { - /** - * @dataProvider providerFormulaText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormulaText')] public function testFormulaText(string $expectedResult, mixed $value): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php index 682a12e02..679cbe28b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; class HLookupTest extends TestCase { - /** - * @dataProvider providerHLOOKUP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHLOOKUP')] public function testHLOOKUP(mixed $expectedResult, mixed $lookup, array $values, mixed $rowIndex, ?bool $rangeLookup = null): void { $spreadsheet = new Spreadsheet(); @@ -72,9 +70,7 @@ class HLookupTest extends TestCase return require 'tests/data/Calculation/LookupRef/HLOOKUP.php'; } - /** - * @dataProvider providerHLookupNamedRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHLookupNamedRange')] public function testHLookupNamedRange(string $expectedResult, string $cellAddress): void { $lookupData = [ @@ -110,9 +106,7 @@ class HLookupTest extends TestCase ]; } - /** - * @dataProvider providerHLookupArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHLookupArray')] public function testHLookupArray(array $expectedResult, string $values, string $database, string $index): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HyperlinkTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HyperlinkTest.php index 5e8420e14..7e8f7d157 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HyperlinkTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HyperlinkTest.php @@ -11,9 +11,7 @@ class HyperlinkTest extends AllSetupTeardown { private bool $issue2464 = true; - /** - * @dataProvider providerHYPERLINK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHYPERLINK')] public function testHYPERLINK(mixed $expectedResult, ?string $linkUrl, ?string $description): void { $this->mightHaveException($expectedResult); @@ -39,9 +37,7 @@ class HyperlinkTest extends AllSetupTeardown } } - /** - * @dataProvider providerHYPERLINK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHYPERLINK')] public function testHYPERLINKcellRef(mixed $expectedResult, ?string $linkUrl, ?string $description): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php index 3f508405a..08cf905c5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\LookupRef; class IndexOnSpreadsheetTest extends AllSetupTeardown { - /** - * @dataProvider providerINDEXonSpreadsheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINDEXonSpreadsheet')] public function testIndexOnSpreadsheet(mixed $expectedResult, array $matrix, null|int|string $rowNum = null, null|int|string $colNum = null): void { $this->mightHaveException($expectedResult); @@ -35,9 +33,7 @@ class IndexOnSpreadsheetTest extends AllSetupTeardown return require 'tests/data/Calculation/LookupRef/INDEXonSpreadsheet.php'; } - /** - * @dataProvider providerIndexLiteralArrays - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIndexLiteralArrays')] public function testLiteralArrays(mixed $expectedResult, string $indexArgs): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php index 9b3f5de2e..930bfd8a9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class IndexTest extends TestCase { - /** - * @dataProvider providerINDEX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINDEX')] public function testINDEX(mixed $expectedResult, mixed $matrix, mixed $rowNum = null, mixed $colNum = null): void { if ($rowNum === null) { @@ -31,9 +29,7 @@ class IndexTest extends TestCase return require 'tests/data/Calculation/LookupRef/INDEX.php'; } - /** - * @dataProvider providerIndexArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIndexArray')] public function testIndexArray(array $expectedResult, string $matrix, string $rows, string $columns): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php index e0624ed8d..556b7c653 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php @@ -24,9 +24,7 @@ class IndirectInternationalTest extends AllSetupTeardown parent::tearDown(); } - /** - * @dataProvider providerInternational - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInternational')] public function testR1C1International(string $locale): void { Settings::setLocale($locale); @@ -79,9 +77,7 @@ class IndirectInternationalTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerRelativeInternational - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRelativeInternational')] public function testRelativeInternational(string $locale, string $cell, string $relative): void { Settings::setLocale($locale); @@ -101,9 +97,7 @@ class IndirectInternationalTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCompatibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCompatibility')] public function testCompatibilityInternational(string $compatibilityMode): void { Functions::setCompatibilityMode($compatibilityMode); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php index 4b29a787c..2ffa01381 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php @@ -10,9 +10,7 @@ use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx; class IndirectTest extends AllSetupTeardown { - /** - * @dataProvider providerINDIRECT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINDIRECT')] public function testINDIRECT(mixed $expectedResult, mixed $cellReference = 'omitted', mixed $a1 = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -132,9 +130,7 @@ class IndirectTest extends AllSetupTeardown self::assertSame('This is it', $result); } - /** - * @dataProvider providerRelative - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRelative')] public function testR1C1Relative(string|int|null $expectedResult, string $address): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php index 7194fe380..6e6c67437 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class LookupTest extends TestCase { - /** - * @dataProvider providerLOOKUP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOOKUP')] public function testLOOKUP(mixed $expectedResult, mixed ...$args): void { $result = LookupRef\Lookup::lookup(...$args); @@ -25,9 +23,7 @@ class LookupTest extends TestCase return require 'tests/data/Calculation/LookupRef/LOOKUP.php'; } - /** - * @dataProvider providerLookupArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLookupArray')] public function testLookupArray(array $expectedResult, string $values, string $lookup, string $return): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php index 211680f7d..2acbccf40 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class MatchTest extends AllSetupTeardown { - /** - * @dataProvider providerMATCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMATCH')] public function testMATCH(mixed $expectedResult, mixed $input, array $array, null|float|int|string $type = null): void { if (is_array($expectedResult)) { @@ -39,9 +37,7 @@ class MatchTest extends AllSetupTeardown self::assertEquals($expectedResult, $result); } - /** - * @dataProvider providerMATCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMATCH')] public function testMATCHLibre(mixed $expectedResult, mixed $input, array $array, null|float|int|string $type = null): void { $this->setOpenOffice(); @@ -76,9 +72,7 @@ class MatchTest extends AllSetupTeardown return require 'tests/data/Calculation/LookupRef/MATCH.php'; } - /** - * @dataProvider providerMatchArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMatchArray')] public function testMatchArray(array $expectedResult, string $values, string $selections): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php index 62e3b0357..eeb2cec49 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php @@ -9,18 +9,14 @@ use PHPUnit\Framework\TestCase; class MatrixHelperFunctionsTest extends TestCase { - /** - * @dataProvider columnVectorProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('columnVectorProvider')] public function testIsColumnVector(bool $expectedResult, array $array): void { $result = Matrix::isColumnVector($array); self::assertSame($expectedResult, $result); } - /** - * @dataProvider rowVectorProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rowVectorProvider')] public function testIsRowVector(bool $expectedResult, array $array): void { $result = Matrix::isRowVector($array); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php index 2bf7f67bc..c6a66c4c2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\NamedRange; class OffsetTest extends AllSetupTeardown { - /** - * @dataProvider providerOFFSET - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOFFSET')] public function testOFFSET(mixed $expectedResult, null|string $cellReference = null): void { $result = LookupRef\Offset::OFFSET($cellReference); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php index 53fdbf087..ca22fdcc8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\NamedRange; class RowOnSpreadsheetTest extends AllSetupTeardown { - /** - * @dataProvider providerROWonSpreadsheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerROWonSpreadsheet')] public function testRowOnSpreadsheet(mixed $expectedResult, string $cellReference = 'omitted'): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php index fbc4c12d6..9d8d8c393 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\LookupRef; class RowTest extends AllSetupTeardown { - /** - * @dataProvider providerROW - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerROW')] public function testROW(mixed $expectedResult, null|array|string $cellReference = null): void { $result = LookupRef\RowColumnInformation::ROW($cellReference); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php index 5d21d9fc7..aeb589c4d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\NamedRange; class RowsOnSpreadsheetTest extends AllSetupTeardown { - /** - * @dataProvider providerROWSonSpreadsheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerROWSonSpreadsheet')] public function testRowsOnSpreadsheet(mixed $expectedResult, string $cellReference = 'omitted'): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php index 11781aabc..312304f60 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class RowsTest extends TestCase { - /** - * @dataProvider providerROWS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerROWS')] public function testROWS(mixed $expectedResult, null|array|string $arg): void { $result = LookupRef\RowColumnInformation::ROWS($arg); @@ -24,9 +22,7 @@ class RowsTest extends TestCase return require 'tests/data/Calculation/LookupRef/ROWS.php'; } - /** - * @dataProvider providerRowsArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRowsArray')] public function testRowsArray(int $expectedResult, string $argument): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php index 99e0a6e45..7d2ba3ec7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php @@ -18,9 +18,7 @@ class SortByTest extends TestCase self::assertSame($value, $result); } - /** - * @dataProvider providerSortWithScalarArgumentErrorReturns - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortWithScalarArgumentErrorReturns')] public function testSortByWithArgumentErrorReturns(mixed $sortIndex, mixed $sortOrder = 1): void { $value = [[1, 2], [3, 4], [5, 6]]; @@ -41,9 +39,7 @@ class SortByTest extends TestCase ]; } - /** - * @dataProvider providerSortByRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortByRow')] public function testSortByRow(array $expectedResult, array $matrix, mixed ...$args): void { $result = Sort::sortBy($matrix, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php index 8334c20bf..2670caa16 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php @@ -18,9 +18,7 @@ class SortTest extends TestCase self::assertSame($value, $result); } - /** - * @dataProvider providerSortWithScalarArgumentErrorReturns - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortWithScalarArgumentErrorReturns')] public function testSortWithScalarArgumentErrorReturns(mixed $sortIndex, mixed $sortOrder = 1): void { $value = [[1, 2], [3, 4], [5, 6]]; @@ -48,9 +46,7 @@ class SortTest extends TestCase ]; } - /** - * @dataProvider providerSortByRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortByRow')] public function testSortByRow(array $expectedResult, array $matrix, int $sortIndex, int $sortOrder = Sort::ORDER_ASCENDING): void { $result = Sort::sort($matrix, $sortIndex, $sortOrder); @@ -79,9 +75,7 @@ class SortTest extends TestCase ]; } - /** - * @dataProvider providerSortByRowMultiLevel - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortByRowMultiLevel')] public function testSortByRowMultiLevel(array $expectedResult, array $matrix, array $sortIndex, int $sortOrder = Sort::ORDER_ASCENDING): void { $result = Sort::sort($matrix, $sortIndex, $sortOrder); @@ -148,9 +142,7 @@ class SortTest extends TestCase ]; } - /** - * @dataProvider providerSortByColumn - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSortByColumn')] public function testSortByColumn(array $expectedResult, array $matrix, int $sortIndex, int $sortOrder): void { $result = Sort::sort($matrix, $sortIndex, $sortOrder, true); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php index 189269569..67d0c2bde 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php @@ -15,9 +15,7 @@ class TransposeTest extends TestCase Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); } - /** - * @dataProvider providerTRANSPOSE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTRANSPOSE')] public function testTRANSPOSE(mixed $expectedResult, mixed $matrix): void { $result = LookupRef\Matrix::transpose($matrix); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php index c7996ea2a..3a38248be 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class UniqueTest extends TestCase { - /** - * @dataProvider uniqueTestProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('uniqueTestProvider')] public function testUnique(array $expectedResult, array $lookupRef, bool $byColumn = false, bool $exactlyOnce = false): void { $result = LookupRef\Unique::unique($lookupRef, $byColumn, $exactlyOnce); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php index ad320dfd0..169f203a0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class VLookupTest extends TestCase { - /** - * @dataProvider providerVLOOKUP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVLOOKUP')] public function testVLOOKUP(mixed $expectedResult, mixed $value, mixed $table, mixed $index, ?bool $lookup = null): void { $spreadsheet = new Spreadsheet(); @@ -50,9 +48,7 @@ class VLookupTest extends TestCase return require 'tests/data/Calculation/LookupRef/VLOOKUP.php'; } - /** - * @dataProvider providerVLookupArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVLookupArray')] public function testVLookupArray(array $expectedResult, string $values, string $database, string $index): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php index e16a05d77..e3561996f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AbsTest extends AllSetupTeardown { - /** - * @dataProvider providerAbs - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAbs')] public function testAbs(mixed $expectedResult, mixed $number = 'omitted'): void { $sheet = $this->getSheet(); @@ -30,9 +28,7 @@ class AbsTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ABS.php'; } - /** - * @dataProvider providerAbsArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAbsArray')] public function testAbsoluteArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php index 8ba2e2a3a..c4214f587 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AcosTest extends AllSetupTeardown { - /** - * @dataProvider providerAcos - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcos')] public function testAcos(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AcosTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ACOS.php'; } - /** - * @dataProvider providerAcosArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcosArray')] public function testAcosArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php index 98ca3353c..9a31fa8d1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AcoshTest extends AllSetupTeardown { - /** - * @dataProvider providerAcosh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcosh')] public function testAcosh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AcoshTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ACOSH.php'; } - /** - * @dataProvider providerAcoshArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcoshArray')] public function testAcoshArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php index 8e508aa15..3b85fff8f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AcotTest extends AllSetupTeardown { - /** - * @dataProvider providerACOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerACOT')] public function testACOT(float|int|string $expectedResult, float|int|string $number): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class AcotTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ACOT.php'; } - /** - * @dataProvider providerAcotArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcotArray')] public function testAcotArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php index 85ccdf44a..1475d77d2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AcothTest extends AllSetupTeardown { - /** - * @dataProvider providerACOTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerACOTH')] public function testACOTH(float|int|string $expectedResult, float|int|string $number): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class AcothTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ACOTH.php'; } - /** - * @dataProvider providerAcothArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAcothArray')] public function testAcothArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php index d5fd394a7..60e108272 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ArabicTest extends AllSetupTeardown { - /** - * @dataProvider providerARABIC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerARABIC')] public function testARABIC(mixed $expectedResult, string $romanNumeral): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class ArabicTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ARABIC.php'; } - /** - * @dataProvider providerArabicArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerArabicArray')] public function testArabicArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php index 6024504c4..cbf991494 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AsinTest extends AllSetupTeardown { - /** - * @dataProvider providerAsin - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsin')] public function testAsin(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AsinTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ASIN.php'; } - /** - * @dataProvider providerAsinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsinArray')] public function testAsinArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php index 019ffb550..2795b36a8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AsinhTest extends AllSetupTeardown { - /** - * @dataProvider providerAsinh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsinh')] public function testAsinh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AsinhTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ASINH.php'; } - /** - * @dataProvider providerAsinhArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsinhArray')] public function testAsinhArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php index be37fdd24..bbfa4da2d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class Atan2Test extends AllSetupTeardown { - /** - * @dataProvider providerATAN2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerATAN2')] public function testATAN2(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -27,9 +25,7 @@ class Atan2Test extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ATAN2.php'; } - /** - * @dataProvider providerAtan2Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAtan2Array')] public function testAtan2Array(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php index d4156d6c2..7c217f81b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AtanTest extends AllSetupTeardown { - /** - * @dataProvider providerAtan - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAtan')] public function testAtan(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AtanTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ATAN.php'; } - /** - * @dataProvider providerAtanArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAtanArray')] public function testAtanArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php index 0433535e3..3a121aa94 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class AtanhTest extends AllSetupTeardown { - /** - * @dataProvider providerAtanh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAtanh')] public function testAtanh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class AtanhTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ATANH.php'; } - /** - * @dataProvider providerAtanhArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAtanhArray')] public function testAtanhArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php index 77b661c66..a1c5e4e0b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BaseTest extends AllSetupTeardown { - /** - * @dataProvider providerBASE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBASE')] public function testBASE(mixed $expectedResult, mixed $arg1 = 'omitted', mixed $arg2 = 'omitted', mixed $arg3 = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -42,9 +40,7 @@ class BaseTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/BASE.php'; } - /** - * @dataProvider providerBaseArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBaseArray')] public function testBaseArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php index 384600d5b..78d947e17 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CeilingMathTest extends AllSetupTeardown { - /** - * @dataProvider providerCEILINGMATH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCEILINGMATH')] public function testCEILINGMATH(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CeilingMathTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/CEILINGMATH.php'; } - /** - * @dataProvider providerCeilingArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCeilingArray')] public function testCeilingArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php index d6e60e529..922500c81 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CeilingPreciseTest extends AllSetupTeardown { - /** - * @dataProvider providerFLOORPRECISE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFLOORPRECISE')] public function testCEILINGPRECISE(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CeilingPreciseTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/CEILINGPRECISE.php'; } - /** - * @dataProvider providerCeilingArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCeilingArray')] public function testCeilingArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php index ba246a03e..72cac5582 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CeilingTest extends AllSetupTeardown { - /** - * @dataProvider providerCEILING - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCEILING')] public function testCEILING(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -56,9 +54,7 @@ class CeilingTest extends AllSetupTeardown self::assertEqualsWithDelta(6, $result, 1E-12); } - /** - * @dataProvider providerCeilingArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCeilingArray')] public function testCeilingArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php index bc3d41ba8..0dced2da8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CombinATest extends AllSetupTeardown { - /** - * @dataProvider providerCOMBINA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOMBINA')] public function testCOMBINA(mixed $expectedResult, mixed $numObjs, mixed $numInSet): void { $this->mightHaveException($expectedResult); @@ -31,9 +29,7 @@ class CombinATest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COMBINA.php'; } - /** - * @dataProvider providerCombinAArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCombinAArray')] public function testCombinAArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php index 6c4cdfa26..ffe44293a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CombinTest extends AllSetupTeardown { - /** - * @dataProvider providerCOMBIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOMBIN')] public function testCOMBIN(mixed $expectedResult, mixed $numObjs, mixed $numInSet): void { $this->mightHaveException($expectedResult); @@ -31,9 +29,7 @@ class CombinTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COMBIN.php'; } - /** - * @dataProvider providerCombinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCombinArray')] public function testCombinArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php index 0f5513d2d..538e2a964 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CosTest extends AllSetupTeardown { - /** - * @dataProvider providerCos - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCos')] public function testCos(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class CosTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COS.php'; } - /** - * @dataProvider providerCosArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCosArray')] public function testCosArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php index 0239c1ee6..40611d754 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CoshTest extends AllSetupTeardown { - /** - * @dataProvider providerCosh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCosh')] public function testCosh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class CoshTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COSH.php'; } - /** - * @dataProvider providerCoshArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCoshArray')] public function testCoshArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php index d47520334..c62a76bef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CotTest extends AllSetupTeardown { - /** - * @dataProvider providerCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOT')] public function testCOT(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CotTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COT.php'; } - /** - * @dataProvider providerCotArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCotArray')] public function testCotArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php index d41b09370..445d97b44 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CothTest extends AllSetupTeardown { - /** - * @dataProvider providerCOTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOTH')] public function testCOTH(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CothTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/COTH.php'; } - /** - * @dataProvider providerCothArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCothArray')] public function testCothArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php index 5cf58296e..9e835b503 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CscTest extends AllSetupTeardown { - /** - * @dataProvider providerCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCSC')] public function testCSC(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CscTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/CSC.php'; } - /** - * @dataProvider providerCscArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCscArray')] public function testCscArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php index 5865c4c82..77237729e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CschTest extends AllSetupTeardown { - /** - * @dataProvider providerCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCSCH')] public function testCSCH(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class CschTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/CSCH.php'; } - /** - * @dataProvider providerCschArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCschArray')] public function testCschArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php index 14d3d72bd..b6f546266 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class DegreesTest extends AllSetupTeardown { - /** - * @dataProvider providerDEGREES - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEGREES')] public function testDegrees(mixed $expectedResult, mixed $number = 'omitted'): void { $sheet = $this->getSheet(); @@ -30,9 +28,7 @@ class DegreesTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/DEGREES.php'; } - /** - * @dataProvider providerDegreesArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDegreesArray')] public function testDegreesArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php index 4f56e921a..653e4d083 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class EvenTest extends AllSetupTeardown { - /** - * @dataProvider providerEVEN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEVEN')] public function testEVEN(int|string $expectedResult, float|int|string $value): void { $this->mightHaveException($expectedResult); @@ -25,9 +23,7 @@ class EvenTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/EVEN.php'; } - /** - * @dataProvider providerEvenArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEvenArray')] public function testEvenArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php index 7af6b3b09..188acd934 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ExpTest extends AllSetupTeardown { - /** - * @dataProvider providerEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEXP')] public function testEXP(mixed $expectedResult, mixed $number = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -32,9 +30,7 @@ class ExpTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/EXP.php'; } - /** - * @dataProvider providerExpArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExpArray')] public function testExpArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php index e405c5d0f..15f8159a2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FactDoubleTest extends AllSetupTeardown { - /** - * @dataProvider providerFACTDOUBLE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFACTDOUBLE')] public function testFACTDOUBLE(mixed $expectedResult, mixed $value): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class FactDoubleTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/FACTDOUBLE.php'; } - /** - * @dataProvider providerFactDoubleArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFactDoubleArray')] public function testFactDoubleArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactTest.php index 1b1dbdb5c..3ff4da971 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactTest.php @@ -10,9 +10,7 @@ class FactTest extends AllSetupTeardown { const FACT_PRECISION = 1E-12; - /** - * @dataProvider providerFACT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFACT')] public function testFACT(mixed $expectedResult, mixed $arg1): void { $this->mightHaveException($expectedResult); @@ -34,9 +32,7 @@ class FactTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/FACT.php'; } - /** - * @dataProvider providerFACTGnumeric - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFACTGnumeric')] public function testFACTGnumeric(mixed $expectedResult, mixed $arg1): void { $this->mightHaveException($expectedResult); @@ -59,9 +55,7 @@ class FactTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/FACTGNUMERIC.php'; } - /** - * @dataProvider providerFactArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFactArray')] public function testFactArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php index f91076a23..5f528cc86 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FloorMathTest extends AllSetupTeardown { - /** - * @dataProvider providerFLOORMATH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFLOORMATH')] public function testFLOORMATH(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class FloorMathTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/FLOORMATH.php'; } - /** - * @dataProvider providerFloorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFloorArray')] public function testFloorArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php index 3a43822e9..74d3ce406 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FloorPreciseTest extends AllSetupTeardown { - /** - * @dataProvider providerFLOORPRECISE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFLOORPRECISE')] public function testFLOORPRECISE(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class FloorPreciseTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/FLOORPRECISE.php'; } - /** - * @dataProvider providerFloorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFloorArray')] public function testFloorArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php index 3d56fb328..df19f229e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FloorTest extends AllSetupTeardown { - /** - * @dataProvider providerFLOOR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFLOOR')] public function testFLOOR(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -56,9 +54,7 @@ class FloorTest extends AllSetupTeardown self::assertEqualsWithDelta(5, $result, 1E-12); } - /** - * @dataProvider providerFloorArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFloorArray')] public function testFloorArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php index e7684ba14..20103cbfd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class GcdTest extends AllSetupTeardown { - /** - * @dataProvider providerGCD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGCD')] public function testGCD(mixed $expectedResult, mixed ...$args): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php index 7f551e343..0e81fcafb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class IntTest extends AllSetupTeardown { - /** - * @dataProvider providerINT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINT')] public function testINT(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class IntTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/INT.php'; } - /** - * @dataProvider providerIntArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIntArray')] public function testIntArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php index 13d3b9940..d27358f5c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class LcmTest extends AllSetupTeardown { - /** - * @dataProvider providerLCM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLCM')] public function testLCM(mixed $expectedResult, mixed ...$args): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php index ca7eb78e8..774e2bc83 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LnTest extends AllSetupTeardown { - /** - * @dataProvider providerLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLN')] public function testLN(mixed $expectedResult, mixed $number = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -32,9 +30,7 @@ class LnTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/LN.php'; } - /** - * @dataProvider providerLnArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLnArray')] public function testLnArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php index 63ff4e952..52635d426 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class Log10Test extends AllSetupTeardown { - /** - * @dataProvider providerLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOG10')] public function testLOG10(mixed $expectedResult, mixed $number = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -32,9 +30,7 @@ class Log10Test extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/LOG10.php'; } - /** - * @dataProvider providerLog10Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLog10Array')] public function testLog10Array(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php index 69cd275be..62afdd287 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LogTest extends AllSetupTeardown { - /** - * @dataProvider providerLOG - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOG')] public function testLOG(mixed $expectedResult, mixed $number = 'omitted', mixed $base = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -37,9 +35,7 @@ class LogTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/LOG.php'; } - /** - * @dataProvider providerLogArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLogArray')] public function testLogArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php index 63c118572..cc98cab1a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\MathTrig; class MInverseTest extends AllSetupTeardown { - /** - * @dataProvider providerMINVERSE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINVERSE')] public function testMINVERSE(mixed $expectedResult, array $args): void { $result = MathTrig\MatrixFunctions::inverse($args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php index 86ee26fd9..8925151f7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\MathTrig; class MMultTest extends AllSetupTeardown { - /** - * @dataProvider providerMMULT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMMULT')] public function testMMULT(mixed $expectedResult, mixed ...$args): void { $result = MathTrig\MatrixFunctions::multiply(...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php index eab6e20ae..32020c71f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class MRoundTest extends AllSetupTeardown { - /** - * @dataProvider providerMROUND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMROUND')] public function testMROUND(float|int|string $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class MRoundTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/MROUND.php'; } - /** - * @dataProvider providerMRoundArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMRoundArray')] public function testMRoundArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php index cd9b090a9..f171cf6f8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class MdeTermTest extends AllSetupTeardown { - /** - * @dataProvider providerMDETERM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMDETERM')] public function testMDETERM2(float|int|string $expectedResult, array|int|float|string $matrix): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php index f33b88650..bbedd1f3d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ModTest extends AllSetupTeardown { - /** - * @dataProvider providerMOD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMOD')] public function testMOD(mixed $expectedResult, mixed $dividend = 'omitted', mixed $divisor = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -37,9 +35,7 @@ class ModTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/MOD.php'; } - /** - * @dataProvider providerModArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerModArray')] public function testModArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php index ce189b44e..695d63c79 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class MultinomialTest extends AllSetupTeardown { - /** - * @dataProvider providerMULTINOMIAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMULTINOMIAL')] public function testMULTINOMIAL(mixed $expectedResult, mixed ...$args): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php index d73235a7c..a61259643 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class OddTest extends AllSetupTeardown { - /** - * @dataProvider providerODD - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerODD')] public function testODD(int|string $expectedResult, float|int|string $value): void { $this->mightHaveException($expectedResult); @@ -25,9 +23,7 @@ class OddTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ODD.php'; } - /** - * @dataProvider providerOddArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOddArray')] public function testOddArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php index 130f02f98..71337d1b5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class PiTest extends AllSetupTeardown { - /** - * @dataProvider providerPI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPI')] public function testPI(mixed $expectedResult, mixed $number = 'omitted'): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php index 0bf42f09a..abf9f7ef3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class PowerTest extends AllSetupTeardown { - /** - * @dataProvider providerPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPOWER')] public function testPOWER(mixed $expectedResult, mixed $base = 'omitted', mixed $exponent = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -37,9 +35,7 @@ class PowerTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/POWER.php'; } - /** - * @dataProvider providerPowerArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPowerArray')] public function testPowerArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php index 7b4bc296e..34bbf0db9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class ProductTest extends AllSetupTeardown { - /** - * @dataProvider providerPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPRODUCT')] public function testPRODUCT(mixed $expectedResult, mixed ...$args): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php index 84c2856be..eb5827d5b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class QuotientTest extends AllSetupTeardown { - /** - * @dataProvider providerQUOTIENT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerQUOTIENT')] public function testQUOTIENT(mixed $expectedResult, mixed $arg1 = 'omitted', mixed $arg2 = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -37,9 +35,7 @@ class QuotientTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/QUOTIENT.php'; } - /** - * @dataProvider providerQuotientArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerQuotientArray')] public function testQuotientArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php index fb3c784eb..63dfb7fd0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RadiansTest extends AllSetupTeardown { - /** - * @dataProvider providerRADIANS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRADIANS')] public function testRADIANS(mixed $expectedResult, mixed $number = 'omitted'): void { $sheet = $this->getSheet(); @@ -30,9 +28,7 @@ class RadiansTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/RADIANS.php'; } - /** - * @dataProvider providerRadiansArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRadiansArray')] public function testRadiansArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php index 6086685f9..9b64991b5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RandBetweenTest extends AllSetupTeardown { - /** - * @dataProvider providerRANDBETWEEN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRANDBETWEEN')] public function testRANDBETWEEN(int|string $expectedResult, null|bool|int|string $min = 'omitted', null|bool|int|string $max = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -44,9 +42,7 @@ class RandBetweenTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/RANDBETWEEN.php'; } - /** - * @dataProvider providerRandBetweenArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRandBetweenArray')] public function testRandBetweenArray( int $expectedRows, int $expectedColumns, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php index de8be1b07..57096ac27 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RomanTest extends AllSetupTeardown { - /** - * @dataProvider providerROMAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerROMAN')] public function testROMAN(string $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class RomanTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ROMAN.php'; } - /** - * @dataProvider providerRomanArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRomanArray')] public function testRomanArray(array $expectedResult, string $values, string $styles): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php index 2f5945d3f..7c440df13 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RoundDownTest extends AllSetupTeardown { - /** - * @dataProvider providerRoundDown - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRoundDown')] public function testRoundDown(float|int|string $expectedResult, float|int|string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class RoundDownTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ROUNDDOWN.php'; } - /** - * @dataProvider providerRoundDownArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRoundDownArray')] public function testRoundDownArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php index 91dcc8610..c10c982d1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RoundTest extends AllSetupTeardown { - /** - * @dataProvider providerRound - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRound')] public function testRound(float|int|string $expectedResult, float|int|string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class RoundTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ROUND.php'; } - /** - * @dataProvider providerRoundArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRoundArray')] public function testRoundArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php index 79a32ed68..d7629357b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class RoundUpTest extends AllSetupTeardown { - /** - * @dataProvider providerRoundUp - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRoundUp')] public function testRoundUp(float|int|string $expectedResult, float|int|string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class RoundUpTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/ROUNDUP.php'; } - /** - * @dataProvider providerRoundUpArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRoundUpArray')] public function testRoundUpArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php index 3c391b687..e05c99b8e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SecTest extends AllSetupTeardown { - /** - * @dataProvider providerSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSEC')] public function testSEC(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class SecTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SEC.php'; } - /** - * @dataProvider providerSecArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSecArray')] public function testSecArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php index 632685070..d2e4df742 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SechTest extends AllSetupTeardown { - /** - * @dataProvider providerSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSECH')] public function testSECH(float|int|string $expectedResult, float|int|string $angle): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class SechTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SECH.php'; } - /** - * @dataProvider providerSechArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSechArray')] public function testSechArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php index c3b1196c0..c52f99873 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php @@ -9,11 +9,10 @@ use PhpOffice\PhpSpreadsheet\Calculation\MathTrig\MatrixFunctions; class SequenceTest extends AllSetupTeardown { /** - * @dataProvider providerSEQUENCE - * * @param mixed[] $arguments * @param mixed[]|string $expectedResult */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSEQUENCE')] public function testSEQUENCE(array $arguments, array|string $expectedResult): void { if (count($arguments) === 0) { diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php index 8608f91c8..5f3469f18 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class SeriesSumTest extends AllSetupTeardown { - /** - * @dataProvider providerSERIESSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSERIESSUM')] public function testSERIESSUM(mixed $expectedResult, mixed $arg1, mixed $arg2, mixed $arg3, mixed ...$args): void { $sheet = $this->getSheet(); @@ -42,9 +40,7 @@ class SeriesSumTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SERIESSUM.php'; } - /** - * @dataProvider providerSeriesSumArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSeriesSumArray')] public function testSeriesSumArray(array $expectedResult, string $x, string $n, string $m, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php index a767de73d..2a77d6eb3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SignTest extends AllSetupTeardown { - /** - * @dataProvider providerSIGN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSIGN')] public function testSIGN(float|int|string $expectedResult, float|int|string $value): void { $this->mightHaveException($expectedResult); @@ -28,9 +26,7 @@ class SignTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SIGN.php'; } - /** - * @dataProvider providerSignArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSignArray')] public function testSignArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php index 83bc295f8..ea7881361 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SinTest extends AllSetupTeardown { - /** - * @dataProvider providerSin - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSin')] public function testSin(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class SinTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SIN.php'; } - /** - * @dataProvider providerSinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSinArray')] public function testSinArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php index 0ad727757..50b7b32c4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SinhTest extends AllSetupTeardown { - /** - * @dataProvider providerCosh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCosh')] public function testSinh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class SinhTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SINH.php'; } - /** - * @dataProvider providerSinhArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSinhArray')] public function testSinhArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php index e6a1e783d..1aecc8b6e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SqrtPiTest extends AllSetupTeardown { - /** - * @dataProvider providerSQRTPI - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSQRTPI')] public function testSQRTPI(mixed $expectedResult, mixed $number): void { $this->mightHaveException($expectedResult); @@ -32,9 +30,7 @@ class SqrtPiTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SQRTPI.php'; } - /** - * @dataProvider providerSqrtPiArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSqrtPiArray')] public function testSqrtPiArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php index 4bd348ffc..4e4fea06c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SqrtTest extends AllSetupTeardown { - /** - * @dataProvider providerSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSQRT')] public function testSQRT(mixed $expectedResult, mixed $number = 'omitted'): void { $sheet = $this->getSheet(); @@ -30,9 +28,7 @@ class SqrtTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SQRT.php'; } - /** - * @dataProvider providerSqrtArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSqrtArray')] public function testSqrtArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php index cc694aa49..6a2e5c59a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class SubTotalTest extends AllSetupTeardown { - /** - * @dataProvider providerSUBTOTAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUBTOTAL')] public function testSubtotal(float|int|string $expectedResult, float|int|string $type): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class SubTotalTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SUBTOTAL.php'; } - /** - * @dataProvider providerSUBTOTAL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUBTOTAL')] public function testSubtotalColumnHidden(float|int|string $expectedResult, float|int|string $type): void { // Hidden columns don't affect calculation, only hidden rows @@ -60,9 +56,7 @@ class SubTotalTest extends AllSetupTeardown self::assertEqualsWithDelta($expectedResult, $result, 1E-12); } - /** - * @dataProvider providerSUBTOTALHIDDEN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUBTOTALHIDDEN')] public function testSubtotalRowHidden(mixed $expectedResult, int $type): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php index 1f61aa863..9199ada28 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class SumIfTest extends AllSetupTeardown { - /** - * @dataProvider providerSUMIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMIF')] public function testSUMIF2(mixed $expectedResult, array $array1, mixed $condition, ?array $array2 = null): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php index eca29781f..fbf6032ef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Statistical; class SumIfsTest extends AllSetupTeardown { - /** - * @dataProvider providerSUMIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMIFS')] public function testSUMIFS(mixed $expectedResult, mixed ...$args): void { $result = Statistical\Conditional::SUMIFS(...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php index 2158894b9..ddb4ddafc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class SumProductTest extends AllSetupTeardown { - /** - * @dataProvider providerSUMPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMPRODUCT')] public function testSUMPRODUCT(mixed $expectedResult, mixed ...$args): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php index 41b3e4c61..7af25a1b8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig; class SumSqTest extends AllSetupTeardown { - /** - * @dataProvider providerSUMSQ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMSQ')] public function testSUMSQ(mixed $expectedResult, mixed ...$args): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php index 5c9bd238d..dfa27f35f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; class SumTest extends AllSetupTeardown { - /** - * @dataProvider providerSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUM')] public function testSUM(mixed $expectedResult, mixed ...$args): void { $sheet = $this->getSheet(); @@ -29,9 +27,7 @@ class SumTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SUM.php'; } - /** - * @dataProvider providerSUMLiterals - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMLiterals')] public function testSUMLiterals(mixed $expectedResult, string $args): void { $sheet = $this->getSheet(); @@ -45,9 +41,7 @@ class SumTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/SUMLITERALS.php'; } - /** - * @dataProvider providerSUMWITHINDEXMATCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMWITHINDEXMATCH')] public function testSumWithIndexMatch(mixed $expectedResult, string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php index c7d1bf8c2..9e36ac572 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class SumX2MY2Test extends AllSetupTeardown { - /** - * @dataProvider providerSUMX2MY2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMX2MY2')] public function testSUMX2MY2(mixed $expectedResult, array $matrixData1, array $matrixData2): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php index b75ea02df..46bc3e17c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class SumX2PY2Test extends AllSetupTeardown { - /** - * @dataProvider providerSUMX2PY2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMX2PY2')] public function testSUMX2PY2(mixed $expectedResult, array $matrixData1, array $matrixData2): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php index 4cce0ada0..d4f91a8cd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Functions; class SumXMY2Test extends AllSetupTeardown { - /** - * @dataProvider providerSUMXMY2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUMXMY2')] public function testSUMXMY2(mixed $expectedResult, array $matrixData1, array $matrixData2): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php index c21d451a1..b58562c1c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TanTest extends AllSetupTeardown { - /** - * @dataProvider providerTan - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTan')] public function testTan(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class TanTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/TAN.php'; } - /** - * @dataProvider providerTanArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTanArray')] public function testTanArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php index 8de5d6803..31f704b22 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TanhTest extends AllSetupTeardown { - /** - * @dataProvider providerTanh - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTanh')] public function testTanh(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -26,9 +24,7 @@ class TanhTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/TANH.php'; } - /** - * @dataProvider providerTanhArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTanhArray')] public function testTanhArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php index 9e610f234..0f6bd0b97 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TruncTest extends AllSetupTeardown { - /** - * @dataProvider providerTRUNC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTRUNC')] public function testTRUNC(mixed $expectedResult, string $formula): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class TruncTest extends AllSetupTeardown return require 'tests/data/Calculation/MathTrig/TRUNC.php'; } - /** - * @dataProvider providerTruncArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTruncArray')] public function testTruncArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); @@ -48,9 +44,7 @@ class TruncTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerTooMuchPrecision - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTooMuchPrecision')] public function testTooMuchPrecision(mixed $expectedResult, float|int|string $value, int $digits = 1): void { // This test is pretty screwy. Possibly shouldn't even attempt it. diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php index ea9c61ef8..7b58094a7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class AveDevTest extends AllSetupTeardown { - /** - * @dataProvider providerAVEDEV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAVEDEV')] public function testAVEDEV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('AVEDEV', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php index 48788ab40..d8a7542c3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class AverageATest extends AllSetupTeardown { - /** - * @dataProvider providerAVERAGEA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAVERAGEA')] public function testAVERAGEA(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('AVERAGEA', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php index 2b23a77d2..62db48efa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcException; class AverageIfTest extends AllSetupTeardown { - /** - * @dataProvider providerAVERAGEIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAVERAGEIF')] public function testAVERAGEIF(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('AVERAGEIF', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php index e3f835809..9aecc553e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcException; class AverageIfsTest extends AllSetupTeardown { - /** - * @dataProvider providerAVERAGEIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAVERAGEIFS')] public function testAVERAGEIFS(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('AVERAGEIFS', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php index 078a8313b..21e24c149 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class AverageTest extends AllSetupTeardown { - /** - * @dataProvider providerAVERAGE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAVERAGE')] public function testAVERAGE(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('AVERAGE', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php index 2a25cbfe6..a50693c00 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BetaDistTest extends AllSetupTeardown { - /** - * @dataProvider providerBETADIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBETADIST')] public function testBETADIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('BETADIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class BetaDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BETADIST.php'; } - /** - * @dataProvider providerBetaDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBetaDistArray')] public function testBetaDistArray(array $expectedResult, string $argument1, string $argument2, string $argument3): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php index eab0cf4ba..7550510d1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BetaInvTest extends AllSetupTeardown { - /** - * @dataProvider providerBETAINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBETAINV')] public function testBETAINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('BETAINV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class BetaInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BETAINV.php'; } - /** - * @dataProvider providerBetaInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBetaInvArray')] public function testBetaInvArray(array $expectedResult, string $argument1, string $argument2, string $argument3): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php index 9a8ac452f..6ac55ec89 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BinomDistRangeTest extends AllSetupTeardown { - /** - * @dataProvider providerBINOMDISTRANGE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBINOMDISTRANGE')] public function testBINOMDISTRANGE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('BINOM.DIST.RANGE', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class BinomDistRangeTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BINOMDISTRANGE.php'; } - /** - * @dataProvider providerBinomDistRangeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinomDistRangeArray')] public function testBinomDistRangeArray( array $expectedResult, string $trials, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php index 5f824d717..94b1b71a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BinomDistTest extends AllSetupTeardown { - /** - * @dataProvider providerBINOMDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBINOMDIST')] public function testBINOMDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('BINOMDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class BinomDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BINOMDIST.php'; } - /** - * @dataProvider providerBinomDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinomDistArray')] public function testBinomDistArray( array $expectedResult, string $values, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php index ecd12285c..9cddd7462 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class BinomInvTest extends AllSetupTeardown { - /** - * @dataProvider providerBINOMINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBINOMINV')] public function testBINOMINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('BINOM.INV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class BinomInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BINOMINV.php'; } - /** - * @dataProvider providerBinomInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinomInvArray')] public function testBinomInvArray( array $expectedResult, string $trials, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php index ba9e26438..e0581e7f7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ChiDistLeftTailTest extends AllSetupTeardown { - /** - * @dataProvider providerCHIDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHIDIST')] public function testCHIDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('CHISQ.DIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class ChiDistLeftTailTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/CHIDISTLeftTail.php'; } - /** - * @dataProvider providerChiDistLeftTailArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerChiDistLeftTailArray')] public function testChiDistLeftTailArray(array $expectedResult, string $values, string $degrees): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php index 94835eb61..b2a3e18f6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ChiDistRightTailTest extends AllSetupTeardown { - /** - * @dataProvider providerCHIDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHIDIST')] public function testCHIDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('CHISQ.DIST.RT', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class ChiDistRightTailTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/CHIDISTRightTail.php'; } - /** - * @dataProvider providerChiDistRightTailArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerChiDistRightTailArray')] public function testChiDistRightTailArray(array $expectedResult, string $values, string $degrees): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php index 483575756..475cf8887 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ChiInvLeftTailTest extends AllSetupTeardown { - /** - * @dataProvider providerCHIINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHIINV')] public function testCHIINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('CHISQ.INV', $expectedResult, ...$args); @@ -36,9 +34,7 @@ class ChiInvLeftTailTest extends AllSetupTeardown self::assertEqualsWithDelta($probability, $result, 1.0e-8); } - /** - * @dataProvider providerChiInvLeftTailArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerChiInvLeftTailArray')] public function testChiInvLeftTailArray(array $expectedResult, string $probabilities, string $degrees): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php index 971ea5515..a09d14be4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ChiInvRightTailTest extends AllSetupTeardown { - /** - * @dataProvider providerCHIINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHIINV')] public function testCHIINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('CHISQ.INV.RT', $expectedResult, ...$args); @@ -36,9 +34,7 @@ class ChiInvRightTailTest extends AllSetupTeardown self::assertEqualsWithDelta($probability, $result, 1.0e-8); } - /** - * @dataProvider providerChiInvRightTailArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerChiInvRightTailArray')] public function testChiInvRightTailArray(array $expectedResult, string $probabilities, string $degrees): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php index 0059a9de8..ea3b2ab0c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; // TODO Convert to Spreadsheet context. class ChiTestTest extends TestCase { - /** - * @dataProvider providerCHITEST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHITEST')] public function testCHITEST(mixed $expectedResult, mixed $actual, mixed $expected): void { $result = Statistical\Distributions\ChiSquared::test($actual, $expected); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php index 006ad32eb..2ea9ac53d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ConfidenceTest extends AllSetupTeardown { - /** - * @dataProvider providerCONFIDENCE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONFIDENCE')] public function testCONFIDENCE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('CONFIDENCE', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class ConfidenceTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/CONFIDENCE.php'; } - /** - * @dataProvider providerConfidenceArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConfidenceArray')] public function testConfidenceArray(array $expectedResult, string $alpha, string $stdDev, string $size): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php index e832a89e7..c698cb896 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class CorrelTest extends TestCase { - /** - * @dataProvider providerCORREL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCORREL')] public function testCORREL(mixed $expectedResult, mixed $xargs, mixed $yargs): void { $result = Statistical\Trends::CORREL($xargs, $yargs); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php index 381b1384d..61e1f1cdf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class CountATest extends AllSetupTeardown { - /** - * @dataProvider providerCOUNTA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUNTA')] public function testCOUNTA(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('COUNTA', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php index e5f44f78d..485654761 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcException; class CountBlankTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUNTBLANK - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUNTBLANK')] public function testCOUNTBLANK(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('COUNTBLANK', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php index 794751d6f..a4e803138 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class CountIfTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUNTIF - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUNTIF')] public function testCOUNTIF(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('COUNTIF', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php index 54c8a05be..1c589a611 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php @@ -7,9 +7,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; // TODO There are some commented out cases which don't return correct value class CountIfsTest extends AllSetupTeardown { - /** - * @dataProvider providerCOUNTIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOUNTIFS')] public function testCOUNTIFS(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('COUNTIFS', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php index ef951be3f..1074d74ac 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class CountTest extends AllSetupTeardown { - /** - * @dataProvider providerBasicCOUNT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBasicCOUNT')] public function testBasicCOUNT(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('COUNT', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class CountTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/BasicCOUNT.php'; } - /** - * @dataProvider providerExcelCOUNT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExcelCOUNT')] public function testExcelCOUNT(mixed $expectedResult, mixed ...$args): void { if (is_array($args[0])) { @@ -36,9 +32,7 @@ class CountTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/ExcelCOUNT.php'; } - /** - * @dataProvider providerOpenOfficeCOUNT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOpenOfficeCOUNT')] public function testOpenOfficeCOUNT(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); @@ -54,9 +48,7 @@ class CountTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/OpenOfficeCOUNT.php'; } - /** - * @dataProvider providerGnumericCOUNT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGnumericCOUNT')] public function testGnumericCOUNT(mixed $expectedResult, mixed ...$args): void { $this->setGnumeric(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php index 63b11e8d3..2c7f51a15 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class CovarTest extends AllSetupTeardown { - /** - * @dataProvider providerCOVAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCOVAR')] public function testCOVAR(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('COVAR', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php index e239e105a..993723aac 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class DevSqTest extends AllSetupTeardown { - /** - * @dataProvider providerDEVSQ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDEVSQ')] public function testDEVSQ(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('DEVSQ', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php index 2cb5b64cb..516783c6b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ExponDistTest extends AllSetupTeardown { - /** - * @dataProvider providerEXPONDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEXPONDIST')] public function testEXPONDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('EXPONDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class ExponDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/EXPONDIST.php'; } - /** - * @dataProvider providerExponDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExponDistArray')] public function testExponDistArray(array $expectedResult, string $values, string $lambdas): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php index 6c6478f28..20aad121a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FDistTest extends AllSetupTeardown { - /** - * @dataProvider providerFDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFDIST')] public function testFDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('F.DIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class FDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/FDIST.php'; } - /** - * @dataProvider providerFDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFDistArray')] public function testFDistArray(array $expectedResult, string $values, string $u, string $v): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php index aa3189742..2a5eaaadd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FisherInvTest extends AllSetupTeardown { - /** - * @dataProvider providerFISHERINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFISHERINV')] public function testFISHERINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('FISHERINV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class FisherInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/FISHERINV.php'; } - /** - * @dataProvider providerFisherArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFisherArray')] public function testFisherArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php index 352a3afc5..d0f369ebd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FisherTest extends AllSetupTeardown { - /** - * @dataProvider providerFISHER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFISHER')] public function testFISHER(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('FISHER', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class FisherTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/FISHER.php'; } - /** - * @dataProvider providerFisherArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFisherArray')] public function testFisherArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php index 396e69e0b..8dee25710 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; // Note that null in reference is treated differently than null in array. class ForecastTest extends TestCase { - /** - * @dataProvider providerFORECAST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFORECAST')] public function testFORECAST(mixed $expectedResult, mixed ...$args): void { $result = Statistical\Trends::FORECAST(...$args); @@ -26,9 +24,7 @@ class ForecastTest extends TestCase return require 'tests/data/Calculation/Statistical/FORECAST.php'; } - /** - * @dataProvider providerForecastArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerForecastArray')] public function testForecastArray(array $expectedResult, string $testValues, string $yValues, string $xValues): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php index 64ef50a5f..0a6379821 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class GammaDistTest extends AllSetupTeardown { - /** - * @dataProvider providerGAMMADIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGAMMADIST')] public function testGAMMADIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GAMMA.DIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class GammaDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/GAMMADIST.php'; } - /** - * @dataProvider providerGammaDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGammaDistArray')] public function testGammaDistArray(array $expectedResult, string $values, string $alpha, string $beta): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php index b3d1a3409..1b48f4998 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class GammaInvTest extends AllSetupTeardown { - /** - * @dataProvider providerGAMMAINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGAMMAINV')] public function testGAMMAINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GAMMA.INV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class GammaInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/GAMMAINV.php'; } - /** - * @dataProvider providerGammaInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGammaInvArray')] public function testGammaInvArray(array $expectedResult, string $values, string $alpha, string $beta): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php index 8c9c4c76a..d7e47b49a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class GammaLnTest extends AllSetupTeardown { - /** - * @dataProvider providerGAMMALN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGAMMALN')] public function testGAMMALN(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GAMMALN', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class GammaLnTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/GAMMALN.php'; } - /** - * @dataProvider providerGammaLnArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGammaLnArray')] public function testGammaLnArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php index 9db243cc0..ba246a55a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class GammaTest extends AllSetupTeardown { - /** - * @dataProvider providerGAMMA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGAMMA')] public function testGAMMA(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GAMMA', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class GammaTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/GAMMA.php'; } - /** - * @dataProvider providerGammaArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGammaArray')] public function testGammaArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php index 4fb98f5ec..528d47bb3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class GaussTest extends AllSetupTeardown { - /** - * @dataProvider providerGAUSS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGAUSS')] public function testGAUSS(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GAUSS', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class GaussTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/GAUSS.php'; } - /** - * @dataProvider providerGaussArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGaussArray')] public function testGaussArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php index f5b8b91b4..c2fe6b8aa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class GeoMeanTest extends AllSetupTeardown { - /** - * @dataProvider providerGEOMEAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGEOMEAN')] public function testGEOMEAN(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('GEOMEAN', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php index 51d379a8d..fc790889c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; // TODO Run test in spreadsheet context class GrowthTest extends TestCase { - /** - * @dataProvider providerGROWTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGROWTH')] public function testGROWTH(mixed $expectedResult, array $yValues, array $xValues, ?array $newValues = null, ?bool $const = null): void { if ($newValues === null) { diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php index 497f8127c..a991bc985 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class HarMeanTest extends AllSetupTeardown { - /** - * @dataProvider providerHARMEAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHARMEAN')] public function testHARMEAN(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('HARMEAN', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php index b240d874b..92db287c2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class HypGeomDistTest extends AllSetupTeardown { - /** - * @dataProvider providerHYPGEOMDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHYPGEOMDIST')] public function testHYPGEOMDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('HYPGEOMDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class HypGeomDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/HYPGEOMDIST.php'; } - /** - * @dataProvider providerHypGeomDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHypGeomDistArray')] public function testHypGeomDistArray( array $expectedResult, string $sampleSuccesses, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php index c340c9899..0f0cc9a6f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class InterceptTest extends AllSetupTeardown { - /** - * @dataProvider providerINTERCEPT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerINTERCEPT')] public function testINTERCEPT(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('INTERCEPT', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php index 1b2d79168..32d362e2e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class KurtTest extends AllSetupTeardown { - /** - * @dataProvider providerKURT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerKURT')] public function testKURT(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('KURT', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php index de1e4aa1e..f3b50da55 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class LargeTest extends AllSetupTeardown { - /** - * @dataProvider providerLARGE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLARGE')] public function testLARGE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('LARGE', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php index d8a3fd8be..e7573b150 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; // TODO run test in spreadsheet context class LinEstTest extends TestCase { - /** - * @dataProvider providerLINEST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLINEST')] public function testLINEST(array $expectedResult, array $yValues, array $xValues, mixed $const, mixed $stats): void { $result = Statistical\Trends::LINEST($yValues, $xValues, $const, $stats); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php index 93524d2d0..c6ef9fd25 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; // TODO run test in spreadsheet context class LogEstTest extends TestCase { - /** - * @dataProvider providerLOGEST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOGEST')] public function testLOGEST(array $expectedResult, array $yValues, array $xValues, mixed $const, mixed $stats): void { $result = Statistical\Trends::LOGEST($yValues, $xValues, $const, $stats); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php index fce4a4b24..25c5bc665 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LogInvTest extends AllSetupTeardown { - /** - * @dataProvider providerLOGINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOGINV')] public function testLOGINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('LOGINV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class LogInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/LOGINV.php'; } - /** - * @dataProvider providerLogInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLogInvArray')] public function testLogInvArray(array $expectedResult, string $probabilities, string $mean, string $stdDev): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php index 0857e5424..fd8f3fb4f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LogNormDist2Test extends AllSetupTeardown { - /** - * @dataProvider providerLOGNORMDIST2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOGNORMDIST2')] public function testLOGNORMDIST2(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('LOGNORM.DIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class LogNormDist2Test extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/LOGNORMDIST2.php'; } - /** - * @dataProvider providerLogNormDist2Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLogNormDist2Array')] public function testLogNormDist2Array(array $expectedResult, string $values, string $mean, string $stdDev): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php index fcb01d5a4..4820944a0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LogNormDistTest extends AllSetupTeardown { - /** - * @dataProvider providerLOGNORMDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOGNORMDIST')] public function testLOGNORMDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('LOGNORMDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class LogNormDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/LOGNORMDIST.php'; } - /** - * @dataProvider providerLogNormDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLogNormDistArray')] public function testLogNormDistArray(array $expectedResult, string $values, string $mean, string $stdDev): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php index 4e65e2db4..3d4470144 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MaxATest extends AllSetupTeardown { - /** - * @dataProvider providerMAXA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMAXA')] public function testMAXA(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('MAXA', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php index 25a7ac696..3af46098a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MaxIfsTest extends AllSetupTeardown { - /** - * @dataProvider providerMAXIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMAXIFS')] public function testMAXIFS(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('MAXIFS', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php index ea1e5110b..03c0a86d4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MaxTest extends AllSetupTeardown { - /** - * @dataProvider providerMAX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMAX')] public function testMAX(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('MAX', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php index 2eeaf6042..0abb86c2a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MedianTest extends AllSetupTeardown { - /** - * @dataProvider providerMEDIAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMEDIAN')] public function testMEDIAN(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('MEDIAN', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php index 28d417dae..d825ef517 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MinATest extends AllSetupTeardown { - /** - * @dataProvider providerMINA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINA')] public function testMINA(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('MINA', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php index 7fb91bfbc..44d1dae7f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MinIfsTest extends AllSetupTeardown { - /** - * @dataProvider providerMINIFS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMINIFS')] public function testMINIFS(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('MINIFS', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php index c699cfedf..977715173 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class MinTest extends AllSetupTeardown { - /** - * @dataProvider providerMIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMIN')] public function testMIN(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('MIN', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php index 5ae2c4977..a61689fe0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ModeTest extends TestCase { - /** - * @dataProvider providerMODE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMODE')] public function testMODE(mixed $expectedResult, string $str): void { $workbook = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php index 7725556ee..3a83fed89 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NegBinomDistTest extends AllSetupTeardown { - /** - * @dataProvider providerNEGBINOMDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNEGBINOMDIST')] public function testNEGBINOMDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NEGBINOMDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NegBinomDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NEGBINOMDIST.php'; } - /** - * @dataProvider providerNegBinomDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNegBinomDistArray')] public function testNegBinomDistArray( array $expectedResult, string $failures, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php index ba62123ec..f9c444bf8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NormDistTest extends AllSetupTeardown { - /** - * @dataProvider providerNORMDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNORMDIST')] public function testNORMDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NORMDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NormDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NORMDIST.php'; } - /** - * @dataProvider providerNormDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNormDistArray')] public function testNormDistArray(array $expectedResult, string $values, string $mean, string $stdDev): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php index 5aa42fc85..14a479c6f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NormInvTest extends AllSetupTeardown { - /** - * @dataProvider providerNORMINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNORMINV')] public function testNORMINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NORMINV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NormInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NORMINV.php'; } - /** - * @dataProvider providerNormInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNormInvArray')] public function testNormInvArray(array $expectedResult, string $probabilities, string $mean, string $stdDev): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php index c85c125c7..ea07827d6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NormSDist2Test extends AllSetupTeardown { - /** - * @dataProvider providerNORMSDIST2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNORMSDIST2')] public function testNORMSDIST2(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NORM.S.DIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NormSDist2Test extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NORMSDIST2.php'; } - /** - * @dataProvider providerNormSDist2Array - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNormSDist2Array')] public function testNormSDist2Array(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php index 95d8ff32d..53b3aafe8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NormSDistTest extends AllSetupTeardown { - /** - * @dataProvider providerNORMSDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNORMSDIST')] public function testNORMSDIST(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NORMSDIST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NormSDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NORMSDIST.php'; } - /** - * @dataProvider providerNormSDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNormSDistArray')] public function testNormSDistArray(array $expectedResult, string $values): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php index e93553802..f76312331 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class NormSInvTest extends AllSetupTeardown { - /** - * @dataProvider providerNORMSINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNORMSINV')] public function testNORMSINV(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('NORMSINV', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class NormSInvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/NORMSINV.php'; } - /** - * @dataProvider providerNormSInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNormSInvArray')] public function testNormSInvArray(array $expectedResult, string $probabilities): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php index 153b76822..b931977b9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php @@ -7,10 +7,9 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class PercentRankTest extends AllSetupTeardown { /** - * @dataProvider providerPERCENTRANK - * * @param mixed[] $valueSet */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPERCENTRANK')] public function testPERCENTRANK(mixed $expectedResult, mixed $valueSet, mixed $value, mixed $digits = null): void { if ($digits === null) { diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php index 47faff9e3..f3707768e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class PercentileTest extends AllSetupTeardown { - /** - * @dataProvider providerPERCENTILE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPERCENTILE')] public function testPERCENTILE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('PERCENTILE', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php index 75a799956..94223ce82 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class PermutTest extends AllSetupTeardown { - /** - * @dataProvider providerPERMUT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPERMUT')] public function testPERMUT(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('PERMUT', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class PermutTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/PERMUT.php'; } - /** - * @dataProvider providerPermutArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPermutArray')] public function testPermutArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php index 2cfc6a567..57cf1169a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class PermutationATest extends AllSetupTeardown { - /** - * @dataProvider providerPERMUT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPERMUT')] public function testPERMUT(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('PERMUTATIONA', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class PermutationATest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/PERMUTATIONA.php'; } - /** - * @dataProvider providerPermutationAArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPermutationAArray')] public function testPermutationAArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php index 2233a74ec..23bcbfa67 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class PoissonTest extends AllSetupTeardown { - /** - * @dataProvider providerPOISSON - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPOISSON')] public function testPOISSON(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('POISSON', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class PoissonTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/POISSON.php'; } - /** - * @dataProvider providerPoissonArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPoissonArray')] public function testPoissonArray(array $expectedResult, string $values, string $mean): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php index daf658b84..5afdc256e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class QuartileTest extends AllSetupTeardown { - /** - * @dataProvider providerQUARTILE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerQUARTILE')] public function testQUARTILE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('QUARTILE', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php index 6f2a5ae46..9eeffb958 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php @@ -7,10 +7,9 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class RankTest extends AllSetupTeardown { /** - * @dataProvider providerRANK - * * @param mixed[] $valueSet */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRANK')] public function testRANK(mixed $expectedResult, mixed $value, array $valueSet, mixed $order = null): void { if ($order === null) { diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php index fba99b1b8..49fa2541f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class RsqTest extends AllSetupTeardown { - /** - * @dataProvider providerRSQ - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRSQ')] public function testRSQ(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('RSQ', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php index f88287cc3..fad689b61 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class SkewTest extends AllSetupTeardown { - /** - * @dataProvider providerSKEW - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSKEW')] public function testSKEW(mixed $expectedResult, array $args): void { $this->runTestCaseReference('SKEW', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php index 12220561b..e7ae4e320 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class SlopeTest extends AllSetupTeardown { - /** - * @dataProvider providerSLOPE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSLOPE')] public function testSLOPE(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseNoBracket('SLOPE', $expectedResult, ...$args); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php index 13dc6f99c..25cf80b31 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class SmallTest extends AllSetupTeardown { - /** - * @dataProvider providerSMALL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSMALL')] public function testSMALL(mixed $expectedResult, mixed $values, mixed $position): void { $this->runTestCaseReference('SMALL', $expectedResult, $values, $position); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php index c6964f948..5971dbb49 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class StDevATest extends AllSetupTeardown { - /** - * @dataProvider providerSTDEVA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTDEVA')] public function testSTDEVA(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('STDEVA', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class StDevATest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/STDEVA.php'; } - /** - * @dataProvider providerOdsSTDEVA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsSTDEVA')] public function testOdsSTDEVA(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php index db309b2f7..6c1d5e7c2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class StDevPATest extends AllSetupTeardown { - /** - * @dataProvider providerSTDEVPA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTDEVPA')] public function testSTDEVPA(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('STDEVPA', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class StDevPATest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/STDEVPA.php'; } - /** - * @dataProvider providerOdsSTDEVPA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsSTDEVPA')] public function testOdsSTDEVPA(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php index 89898d2a1..e3d067d67 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class StDevPTest extends AllSetupTeardown { - /** - * @dataProvider providerSTDEVP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTDEVP')] public function testSTDEVP(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('STDEVP', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class StDevPTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/STDEVP.php'; } - /** - * @dataProvider providerOdsSTDEVP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsSTDEVP')] public function testOdsSTDEVP(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php index b92062153..b0712dcb5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class StDevTest extends AllSetupTeardown { - /** - * @dataProvider providerSTDEV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTDEV')] public function testSTDEV(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('STDEV', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class StDevTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/STDEV.php'; } - /** - * @dataProvider providerOdsSTDEV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsSTDEV')] public function testOdsSTDEV(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php index 8defe4c03..02846869d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class StandardizeTest extends AllSetupTeardown { - /** - * @dataProvider providerSTANDARDIZE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTANDARDIZE')] public function testSTANDARDIZE(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('STANDARDIZE', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class StandardizeTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/STANDARDIZE.php'; } - /** - * @dataProvider providerStandardizeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerStandardizeArray')] public function testStandardizeArray(array $expectedResult, string $argument1, string $argument2, string $argument3): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php index 5c195630a..9cabfe0bd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class SteyxTest extends AllSetupTeardown { - /** - * @dataProvider providerSTEYX - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSTEYX')] public function testSTEYX(mixed $expectedResult, array $xargs, array $yargs): void { //$result = Statistical\Trends::STEYX($xargs, $yargs); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php index c57deb266..19811cf23 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TDistTest extends AllSetupTeardown { - /** - * @dataProvider providerTDIST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTDIST')] public function testTDIST(mixed $expectedResult, mixed $value, mixed $degrees, mixed $tails): void { $this->runTestCaseReference('TDIST', $expectedResult, $value, $degrees, $tails); @@ -21,9 +19,7 @@ class TDistTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/TDIST.php'; } - /** - * @dataProvider providerTDistArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTDistArray')] public function testTDistArray(array $expectedResult, string $values, string $degrees, string $tails): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php index ed16e9dba..bdbabebfb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TinvTest extends AllSetupTeardown { - /** - * @dataProvider providerTINV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTINV')] public function testTINV(mixed $expectedResult, mixed $probability, mixed $degrees): void { $this->runTestCaseReference('TINV', $expectedResult, $probability, $degrees); @@ -21,9 +19,7 @@ class TinvTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/TINV.php'; } - /** - * @dataProvider providerTInvArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTInvArray')] public function testTInvArray(array $expectedResult, string $values, string $degrees): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php index 1a09ce9b4..a9ee4a33f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; // TODO Run test in spreadsheet context. class TrendTest extends TestCase { - /** - * @dataProvider providerGROWTH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGROWTH')] public function testTREND(mixed $expectedResult, array $yValues, array $xValues, ?array $newValues = null, ?bool $const = null): void { if ($newValues === null) { diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php index 1e6adfdcb..b267e5c64 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class TrimMeanTest extends AllSetupTeardown { - /** - * @dataProvider providerTRIMMEAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTRIMMEAN')] public function testTRIMMEAN(mixed $expectedResult, array $args, mixed $percentage): void { $this->runTestCaseReference('TRIMMEAN', $expectedResult, $args, $percentage); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php index 084a452e4..bf39c05b8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class VarATest extends AllSetupTeardown { - /** - * @dataProvider providerVARA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVARA')] public function testVARA(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('VARA', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class VarATest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/VARA.php'; } - /** - * @dataProvider providerOdsVARA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsVARA')] public function testOdsVARA(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php index 9c1e62fdb..73b260003 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class VarPATest extends AllSetupTeardown { - /** - * @dataProvider providerVARPA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVARPA')] public function testVARPA(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('VARPA', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class VarPATest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/VARPA.php'; } - /** - * @dataProvider providerOdsVARPA - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsVARPA')] public function testOdsVARPA(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php index 45f46d08b..fb85dc077 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class VarPTest extends AllSetupTeardown { - /** - * @dataProvider providerVARP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVARP')] public function testVARP(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('VARP', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class VarPTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/VARP.php'; } - /** - * @dataProvider providerOdsVARP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsVARP')] public function testOdsVARP(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php index c565b4177..0b3d8c9f7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical; class VarTest extends AllSetupTeardown { - /** - * @dataProvider providerVAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVAR')] public function testVAR(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('VAR', $expectedResult, ...$args); @@ -19,9 +17,7 @@ class VarTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/VAR.php'; } - /** - * @dataProvider providerOdsVAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOdsVAR')] public function testOdsVAR(mixed $expectedResult, mixed ...$args): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php index 533477525..66d9e9275 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class WeibullTest extends AllSetupTeardown { - /** - * @dataProvider providerWEIBULL - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEIBULL')] public function testWEIBULL(mixed $expectedResult, mixed ...$args): void { $this->runTestCases('WEIBULL', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class WeibullTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/WEIBULL.php'; } - /** - * @dataProvider providerWeibullArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWeibullArray')] public function testWeibullArray(array $expectedResult, string $values, string $alpha, string $beta): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php index 32ae58a1c..b76f36b7f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ZTestTest extends AllSetupTeardown { - /** - * @dataProvider providerZTEST - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerZTEST')] public function testZTEST(mixed $expectedResult, mixed ...$args): void { $this->runTestCaseReference('ZTEST', $expectedResult, ...$args); @@ -21,9 +19,7 @@ class ZTestTest extends AllSetupTeardown return require 'tests/data/Calculation/Statistical/ZTEST.php'; } - /** - * @dataProvider providerZTestArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerZTestArray')] public function testZTestArray(array $expectedResult, string $dataSet, string $m0): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php index 56d035729..a65b3a18f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\TextData; class ArrayToTextTest extends AllSetupTeardown { - /** - * @dataProvider providerARRAYTOTEXT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerARRAYTOTEXT')] public function testArrayToText(string $expectedResult, array $testData, int $mode): void { $worksheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php index 370ec308c..5dd049a2c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class CharNonPrintableTest extends AbstractFunctional { - /** - * @dataProvider providerType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerType')] public function testNotPrintable(string $type): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php index e9549e452..4782e9d66 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CharTest extends AllSetupTeardown { - /** - * @dataProvider providerCHAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCHAR')] public function testCHAR(mixed $expectedResult, mixed $character = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -30,9 +28,7 @@ class CharTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/CHAR.php'; } - /** - * @dataProvider providerCharArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCharArray')] public function testCharArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php index 7b83438cd..196f5a8d5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CleanTest extends AllSetupTeardown { - /** - * @dataProvider providerCLEAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCLEAN')] public function testCLEAN(mixed $expectedResult, mixed $value = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -30,9 +28,7 @@ class CleanTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/CLEAN.php'; } - /** - * @dataProvider providerCleanArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCleanArray')] public function testCleanArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php index e29c057a6..c1ff8d8ca 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class CodeTest extends AllSetupTeardown { - /** - * @dataProvider providerCODE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCODE')] public function testCODE(mixed $expectedResult, mixed $character = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -30,9 +28,7 @@ class CodeTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/CODE.php'; } - /** - * @dataProvider providerCodeArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCodeArray')] public function testCodeArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php index 3e0c88f09..3438e1431 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; class ConcatTest extends AllSetupTeardown { - /** - * @dataProvider providerCONCAT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONCAT')] public function testCONCAT(mixed $expectedResult, mixed ...$args): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateGnumericTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateGnumericTest.php index 2b4f12a2f..9f2697fae 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateGnumericTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateGnumericTest.php @@ -10,9 +10,8 @@ class ConcatenateGnumericTest extends AllSetupTeardown { /** * Gnumeric, unlike Excel or LibreOffice, implements CONCATENATE like CONCAT. - * - * @dataProvider providerCONCAT */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONCAT')] public function testCONCATENATE(mixed $expectedResult, mixed ...$args): void { self::setGnumeric(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php index 3a5f33cff..7e2cfb295 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; class ConcatenateTest extends AllSetupTeardown { - /** - * @dataProvider providerCONCATENATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCONCATENATE')] public function testCONCATENATE(mixed $expectedResult, mixed ...$args): void { $this->mightHaveException($expectedResult); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php index 19c9dc3b6..c383285fd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class DollarTest extends AllSetupTeardown { - /** - * @dataProvider providerDOLLAR - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDOLLAR')] public function testDOLLAR(mixed $expectedResult, mixed $amount = 'omitted', mixed $decimals = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -34,9 +32,7 @@ class DollarTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/DOLLAR.php'; } - /** - * @dataProvider providerDollarArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDollarArray')] public function testDollarArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php index 802b73e4c..9f3a15f63 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ExactTest extends AllSetupTeardown { - /** - * @dataProvider providerEXACT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEXACT')] public function testEXACT(mixed $expectedResult, mixed $string1 = 'omitted', mixed $string2 = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -34,9 +32,7 @@ class ExactTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/EXACT.php'; } - /** - * @dataProvider providerExactArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExactArray')] public function testExactArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php index 6f5e187b8..5497f69c9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FindTest extends AllSetupTeardown { - /** - * @dataProvider providerFIND - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFIND')] public function testFIND(mixed $expectedResult, mixed $string1 = 'omitted', mixed $string2 = 'omitted', mixed $start = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -39,9 +37,7 @@ class FindTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/FIND.php'; } - /** - * @dataProvider providerFindArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFindArray')] public function testFindArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php index 0ee5c1cc3..a9ad67712 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class FixedTest extends AllSetupTeardown { - /** - * @dataProvider providerFIXED - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFIXED')] public function testFIXED(mixed $expectedResult, mixed $number = 'omitted', mixed $decimals = 'omitted', mixed $noCommas = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -39,9 +37,7 @@ class FixedTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/FIXED.php'; } - /** - * @dataProvider providerFixedArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFixedArray')] public function testFixedArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php index 94ac23fd4..f59e53311 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php @@ -11,11 +11,10 @@ use PhpOffice\PhpSpreadsheet\Settings; class LeftTest extends AllSetupTeardown { /** - * @dataProvider providerLEFT - * * @param mixed $str string from which to extract * @param mixed $cnt number of characters to extract */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLEFT')] public function testLEFT(mixed $expectedResult, mixed $str = 'omitted', mixed $cnt = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -39,9 +38,7 @@ class LeftTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/LEFT.php'; } - /** - * @dataProvider providerLocaleLEFT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleLEFT')] public function testLowerWithLocaleBoolean(string $expectedResult, string $locale, mixed $value, mixed $characters): void { $newLocale = Settings::setLocale($locale); @@ -71,9 +68,7 @@ class LeftTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeLEFTTrue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTTrue')] public function testCalculationTypeTrue(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -107,9 +102,7 @@ class LeftTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeLEFTFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -143,9 +136,7 @@ class LeftTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeLEFTNull - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTNull')] public function testCalculationTypeNull(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -178,9 +169,7 @@ class LeftTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerLeftArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLeftArray')] public function testLeftArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php index e2db773ae..029a51010 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class LenTest extends AllSetupTeardown { - /** - * @dataProvider providerLEN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLEN')] public function testLEN(mixed $expectedResult, mixed $str = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -30,9 +28,7 @@ class LenTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/LEN.php'; } - /** - * @dataProvider providerLenArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLenArray')] public function testLenArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php index 279332c6f..e254c07c9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\Settings; class LowerTest extends AllSetupTeardown { - /** - * @dataProvider providerLOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLOWER')] public function testLOWER(mixed $expectedResult, mixed $str = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -31,9 +29,7 @@ class LowerTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/LOWER.php'; } - /** - * @dataProvider providerLocaleLOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleLOWER')] public function testLowerWithLocaleBoolean(string $expectedResult, string $locale, mixed $value): void { $newLocale = Settings::setLocale($locale); @@ -61,9 +57,7 @@ class LowerTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerLowerArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLowerArray')] public function testLowerArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php index 364fb1686..2b36d8cf4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php @@ -11,12 +11,11 @@ use PhpOffice\PhpSpreadsheet\Settings; class MidTest extends AllSetupTeardown { /** - * @dataProvider providerMID - * * @param mixed $str string from which to extract * @param mixed $start position at which to start * @param mixed $cnt number of characters to extract */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMID')] public function testMID(mixed $expectedResult, mixed $str = 'omitted', mixed $start = 'omitted', mixed $cnt = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -45,9 +44,7 @@ class MidTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/MID.php'; } - /** - * @dataProvider providerLocaleMID - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleMID')] public function testMiddleWithLocaleBoolean(string $expectedResult, string $locale, mixed $value, mixed $offset, mixed $characters): void { $newLocale = Settings::setLocale($locale); @@ -78,9 +75,7 @@ class MidTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeMIDTrue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeMIDTrue')] public function testCalculationTypeTrue(string $type, string $resultB1, string $resultB2, string $resultB3): void { Functions::setCompatibilityMode($type); @@ -119,9 +114,7 @@ class MidTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeMIDFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeMIDFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -159,9 +152,7 @@ class MidTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeMIDNull - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeMIDNull')] public function testCalculationTypeNull(string $type, string $resultB1, string $resultB2, string $resultB3): void { Functions::setCompatibilityMode($type); @@ -199,9 +190,7 @@ class MidTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerMidArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMidArray')] public function testMidArray(array $expectedResult, string $argument1, string $argument2, string $argument3): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/NumberValueTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/NumberValueTest.php index 9dfa1fa20..15afdcd63 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/NumberValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/NumberValueTest.php @@ -10,9 +10,7 @@ class NumberValueTest extends AllSetupTeardown { const NV_PRECISION = 1.0E-8; - /** - * @dataProvider providerNUMBERVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNUMBERVALUE')] public function testNUMBERVALUE(mixed $expectedResult, mixed $number = 'omitted', mixed $decimal = 'omitted', mixed $group = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -41,9 +39,7 @@ class NumberValueTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/NUMBERVALUE.php'; } - /** - * @dataProvider providerNumberValueArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberValueArray')] public function testNumberValueArray(array $expectedResult, string $argument1, string $argument2, string $argument3): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php index c7af96f64..5a73568b6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\TextData; class OpenOfficeTest extends AllSetupTeardown { - /** - * @dataProvider providerOpenOffice - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOpenOffice')] public function testOpenOffice(mixed $expectedResult, string $formula): void { $this->setOpenOffice(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php index 6df021fe6..3767f9118 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\Settings; class ProperTest extends AllSetupTeardown { - /** - * @dataProvider providerPROPER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPROPER')] public function testPROPER(mixed $expectedResult, mixed $str = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -31,9 +29,7 @@ class ProperTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/PROPER.php'; } - /** - * @dataProvider providerLocaleLOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleLOWER')] public function testLowerWithLocaleBoolean(string $expectedResult, string $locale, mixed $value): void { $newLocale = Settings::setLocale($locale); @@ -61,9 +57,7 @@ class ProperTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerProperArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerProperArray')] public function testProperArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php index 68a6f501e..8478bb69b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ReplaceTest extends AllSetupTeardown { - /** - * @dataProvider providerREPLACE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerREPLACE')] public function testREPLACE(mixed $expectedResult, mixed $oldText = 'omitted', mixed $start = 'omitted', mixed $count = 'omitted', mixed $newText = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -45,9 +43,7 @@ class ReplaceTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/REPLACE.php'; } - /** - * @dataProvider providerReplaceArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerReplaceArray')] public function testReplaceArray( array $expectedResult, string $oldText, diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php index 8cbed14d3..3a04a346f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class ReptTest extends AllSetupTeardown { - /** - * @dataProvider providerREPT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerREPT')] public function testReptThroughEngine(mixed $expectedResult, mixed $val = 'omitted', mixed $rpt = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -34,9 +32,7 @@ class ReptTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/REPT.php'; } - /** - * @dataProvider providerReptArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerReptArray')] public function testReptArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php index 1ecc051fc..007ad28c2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php @@ -11,11 +11,10 @@ use PhpOffice\PhpSpreadsheet\Settings; class RightTest extends AllSetupTeardown { /** - * @dataProvider providerRIGHT - * * @param mixed $str string from which to extract * @param mixed $cnt number of characters to extract */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRIGHT')] public function testRIGHT(mixed $expectedResult, mixed $str = 'omitted', mixed $cnt = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -39,9 +38,7 @@ class RightTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/RIGHT.php'; } - /** - * @dataProvider providerLocaleRIGHT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleRIGHT')] public function testLowerWithLocaleBoolean(string $expectedResult, string $locale, mixed $value, mixed $characters): void { $newLocale = Settings::setLocale($locale); @@ -71,9 +68,7 @@ class RightTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeRIGHTTrue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTTrue')] public function testCalculationTypeTrue(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -107,9 +102,7 @@ class RightTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeRIGHTFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -143,9 +136,7 @@ class RightTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerCalculationTypeRIGHTNull - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTNull')] public function testCalculationTypeNull(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -178,9 +169,7 @@ class RightTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerRightArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRightArray')] public function testRightArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php index 5c441b7dd..656762cb3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SearchTest extends AllSetupTeardown { - /** - * @dataProvider providerSEARCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSEARCH')] public function testSEARCH(mixed $expectedResult, mixed $findText = 'omitted', mixed $withinText = 'omitted', mixed $start = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -39,9 +37,7 @@ class SearchTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/SEARCH.php'; } - /** - * @dataProvider providerSearchArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSearchArray')] public function testSearchArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php index 927330252..51bce11af 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class SubstituteTest extends AllSetupTeardown { - /** - * @dataProvider providerSUBSTITUTE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSUBSTITUTE')] public function testSUBSTITUTE(mixed $expectedResult, mixed $text = 'omitted', mixed $oldText = 'omitted', mixed $newText = 'omitted', mixed $instance = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -45,9 +43,7 @@ class SubstituteTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/SUBSTITUTE.php'; } - /** - * @dataProvider providerSubstituteArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSubstituteArray')] public function testSubstituteArray(array $expectedResult, string $oldText, string $fromText, string $toText): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php index 6f2bf123a..46886d5bc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TTest extends AllSetupTeardown { - /** - * @dataProvider providerT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerT')] public function testT(mixed $expectedResult, mixed $value = 'no arguments'): void { $this->mightHaveException($expectedResult); @@ -29,9 +27,7 @@ class TTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/T.php'; } - /** - * @dataProvider providerTArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTArray')] public function testTArray(array $expectedResult, string $argument): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php index 9f50af3ef..ea3c38f8e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\TextData; class TextAfterTest extends AllSetupTeardown { - /** - * @dataProvider providerTEXTAFTER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTEXTAFTER')] public function testTextAfter(string $expectedResult, array $arguments): void { $text = $arguments[0]; diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php index 05f0715ee..d49457317 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php @@ -6,9 +6,7 @@ namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\TextData; class TextBeforeTest extends AllSetupTeardown { - /** - * @dataProvider providerTEXTBEFORE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTEXTBEFORE')] public function testTextBefore(string $expectedResult, array $arguments): void { $text = $arguments[0]; diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php index e9a231a05..6a23a1550 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TextJoinTest extends AllSetupTeardown { - /** - * @dataProvider providerTEXTJOIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTEXTJOIN')] public function testTEXTJOIN(mixed $expectedResult, array $args): void { $this->mightHaveException($expectedResult); @@ -35,9 +33,7 @@ class TextJoinTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/TEXTJOIN.php'; } - /** - * @dataProvider providerTextjoinArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTextjoinArray')] public function testTextjoinArray(array $expectedResult, string $delimiter, string $blanks, string $texts): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php index 91f90fad8..9ac0c9465 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php @@ -26,9 +26,7 @@ class TextSplitTest extends AllSetupTeardown } } - /** - * @dataProvider providerTEXTSPLIT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTEXTSPLIT')] public function testTextSplit(array $expectedResult, array $arguments): void { Calculation::getInstance($this->getSpreadsheet())->setInstanceArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php index eedd8b93b..111d8cd9b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TextTest extends AllSetupTeardown { - /** - * @dataProvider providerTEXT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTEXT')] public function testTEXT(mixed $expectedResult, mixed $value = 'omitted', mixed $format = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -34,9 +32,7 @@ class TextTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/TEXT.php'; } - /** - * @dataProvider providerTextArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTextArray')] public function testTextArray(array $expectedResult, string $argument1, string $argument2): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php index 30929afd9..32c10329b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\Calculation; class TrimTest extends AllSetupTeardown { - /** - * @dataProvider providerTRIM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTRIM')] public function testTRIM(mixed $expectedResult, mixed $character = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -30,9 +28,7 @@ class TrimTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/TRIM.php'; } - /** - * @dataProvider providerTrimArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTrimArray')] public function testTrimArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php index 7522373da..9d6b2210e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\Settings; class UpperTest extends AllSetupTeardown { - /** - * @dataProvider providerUPPER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUPPER')] public function testUPPER(mixed $expectedResult, mixed $str = 'omitted'): void { $this->mightHaveException($expectedResult); @@ -31,9 +29,7 @@ class UpperTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/UPPER.php'; } - /** - * @dataProvider providerLocaleLOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocaleLOWER')] public function testLowerWithLocaleBoolean(string $expectedResult, string $locale, mixed $value): void { $newLocale = Settings::setLocale($locale); @@ -61,9 +57,7 @@ class UpperTest extends AllSetupTeardown ]; } - /** - * @dataProvider providerUpperArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUpperArray')] public function testUpperArray(array $expectedResult, string $array): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php index 2df5db47b..124df5278 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php @@ -17,9 +17,7 @@ class ValueTest extends AllSetupTeardown StringHelper::setThousandsSeparator(null); } - /** - * @dataProvider providerVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVALUE')] public function testVALUE(mixed $expectedResult, mixed $value = 'omitted'): void { StringHelper::setDecimalSeparator('.'); @@ -43,9 +41,7 @@ class ValueTest extends AllSetupTeardown return require 'tests/data/Calculation/TextData/VALUE.php'; } - /** - * @dataProvider providerValueArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerValueArray')] public function testValueArray(array $expectedResult, string $argument): void { $calculation = Calculation::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php index 37c33701e..337fd0355 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheet\RichText\RichText; class ValueToTextTest extends AllSetupTeardown { - /** - * @dataProvider providerVALUE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVALUE')] public function testVALUETOTEXT(mixed $expectedResult, mixed $value, int|string $format): void { $sheet = $this->getSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php index 8ab1337f1..21a3becd2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class UrlEncodeTest extends TestCase { - /** - * @dataProvider providerURLENCODE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerURLENCODE')] public function testURLENCODE(string $expectedResult, mixed $text): void { $result = Service::urlEncode($text); diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php index 48c528c6a..812ad8a05 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php @@ -26,9 +26,7 @@ class WebServiceTest extends TestCase Settings::unsetHttpClient(); } - /** - * @dataProvider providerWEBSERVICE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWEBSERVICE')] public function testWEBSERVICE(string $expectedResult, string $url, ?array $responseData): void { if (!empty($responseData)) { diff --git a/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php b/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php index 71f400dc2..f1795b238 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php @@ -71,9 +71,7 @@ class FunctionsTest extends TestCase self::assertEquals('#Not Yet Implemented', $result); } - /** - * @dataProvider providerIfCondition - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIfCondition')] public function testIfCondition(string $expectedResult, string $args): void { $result = Functions::ifCondition($args); diff --git a/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php b/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php index 093922d13..0175e7b78 100644 --- a/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class InternalFunctionsTest extends TestCase { - /** - * @dataProvider anchorArrayDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('anchorArrayDataProvider')] public function testAnchorArrayFormula(string $reference, string $range, array $expectedResult): void { $spreadsheet = new Spreadsheet(); @@ -51,9 +49,7 @@ class InternalFunctionsTest extends TestCase ]; } - /** - * @dataProvider singleDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('singleDataProvider')] public function testSingleArrayFormula(string $reference, mixed $expectedResult): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php b/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php index efaefc9a0..2c8849ece 100644 --- a/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; class MergedCellTest extends TestCase { - /** - * @dataProvider providerWorksheetFormulaeColumns - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWorksheetFormulaeColumns')] public function testMergedCellColumns(string $formula, mixed $expectedResult): void { $spreadSheet = new Spreadsheet(); @@ -52,9 +50,7 @@ class MergedCellTest extends TestCase ]; } - /** - * @dataProvider providerWorksheetFormulaeRows - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWorksheetFormulaeRows')] public function testMergedCellRows(string $formula, mixed $expectedResult): void { $spreadSheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php b/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php index e57d0cd04..c9f994aa0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class MissingArgumentsTest extends TestCase { - /** - * @dataProvider providerMissingArguments - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMissingArguments')] public function testMissingArguments(mixed $expected, string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php b/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php index 0a8d2105d..4e06f9ca0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; class ParseFormulaTest extends TestCase { - /** - * @dataProvider providerBinaryOperations - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBinaryOperations')] public function testParseOperations(array $expectedStack, string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php b/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php index 657d79fbb..3054a3d40 100644 --- a/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class RefErrorTest extends TestCase { - /** - * @dataProvider providerRefError - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRefError')] public function testRefError(mixed $expected, string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php b/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php index e34f8c87e..1a1cfa88f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php @@ -35,9 +35,7 @@ class RowColumnReferenceTest extends TestCase $this->spreadSheet->setActiveSheetIndexByName('summary sheet'); } - /** - * @dataProvider providerCurrentWorksheetFormulae - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrentWorksheetFormulae')] public function testCurrentWorksheet(string $formula, float $expectedResult): void { $worksheet = $this->spreadSheet->getActiveSheet(); diff --git a/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php b/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php index 0c917a658..8327e03b0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class StructuredReferenceFormulaTest extends TestCase { - /** - * @dataProvider structuredReferenceProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProvider')] public function testStructuredReferences(float $expectedValue, string $cellAddress): void { $inputFileType = 'Xlsx'; diff --git a/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php b/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php index a3b846023..e1ab28f29 100644 --- a/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php @@ -33,9 +33,7 @@ class TranslationTest extends TestCase Settings::setLocale($this->locale); } - /** - * @dataProvider providerTranslations - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTranslations')] public function testTranslation(string $expectedResult, string $locale, string $formula): void { $validLocale = Settings::setLocale($locale); diff --git a/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php b/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php index 7b41d8bd2..b82328679 100644 --- a/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php +++ b/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class AddressHelperTest extends TestCase { - /** - * @dataProvider providerR1C1ConversionToA1Absolute - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerR1C1ConversionToA1Absolute')] public function testR1C1ConversionToA1Absolute(string $expectedValue, string $address): void { $actualValue = AddressHelper::convertToA1($address); @@ -25,9 +23,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/R1C1ConversionToA1Absolute.php'; } - /** - * @dataProvider providerR1C1ConversionToA1Relative - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerR1C1ConversionToA1Relative')] public function testR1C1ConversionToA1Relative( string $expectedValue, string $address, @@ -54,9 +50,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/R1C1ConversionToA1Relative.php'; } - /** - * @dataProvider providerR1C1ConversionToA1Exception - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerR1C1ConversionToA1Exception')] public function testR1C1ConversionToA1Exception(string $address): void { $this->expectException(Exception::class); @@ -69,9 +63,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/R1C1ConversionToA1Exception.php'; } - /** - * @dataProvider providerA1ConversionToR1C1Absolute - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerA1ConversionToR1C1Absolute')] public function testA1ConversionToR1C1Absolute(string $expectedValue, string $address): void { $actualValue = AddressHelper::convertToR1C1($address); @@ -84,9 +76,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/A1ConversionToR1C1Absolute.php'; } - /** - * @dataProvider providerA1ConversionToR1C1Relative - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerA1ConversionToR1C1Relative')] public function testA1ConversionToR1C1Relative(string $expectedValue, string $address, ?int $row = null, ?int $column = null): void { $actualValue = AddressHelper::convertToR1C1($address, $row, $column); @@ -99,9 +89,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/A1ConversionToR1C1Relative.php'; } - /** - * @dataProvider providerA1ConversionToR1C1Exception - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerA1ConversionToR1C1Exception')] public function testA1ConversionToR1C1Exception(string $address): void { $this->expectException(Exception::class); @@ -114,9 +102,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/A1ConversionToR1C1Exception.php'; } - /** - * @dataProvider providerConvertFormulaToA1FromSpreadsheetXml - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertFormulaToA1FromSpreadsheetXml')] public function testConvertFormulaToA1SpreadsheetXml(string $expectedValue, string $formula): void { $actualValue = AddressHelper::convertFormulaToA1($formula); @@ -129,9 +115,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/ConvertFormulaToA1FromSpreadsheetXml.php'; } - /** - * @dataProvider providerConvertFormulaToA1FromR1C1Absolute - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertFormulaToA1FromR1C1Absolute')] public function testConvertFormulaToA1R1C1Absolute(string $expectedValue, string $formula): void { $actualValue = AddressHelper::convertFormulaToA1($formula); @@ -144,9 +128,7 @@ class AddressHelperTest extends TestCase return require 'tests/data/Cell/ConvertFormulaToA1FromR1C1Absolute.php'; } - /** - * @dataProvider providerConvertFormulaToA1FromR1C1Relative - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertFormulaToA1FromR1C1Relative')] public function testConvertFormulaToA1FromR1C1Relative(string $expectedValue, string $formula, int $row, int $column): void { $actualValue = AddressHelper::convertFormulaToA1($formula, $row, $column); diff --git a/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php b/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php index d8de97a33..bf34a40ca 100644 --- a/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php @@ -84,9 +84,7 @@ class AdvancedValueBinderTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider currencyProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('currencyProvider')] public function testCurrency(string $value, float $valueBinded, string $thousandsSeparator, string $decimalSeparator, string $currencyCode): void { StringHelper::setCurrencyCode($currencyCode); @@ -121,9 +119,7 @@ class AdvancedValueBinderTest extends TestCase ]; } - /** - * @dataProvider fractionProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('fractionProvider')] public function testFractions(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -160,9 +156,7 @@ class AdvancedValueBinderTest extends TestCase ]; } - /** - * @dataProvider percentageProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('percentageProvider')] public function testPercentages(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -187,9 +181,7 @@ class AdvancedValueBinderTest extends TestCase ]; } - /** - * @dataProvider timeProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('timeProvider')] public function testTimes(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -212,9 +204,7 @@ class AdvancedValueBinderTest extends TestCase ]; } - /** - * @dataProvider stringProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('stringProvider')] public function testStringWrapping(string $value): void { $spreadsheet = new Spreadsheet(); @@ -234,9 +224,7 @@ class AdvancedValueBinderTest extends TestCase ]; } - /** - * @dataProvider formulaProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('formulaProvider')] public function testFormula(string $value, string $dataType): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php b/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php index 3cb204b3f..e0e030e8e 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class CellAddressTest extends TestCase { - /** - * @dataProvider providerCreateFromCellAddress - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromCellAddress')] public function testCreateFromCellAddress( string $cellAddress, string $expectedColumnName, @@ -38,9 +36,7 @@ class CellAddressTest extends TestCase ]; } - /** - * @dataProvider providerCreateFromCellAddressException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromCellAddressException')] public function testCreateFromCellAddressException(string $cellAddress): void { $this->expectException(Exception::class); @@ -63,9 +59,7 @@ class CellAddressTest extends TestCase ]; } - /** - * @dataProvider providerCreateFromColumnAndRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnAndRow')] public function testCreateFromColumnAndRow( int $columnId, int $rowId, @@ -81,9 +75,7 @@ class CellAddressTest extends TestCase self::assertSame($expectedColumnName, $cellAddressObject->columnName()); } - /** - * @dataProvider providerCreateFromColumnRowException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnRowException')] public function testCreateFromColumnRowException(int|string $columnId, int|string $rowId): void { $this->expectException(Exception::class); @@ -101,9 +93,7 @@ class CellAddressTest extends TestCase ]; } - /** - * @dataProvider providerCreateFromColumnRowArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnRowArray')] public function testCreateFromColumnRowArray( int $columnId, int $rowId, @@ -129,9 +119,7 @@ class CellAddressTest extends TestCase ]; } - /** - * @dataProvider providerCreateFromColumnRowException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnRowException')] public function testCreateFromColumnRowArrayException(mixed $columnId, mixed $rowId): void { $this->expectException(Exception::class); @@ -149,9 +137,7 @@ class CellAddressTest extends TestCase ]; } - /** - * @dataProvider providerCreateFromCellAddressWithWorksheet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromCellAddressWithWorksheet')] public function testCreateFromCellAddressWithWorksheet( string $cellAddress, string $expectedCellAddress, diff --git a/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php b/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php index faec5dbd9..db8bea661 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php @@ -21,9 +21,7 @@ class CellDetachTest extends TestCase } } - /** - * @dataProvider providerMethodName - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMethodName')] public function testDetach(string $method): void { $this->expectException(SpreadsheetException::class); @@ -51,9 +49,7 @@ class CellDetachTest extends TestCase ]; } - /** - * @dataProvider providerMethodNameSet - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMethodNameSet')] public function testDetachSet(string $method): void { $this->expectException(SpreadsheetException::class); diff --git a/tests/PhpSpreadsheetTests/Cell/CellTest.php b/tests/PhpSpreadsheetTests/Cell/CellTest.php index 0a4308b61..f3539c607 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellTest.php @@ -76,9 +76,7 @@ class CellTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerSetValueExplicit - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSetValueExplicit')] public function testSetValueExplicit(mixed $expected, mixed $value, string $dataType): void { $spreadsheet = new Spreadsheet(); @@ -105,9 +103,7 @@ class CellTest extends TestCase $cell->setValueExplicit($dateValue, DataType::TYPE_ISO_DATE); } - /** - * @dataProvider providerSetValueExplicitException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSetValueExplicitException')] public function testSetValueExplicitException(mixed $value, string $dataType): void { $this->expectException(Exception::class); @@ -250,9 +246,7 @@ class CellTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider appliedStyling - */ + #[\PHPUnit\Framework\Attributes\DataProvider('appliedStyling')] public function testAppliedStyleSingleCell(string $cellAddress, string $fillStyle, ?string $fillColor): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php b/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php index d15592830..35a7fbb82 100644 --- a/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php @@ -11,9 +11,7 @@ use TypeError; class CoordinateTest extends TestCase { - /** - * @dataProvider providerColumnString - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColumnString')] public function testColumnIndexFromString(mixed $expectedResult, string $string): void { $columnIndex = Coordinate::columnIndexFromString($string); @@ -58,9 +56,7 @@ class CoordinateTest extends TestCase self::fail('An expected exception has not been raised.'); } - /** - * @dataProvider providerColumnIndex - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColumnIndex')] public function testStringFromColumnIndex(mixed $expectedResult, int $columnIndex): void { $string = Coordinate::stringFromColumnIndex($columnIndex); @@ -75,9 +71,7 @@ class CoordinateTest extends TestCase return require 'tests/data/ColumnIndex.php'; } - /** - * @dataProvider providerCoordinates - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCoordinates')] public function testCoordinateFromString(mixed $expectedResult, string $rangeSet): void { $result = Coordinate::coordinateFromString($rangeSet); @@ -89,9 +83,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellCoordinates.php'; } - /** - * @dataProvider providerIndexesFromString - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIndexesFromString')] public function testIndexesFromString(array $expectedResult, string $rangeSet): void { $result = Coordinate::indexesFromString($rangeSet); @@ -148,9 +140,7 @@ class CoordinateTest extends TestCase self::fail('An expected exception has not been raised.'); } - /** - * @dataProvider providerAbsoluteCoordinates - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAbsoluteCoordinates')] public function testAbsoluteCoordinateFromString(string $expectedResult, string $rangeSet): void { $result = Coordinate::absoluteCoordinate($rangeSet); @@ -177,9 +167,7 @@ class CoordinateTest extends TestCase self::fail('An expected exception has not been raised.'); } - /** - * @dataProvider providerAbsoluteReferences - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAbsoluteReferences')] public function testAbsoluteReferenceFromString(mixed $expectedResult, int|string $rangeSet): void { $result = Coordinate::absoluteReference((string) $rangeSet); @@ -206,9 +194,7 @@ class CoordinateTest extends TestCase self::fail('An expected exception has not been raised.'); } - /** - * @dataProvider providerSplitRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSplitRange')] public function testSplitRange(array $expectedResult, string $rangeSet): void { $result = Coordinate::splitRange($rangeSet); @@ -226,9 +212,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellSplitRange.php'; } - /** - * @dataProvider providerBuildRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBuildRange')] public function testBuildRange(mixed $expectedResult, array $rangeSets): void { $result = Coordinate::buildRange($rangeSets); @@ -258,9 +242,7 @@ class CoordinateTest extends TestCase Coordinate::buildRange($cellRange); } - /** - * @dataProvider providerRangeBoundaries - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeBoundaries')] public function testRangeBoundaries(mixed $expectedResult, string $rangeSet): void { $result = Coordinate::rangeBoundaries($rangeSet); @@ -272,9 +254,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellRangeBoundaries.php'; } - /** - * @dataProvider providerRangeDimension - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeDimension')] public function testRangeDimension(mixed $expectedResult, string $rangeSet): void { $result = Coordinate::rangeDimension($rangeSet); @@ -286,9 +266,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellRangeDimension.php'; } - /** - * @dataProvider providerGetRangeBoundaries - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGetRangeBoundaries')] public function testGetRangeBoundaries(mixed $expectedResult, string $rangeSet): void { $result = Coordinate::getRangeBoundaries($rangeSet); @@ -300,9 +278,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellGetRangeBoundaries.php'; } - /** - * @dataProvider providerCoordinateIsInsideRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCoordinateIsInsideRange')] public static function testCoordinateIsInsideRange(bool $expectedResult, string $range, string $coordinate): void { $result = Coordinate::coordinateIsInsideRange($range, $coordinate); @@ -314,9 +290,7 @@ class CoordinateTest extends TestCase return require 'tests/data/Cell/CoordinateIsInsideRange.php'; } - /** - * @dataProvider providerCoordinateIsInsideRangeException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCoordinateIsInsideRangeException')] public static function testCoordinateIsInsideRangeException(string $expectedResult, string $range, string $coordinate): void { try { @@ -335,9 +309,7 @@ class CoordinateTest extends TestCase return require 'tests/data/Cell/CoordinateIsInsideRangeException.php'; } - /** - * @dataProvider providerExtractAllCellReferencesInRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExtractAllCellReferencesInRange')] public function testExtractAllCellReferencesInRange(array $expectedResult, string $rangeSet): void { $result = Coordinate::extractAllCellReferencesInRange($rangeSet); @@ -349,9 +321,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellExtractAllCellReferencesInRange.php'; } - /** - * @dataProvider providerInvalidRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInvalidRange')] public function testExtractAllCellReferencesInRangeInvalidRange(string $range): void { $this->expectException(Exception::class); @@ -365,9 +335,7 @@ class CoordinateTest extends TestCase return [['Z1:A1'], ['A4:A1'], ['B1:A1'], ['AA1:Z1']]; } - /** - * @dataProvider providerMergeRangesInCollection - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMergeRangesInCollection')] public function testMergeRangesInCollection(mixed $expectedResult, array $rangeSets): void { $result = Coordinate::mergeRangesInCollection($rangeSets); @@ -379,9 +347,7 @@ class CoordinateTest extends TestCase return require 'tests/data/CellMergeRangesInCollection.php'; } - /** - * @dataProvider providerCoordinateIsRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCoordinateIsRange')] public function testCoordinateIsRange(mixed $expectedResult, string $rangeSet): void { $result = Coordinate::coordinateIsRange($rangeSet); diff --git a/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php b/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php index 8cb5d8876..cbb6eaf81 100644 --- a/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php @@ -15,9 +15,7 @@ use PHPUnit\Framework\TestCase; class DefaultValueBinderTest extends TestCase { - /** - * @dataProvider binderProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('binderProvider')] public function testBindValue(null|string|bool|int|float|DateTime|DateTimeImmutable $value): void { $spreadsheet = new Spreadsheet(); @@ -72,9 +70,7 @@ class DefaultValueBinderTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerDataTypeForValue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataTypeForValue')] public function testDataTypeForValue(mixed $expectedResult, mixed $value): void { $result = DefaultValueBinder::dataTypeForValue($value); diff --git a/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php b/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php index 71006fff8..ecd3b4a53 100644 --- a/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php @@ -28,9 +28,7 @@ class StringValueBinderTest extends TestCase Cell::setValueBinder($this->valueBinder); } - /** - * @dataProvider providerDataValuesDefault - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesDefault')] public function testStringValueBinderDefaultBehaviour( mixed $value, mixed $expectedValue, @@ -98,9 +96,7 @@ class StringValueBinderTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerDataValuesSuppressNullConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressNullConversion')] public function testStringValueBinderSuppressNullConversion( mixed $value, mixed $expectedValue, @@ -127,9 +123,7 @@ class StringValueBinderTest extends TestCase ]; } - /** - * @dataProvider providerDataValuesSuppressBooleanConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressBooleanConversion')] public function testStringValueBinderSuppressBooleanConversion( mixed $value, mixed $expectedValue, @@ -157,9 +151,7 @@ class StringValueBinderTest extends TestCase ]; } - /** - * @dataProvider providerDataValuesSuppressNumericConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressNumericConversion')] public function testStringValueBinderSuppressNumericConversion( mixed $value, mixed $expectedValue, @@ -194,9 +186,7 @@ class StringValueBinderTest extends TestCase ]; } - /** - * @dataProvider providerDataValuesSuppressFormulaConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressFormulaConversion')] public function testStringValueBinderSuppressFormulaConversion( mixed $value, mixed $expectedValue, @@ -227,9 +217,7 @@ class StringValueBinderTest extends TestCase ]; } - /** - * @dataProvider providerDataValuesSuppressAllConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressAllConversion')] public function testStringValueBinderSuppressAllConversion( mixed $value, mixed $expectedValue, diff --git a/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php b/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php index 572ffbff0..d555de423 100644 --- a/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php +++ b/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class CellReferenceHelperTest extends TestCase { - /** - * @dataProvider cellReferenceHelperInsertColumnsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperInsertColumnsProvider')] public function testCellReferenceHelperInsertColumns(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 2, 0); @@ -56,9 +54,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperDeleteColumnsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperDeleteColumnsProvider')] public function testCellReferenceHelperDeleteColumns(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', -2, 0); @@ -92,9 +88,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperInsertRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperInsertRowsProvider')] public function testCellReferenceHelperInsertRows(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 0, 2); @@ -124,9 +118,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperDeleteRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperDeleteRowsProvider')] public function testCellReferenceHelperDeleteRows(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 0, -2); @@ -152,9 +144,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperInsertColumnsAbsoluteProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperInsertColumnsAbsoluteProvider')] public function testCellReferenceHelperInsertColumnsAbsolute(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 2, 0); @@ -180,9 +170,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperDeleteColumnsAbsoluteProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperDeleteColumnsAbsoluteProvider')] public function testCellReferenceHelperDeleteColumnsAbsolute(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', -2, 0); @@ -208,9 +196,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperInsertRowsAbsoluteProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperInsertRowsAbsoluteProvider')] public function testCellReferenceHelperInsertRowsAbsolute(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 0, 2); @@ -236,9 +222,7 @@ class CellReferenceHelperTest extends TestCase ]; } - /** - * @dataProvider cellReferenceHelperDeleteRowsAbsoluteProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellReferenceHelperDeleteRowsAbsoluteProvider')] public function testCellReferenceHelperDeleteRowsAbsolute(string $expectedResult, string $cellAddress): void { $cellReferenceHelper = new CellReferenceHelper('E5', 0, -2); diff --git a/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php b/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php index 0937345cd..cbc235e76 100644 --- a/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php +++ b/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php @@ -34,9 +34,7 @@ class Charts32CatAxValAxTest extends TestCase } } - /** - * @dataProvider providerCatAxValAx - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCatAxValAx')] public function test1CatAx1ValAx(?bool $numeric): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Chart/Charts32XmlTest.php b/tests/PhpSpreadsheetTests/Chart/Charts32XmlTest.php index d6b6564a0..282c9588b 100644 --- a/tests/PhpSpreadsheetTests/Chart/Charts32XmlTest.php +++ b/tests/PhpSpreadsheetTests/Chart/Charts32XmlTest.php @@ -14,9 +14,7 @@ class Charts32XmlTest extends TestCase // These tests can only be performed by examining xml. private const DIRECTORY = 'samples' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR; - /** - * @dataProvider providerScatterCharts - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerScatterCharts')] public function testBezierCount(int $expectedCount, string $inputFile): void { $file = self::DIRECTORY . $inputFile; @@ -71,9 +69,7 @@ class Charts32XmlTest extends TestCase self::assertSame(0, substr_count($data, '')); } - /** - * @dataProvider providerCatAxValAx - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCatAxValAx')] public function testCatAxValAx(?bool $numeric): void { $file = self::DIRECTORY . '32readwriteScatterChart1.xlsx'; diff --git a/tests/PhpSpreadsheetTests/Chart/Issue562Test.php b/tests/PhpSpreadsheetTests/Chart/Issue562Test.php index 21bb903fa..ce9d6c5c5 100644 --- a/tests/PhpSpreadsheetTests/Chart/Issue562Test.php +++ b/tests/PhpSpreadsheetTests/Chart/Issue562Test.php @@ -29,9 +29,7 @@ class Issue562Test extends AbstractFunctional $writer->setIncludeCharts(true); } - /** - * @dataProvider providerNoBorder - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNoBorder')] public function testNoBorder(?bool $noBorder, bool $expectedResult): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php b/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php index 131163def..4117c4745 100644 --- a/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php +++ b/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class DefinedNameFormulaTest extends TestCase { - /** - * @dataProvider providerRangeOrFormula - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeOrFormula')] public function testRangeOrFormula(string $value, bool $expectedResult): void { $actualResult = DefinedName::testIfFormula($value); diff --git a/tests/PhpSpreadsheetTests/Document/EpochTest.php b/tests/PhpSpreadsheetTests/Document/EpochTest.php index feb98c8af..9947b2918 100644 --- a/tests/PhpSpreadsheetTests/Document/EpochTest.php +++ b/tests/PhpSpreadsheetTests/Document/EpochTest.php @@ -25,9 +25,7 @@ class EpochTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testSetCreated(string $format, string $timestamp): void { $spreadsheet = new Spreadsheet(); @@ -77,9 +75,7 @@ class EpochTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats2')] public function testConsistentTimeStamp(string $format): void { $pgmstart = (float) (new DateTime())->format('U'); diff --git a/tests/PhpSpreadsheetTests/Document/PropertiesTest.php b/tests/PhpSpreadsheetTests/Document/PropertiesTest.php index 7d491d25e..1b32aeaec 100644 --- a/tests/PhpSpreadsheetTests/Document/PropertiesTest.php +++ b/tests/PhpSpreadsheetTests/Document/PropertiesTest.php @@ -44,9 +44,7 @@ class PropertiesTest extends TestCase self::assertSame($creator, $this->properties->getCreator()); } - /** - * @dataProvider providerCreationTime - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreationTime')] public function testSetCreated(null|int $expectedCreationTime, null|int|string $created): void { $expectedCreationTime = $expectedCreationTime ?? $this->startTime; @@ -73,9 +71,7 @@ class PropertiesTest extends TestCase self::assertSame($creator, $this->properties->getLastModifiedBy()); } - /** - * @dataProvider providerModifiedTime - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerModifiedTime')] public function testSetModified(mixed $expectedModifiedTime, null|int|string $modified): void { $expectedModifiedTime = $expectedModifiedTime ?? $this->startTime; @@ -150,9 +146,7 @@ class PropertiesTest extends TestCase self::assertSame($manager, $this->properties->getManager()); } - /** - * @dataProvider providerCustomProperties - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCustomProperties')] public function testSetCustomProperties(mixed $expectedType, mixed $expectedValue, string $propertyName, null|bool|float|int|string $propertyValue, ?string $propertyType = null): void { if ($propertyType === null) { diff --git a/tests/PhpSpreadsheetTests/Document/SecurityTest.php b/tests/PhpSpreadsheetTests/Document/SecurityTest.php index 015e32ba2..75cf5106f 100644 --- a/tests/PhpSpreadsheetTests/Document/SecurityTest.php +++ b/tests/PhpSpreadsheetTests/Document/SecurityTest.php @@ -54,9 +54,7 @@ class SecurityTest extends AbstractFunctional ]; } - /** - * @dataProvider providerLocks - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLocks')] public function testLocks(bool $revision, bool $windows, bool $structure): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php b/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php index a14e2c5ac..1ce621f74 100644 --- a/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php +++ b/tests/PhpSpreadsheetTests/DocumentGeneratorTest.php @@ -18,18 +18,14 @@ class DocumentGeneratorTest extends TestCase private static bool $succeededByCategory = false; - /** - * @dataProvider providerGenerateFunctionListByName - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGenerateFunctionListByName')] public function testGenerateFunctionListByName(array $phpSpreadsheetFunctions, string $expected): void { self::assertEquals($expected, DocumentGenerator::generateFunctionListByName($phpSpreadsheetFunctions)); self::$succeededByName = true; } - /** - * @dataProvider providerGenerateFunctionListByCategory - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGenerateFunctionListByCategory')] public function testGenerateFunctionListByCategory(array $phpSpreadsheetFunctions, string $expected): void { self::assertEquals($expected, DocumentGenerator::generateFunctionListByCategory($phpSpreadsheetFunctions)); diff --git a/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php b/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php index a6e1b33ff..c6a2d43d2 100644 --- a/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php @@ -18,9 +18,8 @@ class ActiveSheetTest extends AbstractFunctional /** * Test load file with correct active sheet. - * - * @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testActiveSheet(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php b/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php index fa6e958f2..0f7e5f7e4 100644 --- a/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php @@ -16,9 +16,7 @@ class ColumnWidthTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testReadColumnWidth(string $format): void { // create new sheet with column width diff --git a/tests/PhpSpreadsheetTests/Functional/CommentsTest.php b/tests/PhpSpreadsheetTests/Functional/CommentsTest.php index 36ec29b97..c92f1c4e1 100644 --- a/tests/PhpSpreadsheetTests/Functional/CommentsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/CommentsTest.php @@ -21,9 +21,8 @@ class CommentsTest extends AbstractFunctional /** * Test load file with comment in sheet to load proper * count of comments in correct coords. - * - * @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testComments(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php b/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php index b886c9e06..7c091c2f7 100644 --- a/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php @@ -18,9 +18,7 @@ class ConditionalStopIfTrueTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testConditionalStopIfTrue(string $format): void { $pCoordinate = 'A1:A3'; diff --git a/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php b/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php index c1b767192..bf58132af 100644 --- a/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php +++ b/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php @@ -19,9 +19,7 @@ class EnclosureTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testEnclosure(string $format): void { $value = ''; diff --git a/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php b/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php index 28b05b2d7..88dd4606b 100644 --- a/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php +++ b/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php @@ -19,9 +19,7 @@ class FreezePaneTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePane(string $format): void { $cellSplit = 'B4'; @@ -43,9 +41,7 @@ class FreezePaneTest extends AbstractFunctional $reloadedSpreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePaneWithInvalidSelectedCells(string $format): void { $cellSplit = 'A7'; @@ -71,9 +67,7 @@ class FreezePaneTest extends AbstractFunctional $reloadedSpreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePaneUserSelectedCell(string $format): void { $spreadsheet = new Spreadsheet(); @@ -115,9 +109,7 @@ class FreezePaneTest extends AbstractFunctional $reloadedSpreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testNoFreezePaneUserSelectedCell(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php b/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php index c99826bfd..b6e8b10bf 100644 --- a/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php @@ -18,9 +18,7 @@ class MergedCellsTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testMergedCells(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php b/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php index 535f927fe..2918341eb 100644 --- a/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php +++ b/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php @@ -17,9 +17,7 @@ class PrintAreaTest extends AbstractFunctional ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testPageSetup(string $format): void { // Create new workbook with 6 sheets and different print areas diff --git a/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php b/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php index be00dd392..b44c43f31 100644 --- a/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php @@ -50,9 +50,8 @@ class ReadBlankCellsTest extends AbstractFunctional /** * Test generate file with some empty cells. - * - * @dataProvider providerSheetFormat */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSheetFormat')] public function testLoadAndSaveReadEmpty(string $format, bool $expected): void { $filename = 'tests/data/Reader/XLSX/blankcell.xlsx'; @@ -72,9 +71,8 @@ class ReadBlankCellsTest extends AbstractFunctional /** * Test generate file with some empty cells. - * - * @dataProvider providerSheetFormat */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSheetFormat')] public function testLoadAndSaveDontReadEmpty(string $format): void { $filename = 'tests/data/Reader/XLSX/blankcell.xlsx'; diff --git a/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php b/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php index 7b352dde2..9b4920d84 100644 --- a/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php @@ -33,9 +33,8 @@ class ReadFilterTest extends AbstractFunctional /** * Test load Xlsx file with many empty cells with no filter used. - * - * @dataProvider providerCellsValues */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCellsValues')] public function testXlsxLoadWithoutReadFilter(string $format, array $arrayData): void { $spreadsheet = new Spreadsheet(); @@ -58,9 +57,8 @@ class ReadFilterTest extends AbstractFunctional /** * Test load Xlsx file with many empty cells (and big max row number) with readfilter. - * - * @dataProvider providerCellsValues */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCellsValues')] public function testXlsxLoadWithReadFilter(string $format, array $arrayData): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php b/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php index 89a7327e5..90f806b02 100644 --- a/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php @@ -17,9 +17,8 @@ class SelectedCellsTest extends AbstractFunctional /** * Test load file with correct selected cells. - * - * @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testSelectedCells(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/StreamTest.php b/tests/PhpSpreadsheetTests/Functional/StreamTest.php index c67c1ab22..4a43f77c5 100644 --- a/tests/PhpSpreadsheetTests/Functional/StreamTest.php +++ b/tests/PhpSpreadsheetTests/Functional/StreamTest.php @@ -11,9 +11,8 @@ use PHPUnit\Framework\TestCase; /** * Not clear that Dompdf will be Php8.4 compatible in time. * Run in separate process and add version test till it is ready. - * - * @runTestsInSeparateProcesses */ +#[\PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses] class StreamTest extends TestCase { public static function providerFormats(): array @@ -32,9 +31,7 @@ class StreamTest extends TestCase return $providerFormats; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testAllWritersCanWriteToStream(string $format): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php b/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php index e90cf4267..20aecf94b 100644 --- a/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php +++ b/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php @@ -31,9 +31,8 @@ class TypeAttributePreservationTest extends AbstractFunctional /** * Ensure saved spreadsheets maintain the correct data type. - * - * @dataProvider providerFormulae */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormulae')] public function testFormulae(string $format, array $values): void { $spreadsheet = new Spreadsheet(); @@ -63,9 +62,8 @@ class TypeAttributePreservationTest extends AbstractFunctional /** * Ensure saved spreadsheets maintain the correct data type. - * - * @dataProvider providerFormulae */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormulae')] public function testFormulaeNoPrecalc(string $format, array $values): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php b/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php index 5c21443a9..fee6dbbe8 100644 --- a/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php +++ b/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php @@ -21,9 +21,8 @@ class WorkbookViewAttributesTest extends AbstractFunctional * are preserved when xlsx documents are read and written. * * @see https://github.com/PHPOffice/PhpSpreadsheet/issues/523 - * - * @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testPreserveWorkbookViewAttributes(string $format): void { // Create a dummy workbook with two worksheets diff --git a/tests/PhpSpreadsheetTests/Helper/DimensionTest.php b/tests/PhpSpreadsheetTests/Helper/DimensionTest.php index e6a823c76..46ea88a16 100644 --- a/tests/PhpSpreadsheetTests/Helper/DimensionTest.php +++ b/tests/PhpSpreadsheetTests/Helper/DimensionTest.php @@ -10,18 +10,14 @@ use PHPUnit\Framework\TestCase; class DimensionTest extends TestCase { - /** - * @dataProvider providerCellWidth - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCellWidth')] public function testCreateDimension(float $expectedResult, string $dimension): void { $result = (new Dimension($dimension))->width(); self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerConvertUoM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertUoM')] public function testConvertDimension(float $expectedResult, string $dimension, string $unitOfMeasure): void { $result = (new Dimension($dimension))->toUnit($unitOfMeasure); diff --git a/tests/PhpSpreadsheetTests/Helper/HtmlTest.php b/tests/PhpSpreadsheetTests/Helper/HtmlTest.php index 26f22847a..6779fb9b5 100644 --- a/tests/PhpSpreadsheetTests/Helper/HtmlTest.php +++ b/tests/PhpSpreadsheetTests/Helper/HtmlTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class HtmlTest extends TestCase { - /** - * @dataProvider providerUtf8EncodingSupport - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerUtf8EncodingSupport')] public function testUtf8EncodingSupport(string $expected, string $input): void { $html = new Html(); diff --git a/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php b/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php index 2c54dd68f..52fe5c0da 100644 --- a/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php +++ b/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php @@ -8,9 +8,7 @@ use PhpOffice\PhpSpreadsheet\Helper\Sample; use PHPUnit\Framework\TestCase; use RuntimeException; -/** - * @covers \PhpOffice\PhpSpreadsheet\Helper\Sample - */ +#[\PHPUnit\Framework\Attributes\CoversClass(Sample::class)] class SampleCoverageTest extends TestCase { public function testSample(): void diff --git a/tests/PhpSpreadsheetTests/Helper/SampleTest.php b/tests/PhpSpreadsheetTests/Helper/SampleTest.php index f20c2163c..e8c79bed4 100644 --- a/tests/PhpSpreadsheetTests/Helper/SampleTest.php +++ b/tests/PhpSpreadsheetTests/Helper/SampleTest.php @@ -9,13 +9,9 @@ use PHPUnit\Framework\TestCase; class SampleTest extends TestCase { - /** - * @runInSeparateProcess - * - * @preserveGlobalState disabled - * - * @dataProvider providerSample - */ + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] + #[\PHPUnit\Framework\Attributes\PreserveGlobalState(false)] + #[\PHPUnit\Framework\Attributes\DataProvider('providerSample')] public function testSample(string $sample): void { ob_start(); diff --git a/tests/PhpSpreadsheetTests/IOFactoryTest.php b/tests/PhpSpreadsheetTests/IOFactoryTest.php index 90628fbee..86244e7de 100644 --- a/tests/PhpSpreadsheetTests/IOFactoryTest.php +++ b/tests/PhpSpreadsheetTests/IOFactoryTest.php @@ -13,9 +13,7 @@ use PHPUnit\Framework\TestCase; class IOFactoryTest extends TestCase { - /** - * @dataProvider providerCreateWriter - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateWriter')] public function testCreateWriter(string $name, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -45,9 +43,7 @@ class IOFactoryTest extends TestCase self::assertInstanceOf(Writer\Pdf\Mpdf::class, $actual); } - /** - * @dataProvider providerCreateReader - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateReader')] public function testCreateReader(string $name, string $expected): void { $actual = IOFactory::createReader($name); @@ -75,9 +71,7 @@ class IOFactoryTest extends TestCase self::assertInstanceOf(Reader\Html::class, $actual); } - /** - * @dataProvider providerIdentify - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIdentify')] public function testIdentifyCreateLoad(string $file, string $expectedName, string $expectedClass): void { $actual = IOFactory::identify($file); diff --git a/tests/PhpSpreadsheetTests/NamedRange2Test.php b/tests/PhpSpreadsheetTests/NamedRange2Test.php index 9061d6e1e..04b3e0031 100644 --- a/tests/PhpSpreadsheetTests/NamedRange2Test.php +++ b/tests/PhpSpreadsheetTests/NamedRange2Test.php @@ -90,9 +90,7 @@ class NamedRange2Test extends TestCase self::assertSame('lightDown', $sheet->getStyle('E3')->getFill()->getFillType()); } - /** - * @dataProvider providerRangeOrFormula - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeOrFormula')] public function testNamedRangeSetStyleBad(string $exceptionMessage, string $name): void { $this->expectException(Except::class); diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php index 7ce3c5f4f..3e4ce79ab 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class CsvEncodingTest extends TestCase { - /** - * @dataProvider providerEncodings - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEncodings')] public function testEncodings(string $filename, string $encoding): void { $reader = new Csv(); @@ -21,9 +19,7 @@ class CsvEncodingTest extends TestCase self::assertEquals('Å', $sheet->getCell('A1')->getValue()); } - /** - * @dataProvider providerEncodings - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEncodings')] public function testWorkSheetInfo(string $filename, string $encoding): void { $reader = new Csv(); @@ -51,9 +47,7 @@ class CsvEncodingTest extends TestCase ]; } - /** - * @dataProvider providerGuessEncoding - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGuessEncoding')] public function testGuessEncoding(string $filename): void { $reader = new Csv(); @@ -86,9 +80,7 @@ class CsvEncodingTest extends TestCase self::assertEquals('�', $sheet->getCell('C3')->getValue()); } - /** - * @dataProvider providerGuessEncoding - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGuessEncoding')] public function testFallbackEncoding(string $filename): void { $reader = new Csv(); diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php index 191aa9d84..05f69fb4b 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php @@ -29,9 +29,7 @@ class CsvIssue2232Test extends TestCase Settings::setLocale($this->locale); } - /** - * @dataProvider providerIssue2232 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIssue2232')] public function testBooleanConversions(bool $useStringBinder, ?bool $preserveBoolString, bool|string $b2Value, bool|string $b3Value): void { if ($useStringBinder) { @@ -62,9 +60,7 @@ class CsvIssue2232Test extends TestCase ]; } - /** - * @dataProvider providerIssue2232locale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIssue2232locale')] public function testBooleanConversionsLocaleAware(bool $useStringBinder, ?bool $preserveBoolString, mixed $b2Value, mixed $b3Value, mixed $b4Value, mixed $b5Value): void { if ($useStringBinder) { diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php index 28ff9f30f..9ff77268a 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php @@ -20,9 +20,7 @@ class CsvLineEndingTest extends TestCase } } - /** - * @dataProvider providerEndings - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEndings')] public function testEndings(string $ending): void { if ($ending === "\r" && PHP_VERSION_ID >= 90000) { @@ -40,9 +38,7 @@ class CsvLineEndingTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerEndings - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEndings')] public function testEndingsNoDetect(string $ending): void { $this->tempFile = $filename = File::temporaryFilename(); diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php index f6bd4e9cb..513576b19 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php @@ -44,11 +44,8 @@ class CsvNumberFormatLocaleTest extends TestCase } } - /** - * @dataProvider providerNumberFormatNoConversionTest - * - * @runInSeparateProcess - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatNoConversionTest')] + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] public function testNumberFormatNoConversion(mixed $expectedValue, string $expectedFormat, string $cellAddress): void { if (!$this->localeAdjusted) { @@ -88,11 +85,8 @@ class CsvNumberFormatLocaleTest extends TestCase ]; } - /** - * @dataProvider providerNumberValueConversionTest - * - * @runInSeparateProcess - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberValueConversionTest')] + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] public function testNumberValueConversion(mixed $expectedValue, string $cellAddress): void { if (!$this->localeAdjusted) { diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php index 5b3e7a062..d80cfc44e 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php @@ -20,9 +20,7 @@ class CsvNumberFormatTest extends TestCase $this->csvReader = new Csv(); } - /** - * @dataProvider providerNumberFormatNoConversionTest - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatNoConversionTest')] public function testNumberFormatNoConversion(int|string $expectedValue, string $expectedFormat, string $cellAddress): void { $spreadsheet = $this->csvReader->load($this->filename); @@ -55,9 +53,7 @@ class CsvNumberFormatTest extends TestCase ]; } - /** - * @dataProvider providerNumberValueConversionTest - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberValueConversionTest')] public function testNumberValueConversion(mixed $expectedValue, string $cellAddress): void { $this->csvReader->castFormattedNumberToNumeric(true); @@ -104,9 +100,7 @@ class CsvNumberFormatTest extends TestCase ]; } - /** - * @dataProvider providerNumberFormatConversionTest - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatConversionTest')] public function testNumberFormatConversion(mixed $expectedValue, string $expectedFormat, string $cellAddress): void { $this->csvReader->castFormattedNumberToNumeric(true, true); diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php index e3da06bcc..a142cb734 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class CsvTest extends TestCase { - /** - * @dataProvider providerDelimiterDetection - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDelimiterDetection')] public function testDelimiterDetection(string $filename, string $expectedDelimiter, string $cell, string|float|int|null $expectedValue): void { $reader = new Csv(); @@ -87,9 +85,7 @@ class CsvTest extends TestCase ]; } - /** - * @dataProvider providerCanLoad - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCanLoad')] public function testCanLoad(bool $expected, string $filename): void { $reader = new Csv(); @@ -229,9 +225,7 @@ class CsvTest extends TestCase $reader->load('tests/data/Reader/CSV/encoding.utf8.csvxxx'); } - /** - * @dataProvider providerEscapes - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEscapes')] public function testInferSeparator(string $escape, string $delimiter): void { if (PHP_VERSION_ID >= 90000 && $escape !== '') { diff --git a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php index 6ea143565..bf45461c8 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ArrayFormula2Test extends TestCase { - /** - * @dataProvider arrayFormulaReaderProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('arrayFormulaReaderProvider')] public function testArrayFormulaReader( string $cellAddress, string $expectedRange, diff --git a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php index f0e9599cc..2943ebead 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ArrayFormulaTest extends TestCase { - /** - * @dataProvider arrayFormulaReaderProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('arrayFormulaReaderProvider')] public function testArrayFormulaReader( string $cellAddress, string $expectedRange, diff --git a/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php b/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php index e8d332895..dfb046f51 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php @@ -14,9 +14,7 @@ use PHPUnit\Framework\TestCase; class GnumericStylesTest extends TestCase { - /** - * @dataProvider providerBorderStyle - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBorderStyle')] public function testBorderStyle(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -41,9 +39,7 @@ class GnumericStylesTest extends TestCase } } - /** - * @dataProvider providerfillType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerfillType')] public function testFillType(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -68,9 +64,7 @@ class GnumericStylesTest extends TestCase } } - /** - * @dataProvider providerHorizontal - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHorizontal')] public function testHorizontal(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -95,9 +89,7 @@ class GnumericStylesTest extends TestCase } } - /** - * @dataProvider providerunderline - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerunderline')] public function testUnderline(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -122,9 +114,7 @@ class GnumericStylesTest extends TestCase } } - /** - * @dataProvider providerVertical - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVertical')] public function testVertical(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -149,9 +139,7 @@ class GnumericStylesTest extends TestCase } } - /** - * @dataProvider providerDataType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataType')] public function testDataType(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); diff --git a/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php b/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php index 16a470810..80002f3c7 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php @@ -20,9 +20,7 @@ class PageSetupTest extends TestCase ]; } - /** - * @dataProvider fileProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('fileProvider')] public function testPageSetup(string $filename): void { $reader = new Gnumeric(); @@ -51,9 +49,7 @@ class PageSetupTest extends TestCase $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider fileProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('fileProvider')] public function testPageMargins(string $filename): void { $reader = new Gnumeric(); diff --git a/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php b/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php index a525b321a..b516de04c 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php @@ -78,9 +78,7 @@ class HtmlBorderTest extends TestCase self::assertEquals('333333', $border->getColor()->getRGB()); } - /** - * @dataProvider providerBorderStyle - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBorderStyle')] public function testBorderStyle(string $style, string $expectedResult): void { $borders = Html::getBorderMappings(); diff --git a/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php b/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php index 1daacaf62..f4c0193f2 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class HtmlCharsetTest extends TestCase { - /** - * @dataProvider providerCharset - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCharset')] public function testCharset(string $filename, string $expectedResult): void { if ($expectedResult === 'exception') { diff --git a/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php b/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php index bb29eb6c5..5df5c249b 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php @@ -14,9 +14,8 @@ use PHPUnit\Framework\TestCase; * set_error_handler to detect if there has been a problem. * I want it run in a separate * process because I am nervous about libxml_use_internal_errors. - * - * @runTestsInSeparateProcesses */ +#[\PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses] class HtmlLibxmlTest extends TestCase { private bool $useErrors; diff --git a/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php b/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php index 175f0e8bb..d691a40ce 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php @@ -11,9 +11,8 @@ use PHPUnit\Framework\TestCase; * There were problems running this test in HtmlTest with PhpUnit 10. * This replacement seem to work. I want it run in a separate * process because I am nervous about set_error_handler. - * - * @runTestsInSeparateProcesses */ +#[\PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses] class HtmlPhpunit10Test extends TestCase { private static string $errorString; diff --git a/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php b/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php index afb01cbfe..8d2341144 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php @@ -64,9 +64,7 @@ class HtmlTest extends TestCase ]; } - /** - * @dataProvider providerCanReadVerySmallFile - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCanReadVerySmallFile')] public function testCanReadVerySmallFile(bool $expected, string $content): void { $filename = HtmlHelper::createHtml($content); diff --git a/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php b/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php index 726b42ba3..9accf01ae 100644 --- a/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ArrayFormulaTest extends TestCase { - /** - * @dataProvider arrayFormulaReaderProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('arrayFormulaReaderProvider')] public function testArrayFormulaReader( string $cellAddress, string $expectedRange, diff --git a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php index 9299161f0..fa099ef76 100644 --- a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php @@ -13,9 +13,7 @@ use XMLReader; class XmlScannerTest extends TestCase { - /** - * @dataProvider providerValidXML - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerValidXML')] public function testValidXML(string $filename, string $expectedResult): void { $reader = XmlScanner::getInstance(new \PhpOffice\PhpSpreadsheet\Reader\Xml()); @@ -41,9 +39,7 @@ class XmlScannerTest extends TestCase return $tests; } - /** - * @dataProvider providerInvalidXML - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInvalidXML')] public function testInvalidXML(string $filename): void { $this->expectException(ReaderException::class); @@ -94,9 +90,7 @@ class XmlScannerTest extends TestCase $fileReader->getSecurityScannerOrThrow(); } - /** - * @dataProvider providerValidXMLForCallback - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerValidXMLForCallback')] public function testSecurityScanWithCallback(string $filename, string $expectedResult): void { $fileReader = new Xlsx(); @@ -136,9 +130,7 @@ class XmlScannerTest extends TestCase self::assertSame($input, $output); } - /** - * @dataProvider providerInvalidXlsx - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInvalidXlsx')] public function testInvalidXlsx(string $filename, string $message): void { $this->expectException(ReaderException::class); @@ -160,9 +152,7 @@ class XmlScannerTest extends TestCase ]; } - /** - * @dataProvider providerValidUtf16 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerValidUtf16')] public function testValidUtf16(string $filename): void { $reader = new Xlsx(); diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php index ee571b956..45787c75f 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class ColorMapTest extends TestCase { - /** - * @dataProvider colorMapProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('colorMapProvider')] public function testColorMap(int $index, string $expectedBiff5, string $expectedBiff8, string $expectedBuiltin): void { self::assertSame($expectedBiff5, BIFF5::lookup($index)['rgb']); diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php index 684c3d263..ee39c7ce2 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class ConditionalFormattingBasicTest extends TestCase { - /** - * @dataProvider conditionalFormattingProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('conditionalFormattingProvider')] public function testReadConditionalFormatting(string $expectedRange, array $expectedRules): void { $filename = 'tests/data/Reader/XLS/CF_Basic_Comparisons.xls'; diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php index abdfb9088..eb7a67916 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class ConditionalFormattingExpressionTest extends TestCase { - /** - * @dataProvider conditionalFormattingProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('conditionalFormattingProvider')] public function testReadConditionalFormatting(string $expectedRange, array $expectedRule): void { $filename = 'tests/data/Reader/XLS/CF_Expression_Comparisons.xls'; diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php index 80619af99..3d30e8ab6 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class DataValidationTest extends TestCase { - /** - * @dataProvider dataValidationProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataValidationProvider')] public function testDataValidation(string $expectedRange, array $expectedRule): void { $filename = 'tests/data/Reader/XLS/DataValidation.xls'; diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php index c853d5020..170a38a1e 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ErrorCodeMapTest extends TestCase { - /** - * @dataProvider errorCodeMapProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('errorCodeMapProvider')] public function testErrorCode(bool|string $expected, int $index): void { self::assertSame($expected, ErrorCode::lookup($index)); diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php index f064ec9f3..653a76cd7 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php @@ -30,9 +30,7 @@ class AutoFilterTest extends TestCase ]; } - /** - * @dataProvider loadDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('loadDataProvider')] public function testLoad(string $ref, int $expectedReadAutoFilterCalled, string $expectedRef): void { $worksheetAutoFilter = $this->getMockBuilder(WorksheetAutoFilter::class) diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php index 3de53c7c7..4935511cb 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php @@ -25,9 +25,8 @@ class DataValidationTest extends TestCase /** * Test for load drop down lists of another sheet. * Pull #2150, issue #2149. Also issue #2677. - * - * @dataProvider providerExternalSheet */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExternalSheet')] public function testDataValidationOfAnotherSheet(string $expectedB14, string $filename): void { $reader = new Xlsx(); diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php index e90d599a1..c2d8b3152 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class DirectorySeparatorTest extends TestCase { - /** - * @dataProvider providerDirectorySeparator - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDirectorySeparator')] public function testDirectorySeparatorIdentify(string $fileName): void { $filename = "tests/data/Reader/XLSX/{$fileName}"; @@ -21,9 +19,7 @@ class DirectorySeparatorTest extends TestCase self::assertSame('Xlsx', $reader); } - /** - * @dataProvider providerDirectorySeparator - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDirectorySeparator')] public function testDirectorySeparatorWorksheetNames(string $fileName): void { $filename = "tests/data/Reader/XLSX/{$fileName}"; @@ -34,9 +30,7 @@ class DirectorySeparatorTest extends TestCase self::assertSame('Sheet', $sheetList[0]); } - /** - * @dataProvider providerDirectorySeparator - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDirectorySeparator')] public function testDirectorySeparatorWorksheetInfo(string $fileName): void { $filename = "tests/data/Reader/XLSX/{$fileName}"; @@ -49,9 +43,7 @@ class DirectorySeparatorTest extends TestCase self::assertSame(21, (int) $sheetData[0]['totalColumns']); } - /** - * @dataProvider providerDirectorySeparator - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDirectorySeparator')] public function testDirectorySeparatorLoad(string $fileName): void { $filename = "tests/data/Reader/XLSX/{$fileName}"; diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php index 5387ea738..1d0003f0c 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class GridlinesTest extends AbstractFunctional { - /** - * @dataProvider loadDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('loadDataProvider')] public function testGridlines(bool $display, bool $print): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php index 344f0666a..3b5bbb193 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php @@ -234,9 +234,8 @@ class XlsxTest extends TestCase /** * Test if all whitespace is removed from a style definition string. * This is needed to parse it into properties with the correct keys. - * - * @dataProvider providerStripsWhiteSpaceFromStyleString */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerStripsWhiteSpaceFromStyleString')] public function testStripsWhiteSpaceFromStyleString(string $string): void { $string = Xlsx::stripWhiteSpaceFromStyleString($string); diff --git a/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php b/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php index 73c3d1d53..1aa95cfd1 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class XmlStyleCoverageTest extends TestCase { - /** - * @dataProvider providerBorderStyle - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBorderStyle')] public function testBorderStyle(string $style, string $expectedResult): void { $styles = Xml::XmlMappings(); @@ -38,9 +36,7 @@ class XmlStyleCoverageTest extends TestCase } } - /** - * @dataProvider providerfillType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerfillType')] public function testFillType(string $style, string $expectedResult): void { $styles = Xml::xmlMappings(); diff --git a/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php b/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php index a308b068d..63ec368df 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class XmlTest extends TestCase { - /** - * @dataProvider providerInvalidSimpleXML - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInvalidSimpleXML')] public function testInvalidSimpleXML(string $filename): void { $xmlReader = new Xml(); diff --git a/tests/PhpSpreadsheetTests/RefRangeTest.php b/tests/PhpSpreadsheetTests/RefRangeTest.php index 17b4e3cd6..7cf3d08e8 100644 --- a/tests/PhpSpreadsheetTests/RefRangeTest.php +++ b/tests/PhpSpreadsheetTests/RefRangeTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class RefRangeTest extends TestCase { - /** - * @dataProvider providerRefRange - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRefRange')] public function testRefRange(int|string $expectedResult, string $rangeString): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php b/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php index c0dc75611..920acf861 100644 --- a/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php +++ b/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ReferenceHelper4Test extends TestCase { - /** - * @dataProvider dataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProvider')] public function testIssue3907(string $expectedResult, string $settingsTitle, string $formula, string $dataTitle = 'DATA'): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/ReferenceHelperTest.php b/tests/PhpSpreadsheetTests/ReferenceHelperTest.php index a28477ca1..a768da97d 100644 --- a/tests/PhpSpreadsheetTests/ReferenceHelperTest.php +++ b/tests/PhpSpreadsheetTests/ReferenceHelperTest.php @@ -102,9 +102,7 @@ class ReferenceHelperTest extends TestCase } } - /** - * @dataProvider providerFormulaUpdates - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormulaUpdates')] public function testUpdateFormula(string $formula, int $insertRows, int $insertColumns, string $worksheet, string $expectedResult): void { $referenceHelper = ReferenceHelper::getInstance(); @@ -119,9 +117,7 @@ class ReferenceHelperTest extends TestCase return require 'tests/data/ReferenceHelperFormulaUpdates.php'; } - /** - * @dataProvider providerMultipleWorksheetFormulaUpdates - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMultipleWorksheetFormulaUpdates')] public function testUpdateFormulaForMultipleWorksheets(string $formula, int $insertRows, int $insertColumns, string $expectedResult): void { $referenceHelper = ReferenceHelper::getInstance(); diff --git a/tests/PhpSpreadsheetTests/Shared/CodePageTest.php b/tests/PhpSpreadsheetTests/Shared/CodePageTest.php index e7c021835..448bff3e9 100644 --- a/tests/PhpSpreadsheetTests/Shared/CodePageTest.php +++ b/tests/PhpSpreadsheetTests/Shared/CodePageTest.php @@ -11,10 +11,9 @@ use PHPUnit\Framework\TestCase; class CodePageTest extends TestCase { /** - * @dataProvider providerCodePage - * * @param string|string[] $expectedResult */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCodePage')] public function testCodePageNumberToName(array|string $expectedResult, int $codePageIndex): void { if ($expectedResult === 'exception') { diff --git a/tests/PhpSpreadsheetTests/Shared/Date2Test.php b/tests/PhpSpreadsheetTests/Shared/Date2Test.php index f5e51728f..c109e0279 100644 --- a/tests/PhpSpreadsheetTests/Shared/Date2Test.php +++ b/tests/PhpSpreadsheetTests/Shared/Date2Test.php @@ -37,9 +37,7 @@ class Date2Test extends TestCase Cell::setCalculateDateTimeType(-1); } - /** - * @dataProvider providerTimeOnly - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTimeOnly')] public function testTimeOnly(int|float $expectedResult, int|float|string $value, ?string $format = null): void { Cell::setCalculateDateTimeType(Cell::CALCULATE_TIME_FLOAT); @@ -82,9 +80,7 @@ class Date2Test extends TestCase ]; } - /** - * @dataProvider providerDateAndTime - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateAndTime')] public function testDateAndTime(int|float $expectedResult, int|float|string $value, ?string $format = null): void { Cell::setCalculateDateTimeType(Cell::CALCULATE_DATE_TIME_FLOAT); @@ -127,9 +123,7 @@ class Date2Test extends TestCase ]; } - /** - * @dataProvider providerAsis - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsis')] public function testDefault(int|float $expectedResult, int|float|string $value, ?string $format = null): void { //Cell::setCalculateDateTimeType(Cell::CALCULATE_DATE_TIME_ASIS); @@ -149,9 +143,7 @@ class Date2Test extends TestCase self::assertSame(1, $this->spreadsheet->getActiveSheetIndex()); } - /** - * @dataProvider providerAsis - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAsis')] public function testAsis(int|float $expectedResult, int|float|string $value, ?string $format = null): void { Cell::setCalculateDateTimeType(Cell::CALCULATE_DATE_TIME_ASIS); diff --git a/tests/PhpSpreadsheetTests/Shared/DateTest.php b/tests/PhpSpreadsheetTests/Shared/DateTest.php index c770ac260..e3dbedb6b 100644 --- a/tests/PhpSpreadsheetTests/Shared/DateTest.php +++ b/tests/PhpSpreadsheetTests/Shared/DateTest.php @@ -51,9 +51,7 @@ class DateTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerDateTimeExcelToTimestamp1900 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeExcelToTimestamp1900')] public function testDateTimeExcelToTimestamp1900(float|int $expectedResult, float|int $excelDateTimeValue): void { if ($expectedResult > PHP_INT_MAX || $expectedResult < PHP_INT_MIN) { @@ -70,9 +68,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/ExcelToTimestamp1900.php'; } - /** - * @dataProvider providerDateTimeTimestampToExcel1900 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeTimestampToExcel1900')] public function testDateTimeTimestampToExcel1900(float|int $expectedResult, float|int|string $unixTimestamp): void { Date::setExcelCalendar(Date::CALENDAR_WINDOWS_1900); @@ -86,9 +82,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/TimestampToExcel1900.php'; } - /** - * @dataProvider providerDateTimeDateTimeToExcel - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeDateTimeToExcel')] public function testDateTimeDateTimeToExcel(float|int $expectedResult, DateTimeInterface $dateTimeObject): void { Date::setExcelCalendar(Date::CALENDAR_WINDOWS_1900); @@ -103,10 +97,9 @@ class DateTest extends TestCase } /** - * @dataProvider providerDateTimeFormattedPHPToExcel1900 - * * @param array{0: int, 1: int, 2: int, 3: int, 4: int, 5: float|int} $args Array containing year/month/day/hours/minutes/seconds */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeFormattedPHPToExcel1900')] public function testDateTimeFormattedPHPToExcel1900(mixed $expectedResult, ...$args): void { Date::setExcelCalendar(Date::CALENDAR_WINDOWS_1900); @@ -120,9 +113,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/FormattedPHPToExcel1900.php'; } - /** - * @dataProvider providerDateTimeExcelToTimestamp1904 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeExcelToTimestamp1904')] public function testDateTimeExcelToTimestamp1904(float|int $expectedResult, float|int $excelDateTimeValue): void { if ($expectedResult > PHP_INT_MAX || $expectedResult < PHP_INT_MIN) { @@ -139,9 +130,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/ExcelToTimestamp1904.php'; } - /** - * @dataProvider providerDateTimeTimestampToExcel1904 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeTimestampToExcel1904')] public function testDateTimeTimestampToExcel1904(mixed $expectedResult, float|int|string $unixTimestamp): void { Date::setExcelCalendar(Date::CALENDAR_MAC_1904); @@ -155,9 +144,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/TimestampToExcel1904.php'; } - /** - * @dataProvider providerIsDateTimeFormatCode - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIsDateTimeFormatCode')] public function testIsDateTimeFormatCode(mixed $expectedResult, string $format): void { $result = Date::isDateTimeFormatCode($format); @@ -169,9 +156,7 @@ class DateTest extends TestCase return require 'tests/data/Shared/Date/FormatCodes.php'; } - /** - * @dataProvider providerDateTimeExcelToTimestamp1900Timezone - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTimeExcelToTimestamp1900Timezone')] public function testDateTimeExcelToTimestamp1900Timezone(float|int $expectedResult, float|int $excelDateTimeValue, string $timezone): void { if (is_numeric($expectedResult) && ($expectedResult > PHP_INT_MAX || $expectedResult < PHP_INT_MIN)) { diff --git a/tests/PhpSpreadsheetTests/Shared/DrawingTest.php b/tests/PhpSpreadsheetTests/Shared/DrawingTest.php index 972576e60..7eb41e643 100644 --- a/tests/PhpSpreadsheetTests/Shared/DrawingTest.php +++ b/tests/PhpSpreadsheetTests/Shared/DrawingTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class DrawingTest extends TestCase { - /** - * @dataProvider providerPixelsToCellDimension - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPixelsToCellDimension')] public function testPixelsToCellDimension( float $expectedResult, int $pixelSize, @@ -27,9 +25,7 @@ class DrawingTest extends TestCase self::assertSame($expectedResult, $result); } - /** - * @dataProvider providerCellDimensionToPixels - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCellDimensionToPixels')] public function testCellDimensionToPixels( int $expectedResult, int $cellSize, diff --git a/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php b/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php index c5a3aa0d8..fcae3303b 100644 --- a/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php +++ b/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php @@ -82,7 +82,7 @@ class ExactFontTest extends TestCase $this->directoryName = ''; } - /** @dataProvider providerFontData */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFontData')] public function testExact(string $fontName, float $excelWidth, float $xmlWidth, float $winWidth, float $ubuntuWidth): void { if ($this->incompleteMessage !== '') { diff --git a/tests/PhpSpreadsheetTests/Shared/Font2Test.php b/tests/PhpSpreadsheetTests/Shared/Font2Test.php index 2bfa429ef..e35ae3e3b 100644 --- a/tests/PhpSpreadsheetTests/Shared/Font2Test.php +++ b/tests/PhpSpreadsheetTests/Shared/Font2Test.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class Font2Test extends TestCase { - /** - * @dataProvider providerCharsetFromFontName - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCharsetFromFontName')] public function testCharsetFromFontName(string $fontName, int $expectedResult): void { $result = Font::getCharsetFromFontName($fontName); diff --git a/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php b/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php index 5d45d720b..d953245ec 100644 --- a/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php +++ b/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php @@ -39,9 +39,7 @@ class FontFileNameTest extends TestCase Font::setExtraFontArray($this->holdExtraFontArray); } - /** - * @dataProvider providerDefault - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDefault')] public function testDefaultFilenames(string $expected, array $fontArray): void { if ($expected === 'exception') { @@ -81,9 +79,7 @@ class FontFileNameTest extends TestCase ]; } - /** - * @dataProvider providerMac - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMac')] public function testMacFilenames(string $expected, array $fontArray): void { if ($expected === 'exception') { @@ -123,9 +119,7 @@ class FontFileNameTest extends TestCase ]; } - /** - * @dataProvider providerOverride - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOverride')] public function testOverrideFilenames(string $expected, array $fontArray): void { Font::setTrueTypeFontPath(self::DEFAULT_DIRECTORY); @@ -153,9 +147,7 @@ class FontFileNameTest extends TestCase ]; } - /** - * @dataProvider providerOverrideAbsolute - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOverrideAbsolute')] public function testOverrideFilenamesAbsolute(string $expected, array $fontArray): void { $realPath = realpath(self::MAC_DIRECTORY) . DIRECTORY_SEPARATOR; @@ -184,9 +176,7 @@ class FontFileNameTest extends TestCase ]; } - /** - * @dataProvider providerRecurse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRecurse')] public function testRecurseFilenames(string $expected, array $fontArray): void { if ($expected === 'exception') { diff --git a/tests/PhpSpreadsheetTests/Shared/FontTest.php b/tests/PhpSpreadsheetTests/Shared/FontTest.php index e9b1a2ed8..c59cc3315 100644 --- a/tests/PhpSpreadsheetTests/Shared/FontTest.php +++ b/tests/PhpSpreadsheetTests/Shared/FontTest.php @@ -41,9 +41,7 @@ class FontTest extends TestCase self::assertFalse($result); } - /** - * @dataProvider providerFontSizeToPixels - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFontSizeToPixels')] public function testFontSizeToPixels(float|int $expectedResult, float|int $size): void { $result = Font::fontSizeToPixels($size); @@ -55,9 +53,7 @@ class FontTest extends TestCase return require 'tests/data/Shared/FontSizeToPixels.php'; } - /** - * @dataProvider providerInchSizeToPixels - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInchSizeToPixels')] public function testInchSizeToPixels(float|int $expectedResult, float|int $size): void { $result = Font::inchSizeToPixels($size); @@ -69,9 +65,7 @@ class FontTest extends TestCase return require 'tests/data/Shared/InchSizeToPixels.php'; } - /** - * @dataProvider providerCentimeterSizeToPixels - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCentimeterSizeToPixels')] public function testCentimeterSizeToPixels(float $expectedResult, float $size): void { $result = Font::centimeterSizeToPixels($size); @@ -95,9 +89,7 @@ class FontTest extends TestCase self::assertEquals(4, $width); } - /** - * @dataProvider providerCalculateApproximateColumnWidth - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculateApproximateColumnWidth')] public function testCalculateApproximateColumnWidth( float $expectedWidth, StyleFont $font, diff --git a/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php b/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php index 7b97a979d..22505530d 100644 --- a/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php +++ b/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php @@ -11,9 +11,8 @@ use PHPUnit\Framework\TestCase; * There were problems running these tests in OLETest with PhpUnit 10. * These replacements seem to work. I want them run in separate * processes because I am nervous about set_error_handler. - * - * @runTestsInSeparateProcesses */ +#[\PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses] class OLEPhpunit10Test extends TestCase { private static string $errorString; diff --git a/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php b/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php index 78a89386c..e22a8e86b 100644 --- a/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php +++ b/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php @@ -10,9 +10,7 @@ use PHPUnit\Framework\TestCase; class PasswordHasherTest extends TestCase { - /** - * @dataProvider providerHashPassword - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHashPassword')] public function testHashPassword( string $expectedResult, string $password, diff --git a/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php b/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php index 50b5b1f93..965d00300 100644 --- a/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php +++ b/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php @@ -10,9 +10,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class PasswordReloadTest extends AbstractFunctional { - /** - * @dataProvider providerPasswords - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPasswords')] public function testPasswordReload(string $format, string $algorithm, bool $supported = true): void { $password = 'hello'; diff --git a/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php b/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php index e6f26bf6e..47326f929 100644 --- a/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php +++ b/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php @@ -10,11 +10,10 @@ use PHPUnit\Framework\TestCase; class ExponentialBestFitTest extends TestCase { /** - * @dataProvider providerExponentialBestFit - * * @param array $yValues * @param array $xValues */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExponentialBestFit')] public function testExponentialBestFit( array $expectedSlope, array $expectedIntersect, diff --git a/tests/PhpSpreadsheetTests/Shared/Trend/LinearBestFitTest.php b/tests/PhpSpreadsheetTests/Shared/Trend/LinearBestFitTest.php index e9de8a2e5..f23b9bfca 100644 --- a/tests/PhpSpreadsheetTests/Shared/Trend/LinearBestFitTest.php +++ b/tests/PhpSpreadsheetTests/Shared/Trend/LinearBestFitTest.php @@ -12,11 +12,10 @@ class LinearBestFitTest extends TestCase const LBF_PRECISION = 1.0E-8; /** - * @dataProvider providerLinearBestFit - * * @param array $yValues * @param array $xValues */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerLinearBestFit')] public function testLinearBestFit( array $expectedSlope, array $expectedIntersect, diff --git a/tests/PhpSpreadsheetTests/SpreadsheetTest.php b/tests/PhpSpreadsheetTests/SpreadsheetTest.php index a35ab101f..5fbeb4fa4 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -52,9 +52,7 @@ class SpreadsheetTest extends TestCase return $array; } - /** - * @dataProvider dataProviderForSheetNames - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForSheetNames')] public function testGetSheetByName(?int $index, string $sheetName): void { $spreadsheet = $this->getSpreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php b/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php index 31d980ebd..e2add4c2a 100644 --- a/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php +++ b/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class ColorIndexTest extends TestCase { - /** - * @dataProvider providerColorIndexes - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColorIndexes')] public function testColorIndex(string $expectedResult, string $xml, bool $background = false): void { $sxml = simplexml_load_string($xml); diff --git a/tests/PhpSpreadsheetTests/Style/ColorTest.php b/tests/PhpSpreadsheetTests/Style/ColorTest.php index 91f03e3fe..0b8093d68 100644 --- a/tests/PhpSpreadsheetTests/Style/ColorTest.php +++ b/tests/PhpSpreadsheetTests/Style/ColorTest.php @@ -76,9 +76,7 @@ class ColorTest extends TestCase self::assertEquals('FF123456', $color->getARGB()); } - /** - * @dataProvider providerColorGetRed - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColorGetRed')] public function testGetRed(mixed $expectedResult, string $color, ?bool $bool = null): void { if ($bool === null) { @@ -94,9 +92,7 @@ class ColorTest extends TestCase return require 'tests/data/Style/Color/ColorGetRed.php'; } - /** - * @dataProvider providerColorGetGreen - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColorGetGreen')] public function testGetGreen(mixed $expectedResult, string $color, ?bool $bool = null): void { if ($bool === null) { @@ -112,9 +108,7 @@ class ColorTest extends TestCase return require 'tests/data/Style/Color/ColorGetGreen.php'; } - /** - * @dataProvider providerColorGetBlue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColorGetBlue')] public function testGetBlue(mixed $expectedResult, string $color, ?bool $bool = null): void { if ($bool === null) { @@ -130,9 +124,7 @@ class ColorTest extends TestCase return require 'tests/data/Style/Color/ColorGetBlue.php'; } - /** - * @dataProvider providerColorChangeBrightness - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerColorChangeBrightness')] public function testChangeBrightness(string $expectedResult, string $hexColorValue, float $adjustPercentages): void { $result = Color::changeBrightness($hexColorValue, $adjustPercentages); diff --git a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php index 334736e87..00c026169 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php @@ -42,9 +42,7 @@ class CellMatcherTest extends TestCase return $cfRange; } - /** - * @dataProvider basicCellIsComparisonDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('basicCellIsComparisonDataProvider')] public function testBasicCellIsComparison(string $sheetname, string $cellAddress, array $expectedMatches): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -112,9 +110,7 @@ class CellMatcherTest extends TestCase $this->spreadsheet->getSheetByNameOrThrow($sheetname); } - /** - * @dataProvider rangeCellIsComparisonDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeCellIsComparisonDataProvider')] public function testRangeCellIsComparison(string $sheetname, string $cellAddress, bool $expectedMatch): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -153,9 +149,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider cellIsExpressionMultipleDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellIsExpressionMultipleDataProvider')] public function testCellIsMultipleExpression(string $sheetname, string $cellAddress, array $expectedMatches): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -187,9 +181,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider cellIsExpressionDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellIsExpressionDataProvider')] public function testCellIsExpression(string $sheetname, string $cellAddress, bool $expectedMatch): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -231,9 +223,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider textExpressionsDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('textExpressionsDataProvider')] public function testTextExpressions(string $sheetname, string $cellAddress, bool $expectedMatch): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -339,9 +329,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider blanksDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('blanksDataProvider')] public function testBlankExpressions(string $sheetname, string $cellAddress, array $expectedMatches): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -370,9 +358,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider errorDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('errorDataProvider')] public function testErrorExpressions(string $sheetname, string $cellAddress, array $expectedMatches): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -400,9 +386,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider dateOccurringDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dateOccurringDataProvider')] public function testDateOccurringExpressions(string $sheetname, string $cellAddress, bool $expectedMatch): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -442,9 +426,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider duplicatesDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('duplicatesDataProvider')] public function testDuplicatesExpressions(string $sheetname, string $cellAddress, array $expectedMatches): void { $this->spreadsheet = $this->loadSpreadsheet(); @@ -476,9 +458,7 @@ class CellMatcherTest extends TestCase ]; } - /** - * @dataProvider textCrossWorksheetDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('textCrossWorksheetDataProvider')] public function testCrossWorksheetExpressions(string $sheetname, string $cellAddress, bool $expectedMatch): void { $this->spreadsheet = $this->loadSpreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php index d16ca99ea..2dc0a2463 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php @@ -24,9 +24,7 @@ class CellValueWizardTest extends TestCase $this->style = new Style(); } - /** - * @dataProvider basicCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('basicCellValueDataProvider')] public function testBasicCellValueWizard(string $operator, mixed $operand, string $expectedOperator, mixed $expectedCondition): void { $ruleType = Wizard::CELL_VALUE; @@ -63,9 +61,7 @@ class CellValueWizardTest extends TestCase ]; } - /** - * @dataProvider relativeCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('relativeCellValueDataProvider')] public function testRelativeCellValueWizard(mixed $operand, mixed $expectedCondition): void { $ruleType = Wizard::CELL_VALUE; @@ -94,9 +90,7 @@ class CellValueWizardTest extends TestCase ]; } - /** - * @dataProvider formulaCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('formulaCellValueDataProvider')] public function testCellValueWizardWithFormula(mixed $operand, mixed $expectedCondition): void { $ruleType = Wizard::CELL_VALUE; @@ -129,9 +123,7 @@ class CellValueWizardTest extends TestCase ]; } - /** - * @dataProvider rangeCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeCellValueDataProvider')] public function testRangeCellValueWizard(string $operator, array $operands, string $expectedOperator): void { $ruleType = Wizard::CELL_VALUE; @@ -161,9 +153,7 @@ class CellValueWizardTest extends TestCase ]; } - /** - * @dataProvider rangeRelativeCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeRelativeCellValueDataProvider')] public function testRelativeRangeCellValueWizard(array $operands, array $expectedConditions): void { $ruleType = Wizard::CELL_VALUE; @@ -193,9 +183,7 @@ class CellValueWizardTest extends TestCase ]; } - /** - * @dataProvider rangeFormulaCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeFormulaCellValueDataProvider')] public function testFormulaRangeCellValueWizard(array $operands, array $expectedConditions): void { $ruleType = Wizard::CELL_VALUE; diff --git a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php index 57778fc8d..cb2175bc6 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php @@ -24,9 +24,7 @@ class DateValueWizardTest extends TestCase $this->style = new Style(); } - /** - * @dataProvider dateValueWizardProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dateValueWizardProvider')] public function testDateValueWizard(string $operator, string $expectedReference, string $expectedExpression): void { $ruleType = Wizard::DATES_OCCURRING; diff --git a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php index 770af66af..d01281423 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php @@ -24,9 +24,7 @@ class ExpressionWizardTest extends TestCase $this->style = new Style(); } - /** - * @dataProvider expressionDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('expressionDataProvider')] public function testExpressionWizard(string $expression, string $expectedExpression): void { $ruleType = Wizard::EXPRESSION; @@ -46,9 +44,7 @@ class ExpressionWizardTest extends TestCase self::assertEquals($newWizard, $wizard, 'fromConditional() Failure'); } - /** - * @dataProvider expressionDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('expressionDataProvider')] public function testExpressionWizardUsingAlias(string $expression, string $expectedExpression): void { $ruleType = Wizard::EXPRESSION; diff --git a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php index 5002bcaa1..46f500860 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php @@ -21,10 +21,9 @@ class WizardFactoryTest extends TestCase } /** - * @dataProvider basicWizardFactoryProvider - * * @psalm-param class-string $expectedWizard */ + #[\PHPUnit\Framework\Attributes\DataProvider('basicWizardFactoryProvider')] public function testBasicWizardFactory(string $ruleType, string $expectedWizard): void { $wizard = $this->wizardFactory->newRule($ruleType); @@ -45,9 +44,7 @@ class WizardFactoryTest extends TestCase ]; } - /** - * @dataProvider conditionalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('conditionalProvider')] public function testWizardFromConditional(string $sheetName, string $cellAddress, array $expectedWizads): void { $filename = 'tests/data/Style/ConditionalFormatting/CellMatcher.xlsx'; diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php index 60c1f88cc..819ddca2a 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php @@ -15,9 +15,7 @@ use PHPUnit\Framework\TestCase; class AccountingTest extends TestCase { - /** - * @dataProvider providerAccounting - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAccounting')] public function testAccounting( string $expectedResultPositive, string $expectedResultNegative, @@ -47,9 +45,7 @@ class AccountingTest extends TestCase ]; } - /** - * @dataProvider providerAccountingLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAccountingLocale')] public function testAccountingLocale( string $expectedResult, string $currencyCode, @@ -109,9 +105,7 @@ class AccountingTest extends TestCase } } - /** - * @dataProvider providerAccountingLocaleNoDecimals - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAccountingLocaleNoDecimals')] public function testAccountingLocaleNoDecimals( string $expectedResult, string $currencyCode, diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php index d0bc08ef0..a8b59e45f 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php @@ -15,9 +15,7 @@ use PHPUnit\Framework\TestCase; class CurrencyTest extends TestCase { - /** - * @dataProvider providerCurrency - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrency')] public function testCurrency( string $expectedResultPositive, string $expectedResultNegative, @@ -48,9 +46,7 @@ class CurrencyTest extends TestCase ]; } - /** - * @dataProvider providerCurrencyLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrencyLocale')] public function testCurrencyLocale( string $expectedResult, string $currencyCode, @@ -110,9 +106,7 @@ class CurrencyTest extends TestCase } } - /** - * @dataProvider providerCurrencyLocaleNoDecimals - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrencyLocaleNoDecimals')] public function testCurrencyLocaleNoDecimals( string $expectedResult, string $currencyCode, diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php index cc19a4129..fd9af38f5 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php @@ -10,11 +10,10 @@ use PHPUnit\Framework\TestCase; class DateTest extends TestCase { /** - * @dataProvider providerDate - * * @param null|string|string[] $separators * @param string[] $formatBlocks */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDate')] public function testDate(string $expectedResult, string|array|null $separators = null, array $formatBlocks = []): void { $wizard = new Date($separators, ...$formatBlocks); diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php index 17fedffa3..18dc3205c 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php @@ -12,11 +12,10 @@ use PHPUnit\Framework\TestCase; class DateTimeTest extends TestCase { /** - * @dataProvider providerDateTime - * * @param null|string|string[] $separators * @param string[] $formatBlocks */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDateTime')] public function testDateTime(string $expectedResult, string|null|array $separators, array $formatBlocks): void { $wizard = new DateTime($separators, ...$formatBlocks); diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php index 0804deee0..b4a50c245 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php @@ -10,11 +10,10 @@ use PHPUnit\Framework\TestCase; class DurationTest extends TestCase { /** - * @dataProvider providerTime - * * @param null|string|string[] $separators * @param string[] $formatBlocks */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTime')] public function testTime(string $expectedResult, string|array|null $separators = null, array $formatBlocks = []): void { $wizard = new Duration($separators, ...$formatBlocks); diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php index 950496ed4..8216f8127 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class NumberTest extends TestCase { - /** - * @dataProvider providerNumber - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumber')] public function testNumber(string $expectedResult, int $decimals, bool $thousandsSeparator): void { $wizard = new Number($decimals, $thousandsSeparator); @@ -32,9 +30,7 @@ class NumberTest extends TestCase ]; } - /** - * @dataProvider providerNumberLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberLocale')] public function testNumberLocale( string $expectedResult, string $locale diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php index 23f45b9c9..8a7c72ed1 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class PercentageTest extends TestCase { - /** - * @dataProvider providerPercentage - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPercentage')] public function testPercentage(string $expectedResult, int $decimals): void { $wizard = new Percentage($decimals); @@ -32,9 +30,7 @@ class PercentageTest extends TestCase ]; } - /** - * @dataProvider providerPercentageLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPercentageLocale')] public function testPercentageLocale( string $expectedResult, string $locale diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php index 9120284c6..84a78d54b 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class ScientificTest extends TestCase { - /** - * @dataProvider providerScientific - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerScientific')] public function testScientific(string $expectedResult, int $decimals): void { $wizard = new Scientific($decimals); @@ -32,9 +30,7 @@ class ScientificTest extends TestCase ]; } - /** - * @dataProvider providerScientificLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerScientificLocale')] public function testScientificLocale( string $expectedResult, string $locale diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php index de86ffe96..dcd3c8da5 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php @@ -10,11 +10,10 @@ use PHPUnit\Framework\TestCase; class TimeTest extends TestCase { /** - * @dataProvider providerTime - * * @param null|string|string[] $separators * @param string[] $formatBlocks */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTime')] public function testTime(string $expectedResult, string|array|null $separators = null, array $formatBlocks = []): void { $wizard = new Time($separators, ...$formatBlocks); diff --git a/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php b/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php index 0c2b4748a..f0bcbbae9 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php @@ -25,10 +25,9 @@ class NumberFormatTest extends TestCase } /** - * @dataProvider providerNumberFormat - * * @param null|bool|float|int|string $args string to be formatted */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormat')] public function testFormatValueWithMask(mixed $expectedResult, mixed ...$args): void { $result = NumberFormat::toFormattedString(...$args); @@ -41,10 +40,9 @@ class NumberFormatTest extends TestCase } /** - * @dataProvider providerNumberFormatFractions - * * @param null|bool|float|int|string $args string to be formatted */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatFractions')] public function testFormatValueWithMaskFraction(mixed $expectedResult, mixed ...$args): void { $result = NumberFormat::toFormattedString(...$args); @@ -57,10 +55,9 @@ class NumberFormatTest extends TestCase } /** - * @dataProvider providerNumberFormatDates - * * @param null|bool|float|int|string $args string to be formatted */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatDates')] public function testFormatValueWithMaskDate(mixed $expectedResult, mixed ...$args): void { $result = NumberFormat::toFormattedString(...$args); @@ -86,9 +83,7 @@ class NumberFormatTest extends TestCase StringHelper::setCurrencyCode($cur); } - /** - * @dataProvider providerNoScientific - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNoScientific')] public function testNoScientific(string $expectedResult, string $numericString): void { $result = NumberFormatter::floatStringConvertScientific($numericString); diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php index 55c80dfc6..4246707fb 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php @@ -36,9 +36,7 @@ class AutoFilterAverageTop10Test extends SetupTeardown ]; } - /** - * @dataProvider providerAverage - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAverage')] public function testAboveAverage(array $expectedVisible, string $rule): void { $sheet = $this->initSheet(); @@ -68,9 +66,7 @@ class AutoFilterAverageTop10Test extends SetupTeardown ]; } - /** - * @dataProvider providerTop10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTop10')] public function testTop10(array $expectedVisible, string $rule, string $ruleType, int $count): void { $sheet = $this->initSheet(); @@ -120,9 +116,7 @@ class AutoFilterAverageTop10Test extends SetupTeardown ]; } - /** - * @dataProvider providerTop10Ties - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTop10Ties')] public function testTop10Ties(array $expectedVisible, string $rule, string $ruleType, int $count): void { $sheet = $this->initSheetTies(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php index e36135a6c..3539df389 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php @@ -43,9 +43,7 @@ class AutoFilterCustomNumericTest extends SetupTeardown ]; } - /** - * @dataProvider providerCustomRule - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCustomRule')] public function testCustomTest(array $expectedVisible, string $rule, int $comparand): void { $sheet = $this->initSheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php index dcaba9ef3..42aa6b2e2 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php @@ -48,9 +48,7 @@ class AutoFilterCustomTextTest extends SetupTeardown ]; } - /** - * @dataProvider providerCustomText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCustomText')] public function testCustomTest(array $expectedVisible, string $pattern): void { $sheet = $this->initSheet(); @@ -191,9 +189,7 @@ class AutoFilterCustomTextTest extends SetupTeardown ]; } - /** - * @dataProvider providerCustomRule - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCustomRule')] public function testCustomRuleTest(array $expectedVisible, string $rule, string $comparand): void { $sheet = $this->initSheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php index 742e6cbc3..3cbbd2da1 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php @@ -52,9 +52,7 @@ class AutoFilterMonthTest extends SetupTeardown $this->maxRow = 9; } - /** - * @dataProvider providerMonth - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMonth')] public function testMonths(array $expectedVisible, string $rule): void { // Loop to avoid rare edge case where first calculation diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php index 20fd146b2..afc2c13ef 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php @@ -36,9 +36,7 @@ class AutoFilterQuarterTest extends SetupTeardown $this->maxRow = 9; } - /** - * @dataProvider providerQuarter - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerQuarter')] public function testQuarters(array $expectedVisible, string $rule): void { // Loop to avoid rare edge case where first calculation diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php index dfe8b5740..686fa6d3c 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php @@ -19,9 +19,7 @@ class AutoFilterTodayTest extends SetupTeardown ]; } - /** - * @dataProvider providerYesterdayTodayTomorrow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYesterdayTodayTomorrow')] public function testYesterdayTodayTomorrow(array $expectedVisible, string $rule): void { // Loop to avoid rare edge case where first calculation diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php index cbd5379e9..9e40f20b2 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php @@ -37,9 +37,7 @@ class AutoFilterWeekTest extends SetupTeardown $this->maxRow = 9; } - /** - * @dataProvider providerWeek - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerWeek')] public function testWeek(array $expectedVisible, string $rule): void { // Loop to avoid rare edge case where first calculation diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php index 84316d2d5..3928b6902 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php @@ -22,9 +22,7 @@ class AutoFilterYearTest extends SetupTeardown ]; } - /** - * @dataProvider providerYear - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerYear')] public function testYears(array $expectedVisible, string $rule): void { // Loop to avoid rare edge case where first calculation diff --git a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php index 7f643e8ed..174eefb88 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php @@ -28,9 +28,7 @@ class RuleCustomTest extends SetupTeardown return $sheet; } - /** - * @dataProvider providerCondition - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCondition')] public function testRuleCondition(array $expectedResult, string $condition): void { $sheet = $this->initSheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php b/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php index 894a8adf7..9c889c69b 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class ColumnCellIterator2Test extends TestCase { - /** - * @dataProvider providerExistingCell - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExistingCell')] public function testEndRange(?bool $existing, string $expectedResultFirst, string $expectedResultLast): void { $spreadsheet = new Spreadsheet(); @@ -48,9 +46,7 @@ class ColumnCellIterator2Test extends TestCase ]; } - /** - * @dataProvider providerEmptyColumn - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEmptyColumn')] public function testEmptyColumn(?bool $existing, int $expectedResult): void { $spreadsheet = new Spreadsheet(); @@ -78,9 +74,7 @@ class ColumnCellIterator2Test extends TestCase ]; } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCreatedResult): void { $spreadsheet = new Spreadsheet(); @@ -93,9 +87,7 @@ class ColumnCellIterator2Test extends TestCase self::assertSame($expectedCreatedResult > 0, $notExistsBehaviour); } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreate(?bool $existing, int $expectedCreatedResult, int $expectedNullResult): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php b/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php index e65c003e8..a0fc30330 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php @@ -11,9 +11,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class ColumnDimension2Test extends AbstractFunctional { - /** - * @dataProvider providerType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerType')] public function testSetsAndDefaults(string $type): void { $columns = ['J', 'A', 'F', 'M', 'N', 'T', 'S']; diff --git a/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php b/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php index b1e0f07a7..cd4c1f7dc 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php @@ -32,9 +32,7 @@ class ColumnIteratorEmptyTest extends TestCase return $sheet; } - /** - * @dataProvider emptyColumnBasic - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnBasic')] public function testIteratorEmptyColumn(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -62,9 +60,7 @@ class ColumnIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyColumnNullAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnNullAsEmpty')] public function testIteratorEmptyColumnWithNull(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -92,9 +88,7 @@ class ColumnIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyColumnEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnEmptyStringAsEmpty')] public function testIteratorEmptyColumnWithEmptyString(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -122,9 +116,7 @@ class ColumnIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyColumnNullAndEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnNullAndEmptyStringAsEmpty')] public function testIteratorEmptyColumnWithNullAndEmptyString(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php b/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php index 44ce5bcb8..6d73dc32f 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php @@ -54,9 +54,7 @@ class ConditionalStyleTest extends TestCase ); } - /** - * @dataProvider cellConditionalStylesProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellConditionalStylesProvider')] public function testCellHasConditionalStyles(string $cellReference, bool $expectedHasConditionalStyles): void { $cellHasConditionalStyles = $this->spreadsheet->getActiveSheet()->conditionalStylesExists($cellReference); @@ -64,9 +62,7 @@ class ConditionalStyleTest extends TestCase self::assertSame($expectedHasConditionalStyles, $cellHasConditionalStyles); } - /** - * @dataProvider cellConditionalStylesProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cellConditionalStylesProvider')] public function testCellGetConditionalStyles(string $cellReference, bool $expectedGetConditionalStyles): void { $cellHasConditionalStyles = $this->spreadsheet->getActiveSheet()->getConditionalStyles($cellReference); diff --git a/tests/PhpSpreadsheetTests/Worksheet/Issue4112Test.php b/tests/PhpSpreadsheetTests/Worksheet/Issue4112Test.php index 9b230a9c9..5b5b3e035 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/Issue4112Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/Issue4112Test.php @@ -12,9 +12,8 @@ class Issue4112Test extends AbstractFunctional { /** * Problem deleting all sheets then adding one. - * - * @dataProvider providerSheetNumber */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerSheetNumber')] public function testIssue4112(?int $sheetNumber): void { $mySpreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php b/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php index 4147f8635..eff6e7e6e 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php @@ -94,9 +94,7 @@ class MergeBehaviourTest extends AbstractFunctional $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider mergeCellsMergeBehaviourProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('mergeCellsMergeBehaviourProvider')] public function testMergeCellsMergeBehaviour(array $testData, string $mergeRange, array $expectedResult): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php b/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php index f6795fc99..176b426bf 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php @@ -9,54 +9,42 @@ use PHPUnit\Framework\TestCase; class PageMarginsTest extends TestCase { - /** - * @dataProvider providerPointsAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPointsAndInches')] public function testPointsToInches(float $value, float $expectedResult): void { $actualResult = PageMargins::fromPoints($value); self::assertSame($expectedResult, $actualResult); } - /** - * @dataProvider providerPointsAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPointsAndInches')] public function testInchesToPoints(float $expectedResult, float $value): void { $actualResult = PageMargins::toPoints($value); self::assertSame($expectedResult, $actualResult); } - /** - * @dataProvider providerCentimetersAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCentimetersAndInches')] public function testCentimetersToInches(float $value, float $expectedResult): void { $actualResult = PageMargins::fromCentimeters($value); self::assertSame($expectedResult, $actualResult); } - /** - * @dataProvider providerCentimetersAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCentimetersAndInches')] public function testPointsToCentimeters(float $expectedResult, float $value): void { $actualResult = PageMargins::toCentimeters($value); self::assertSame($expectedResult, $actualResult); } - /** - * @dataProvider providerMillimetersAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMillimetersAndInches')] public function testMillimetersToInches(float $value, float $expectedResult): void { $actualResult = PageMargins::fromMillimeters($value); self::assertSame($expectedResult, $actualResult); } - /** - * @dataProvider providerMillimetersAndInches - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMillimetersAndInches')] public function testPointsToMillimeters(float $expectedResult, float $value): void { $actualResult = PageMargins::toMillimeters($value); diff --git a/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php b/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php index 1f3e883e2..64f7da264 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class RowCellIterator2Test extends TestCase { - /** - * @dataProvider providerExistingCell - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerExistingCell')] public function testEndRangeTrue(?bool $existing, string $expectedResultFirst, string $expectedResultLast): void { $spreadsheet = new Spreadsheet(); @@ -48,9 +46,7 @@ class RowCellIterator2Test extends TestCase ]; } - /** - * @dataProvider providerEmptyRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEmptyRow')] public function testEmptyRow(?bool $existing, int $expectedResult): void { $spreadsheet = new Spreadsheet(); @@ -78,9 +74,7 @@ class RowCellIterator2Test extends TestCase ]; } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCreatedResult): void { $spreadsheet = new Spreadsheet(); @@ -93,9 +87,7 @@ class RowCellIterator2Test extends TestCase self::assertSame($expectedCreatedResult > 0, $notExistsBehaviour); } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreate(?bool $existing, int $expectedCreatedResult, int $expectedNullResult): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php b/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php index 8bce18793..049ae824e 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php @@ -10,9 +10,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class RowDimensionSaveTest extends AbstractFunctional { - /** - * @dataProvider typeProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('typeProvider')] public function testSaveNoAllocateRowDimension(string $type): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php b/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php index 1d8a83caf..86baa4ac7 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php @@ -32,9 +32,7 @@ class RowIteratorEmptyTest extends TestCase return $sheet; } - /** - * @dataProvider emptyRowBasic - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowBasic')] public function testIteratorEmptyRow(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -64,9 +62,7 @@ class RowIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyRowNullAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowNullAsEmpty')] public function testIteratorEmptyRowWithNull(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -94,9 +90,7 @@ class RowIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyRowEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowEmptyStringAsEmpty')] public function testIteratorEmptyRowWithEmptyString(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -124,9 +118,7 @@ class RowIteratorEmptyTest extends TestCase ]; } - /** - * @dataProvider emptyRowNullAndEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowNullAndEmptyStringAsEmpty')] public function testIteratorEmptyRowWithNullAndEmptyString(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php b/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php index 24ea1051c..075eb451a 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php @@ -27,9 +27,7 @@ class TableTest extends SetupTeardown self::assertEquals($expectedResult, $result); } - /** - * @dataProvider validTableNamesProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validTableNamesProvider')] public function testValidTableNames(string $name, string $expected): void { $table = new Table(self::INITIAL_RANGE); @@ -52,9 +50,7 @@ class TableTest extends SetupTeardown ]; } - /** - * @dataProvider invalidTableNamesProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('invalidTableNamesProvider')] public function testInvalidTableNames(string $name): void { $table = new Table(self::INITIAL_RANGE); @@ -201,9 +197,7 @@ class TableTest extends SetupTeardown self::assertEquals($expectedResult, $result); } - /** - * @dataProvider invalidTableRangeProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('invalidTableRangeProvider')] public function testSetRangeInvalidRange(string $range): void { $this->expectException(PhpSpreadsheetException::class); diff --git a/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php b/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php index 3966c7f0f..251e66c39 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php @@ -34,9 +34,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider setTitleInvalidProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setTitleInvalidProvider')] public function testSetTitleInvalid(string $title, string $expectMessage): void { // First, test setting title with validation disabled -- should be successful @@ -91,9 +89,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider setCodeNameInvalidProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setCodeNameInvalidProvider')] public function testSetCodeNameInvalid(string $codeName, string $expectMessage): void { // First, test setting code name with validation disabled -- should be successful @@ -151,9 +147,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider extractSheetTitleProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('extractSheetTitleProvider')] public function testExtractSheetTitle(string $range, string $expectTitle, string $expectCell, string $expectCell2): void { // only cell reference @@ -276,9 +270,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider removeColumnProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('removeColumnProvider')] public function testRemoveColumn( array $initialData, string $columnToBeRemoved, @@ -427,9 +419,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider removeRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('removeRowsProvider')] public function testRemoveRows( array $initialData, int $rowToRemove, @@ -485,9 +475,7 @@ class WorksheetTest extends TestCase return $sheet; } - /** - * @dataProvider emptyRowProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowProvider')] public function testIsEmptyRow(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -514,9 +502,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider emptyColumnProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnProvider')] public function testIsEmptyColumn(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -566,9 +552,7 @@ class WorksheetTest extends TestCase self::assertInstanceOf(Table::class, $table); } - /** - * @dataProvider toArrayHiddenRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('toArrayHiddenRowsProvider')] public function testHiddenRows( array $initialData, array $hiddenRows, @@ -601,9 +585,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider toArrayHiddenColumnsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('toArrayHiddenColumnsProvider')] public function testHiddenColumns( array $initialData, array $hiddenColumns, @@ -636,9 +618,7 @@ class WorksheetTest extends TestCase ]; } - /** - * @dataProvider rangeToArrayProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeToArrayProvider')] public function testRangeToArrayWithCellRangeObject(array $expected, string $fromCell, string $toCell): void { $initialData = array_chunk(range('A', 'Y'), 5); diff --git a/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php b/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php index ccd0e84f0..3abf56110 100644 --- a/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php @@ -13,9 +13,8 @@ use PHPUnit\Framework\TestCase; /** * Not clear that Dompdf will be Php8.4 compatible in time. * Run in separate process and add version test till it is ready. - * - * @runTestsInSeparateProcesses */ +#[\PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses] class PaperSizeArrayTest extends TestCase { private string $outfile = ''; diff --git a/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php b/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php index 074b351f6..45d151594 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php @@ -77,9 +77,7 @@ class HtmlCommentsTest extends Functional\AbstractFunctional ]; } - /** - * @dataProvider providerCommentRichText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCommentRichText')] public function testComments(RichText $richText, string $expected): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php b/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php index de81f35e8..b7c85f304 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php @@ -135,9 +135,7 @@ class HtmlNumberFormatTest extends Functional\AbstractFunctional $this->writeAndReload($spreadsheet, 'Html'); } - /** - * @dataProvider providerNumberFormat - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormat')] public function testFormatValueWithMask(mixed $expectedResult, mixed $val, string $fmt): void { $spreadsheet = new Spreadsheet(); @@ -167,9 +165,7 @@ class HtmlNumberFormatTest extends Functional\AbstractFunctional return require __DIR__ . '/../../../data/Style/NumberFormat.php'; } - /** - * @dataProvider providerNumberFormatDates - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberFormatDates')] public function testFormatValueWithMaskDate(mixed $expectedResult, mixed $val, string $fmt): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php b/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php index a23327f50..17e3da98f 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class LongTitleTest extends AbstractFunctional { - /** - * @dataProvider providerTitles - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerTitles')] public function testLongTitle(string $expected, string $title): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php b/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php index ab2baea81..f30e67969 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php @@ -11,9 +11,7 @@ use PHPUnit\Framework\TestCase; class MemoryDrawingOffsetTest extends TestCase { - /** - * @dataProvider dataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProvider')] public function testMemoryDrawingOffset(int $w, int $h, int $x, int $y): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php b/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php index 4bc99e65e..324f1d073 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php @@ -28,9 +28,7 @@ class XssVulnerabilityTest extends Functional\AbstractFunctional ]; } - /** - * @dataProvider providerXssRichText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerXssRichText')] public function testXssInComment(string $xssTextString, ?string $expected = null): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php b/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php index 98fc58f9c..eb9530bde 100644 --- a/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php +++ b/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php @@ -174,9 +174,7 @@ class PreCalcTest extends AbstractFunctional } } - /** - * @dataProvider providerPreCalc - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPreCalc')] public function testPreCalc(?bool $preCalc, string $type): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php b/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php index 821a94745..d639fc997 100644 --- a/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php @@ -34,9 +34,8 @@ class RetainSelectedCellsTest extends AbstractFunctional /** * Test selected cell is retained in memory and in file written to disk. - * - * @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testRetainSelectedCells(string $format): void { $spreadsheet = new Spreadsheet(); @@ -89,7 +88,7 @@ class RetainSelectedCellsTest extends AbstractFunctional } } - /** @dataProvider providerFormats */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testRetainAutoSize(string $type): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php b/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php index cd0de111d..f30b8d51d 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php @@ -10,9 +10,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class VisibilityTest extends AbstractFunctional { - /** - * @dataProvider dataProviderRowVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderRowVisibility')] public function testRowVisibility(array $visibleRows): void { $spreadsheet = new Spreadsheet(); @@ -38,9 +36,7 @@ class VisibilityTest extends AbstractFunctional ]; } - /** - * @dataProvider dataProviderColumnVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderColumnVisibility')] public function testColumnVisibility(array $visibleColumns): void { $spreadsheet = new Spreadsheet(); @@ -66,9 +62,7 @@ class VisibilityTest extends AbstractFunctional ]; } - /** - * @dataProvider dataProviderSheetVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderSheetVisibility')] public function testSheetVisibility(array $visibleSheets): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php index a907b96cf..91e8a3b64 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php @@ -24,9 +24,7 @@ class ArrayFormulaValidationTest extends TestCase } } - /** - * @dataProvider validationProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validationProvider')] public function testWriteArrayFormulaValidation(string $formula): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php index a8616aada..77050b16a 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php @@ -94,9 +94,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider textConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('textConditionalsProvider')] public function testWriteTextConditionals(string $conditionType, string $operatorType, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -171,9 +169,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider dateConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dateConditionalsProvider')] public function testWriteDateConditionals(string $timePeriod, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -301,9 +297,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider blanksConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('blanksConditionalsProvider')] public function testWriteBlanksConditionals(string $conditionalType, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -381,9 +375,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider errorsConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('errorsConditionalsProvider')] public function testWriteErrorsConditionals(string $conditionalType, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -461,9 +453,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider duplicatesConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('duplicatesConditionalsProvider')] public function testWriteDuplicatesConditionals(string $conditionalType, string $expected): void { $spreadsheet = new Spreadsheet(); @@ -520,9 +510,7 @@ class ConditionalTest extends AbstractFunctional self::assertStringContainsString($expected, $data); } - /** - * @dataProvider expressionsConditionalsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('expressionsConditionalsProvider')] public function testWriteExpressionConditionals(string $expression, string $expected): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php index 26c55a056..2b17d60ae 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php @@ -501,9 +501,8 @@ class DrawingsTest extends AbstractFunctional /** * Test editAs attribute for two-cell anchors. - * - * @dataProvider providerEditAs */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEditAs')] public function testTwoCellEditAs(string $editAs, ?string $expectedResult = null): void { if ($expectedResult === null) { diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php index 85b68cc40..c10a1b9b4 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php @@ -12,9 +12,7 @@ use PHPUnit\Framework\TestCase; class FloatsRetainedTest extends TestCase { - /** - * @dataProvider providerIntyFloatsRetainedByWriter - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIntyFloatsRetainedByWriter')] public function testIntyFloatsRetainedByWriter(float|int $value): void { $outputFilename = File::temporaryFilename(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php index d4995c8fe..c5055370b 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php @@ -9,9 +9,7 @@ use PHPUnit\Framework\TestCase; class FunctionPrefixTest extends TestCase { - /** - * @dataProvider functionPrefixProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('functionPrefixProvider')] public function testFunctionPrefix(string $expectedResult, string $functionString): void { $result = FunctionPrefix::addFunctionPrefix($functionString); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php index 637dec1d0..2d9650bcb 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class Issue2266Test extends AbstractFunctional { - /** - * @dataProvider providerType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerType')] public function testIssue2266(string $type): void { // Problem deleting sheet containing local defined name. diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php index 0833301a6..e728ad700 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php @@ -9,9 +9,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class Issue3951Test extends AbstractFunctional { - /** - * @dataProvider providerType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerType')] public function testIssue2266(string $type): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php index 9c691f4c8..18080a039 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php @@ -49,9 +49,8 @@ class LocaleFloatsTest extends AbstractFunctional /** * Use separate process because this calls native Php setlocale. - * - * @runInSeparateProcess */ + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] public function testLocaleFloatsCorrectlyConvertedByWriter(): void { if (!setlocale(LC_ALL, 'fr_FR.UTF-8', 'fra_fra.utf8')) { @@ -105,9 +104,8 @@ class LocaleFloatsTest extends AbstractFunctional /** * Use separate process because this calls native Php setlocale. - * - * @runInSeparateProcess */ + #[\PHPUnit\Framework\Attributes\RunInSeparateProcess] public function testPercentageStoredAsString2(): void { if (!setlocale(LC_ALL, 'fr_FR.UTF-8', 'fra_fra.utf8')) { diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php index af3b040b1..a9ba624e7 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php @@ -10,9 +10,7 @@ use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional; class VisibilityTest extends AbstractFunctional { - /** - * @dataProvider dataProviderRowVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderRowVisibility')] public function testRowVisibility(array $visibleRows): void { $spreadsheet = new Spreadsheet(); @@ -38,9 +36,7 @@ class VisibilityTest extends AbstractFunctional ]; } - /** - * @dataProvider dataProviderColumnVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderColumnVisibility')] public function testColumnVisibility(array $visibleColumns): void { $spreadsheet = new Spreadsheet(); @@ -66,9 +62,7 @@ class VisibilityTest extends AbstractFunctional ]; } - /** - * @dataProvider dataProviderSheetVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderSheetVisibility')] public function testSheetVisibility(array $visibleSheets): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 5a5e07d27..79adbabc4 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -32,6 +32,5 @@ function phpunit10ErrorHandler(int $errno, string $errstr, string $filename, int } if (!method_exists(PHPUnit\Framework\TestCase::class, 'setOutputCallback')) { - ini_set('error_reporting', (string) E_ALL); set_error_handler('phpunit10ErrorHandler'); } From 5c3ae5244610c76f925034899c0b5d133d087e79 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Mon, 25 Nov 2024 19:54:38 -0800 Subject: [PATCH 03/21] Fix Minor Break Handling Drawings Fix #4241. Some security batches caused a minor break in Drawings, forcing `setWorksheet` to come after `setPath`. Although the problem is easily fixed in user code, this was not an intended change. Some slight recoding restores the earlier functionality where the order of calls was not important, without sacrificing the security gains. This change will be back-ported to the other active branches to which the security patch had been applied. --- samples/Basic4/53_ImageOpacity.php | 7 +- src/PhpSpreadsheet/Worksheet/BaseDrawing.php | 22 +++-- src/PhpSpreadsheet/Worksheet/Drawing.php | 6 ++ .../Worksheet/Issue4241Test.php | 84 +++++++++++++++++++ 4 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Worksheet/Issue4241Test.php diff --git a/samples/Basic4/53_ImageOpacity.php b/samples/Basic4/53_ImageOpacity.php index 75d22bae9..ec3916a9c 100644 --- a/samples/Basic4/53_ImageOpacity.php +++ b/samples/Basic4/53_ImageOpacity.php @@ -5,9 +5,6 @@ require __DIR__ . '/../Header.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; -//var_dump(realpath(__DIR__ . '/../images/blue_square.png')); -//exit(); - $path = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'images/blue_square.png'; $spreadsheet = new Spreadsheet(); $spreadsheet->getProperties()->setTitle('53_ImageOpacity'); @@ -33,12 +30,12 @@ $drawing->setOpacity(80000); $drawing->setWorksheet($sheet); $drawing = new Drawing(); +$drawing->setWorksheet($sheet); $drawing->setName('Blue Square opacity 60%'); $drawing->setPath($path); $drawing->setCoordinates('E1'); $drawing->setCoordinates2('F5'); $drawing->setOpacity(60000); -$drawing->setWorksheet($sheet); $drawing = new Drawing(); $drawing->setName('Blue Square opacity 40%'); @@ -57,12 +54,12 @@ $drawing->setOpacity(20000); $drawing->setWorksheet($sheet); $drawing = new Drawing(); +$drawing->setWorksheet($sheet); $drawing->setName('Blue Square opacity 0%'); $drawing->setPath($path); $drawing->setCoordinates('E8'); $drawing->setCoordinates2('F12'); $drawing->setOpacity(0); -$drawing->setWorksheet($sheet); // Save $helper->write($spreadsheet, __FILE__, ['Xlsx', 'Html', 'Dompdf', 'Mpdf']); diff --git a/src/PhpSpreadsheet/Worksheet/BaseDrawing.php b/src/PhpSpreadsheet/Worksheet/BaseDrawing.php index 326b8d6d2..135f5b216 100644 --- a/src/PhpSpreadsheet/Worksheet/BaseDrawing.php +++ b/src/PhpSpreadsheet/Worksheet/BaseDrawing.php @@ -197,15 +197,18 @@ class BaseDrawing implements IComparable public function setWorksheet(?Worksheet $worksheet = null, bool $overrideOld = false): self { if ($this->worksheet === null) { - // Add drawing to \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet - if ($worksheet !== null && !($this instanceof Drawing && $this->getPath() === '')) { + // Add drawing to Worksheet + if ($worksheet !== null) { $this->worksheet = $worksheet; - $this->worksheet->getCell($this->coordinates); - $this->worksheet->getDrawingCollection()->append($this); + if (!($this instanceof Drawing && $this->getPath() === '')) { + $this->worksheet->getCell($this->coordinates); + } + $this->worksheet->getDrawingCollection() + ->append($this); } } else { if ($overrideOld) { - // Remove drawing from old \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet + // Remove drawing from old Worksheet $iterator = $this->worksheet->getDrawingCollection()->getIterator(); while ($iterator->valid()) { @@ -217,10 +220,10 @@ class BaseDrawing implements IComparable } } - // Set new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet + // Set new Worksheet $this->setWorksheet($worksheet); } else { - throw new PhpSpreadsheetException('A Worksheet has already been assigned. Drawings can only exist on one \\PhpOffice\\PhpSpreadsheet\\Worksheet.'); + throw new PhpSpreadsheetException('A Worksheet has already been assigned. Drawings can only exist on one Worksheet.'); } } @@ -235,6 +238,11 @@ class BaseDrawing implements IComparable public function setCoordinates(string $coordinates): self { $this->coordinates = $coordinates; + if ($this->worksheet !== null) { + if (!($this instanceof Drawing && $this->getPath() === '')) { + $this->worksheet->getCell($this->coordinates); + } + } return $this; } diff --git a/src/PhpSpreadsheet/Worksheet/Drawing.php b/src/PhpSpreadsheet/Worksheet/Drawing.php index bee049100..35933af3f 100644 --- a/src/PhpSpreadsheet/Worksheet/Drawing.php +++ b/src/PhpSpreadsheet/Worksheet/Drawing.php @@ -148,6 +148,12 @@ class Drawing extends BaseDrawing throw new PhpSpreadsheetException("File $path not found!"); } + if ($this->worksheet !== null) { + if ($this->path !== '') { + $this->worksheet->getCell($this->coordinates); + } + } + return $this; } diff --git a/tests/PhpSpreadsheetTests/Worksheet/Issue4241Test.php b/tests/PhpSpreadsheetTests/Worksheet/Issue4241Test.php new file mode 100644 index 000000000..84943cab4 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Worksheet/Issue4241Test.php @@ -0,0 +1,84 @@ +getActiveSheet(); + $drawing = new Drawing(); + $drawing->setName('Green Square'); + $drawing->setWorksheet($sheet); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing0 = $drawings[0]; + self::assertInstanceOf(Drawing::class, $drawing0); + self::assertSame('', $drawing0->getPath()); + self::assertSame('A1', $drawing0->getCoordinates()); + $maxRow = $sheet->getHighestDataRow(); + $maxCol = $sheet->getHighestDataColumn(); + self::assertSame(1, $maxRow); + self::assertSame('A', $maxCol); + + $drawing->setCoordinates('E5'); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing0 = $drawings[0]; + self::assertInstanceOf(Drawing::class, $drawing0); + self::assertSame('', $drawing0->getPath()); + self::assertSame('E5', $drawing0->getCoordinates()); + $maxRow = $sheet->getHighestDataRow(); + $maxCol = $sheet->getHighestDataColumn(); + self::assertSame(1, $maxRow); + self::assertSame('A', $maxCol); + + $drawing->setPath($badPath, false); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing0 = $drawings[0]; + self::assertInstanceOf(Drawing::class, $drawing0); + self::assertSame('', $drawing0->getPath()); + self::assertSame('E5', $drawing0->getCoordinates()); + $maxRow = $sheet->getHighestDataRow(); + $maxCol = $sheet->getHighestDataColumn(); + self::assertSame(1, $maxRow); + self::assertSame('A', $maxCol); + + $drawing->setPath($goodPath); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing0 = $drawings[0]; + self::assertInstanceOf(Drawing::class, $drawing0); + self::assertSame($goodPath, $drawing0->getPath()); + self::assertSame('E5', $drawing0->getCoordinates()); + $maxRow = $sheet->getHighestDataRow(); + $maxCol = $sheet->getHighestDataColumn(); + self::assertSame(5, $maxRow); + self::assertSame('E', $maxCol); + + $drawing->setCoordinates('G3'); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing0 = $drawings[0]; + self::assertInstanceOf(Drawing::class, $drawing0); + self::assertSame($goodPath, $drawing0->getPath()); + self::assertSame('G3', $drawing0->getCoordinates()); + $maxRow = $sheet->getHighestDataRow(); + $maxCol = $sheet->getHighestDataColumn(); + self::assertSame(5, $maxRow); + self::assertSame('G', $maxCol); + + $spreadsheet->disconnectWorksheets(); + } +} From 3eee74950f74f040008692099454c4073dd0984c Mon Sep 17 00:00:00 2001 From: Everton Barbosa Date: Mon, 25 Nov 2024 14:00:25 -0300 Subject: [PATCH 04/21] Ignore cell formatting when the format is a single @ This commit fix two issues that happened when the a cell was formatted as text * When the cell contains a number prefixed with dollar sign, this number is getting replaced with 0. The replacement happens due to the preg_replace function. * When the cell contains quotes, the quote would be removed. --- CHANGELOG.md | 2 +- .../Style/NumberFormat/Formatter.php | 8 +++++++- tests/data/Style/NumberFormat.php | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8125f69e1..0993b77eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Fixed -- Nothing yet. +- Ignore cell formatting when the format is a single @. [Issue #4242](https://github.com/PHPOffice/PhpSpreadsheet/issues/4242) [PR #4243](https://github.com/PHPOffice/PhpSpreadsheet/pull/4243) ## 2024-11-22 - 3.5.0 diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php index 8ae33354a..886cb688e 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -126,7 +126,13 @@ class Formatter extends BaseFormatter // For now we do not treat strings in sections, although section 4 of a format code affects strings // Process a single block format code containing @ for text substitution if (preg_match(self::SECTION_SPLIT, $format) === 0 && preg_match(self::SYMBOL_AT, $format) === 1) { - return str_replace('"', '', preg_replace(self::SYMBOL_AT, (string) $value, $format) ?? ''); + if (!str_contains($format, '"')) { + return str_replace('@', $value, $format); + } + //escape any dollar signs on the string, so they are not replaced with an empty value + $value = str_replace('$', '\\$', (string) $value); + + return str_replace('"', '', preg_replace(self::SYMBOL_AT, $value, $format) ?? $value); } // If we have a text value, return it "as is" diff --git a/tests/data/Style/NumberFormat.php b/tests/data/Style/NumberFormat.php index 7296a248c..374390e74 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1682,4 +1682,24 @@ return [ '#,##0.00;;"---"', ], 'issue 4124' => ['1 HUF', 1, '#,##0_-[$HUF]'], + 'issue 4242-0' => [ + 'General $200 - 200', // expected result + 'General $200 - 200', // cell contents + NumberFormat::FORMAT_GENERAL, // cell style + ], + 'issue 4242-1' => [ + 'Text $200 - 200', + 'Text $200 - 200', + NumberFormat::FORMAT_TEXT, + ], + 'issue 4242-2' => [ + '"Hello" she said and "Hello" I replied', + '"Hello" she said and "Hello" I replied', + NumberFormat::FORMAT_TEXT, + ], + 'issue 4242-3' => [ + 'Text: $200 - 200', + '$200 - 200', + '"Text: "' . NumberFormat::FORMAT_TEXT, + ], ]; From 4b568b47b420253228ec2426f72ccc8adb1cfbce Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:20:32 -0800 Subject: [PATCH 05/21] Handle Case Where Both Format and Value Contain Quotation Mark --- .../Style/NumberFormat/Formatter.php | 13 +++++++-- tests/data/Style/NumberFormat.php | 28 ++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php index 886cb688e..7a6b38f37 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -14,6 +14,7 @@ class Formatter extends BaseFormatter * Matches any @ symbol that isn't enclosed in quotes. */ private const SYMBOL_AT = '/@(?=(?:[^"]*"[^"]*")*[^"]*\Z)/miu'; + private const QUOTE_REPLACEMENT = "\u{fffe}"; // invalid Unicode character /** * Matches any ; symbol that isn't enclosed in quotes, for a "section" split. @@ -130,9 +131,17 @@ class Formatter extends BaseFormatter return str_replace('@', $value, $format); } //escape any dollar signs on the string, so they are not replaced with an empty value - $value = str_replace('$', '\\$', (string) $value); + $value = str_replace( + ['$', '"'], + ['\\$', self::QUOTE_REPLACEMENT], + (string) $value + ); - return str_replace('"', '', preg_replace(self::SYMBOL_AT, $value, $format) ?? $value); + return str_replace( + ['"', self::QUOTE_REPLACEMENT], + ['', '"'], + preg_replace(self::SYMBOL_AT, $value, $format) ?? $value + ); } // If we have a text value, return it "as is" diff --git a/tests/data/Style/NumberFormat.php b/tests/data/Style/NumberFormat.php index 374390e74..da06d7a36 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1682,24 +1682,44 @@ return [ '#,##0.00;;"---"', ], 'issue 4124' => ['1 HUF', 1, '#,##0_-[$HUF]'], - 'issue 4242-0' => [ + 'issue 4242 General with dollar sign' => [ 'General $200 - 200', // expected result 'General $200 - 200', // cell contents NumberFormat::FORMAT_GENERAL, // cell style ], - 'issue 4242-1' => [ + 'issue 4242 Text with dollar sign' => [ 'Text $200 - 200', 'Text $200 - 200', NumberFormat::FORMAT_TEXT, ], - 'issue 4242-2' => [ + 'issue 4242 Text with quotes, format without' => [ '"Hello" she said and "Hello" I replied', '"Hello" she said and "Hello" I replied', NumberFormat::FORMAT_TEXT, ], - 'issue 4242-3' => [ + 'issue 4242 Format with quotes, text without' => [ 'Text: $200 - 200', '$200 - 200', '"Text: "' . NumberFormat::FORMAT_TEXT, ], + 'issue 4242 single quote mark' => [ + '"', + '"', + '@', + ], + 'issue 4242 dollar sign' => [ + '$100', + '$100', + '@', + ], + 'issue 4242 repeat unquoted at signs' => [ + 'xy xy xy', + 'xy', + '@ @ @', + ], + 'issue 4242 quotes in format and text' => [ + 'Text: "Hooray" for me', + '"Hooray" for me', + '"Text: "' . NumberFormat::FORMAT_TEXT, + ], ]; From 690cb211664a2f9575d78f15758f3b33ece54771 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:04:18 -0800 Subject: [PATCH 06/21] Handle Escaped Quote in Format --- src/PhpSpreadsheet/Style/NumberFormat/Formatter.php | 5 +++-- tests/data/Style/NumberFormat.php | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php index 7a6b38f37..cb15e8f37 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -126,7 +126,8 @@ class Formatter extends BaseFormatter } // For now we do not treat strings in sections, although section 4 of a format code affects strings // Process a single block format code containing @ for text substitution - if (preg_match(self::SECTION_SPLIT, $format) === 0 && preg_match(self::SYMBOL_AT, $format) === 1) { + $formatx = str_replace('\\"', self::QUOTE_REPLACEMENT, $format); + if (preg_match(self::SECTION_SPLIT, $format) === 0 && preg_match(self::SYMBOL_AT, $formatx) === 1) { if (!str_contains($format, '"')) { return str_replace('@', $value, $format); } @@ -140,7 +141,7 @@ class Formatter extends BaseFormatter return str_replace( ['"', self::QUOTE_REPLACEMENT], ['', '"'], - preg_replace(self::SYMBOL_AT, $value, $format) ?? $value + preg_replace(self::SYMBOL_AT, $value, $formatx) ?? $value ); } diff --git a/tests/data/Style/NumberFormat.php b/tests/data/Style/NumberFormat.php index da06d7a36..58d615128 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1722,4 +1722,9 @@ return [ '"Hooray" for me', '"Text: "' . NumberFormat::FORMAT_TEXT, ], + 'issue 4242 escaped quote in format' => [ + '"Hello"', + 'Hello', + '\\"@\\"', + ], ]; From 2454696dc60d18341974278834be340376b623fd Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Wed, 27 Nov 2024 18:06:23 -0800 Subject: [PATCH 07/21] Swapped Row and Column Indexes in ReferenceHelper Fix #4246. This can cause an Exception in unusual circumstances. --- src/PhpSpreadsheet/ReferenceHelper.php | 2 +- .../ReferenceHelper5Test.php | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 tests/PhpSpreadsheetTests/ReferenceHelper5Test.php diff --git a/src/PhpSpreadsheet/ReferenceHelper.php b/src/PhpSpreadsheet/ReferenceHelper.php index afcfa016e..dfcea10e4 100644 --- a/src/PhpSpreadsheet/ReferenceHelper.php +++ b/src/PhpSpreadsheet/ReferenceHelper.php @@ -1215,7 +1215,7 @@ class ReferenceHelper if ($worksheet->cellExists($coordinate)) { $xfIndex = $worksheet->getCell($coordinate)->getXfIndex(); for ($j = $beforeRow; $j <= $beforeRow - 1 + $numberOfRows; ++$j) { - if (!empty($xfIndex) || $worksheet->cellExists([$j, $i])) { + if (!empty($xfIndex) || $worksheet->cellExists([$i, $j])) { $worksheet->getCell(Coordinate::stringFromColumnIndex($i) . $j)->setXfIndex($xfIndex); } } diff --git a/tests/PhpSpreadsheetTests/ReferenceHelper5Test.php b/tests/PhpSpreadsheetTests/ReferenceHelper5Test.php new file mode 100644 index 000000000..bdb658896 --- /dev/null +++ b/tests/PhpSpreadsheetTests/ReferenceHelper5Test.php @@ -0,0 +1,45 @@ +getActiveSheet(); + $row = 987654; + $rowMinus1 = $row - 1; + $rowPlus1 = $row + 1; + $sheet->getCell("A$rowMinus1")->setValue(1); + $sheet->getCell("B$rowMinus1")->setValue(2); + $sheet->getCell("C$rowMinus1")->setValue(3); + $sheet->getStyle("A$rowMinus1")->getFont()->setBold(true); + $sheet->getCell("A$row")->setValue(1); + $sheet->getCell("B$row")->setValue(2); + $sheet->getCell("C$row")->setValue(3); + $sheet->getStyle("B$row")->getFont()->setBold(true); + + $sheet->insertNewRowBefore($row); + self::assertTrue( + $sheet->getStyle("A$row")->getFont()->getBold() + ); + self::assertFalse( + $sheet->getStyle("B$row")->getFont()->getBold() + ); + self::assertFalse( + $sheet->getStyle("A$rowPlus1")->getFont()->getBold() + ); + self::assertTrue( + $sheet->getStyle("B$rowPlus1")->getFont()->getBold() + ); + $spreadsheet->disconnectWorksheets(); + } +} From 0e9719b68dfa817770b2ec23562c7d3080dcf3f3 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Fri, 29 Nov 2024 19:12:27 -0800 Subject: [PATCH 08/21] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8125f69e1..4a1e3a895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Fixed -- Nothing yet. +- Fix minor break handling drawings. [Issue #4241](https://github.com/PHPOffice/PhpSpreadsheet/issues/4241) [PR #4244](https://github.com/PHPOffice/PhpSpreadsheet/pull/4244) ## 2024-11-22 - 3.5.0 From 54fd177ea52434b5f15b470a8fa3f4516116000b Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Fri, 29 Nov 2024 19:28:16 -0800 Subject: [PATCH 09/21] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8125f69e1..2e58c9106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Fixed -- Nothing yet. +- Swapped row and column indexes in ReferenceHelper. [Issue #4246](https://github.com/PHPOffice/PhpSpreadsheet/issues/4246) [PR #4247](https://github.com/PHPOffice/PhpSpreadsheet/pull/4247) ## 2024-11-22 - 3.5.0 From dd69858111b629d5840baf396a9a850cbe93485e Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Fri, 29 Nov 2024 20:08:11 -0800 Subject: [PATCH 10/21] Fill Patterns/Colors When Xml Attributes are Missing Fix #4248. PhpSpreadsheet has used what appear to be default attributes and tags when they are missing from Fill patterns and colors. However, Excel handles their absence a little differently from what the "default" would require. PhpSpreadsheet is changed to omit the attributes and tags in question when missing. This change is mostly targeted towards Xlsx read and write, but minor changes for Xls and Html write are also included. This seems like it could be a breaking change, but I don't think it is. One test (DefaultFillTest introduced by PR #2050) must change, but the change is internal - loading and then saving the spreadsheet used in that change will appear the same after this change as it did before. Other differences are very likely to be bug fixes rather than breaks. --- src/PhpSpreadsheet/Reader/Xlsx/Styles.php | 30 ++++- src/PhpSpreadsheet/Style/Color.php | 10 +- src/PhpSpreadsheet/Writer/Html.php | 13 ++- src/PhpSpreadsheet/Writer/Xls/Workbook.php | 16 ++- src/PhpSpreadsheet/Writer/Xls/Worksheet.php | 6 +- src/PhpSpreadsheet/Writer/Xlsx/Style.php | 8 +- .../Reader/Xlsx/DefaultFillTest.php | 2 +- .../Reader/Xlsx/Issue4248Test.php | 106 ++++++++++++++++++ tests/data/Reader/XLSX/issue.4248.xlsx | Bin 0 -> 712827 bytes 9 files changed, 172 insertions(+), 19 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php create mode 100644 tests/data/Reader/XLSX/issue.4248.xlsx diff --git a/src/PhpSpreadsheet/Reader/Xlsx/Styles.php b/src/PhpSpreadsheet/Reader/Xlsx/Styles.php index 0672854ad..b02f3d3ff 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/Styles.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/Styles.php @@ -149,14 +149,22 @@ class Styles extends BaseParserClass $fillStyle->getStartColor()->setARGB($this->readColor(self::getArrayItem($gradientFill->xpath('sml:stop[@position=0]'))->color)); //* @phpstan-ignore-line $fillStyle->getEndColor()->setARGB($this->readColor(self::getArrayItem($gradientFill->xpath('sml:stop[@position=1]'))->color)); //* @phpstan-ignore-line } elseif ($fillStyleXml->patternFill) { - $defaultFillStyle = Fill::FILL_NONE; + $defaultFillStyle = ($fillStyle->getFillType() !== null) ? Fill::FILL_NONE : ''; + $fgFound = false; + $bgFound = false; if ($fillStyleXml->patternFill->fgColor) { $fillStyle->getStartColor()->setARGB($this->readColor($fillStyleXml->patternFill->fgColor, true)); - $defaultFillStyle = Fill::FILL_SOLID; + if ($fillStyle->getFillType() !== null) { + $defaultFillStyle = Fill::FILL_SOLID; + } + $fgFound = true; } if ($fillStyleXml->patternFill->bgColor) { $fillStyle->getEndColor()->setARGB($this->readColor($fillStyleXml->patternFill->bgColor, true)); - $defaultFillStyle = Fill::FILL_SOLID; + if ($fillStyle->getFillType() !== null) { + $defaultFillStyle = Fill::FILL_SOLID; + } + $bgFound = true; } $type = ''; @@ -169,6 +177,22 @@ class Styles extends BaseParserClass $patternType = ($type === '') ? $defaultFillStyle : $type; $fillStyle->setFillType($patternType); + if ( + !$fgFound // no foreground color specified + && !in_array($patternType, [Fill::FILL_NONE, Fill::FILL_SOLID], true) // these patterns aren't relevant + && $fillStyle->getStartColor()->getARGB() // not conditional + ) { + $fillStyle->getStartColor() + ->setARGB('', true); + } + if ( + !$bgFound // no background color specified + && !in_array($patternType, [Fill::FILL_NONE, Fill::FILL_SOLID], true) // these patterns aren't relevant + && $fillStyle->getEndColor()->getARGB() // not conditional + ) { + $fillStyle->getEndColor() + ->setARGB('', true); + } } } diff --git a/src/PhpSpreadsheet/Style/Color.php b/src/PhpSpreadsheet/Style/Color.php index 6f9db8a21..8aa4734fc 100644 --- a/src/PhpSpreadsheet/Style/Color.php +++ b/src/PhpSpreadsheet/Style/Color.php @@ -230,12 +230,14 @@ class Color extends Supervisor * * @return $this */ - public function setARGB(?string $colorValue = self::COLOR_BLACK): static + public function setARGB(?string $colorValue = self::COLOR_BLACK, bool $nullStringOkay = false): static { $this->hasChanged = true; - $colorValue = $this->validateColor($colorValue); - if ($colorValue === '') { - return $this; + if (!$nullStringOkay || $colorValue !== '') { + $colorValue = $this->validateColor($colorValue); + if ($colorValue === '') { + return $this; + } } if ($this->isSupervisor) { diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php index 1b2d33abf..ad95efd18 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -1139,9 +1139,16 @@ class Html extends BaseWriter // Create CSS if ($fill->getFillType() !== Fill::FILL_NONE) { - $value = $fill->getFillType() == Fill::FILL_NONE - ? 'white' : '#' . $fill->getStartColor()->getRGB(); - $css['background-color'] = $value; + if ( + (in_array($fill->getFillType(), ['', Fill::FILL_SOLID], true) || !$fill->getEndColor()->getRGB()) + && $fill->getStartColor()->getRGB() + ) { + $value = '#' . $fill->getStartColor()->getRGB(); + $css['background-color'] = $value; + } elseif ($fill->getEndColor()->getRGB()) { + $value = '#' . $fill->getEndColor()->getRGB(); + $css['background-color'] = $value; + } } return $css; diff --git a/src/PhpSpreadsheet/Writer/Xls/Workbook.php b/src/PhpSpreadsheet/Writer/Xls/Workbook.php index a1a5faf8f..c2b4496a5 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Workbook.php +++ b/src/PhpSpreadsheet/Writer/Xls/Workbook.php @@ -210,8 +210,20 @@ class Workbook extends BIFFwriter $xfWriter->setFontIndex($fontIndex); // Background colors, best to treat these after the font so black will come after white in custom palette - $xfWriter->setFgColor($this->addColor($style->getFill()->getStartColor()->getRGB())); - $xfWriter->setBgColor($this->addColor($style->getFill()->getEndColor()->getRGB())); + if ($style->getFill()->getStartColor()->getRGB()) { + $xfWriter->setFgColor( + $this->addColor( + $style->getFill()->getStartColor()->getRGB() + ) + ); + } + if ($style->getFill()->getEndColor()->getRGB()) { + $xfWriter->setBgColor( + $this->addColor( + $style->getFill()->getEndColor()->getRGB() + ) + ); + } $xfWriter->setBottomColor($this->addColor($style->getBorders()->getBottom()->getColor()->getRGB())); $xfWriter->setTopColor($this->addColor($style->getBorders()->getTop()->getColor()->getRGB())); $xfWriter->setRightColor($this->addColor($style->getBorders()->getRight()->getColor()->getRGB())); diff --git a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php index 5258bbad3..5b0e4e00d 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php @@ -2875,9 +2875,9 @@ class Worksheet extends BIFFwriter $bFormatBorder = 0; } // Pattern - $bFillStyle = ($conditional->getStyle()->getFill()->getFillType() === null ? 0 : 1); - $bFillColor = ($conditional->getStyle()->getFill()->getStartColor()->getARGB() === null ? 0 : 1); - $bFillColorBg = ($conditional->getStyle()->getFill()->getEndColor()->getARGB() === null ? 0 : 1); + $bFillStyle = ($conditional->getStyle()->getFill()->getFillType() == null ? 0 : 1); + $bFillColor = ($conditional->getStyle()->getFill()->getStartColor()->getARGB() == null ? 0 : 1); + $bFillColorBg = ($conditional->getStyle()->getFill()->getEndColor()->getARGB() == null ? 0 : 1); if ($bFillStyle == 1 || $bFillColor == 1 || $bFillColorBg == 1) { $bFormatFill = 1; } else { diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Style.php b/src/PhpSpreadsheet/Writer/Xlsx/Style.php index a31b8e249..37c6c3127 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Style.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Style.php @@ -199,7 +199,7 @@ class Style extends WriterPart $objWriter->writeAttribute('position', '0'); // color - if ($fill->getStartColor()->getARGB() !== null) { + if (!empty($fill->getStartColor()->getARGB())) { $objWriter->startElement('color'); $objWriter->writeAttribute('rgb', $fill->getStartColor()->getARGB()); $objWriter->endElement(); @@ -212,7 +212,7 @@ class Style extends WriterPart $objWriter->writeAttribute('position', '1'); // color - if ($fill->getEndColor()->getARGB() !== null) { + if (!empty($fill->getEndColor()->getARGB())) { $objWriter->startElement('color'); $objWriter->writeAttribute('rgb', $fill->getEndColor()->getARGB()); $objWriter->endElement(); @@ -244,7 +244,9 @@ class Style extends WriterPart // patternFill $objWriter->startElement('patternFill'); - $objWriter->writeAttribute('patternType', (string) $fill->getFillType()); + if ($fill->getFillType()) { + $objWriter->writeAttribute('patternType', (string) $fill->getFillType()); + } if (self::writePatternColors($fill)) { // fgColor diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php index 44fb8e57d..7bdfecdd0 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php @@ -40,6 +40,6 @@ class DefaultFillTest extends TestCase $spreadsheet = $reader->load($filename); $style = $spreadsheet->getActiveSheet()->getConditionalStyles('A1')[0]->getStyle(); - self::assertSame('solid', $style->getFill()->getFillType()); + self::assertSame('', $style->getFill()->getFillType()); } } diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php new file mode 100644 index 000000000..c06fabb2d --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php @@ -0,0 +1,106 @@ +outfile !== '') { + unlink($this->outfile); + $this->outfile = ''; + } + } + + public function testStyles(): void + { + $file = 'tests/data/Reader/XLSX/issue.4248.xlsx'; + $reader = new XlsxReader(); + $spreadsheet = $reader->load($file); + $sheet = $spreadsheet->getActiveSheet(); + $writer = new XlsxWriter($spreadsheet); + $this->outfile = File::temporaryFilename(); + $writer->save($this->outfile); + $spreadsheet->disconnectWorksheets(); + + $file = 'zip://'; + $file .= $this->outfile; + $file .= '#xl/styles.xml'; + $data = file_get_contents($file) ?: ''; + $expected = '' + . '' + . ''; + self::assertStringContainsString($expected, $data, 'neither fgColor nor bgColor'); + $expected = '' + . '' + . '' + . ''; + self::assertStringContainsString($expected, $data, 'bgColor but no fgColor'); + $expected = '' + . '' // dxfId 1 - fill color for Oui + . '' + . '' + . '' + . '' + . '' + . '' // dxfId 2 - fill color for Non + . '' + . '' + . '' + . '' + . '' + . ''; + self::assertStringContainsString($expected, $data, 'conditional fill styles'); + + $file = 'zip://'; + $file .= $this->outfile; + $file .= '#xl/worksheets/sheet1.xml'; + $data = file_get_contents($file) ?: ''; + $expected = '' + . '' + . 'NOT(ISERROR(SEARCH("Oui",C16)))' + . '' + . ''; + self::assertStringContainsString($expected, $data, 'first condition for D18'); + $expected = '' + . '' + . 'NOT(ISERROR(SEARCH("Non",C16)))' + . '' + . ''; + self::assertStringContainsString($expected, $data, 'second condition for D18'); + } + + public function testHtml(): void + { + $file = 'tests/data/Reader/XLSX/issue.4248.xlsx'; + $reader = new XlsxReader(); + $spreadsheet = $reader->load($file); + $sheet = $spreadsheet->getActiveSheet(); + $writer = new HtmlWriter($spreadsheet); + + $file = 'zip://'; + $file .= $this->outfile; + $file .= '#xl/styles.xml'; + $data = str_replace(["\r", "\n"], '', $writer->generateHtmlAll()); + $expected = ' ' // Cell D18 + . '  ' + . ' ' + . ' Eligible ' + . ' Non'; + self::assertStringContainsString($expected, $data, 'Cell D18 style'); + $expected = ' td.style70, th.style70 { vertical-align:middle; text-align:center; border-bottom:1px solid #000000 !important; border-top:2px solid #000000 !important; border-left:2px solid #000000 !important; border-right:1px solid #000000 !important; font-weight:bold; color:#000000; font-family:\'Calibri\'; font-size:16pt; background-color:#BDD7EE }'; + self::assertStringContainsString($expected, $data, 'background color'); + + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLSX/issue.4248.xlsx b/tests/data/Reader/XLSX/issue.4248.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2804c40ca4c87348978c40a5f1415b230112e0d4 GIT binary patch literal 712827 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 R&k086FS6gapB|BT=U@kHt<>0JAkafT;tj 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

iq5 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

-5>9 zTQ?vj75584y&9#Eed&OcY(IUz0CF{Nxh8J^@KJXXU8Z1rrKnyL> z&XH*(WuAL(l0!wbCSNz+Pf_$7E`VnfsP=}5>jqNDR{qbU)kvhVZXUy7Z75lROJP6W zei5{`h?PCc5!n7K&~NN_9$iXwKUAA9@fp3J!nm;Q1!`r0z0_t-Pnm48av)(JYOIbG zsQ%N&TRH644S|>4tC*5rGtxlPZ7xX~{YNP9a>ZtP>inMgxSmGLf9q+p?kD4!385Pd zS2Cslq48Jlp6OHr-h4}FP?6Nm$tEbneyh&?8+9odJxqxu*6J$Pnh@!)76Tr1@calK za7pF$rDx>)8Jt%VY-_=CNLMc3a6P4~_bS6>l(DFKrHr#E5VFZJktaIHHv%hfOVlOA+UYn@9Qz74eRoX3WBJ}$UksGPg3K4YOi8p6aHOJi~F zyp#3ftWj!(O8zGk1mQ|1doldtyD{8(=B8O3?5kNOJ#>73X+BAd?w0&HY*oollrfZw z<;o4Z56CP+tq*U4SKFoG1YVU*_)x3v)@*5gO5^T2NcfzBHZfy>Z*g^J^foxB?C^Fc zYMn~#xk1@nCLt7}_Ulh8$q{+0QW+)5l?iIFIYBtteYh^v)3O_K-I?>BG70N05cCfq z*WSh8P05#C|Epy`^2!kEXXr)q_UrGhTon8M%m$tVruikp2&GCaA3DF@vU{Ulmr5)` z0w}>!i(hHgI*i4K1?IJ3(F#9u@%ar8Nu_nNN#mA9b5i@xIMS(0_0LuedQbW!@csC~ zxiVO>`dLn<`M*1D2S%WFmHFJ!s+WW|&V>KY023p>%p|K_^c9UFzr|jmf6V4CdGFT` zUAlj9yrsSpPc8=QN#6R4!xrL}-)74SDe&u4rtLv1C|Y5nfiSdsv~b@>!9N>>-77Cr zSU>tOsU}sZZQ95reEP%kbai}%di>{G8^NfQRUXoRw#9^BS}p*)(cu(4m$ID9e`=t{ zHH{UQ47Tf2b?c!|yr6l=PL2^ibtz-oW&E;C~**f_~OtG0Edd(6vjq zx0g~iq>qLLwcWzjh>E|9*jp?wScZ}%sygv#)#J*;9WrgSaR=kKa0S-t1k*IC1M-gF z*(|!@TKlK6AtY*5-9)wOXxW9%eutFfe{?7W7dq&gZCBSNVoiUif5~Lj!g?*u8q3+{ zxMunls{G94Y_ucM=QU3fgaUf@vP7?JCF!90sY&n^7qunpO#A6y+j{|r!QY}?1zpZ% z|P1LI^w$!~Qx-vltCeGvAy~=z( zn0EV9or94UlHT(lVlZEcw}QqjVEj19F|#goOQwTe)%{%ByUm2}i^Fye$GoeU@(g}w zCypO(rSn6Qk$Z-!sglfCOIz|f>3ptYZm!qDz@OV+Om?cRdt8R!Df5?D60%X)cO)mv zga;*{TW-sDYd73D8>K;BszzeboUamt!@gg%^>S|E_*60d)%xG}23+(=arm78+zro4 zC3HNmbyeUl{l3QVIPqTTgP%y0N-QS@yp}WOv5E4t70Tq?&L#8J_|lG*jhxA|G(q=! zDszjp*yr06POZIM>^_&n1ywD+mhMvSWT_vkept|$Jo2$H`N_pz7r^#ngvx8#^z+t) zTG7uKvHPVZnP)|uG#R;%X$#uUW|uxg$+TIrQ^uDD%u##yXdiDnbFY5w=`N6-W<+Xl z;5JT6!7G)0eSe*~csB%ZxY#5n6KMq|cR+Xi9-v0QgbG^|f@6~(yvAvYhF)1}%7I(k z@!scU@Ty@Yww3rq2;+N*?9)RXuRd7kXY~hp0tZDW@XO0Kl{p+;4K}%(tDtBgpm86m z-`_g!lz$Lvqr11o+J?$qr{0Xljo`$A6R`hSm-{~yEZ|4+POS=x?gNG<(m?|h?jPsgH7$@TC&GE!RLoHc)$ z@|ted?aaJO95%F+w@#_WQq#Hcs-u0r>aKAqk6}QH&q>S8^0((38?=N-_p^@}E>BN# z$vMhK7E!(!Jr=-I%F1Za+|Q3YLDt$dmrAeO|K+?i?^2~LmPTT=IRU9VnKLc=#hoA` z2Y29SANqE?r<^BWc$jG-jCnSxn~lP3MQB~YH`6Wd<>8!0!ZCH0oqU7pI2EEa>9X!a zl;Yui?0nw6n8s1IYU3pOF0rtc-Q{l{D=h(~yUn%yh-=h)f#loaKo?ftLtD&^clN`% zT@71Sg`DEeyQmu(k6cZ=hNQ0|>8@y(1u0F*l}nXW_32ygZ&Jpk`xu1NPCoWI1uJEo zZLBOkDAnAJ|3FS&)BNT=)T!{c5Px|u<)jIaNv3=?uN-&+gu=- zu-R@XVm02W44c=c8+FD@|KmMx8zE__jmvR6UEINdWSw->Un-)x*$X z^Xf8bB%=)n?&!34;oKisJ-ir}&+`ir~OkQ%NOG}O$vZXxQe za-xwjNX~W9c$4FKO6Zn(**C(Dxh^Yt7&^D|Vrs4Qw`IB9sWJ9cRESb7LsX1?(}t!~ z^R~xpr#^+U^Wx}MYKro)hS8$oztg-c6x{{3O|+S5v#Z4)jyPsbh$}R_lu?sj+f7^E zQoKF?V-;1Eu0|XdmFIch%>TVhysAhbrL8)&kXLBna_CeeHCV|JGvT0)MLaaKFfY@5 zlgwA@XuH6pD~0o<^KB0IUsDR@A2-~Zvj+{n=SxOvFCh)-{e|AVdQL42yP|Db7@tnK z*xe0VozmDL5!@r|TnAW9`R>CeyzkBUnO#t(-P#`h=`2v*aK7@l3ahGDUt240A@_og zCOmXgq_~rRA|PAZv`w4(^7NyzX%;yv^cmdsXzH(z!dR06wCL82tf9ZMX#_rcSTeb< zdMGYsgo-I}8mi++XhVYwo#d1{`E;zo-K2SP)o&F)zR8FMy^E*NTPjQWv`W!klq};~ zQJuet;$I>=e9Vds73+YUm$nYPk4WQ(xbfi?<>u`PT1|wyrJI}ZQwc~U zCwOi*ecN;Ntg+!&*1^Z&nwo3aG)PwM3VYo(<&NRKRk4SvGUL*q#IXDRq9SJEa*2u4 zh0L_>hf*TU$>W60r1k*9_nUR2Og)Wtz6Ar;NRv+oyCHMRWEi3Apcp6N*l{|4H<8b5 zHlGN;yg1FTGM}y5o7=@u$vFx8jk=h|)2b!RU5a$-*4I{C)LdE$VOFCz+F=^<*D2oS zJSgB9M9o>an)UqJ+-Pz40DI|imjWRyo-ArUyY|{ZFJX2?*?BF}=!S5~kF}si(M#OZ zq^Bss`dNRyLyaST#UP~X1+%;r#rDL-&dpVw!}+B{jr8ZpX0*I+I?4%GRN#h8;E zhNa)H&m)IFj16n<*Hdke){=UTx+@F{aME^zjdz#7K6h$7`lw2+}d69zl2^yue*dFOI5xHbzH0Ubv$K#Wys=z^lli;x> zIupcL=WKl6?CorQ&%REJfX%1aX8We?ljkR|=~rjJLE2XzTV&2O%HwAH5WL~6J->wO zNyo17szept2*Y)A@`oL3tQ69unn?>>VtnLha$EWYp-GNC^8-ls>B$}4-mOqgPGi3h z`MudvX^}FCm6s2WqkP~vp(7rJ3evo7qcNFJ;LJLgtzxda54$N)4h17T-#0%W-|F3m zD^J2E?@c?4Hd%Ed*6X@%6h?f^;pAGBW2@t5!d-Ch7gzn9hcY}qHH##b6aHox*r7^_ z^Fr&H8t65ADoCbn6{V^To;9bBu14+q1tj~V{sfbHPBB7e8W?&G2l>6yxb2_Q>uB2K zpK2x@N0UqEpo%_nrNBQN<5}!m_PDE9yiYWV+V%QH)0H-F+D)hH&5I&M>{&KK($M|m zgHSwKnM4-rsdG#+C*{HSQ0AUb`9$^R-E{MwZuLsGg*RfPYl}U1JqlPTX9I4Qoo zSoqXg5Vl53dD!22AimHnz|r7z&o{ObPc_`8*;UN>?U(mB$zjS>(BmO?7+ob>mxEVN zfq-J&T~vQyXF-zm=HTQ|h|=mLPsdxC^%`$>cH{-ElVsc0N%5E+bUcD6rE186nXi~^ zTY+S(+O->n@acnwb}nlEzxU#&>Mb?8oKuBZ(9$r8h}z#j92&WDN2Vup zEb1)ST}fLRpJ&^DCH}WQGFqE>hXsZKxNG|bY9dWBI;V5H3kKOfxLV&`R=J9AJQGdi zws`Mfu3_Qx`8H_alpko!ZcUfBY76F^neH7jun`?92-$#ho=gRO(5r*GUD3mbG^}Ic zLCtCvQx*=iZEun&L+{0nf!}v9B|CT?lrTh@>Z4l|!_v%xiBtAsNcu!y zJk_+_x{r-YBHX^tqI3^kOL>cLNUOz0BLNv#9&I&vBg*tLD2sETEA(FUMb|TJ-PSLW zr+A@CCf+Cm^!e!NS@t`4!hcMaP42NRH+7v+GjASVc0PN6cX?NHwO4Hcjt!)6r<^8=>P}HHOa$(-XB4X*cr);hWFmM=jl8xs)7` z27yQ1)Vz(BR^7sJWd=*51B|55fO_<<^XwBPivyy8ZVq_LA?HtZne0rr%ZSSwpAK8? zr_{7<)FZczc_>X6D<(@4*3L3h8Od%xcS$=j@FSIITWpUSOa^w1C`0Ks&g#%;MZC<2hvoVjw6bePEomZ`dX zkU)c}_hH13JCuMge+5#)cJsg{{w)?XpkU0^9rLoAEoy<0X^5vzA`Pc!^VUT2+{i;I z%gyUkMTyc0`3KQd@_G_t2-oh9sFG2>>)@7Hro*$&ppOjeUakZoN+0b=I*x88_UwpH zN4Gz2^O#}@Fq%&*cGMylrQ6d>CbV$m3ObPVyo8?!Q)&dFU>5d$OJIa`#>yC0^g`YLtN9UItoZ}twdS=7B< zld+c~r*ncEWejtAUmRq(=V|NJ{H!u?by!s*RsPwRwk}mz;xaI1{5gj4HROSiiO$tg zS&lXhpPZq^!0rnaq?g1ic#P@99jTaSm)fsRcV^nl=KswH=nBFUNEOWmu8~jiw&;qH zvnxTiAe1YRY1z@m)(0!uZ+G;Wk8|VC2P`0$ApHNPmsF2u19hLO-BUge@@?3>!$^6~ zkUPq9Irv%rkF;hgIzuG2-J|DKAMR?_QwQ!=&p>{o9?#p^ZMwNUG?L3{Rr_a$6(&f1 z=-F38mT`V_p9g}h$KP2lW4@^ZkmOszgDiWlj+Zy&O^Kx;f5|;9NKQ08Qa)ek(`!r7 zjcNF$)2EjHhrP5Ac% z;@YP-ksjyw74Xp2z0nzE&anMug|dbimEG#97eg5y4kuws4Ebse35?BKp*)`19gtIX z%Iv4_o+f!|9g-#o5#(>qFG6Ol_7)T!>j>y#KaX4Tz0I-hYwCKeddXB8vr5B!D6unl z&_@ex{HEB%pRnZcwTJfL)?_=Qxksn(n-1#5X#=^5&Wjwb;c?%RCH3QjHkU5+51KbE z1WbzP@1Vr^VCJv(32nzGK7`Dt;Wk8f+TWV(MjPqMxT)~#%9&wro#``nXV}VuhCw*AnBrFRqo95)vDF;{3`sJPf@z(bW9_Uq*hXYJUz6cwWN0#Be6rmSi91Y&|643qT@+X`4Fh5K`qM z=@(A)2pGw8oImDWV^i3XU@^seaA3Wa5L{TXR8I@vR8vq|jkf~|-ac)AwBB1=+jft8 zzil{`6@N}gh1IMyw=$||NV{joR;78T{7OTBpAF(=wH2ynb$nA)>*{{)Ti2H-kvC|7 z8ei9iyx%=lD01O`+h2#FrEFjLoYSWv&|om+GGJ~OFKyH<~G(<3QDyf@_1>8-0C zy15(G-eh-AvRk&CTasJQH?OvLnU!;&)R^>r_9^OG|19EGaoh^2ShY?IGI1w!vELLJ zag@p9qI2=!!}ednvY?Z8qS*iLz-s!jxUJMpWVp*Dxo76srE5)amS!P;(?L(m2^q}w zd)&uj)%2VFiE4|FNA5-e1@`nx9%YAHQ$tUuWRoM)D_ae<65JngkvE9@FTNccSuJr? zP1|W3-0G<;YtG2-l|OS)S=fv5p2fp&xSK24(U$)pKd?G}=hEpRCvcd&x(6wNF7jMWxx~0H zI@fsixN$$LRXrbOG&y-CRsu&ZQ{hDg(#<(~rqOdaM`D#K+TEhvvsxkkz}Fozsgj2w z0W5_wYB(zZ7IK--gvpo=Q3`YA7VG1_)17NYFA;GJi!B2mnd5w#>gIOX;>Keq=pnrQ z=uVEs`=UTy2ui4tFm}=M$G(=bdbl>z!0zt&|8|G8Y66N!fM!t@ix`RjD zw;K0i3=dcEzP#9eX5XKh+ow}hbD2IF=6C)0aLTa<)=1tD%V+mgn~0iy;bG$0{{e&^ zzh-|F&dI(HAOX>B4Cw zgni|Y&M9ouTL^X5d0M3gHk~&9D)RPF_WFZGKB{g2UL3)d52 z7C83rV+X=Cl@^m!`0RT;#1-a6KCu%<=&B9?1@YC8Ac8yN^3~TR{#0`&u$W7c=Ik0t zk!udy{~eeA?+p-tayW@ihxh*iCVMAe8V*9u4<}|?qu+Wb{yp4Q#GJ4 zE~TufK}Hjv&Q?VgPQ{ue_=VJaX7Jf(zvI~6NmD9eyE76OnyLA zsAiR}y08#Cm*77u7SnVy-_dX@M4kr8N>XN0wU-G@i?+&u<68fzNw{bVD)Fbw47xCA z89Z9G5|Q#nnBb>uav0cGT)P}pdo;!l?t0CcxE(==5g_yT21NH#Te+}l8JI!iacHf8 z7>FKa79i#VPB=N#1iHgUg`)RQH+{wq`+gM7-&dH*PK!r=+P$vS!M>duKDKlNu>oh!}q{FYFvtm3CBfW)5gJs-uh-W98Wo_V`BM!M;d6 z2?4W)2ViHns!DZaiy75)P9w^uHJeiM8;M8CJE78$yu5sSeYogg_?_32gBd^Ui%JU? ztQ)lLsihn-Bj=DxWrE~7JK!}*0yc#xF-qGTdLJ(15$qr(I&)7K4{AVK7&Cv7H&p^b z@=G*=iDQV&wycA$?nFp1IA?{ZBVy19d0g;SWqzuAn(Tc36{;p}_fESCN(_H=`5|`tX+Y9-Ktj!1b zRSiOkzRSiXa(>q|udn4$#7F0Ow`zTE<7N@~XlaCD^$h)VdtbLnJYou3H1?Bk$Z#5~W6^EP@4u^G8?zvUU@IykO>9B zeeqVKr-ka6<5ZHvagi~!0e_!VC^*lE_2KoKmfym zDYaY96U(FR&mXFRU^4DV%G|6Ay5JRIK`C{RU z#6EmF?5)PY_b+Ynh-qPPPZ5e%qv{OvdwWD>4(dQf5}&hbyPBWJ35RHp60QKJ+X_(k z_$UKot%g?vPV26<2l^5W{IEn1pSs$zBJhsr>5S0AA5ib&Iu){()uh2@f9kf&We0!# z?8B?`MO7CblEK%x(9x{I2mVHhTKOl{EQn?pax3_Wc2bQ*Sl6D>4aBf^DCFx4Us3KX3zHYM`GLV zhL;xD6jSlGwV{S+WtH38QSW@qB^*zs;*_j25~7)5J@!g;20^P0?JHgTJgiSg4)%>I z=QTC#wfl_7yb^tiwune%q_!X$otIH=IWF_2x!VKeI9ZYupiirg0dMoaY!%l4in&wPJcyj8oT}1mrEFCD}@B}6S2B-tyy%yjq6*gb6MjliPv&=1T zxo3WcTxv3QYfXO4&fza(=)N!;XYZxrs67AP9cv2-{8<6uFb8I?dw**mw|}aAvc_#3 zuE98R9#J0?KHzwE; z83at60EI*wEqY#E4D1cD-yB!s{7uk?`e8<_?G3+k`mF9uHDxz_FtD7O-YivYjvp+j z4fJw3iHyjznPR&}A1{P4@S8N9o%J`4Kpt%=n&eOrBjb&FM=DxEN6#e^DB5Yf4_myp`> zP2oCBsSvr3Jbc&JLR#~xk?02rtm?I`x_Eg=4|0he7EH!}(w@SgRV79sOMGRw1E$^2 zR66`UfbSmAzUYZ0>dA@PUsuNDTl4XFE{y%DNXFB#QBNo6O=0YY=>GPgTlQ|G|DolxgXcu=!Ajwg@rD*@bZ~}^4Zgj#`96?7um`4~ zG=>*T1DbzEK5DY+@cosBbN$}wc5Iao4E}eZ%*OFIe(Wm zEmh(HCGpZ7Vp)e!8PBz!ig$`~Umv0xQ6rc3S1{up`@)FUwN^=p7#C9K95 zyumG!1paD^C70v^gGYrUm=a`9`kOu_2~;YsZGzV}k>WZuTkPd%Y$PJHIR zrL-pL zqSei~`M(ugtif*DNm(iMi!2{D>jcx7LGm){wm6_Gda%Dedk1)}MeS!pM;cO-ajM(U zK~&-FA=kDB{^m%7G1qfyD>sD>{OO`8d*Lc9y~X6oz)EA#1?U~7$_hEwgFY;@DoUn7 zwq3iI%5?yqrweKEVGw`2bhmtTtZrhgB&kWiK$|HGtt5v?mQrcOHcQt|ZsdUG<$-}j zeot6zkKlDD(}8=4=DpDB9jSmiZ;(f#QkKd7>&5Fu%)n?vSIhjKq62*RF7%OugJcI! zbDx>$qL72bGJNZKsDPQN7}l?n(Kxcb9BN($H;{=1+1Z^~i+qYL>@{)bU1@Txxsfvcwg^t$1UL)72`?gH~ItdWzU-F3Wsj?^${F`_E=>|k;|3&b)wobc(i zQJwpnZA}JHJ=rz5Ver391A{4zw#BQ-6t$1@D@SDrNniLIUl=s9j9qKyX!kB6Z;qzq zg}R017Ou~iKlhTuS^|pEUf>0W_Zj^;XT|Lk8;LC5g<$>rq)RFOkfDp-Fn#YZ<{KrF zBWw|IJ0)%Y&bH5_;U^;_15F(;Xf?Q;OAK640Wjz)twx?q+1erMq(Eg5fc)Df0;qr~ zi@MLFc#IG!MjGj`5j(&P)Ns&#%Iw>5f)gM3y}5+g4$CL!fQq6!$c&S4v0mVG@GC&* z+quvA=SU51!PaSLE;fW0@JP-o(kvDwwF>w6&88O~k+!oZb!^2h%QatO?=~Jqh2;N! z=^c)V^}9>Qaf)cM*n31cR8aynyP*fYl*kjWX(GR8Ga#%|`t1(eqEON)Q-#>3JysQ;0 zl!c2j2=j#GvGtZ}@CKk=FW*W%w+XHlG`5PUx5LFhEkyX}T3>ok&E>s6mpFU1(fqo& z)B2B3f2q9J++oVS2EJv5z}g|!T0ssnJ(_EsSuL;1PJ}rRFSMQP)(}Yl!)$QLRm0zy z(Is1=c>d|+azpOBDWCg`WE!)g-^pv{eRlj_i-8S=eaawp9tWVyJYb;e?kf!``pzkK zi^BXQ*<@j)+6nUPta{~hf1Km-%ptzk1N)@2GFLx1(JJ>NC7ww4T&>zw334A7cz_LF zqef&s!Abt>6A!sF+QR#R7=d2T^+cU!=k*)Uc3TLPVpzreAj@d? zP0Y^p68T|zG{a$t;F$fiKgWB3!eg=nLC{O8sH*n8a5lCWkoHHN75^-r>n z=wPoXHj~PYpdxX3fLhiVwh}A5=<#EIRyT2Qa6Cg`9xqq%d-9Mo?^C)ur}>aFqI)(F z{FU&RX;taQN*RO`F>q2%+`*0`0Y#KvXU+X&F*UA1@(sHfdR2#$9np9mKFJ;H)cU9(M~ zZ*e%52TY{2#z;li>2Ck&UoDKYXh1w-#ME8T->7mJ2OU;r&%+fqy$sp?-PonEA|pD` zPWw>OE%$}a$!yxWW#R^9-{rjtja?2Y&W5$khp!sT4T$m-C?N`7O}RQBHT7+NIPF29 zT^8x@wlxJ~ld1(RFu#PeDJ#d5@%^aQif&x^j`bGBB3?o_n)+@&_)||{o*+lueyd`Y z>%#nT#95+y%M`NqxG%kVLO8BAWf;@E@HCX4@w%kPpKql#bvZd@+c%45f4!`g1Sqs< z^d`-ae1&!1XWzxt#$I?mK%%pGX+pZ9AL#Hd*9A3YqfRSc%Fq<{RvZ~V+3R$_8^fBf zUnF1&fvXlp_rx{1Eu^4xROf$gMoT@E$8pFuhIFR`E4feZdwsuH$>(zT<9Eu1br>&yDa?FI>4@yc$ZT zHyLqtVx#c0v30+-<$wH=o@{dEZ~gTj`o%^Tmc&bf=p%1#YYPaFbT{f0Y#w|WmgHb| z`{UF(iAq?i@S@)Kta`7JobhExoopBP98zs$ZbQ z-VQ!gRCthA+x%lY9bUDv7X;3GJSG;{uVtw3K|cHG*?mgGf(X*uvjq`Sw~vSI_tFj4!?nQ*YWTdh4lVJ^bVcyZL@Oy!ziezaz1E4^h~Rw7YcBIuV@t z)yhI&Z+BCUC3LlCjJ=6ME)o~fCx&|>E-N1;J&0EGkUCS@{|*lU&;3D|s>PSe3?(au zl<+AWe=oO?qG9q9Iq#)q5qLT6IdMx5BYAOo9VWlgBNyK=xfU!=<2@*1O;RMsCGPk1 z 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

c{69Ft-0VRY0AgpLn`GvCo-xn;dV> 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%0AJNIJ5VC3QrBqC?r4B0{CpA=&^`HAt?<% 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ʥ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

-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 literal 0 HcmV?d00001 From eeef6dc0831ec2da312db111c80e941421e88d63 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Fri, 29 Nov 2024 21:36:53 -0800 Subject: [PATCH 11/21] Scrutinizer --- src/PhpSpreadsheet/Writer/Xls/Worksheet.php | 6 +++--- tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php index 5b0e4e00d..5e3aa0b82 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php @@ -2875,9 +2875,9 @@ class Worksheet extends BIFFwriter $bFormatBorder = 0; } // Pattern - $bFillStyle = ($conditional->getStyle()->getFill()->getFillType() == null ? 0 : 1); - $bFillColor = ($conditional->getStyle()->getFill()->getStartColor()->getARGB() == null ? 0 : 1); - $bFillColorBg = ($conditional->getStyle()->getFill()->getEndColor()->getARGB() == null ? 0 : 1); + $bFillStyle = $conditional->getStyle()->getFill()->getFillType() ? 1 : 0; + $bFillColor = $conditional->getStyle()->getFill()->getStartColor()->getARGB() ? 1 : 0; + $bFillColorBg = $conditional->getStyle()->getFill()->getEndColor()->getARGB() ? 1 : 0; if ($bFillStyle == 1 || $bFillColor == 1 || $bFillColorBg == 1) { $bFormatFill = 1; } else { diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php index c06fabb2d..06b0b7f31 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php @@ -27,7 +27,6 @@ class Issue4248Test extends TestCase $file = 'tests/data/Reader/XLSX/issue.4248.xlsx'; $reader = new XlsxReader(); $spreadsheet = $reader->load($file); - $sheet = $spreadsheet->getActiveSheet(); $writer = new XlsxWriter($spreadsheet); $this->outfile = File::temporaryFilename(); $writer->save($this->outfile); @@ -85,7 +84,6 @@ class Issue4248Test extends TestCase $file = 'tests/data/Reader/XLSX/issue.4248.xlsx'; $reader = new XlsxReader(); $spreadsheet = $reader->load($file); - $sheet = $spreadsheet->getActiveSheet(); $writer = new HtmlWriter($spreadsheet); $file = 'zip://'; From bfd2fe72d870834d5b2f7b76efe94d13434f462e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 11:53:39 +0000 Subject: [PATCH 12/21] Bump squizlabs/php_codesniffer from 3.10.3 to 3.11.1 Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.10.3 to 3.11.1. - [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases) - [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md) - [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.10.3...3.11.1) --- updated-dependencies: - dependency-name: squizlabs/php_codesniffer dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 585ebaf0c..8b41ba145 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "46a82d82209bfb130fa4a89d548fe2a0", + "content-hash": "f7caa2101e268445a358275ee83b90d9", "packages": [ { "name": "maennchen/zipstream-php", @@ -4057,16 +4057,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.3", + "version": "3.11.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" + "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", + "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", "shasum": "" }, "require": { @@ -4133,7 +4133,7 @@ "type": "open_collective" } ], - "time": "2024-09-18T10:38:58+00:00" + "time": "2024-11-16T12:02:36+00:00" }, { "name": "symfony/console", From 00b2ae5e4c6f29ce9b2f146efbaf136522620b5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 11:53:44 +0000 Subject: [PATCH 13/21] Bump mitoteam/jpgraph from 10.4.1 to 10.4.3 Bumps [mitoteam/jpgraph](https://github.com/mitoteam/jpgraph) from 10.4.1 to 10.4.3. - [Release notes](https://github.com/mitoteam/jpgraph/releases) - [Commits](https://github.com/mitoteam/jpgraph/compare/10.4.1...10.4.3) --- updated-dependencies: - dependency-name: mitoteam/jpgraph dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- composer.lock | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/composer.lock b/composer.lock index 585ebaf0c..f2f9ffa30 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "46a82d82209bfb130fa4a89d548fe2a0", + "content-hash": "f7caa2101e268445a358275ee83b90d9", "packages": [ { "name": "maennchen/zipstream-php", @@ -1221,16 +1221,16 @@ }, { "name": "mitoteam/jpgraph", - "version": "10.4.1", + "version": "10.4.3", "source": { "type": "git", "url": "https://github.com/mitoteam/jpgraph.git", - "reference": "bf92f4e7b498412c8bb60b70eb7625041b1526d8" + "reference": "f0db97108aec23a3bbb34721365931af992b83b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mitoteam/jpgraph/zipball/bf92f4e7b498412c8bb60b70eb7625041b1526d8", - "reference": "bf92f4e7b498412c8bb60b70eb7625041b1526d8", + "url": "https://api.github.com/repos/mitoteam/jpgraph/zipball/f0db97108aec23a3bbb34721365931af992b83b3", + "reference": "f0db97108aec23a3bbb34721365931af992b83b3", "shasum": "" }, "require": { @@ -1252,19 +1252,27 @@ ], "authors": [ { - "name": "JpGraph team" + "name": "JpGraph team", + "homepage": "https://jpgraph.net", + "role": "Original Library Developers" + }, + { + "name": "MiTo Team", + "email": "info@mito-team.com", + "homepage": "https://www.mito-team.com", + "role": "Composer package maintenance, PHP-compatibility patches" } ], - "description": "JpGraph library composer package with PHP 8.3 support", + "description": "JpGraph library composer package with PHP 8.4 support", "homepage": "https://github.com/mitoteam/jpgraph", "keywords": [ "jpgraph" ], "support": { "issues": "https://github.com/mitoteam/jpgraph/issues", - "source": "https://github.com/mitoteam/jpgraph/tree/10.4.1" + "source": "https://github.com/mitoteam/jpgraph/tree/10.4.3" }, - "time": "2024-01-29T10:59:20+00:00" + "time": "2024-12-01T06:36:31+00:00" }, { "name": "mpdf/mpdf", From c9d62867c70e7ca67a077824ab3e142d16cc4986 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 11:53:48 +0000 Subject: [PATCH 14/21] Bump mpdf/mpdf from 8.2.4 to 8.2.5 Bumps [mpdf/mpdf](https://github.com/mpdf/mpdf) from 8.2.4 to 8.2.5. - [Release notes](https://github.com/mpdf/mpdf/releases) - [Changelog](https://github.com/mpdf/mpdf/blob/development/CHANGELOG.md) - [Commits](https://github.com/mpdf/mpdf/compare/v8.2.4...v8.2.5) --- updated-dependencies: - dependency-name: mpdf/mpdf dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- composer.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/composer.lock b/composer.lock index 585ebaf0c..0121e74c1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "46a82d82209bfb130fa4a89d548fe2a0", + "content-hash": "f7caa2101e268445a358275ee83b90d9", "packages": [ { "name": "maennchen/zipstream-php", @@ -1268,16 +1268,16 @@ }, { "name": "mpdf/mpdf", - "version": "v8.2.4", + "version": "v8.2.5", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88" + "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/9e3ff91606fed11cd58a130eabaaf60e56fdda88", - "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/e175b05e3e00977b85feb96a8cccb174ac63621f", + "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f", "shasum": "" }, "require": { @@ -1287,7 +1287,7 @@ "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", "psr/http-message": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" @@ -1335,7 +1335,7 @@ "utf-8" ], "support": { - "docs": "http://mpdf.github.io", + "docs": "https://mpdf.github.io", "issues": "https://github.com/mpdf/mpdf/issues", "source": "https://github.com/mpdf/mpdf" }, @@ -1345,7 +1345,7 @@ "type": "custom" } ], - "time": "2024-06-14T16:06:41+00:00" + "time": "2024-11-18T15:30:42+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -2424,16 +2424,16 @@ }, { "name": "psr/log", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "79dff0b268932c640297f5208d6298f71855c03e" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", - "reference": "79dff0b268932c640297f5208d6298f71855c03e", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -2468,9 +2468,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.1" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2024-08-21T13:31:24+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "react/cache", @@ -3985,16 +3985,16 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.0", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad" + "reference": "09a816004fcee9ed3405bd164147e3fdbb79a56f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6db878129ec6c7e141316ee71872923e7f1b7ad", - "reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/09a816004fcee9ed3405bd164147e3fdbb79a56f", + "reference": "09a816004fcee9ed3405bd164147e3fdbb79a56f", "shasum": "" }, "require": { @@ -4045,7 +4045,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.0" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.1" }, "funding": [ { @@ -4053,7 +4053,7 @@ "type": "tidelift" } ], - "time": "2023-12-11T16:03:32+00:00" + "time": "2024-09-02T10:17:15+00:00" }, { "name": "squizlabs/php_codesniffer", From c66ac5619c292a52df85481799a1678b55ec63ae Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 1 Dec 2024 05:11:54 -0800 Subject: [PATCH 15/21] Get Us Closer to Csv Not Autodetect By Default This has been requested a few times, most recently issue #4092. Because it's a breaking change, I haven't proceeded with it. But, because I have a breaking change PR #4240 already in the queue, this gives a plan for getting where we want to go (under the extremely likely assumption that most users don't deal with Csv files with Mac line endings). This PR doesn't change the current behavior, but it gets us to a state where a single-line change will be sufficient when the time comes for a new major release. --- src/PhpSpreadsheet/Reader/Csv.php | 5 ++++- tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/PhpSpreadsheet/Reader/Csv.php b/src/PhpSpreadsheet/Reader/Csv.php index 33bee9cdf..89cbfd5ad 100644 --- a/src/PhpSpreadsheet/Reader/Csv.php +++ b/src/PhpSpreadsheet/Reader/Csv.php @@ -84,10 +84,13 @@ class Csv extends BaseReader */ private static $constructorCallback; + /** Will be changed to false in next major release */ + public const DEFAULT_TEST_AUTODETECT = true; + /** * Attempt autodetect line endings (deprecated after PHP8.1)? */ - private bool $testAutodetect = true; + private bool $testAutodetect = self::DEFAULT_TEST_AUTODETECT; protected bool $castFormattedNumberToNumeric = false; diff --git a/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php b/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php index 28ff9f30f..f14bdeb13 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php @@ -12,6 +12,8 @@ class CsvLineEndingTest extends TestCase { private string $tempFile = ''; + private static bool $alwaysFalse = false; + protected function tearDown(): void { if ($this->tempFile !== '') { @@ -32,6 +34,9 @@ class CsvLineEndingTest extends TestCase $data = ['123', '456', '789']; file_put_contents($filename, implode($ending, $data)); $reader = new Csv(); + if (Csv::DEFAULT_TEST_AUTODETECT === self::$alwaysFalse) { + $reader->setTestAutoDetect(true); + } $spreadsheet = $reader->load($filename); $sheet = $spreadsheet->getActiveSheet(); self::assertEquals($data[0], $sheet->getCell('A1')->getValue()); From a68e44eee6705bd04f059dea8236176e85dd5b05 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 1 Dec 2024 05:31:44 -0800 Subject: [PATCH 16/21] Html Reader/Writer Better Handling of Booleans When Html Writer outputs a cell with a boolean value, the result will either be 1 or null-string; neither of these is optimal for anyone looking at the resulting html. Html Reader already has the ability to recognize data types using the html `data-type` attribute, but Html Writer doesn't use it. This PR adds the ability to generate that attribute for booleans. It will generate a string value appropriate for the locale when it encounters a boolean. Html Reader, when it encounters `data-type="b"`, will interpret the result as true if the value is 1 or a string value recognized as true in any locale; it will interpret the result as false if the value is 0, null-string, null, or a string value recognized as false in any locale; if none of the above, it will leave the value as an unchanged string. So, Reader will wind up with the correct result even if its locale is different than what Writer used. Because this is a breaking change, it is opt-in. You need to call `Writer::setBetterBoolean(true)` in order for it take effect. The current default value for that property is false. When it is time to introduce breaking changes (see PR #4240), the default will be changed to true. --- .../Calculation/Calculation.php | 47 ++++++ src/PhpSpreadsheet/Reader/Html.php | 32 ++++ src/PhpSpreadsheet/Writer/Html.php | 49 +++++- .../Writer/Html/BetterBooleanTest.php | 140 ++++++++++++++++++ 4 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php diff --git a/src/PhpSpreadsheet/Calculation/Calculation.php b/src/PhpSpreadsheet/Calculation/Calculation.php index 0cc64c32e..ab52fb1af 100644 --- a/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/src/PhpSpreadsheet/Calculation/Calculation.php @@ -3141,6 +3141,53 @@ class Calculation return $localeFileName; } + /** @var array> */ + private static array $falseTrueArray = []; + + /** @return array> */ + public function getFalseTrueArray(): array + { + if (!empty(self::$falseTrueArray)) { + return self::$falseTrueArray; + } + if (count(self::$validLocaleLanguages) == 1) { + self::loadLocales(); + } + $falseTrueArray = [['FALSE'], ['TRUE']]; + foreach (self::$validLocaleLanguages as $language) { + if (str_starts_with($language, 'en')) { + continue; + } + $locale = $language; + if (str_contains($locale, '_')) { + [$language] = explode('_', $locale); + } + $localeDir = implode(DIRECTORY_SEPARATOR, [__DIR__, 'locale', null]); + + try { + $functionNamesFile = $this->getLocaleFile($localeDir, $locale, $language, 'functions'); + } catch (Exception $e) { + continue; + } + // Retrieve the list of locale or language specific function names + $localeFunctions = file($functionNamesFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: []; + foreach ($localeFunctions as $localeFunction) { + [$localeFunction] = explode('##', $localeFunction); // Strip out comments + if (str_contains($localeFunction, '=')) { + [$fName, $lfName] = array_map('trim', explode('=', $localeFunction)); + if ($fName === 'FALSE') { + $falseTrueArray[0][] = $lfName; + } elseif ($fName === 'TRUE') { + $falseTrueArray[1][] = $lfName; + } + } + } + } + self::$falseTrueArray = $falseTrueArray; + + return $falseTrueArray; + } + /** * Set the locale code. * diff --git a/src/PhpSpreadsheet/Reader/Html.php b/src/PhpSpreadsheet/Reader/Html.php index 4ca781a87..045e6b6b6 100644 --- a/src/PhpSpreadsheet/Reader/Html.php +++ b/src/PhpSpreadsheet/Reader/Html.php @@ -7,6 +7,7 @@ use DOMDocument; use DOMElement; use DOMNode; use DOMText; +use PhpOffice\PhpSpreadsheet\Calculation\Calculation; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Comment; @@ -271,6 +272,12 @@ class Html extends BaseReader ->setQuotePrefix(true); } } + if ($datatype === DataType::TYPE_BOOL) { + $cellContent = self::convertBoolean($cellContent); + if (!is_bool($cellContent)) { + $attributeArray['data-type'] = DataType::TYPE_STRING; + } + } //catching the Exception and ignoring the invalid data types try { @@ -291,6 +298,31 @@ class Html extends BaseReader $cellContent = (string) ''; } + /** @var array> */ + private static array $falseTrueArray = []; + + private function convertBoolean(?string $cellContent): bool|string + { + if ($cellContent === '1') { + return true; + } + if ($cellContent === '0' || $cellContent === '' || $cellContent === null) { + return false; + } + if (empty(self::$falseTrueArray)) { + $calc = Calculation::getInstance(); + self::$falseTrueArray = $calc->getFalseTrueArray(); + } + if (in_array(mb_strtoupper($cellContent), self::$falseTrueArray[1], true)) { + return true; + } + if (in_array(mb_strtoupper($cellContent), self::$falseTrueArray[0], true)) { + return false; + } + + return $cellContent; + } + private function processDomElementBody(Worksheet $sheet, int &$row, string &$column, string &$cellContent, DOMElement $child): void { $attributeArray = []; diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php index 1b2d33abf..f85b5f096 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -5,6 +5,7 @@ namespace PhpOffice\PhpSpreadsheet\Writer; use PhpOffice\PhpSpreadsheet\Calculation\Calculation; use PhpOffice\PhpSpreadsheet\Cell\Cell; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; +use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Chart\Chart; use PhpOffice\PhpSpreadsheet\Comment; use PhpOffice\PhpSpreadsheet\Document\Properties; @@ -36,6 +37,9 @@ class Html extends BaseWriter private const DEFAULT_CELL_WIDTH_PIXELS = 56; + private const TRUE_SUBSTITUTE = "\u{fffe}"; + private const FALSE_SUBSTITUTE = "\u{feff}"; + /** * Migration aid to tell if html tags will be treated as plaintext in comments. * if ( @@ -141,6 +145,12 @@ class Html extends BaseWriter /** @var Chart[] */ private $sheetCharts; + private bool $betterBoolean = false; + + private string $getTrue = 'TRUE'; + + private string $getFalse = 'FALSE'; + /** * Create a new HTML. */ @@ -148,6 +158,9 @@ class Html extends BaseWriter { $this->spreadsheet = $spreadsheet; $this->defaultFont = $this->spreadsheet->getDefaultStyle()->getFont(); + $calc = Calculation::getInstance($this->spreadsheet); + $this->getTrue = $calc->getTRUE(); + $this->getFalse = $calc->getFALSE(); } /** @@ -1346,8 +1359,21 @@ class Html extends BaseWriter if ($cell->getValue() instanceof RichText) { $cellData .= $this->generateRowCellDataValueRich($cell->getValue()); } else { - $origData = $this->preCalculateFormulas ? $cell->getCalculatedValue() : $cell->getValue(); - $origData2 = $this->preCalculateFormulas ? $cell->getCalculatedValueString() : $cell->getValueString(); + if ($this->preCalculateFormulas) { + $origData = $cell->getCalculatedValue(); + if ($this->betterBoolean && is_bool($origData)) { + $origData2 = $origData ? self::TRUE_SUBSTITUTE : self::FALSE_SUBSTITUTE; + } else { + $origData2 = $cell->getCalculatedValueString(); + } + } else { + $origData = $cell->getValue(); + if ($this->betterBoolean && is_bool($origData)) { + $origData2 = $origData ? self::TRUE_SUBSTITUTE : self::FALSE_SUBSTITUTE; + } else { + $origData2 = $cell->getValueString(); + } + } $formatCode = $worksheet->getParentOrThrow()->getCellXfByIndex($cell->getXfIndex())->getNumberFormat()->getFormatCode(); $cellData = NumberFormat::toFormattedString( @@ -1448,6 +1474,13 @@ class Html extends BaseWriter $htmlx .= $this->generateRowIncludeCharts($worksheet, $coordinate); // Column start $html .= ' <' . $cellType; + if ($cellData === self::TRUE_SUBSTITUTE) { + $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; + $cellData = $this->getTrue; + } elseif ($cellData === self::FALSE_SUBSTITUTE) { + $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; + $cellData = $this->getFalse; + } if (!$this->useInlineCss && !$this->isPdf && is_string($cssClass)) { $html .= ' class="' . $cssClass . '"'; if ($htmlx) { @@ -1903,4 +1936,16 @@ class Html extends BaseWriter return $sheet->getColumnDimension($colStr)->getVisible(); } + + public function getBetterBoolean(): bool + { + return $this->betterBoolean; + } + + public function setBetterBoolean(bool $betterBoolean): self + { + $this->betterBoolean = $betterBoolean; + + return $this; + } } diff --git a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php new file mode 100644 index 000000000..558dc7ed3 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -0,0 +1,140 @@ +locale = $calculation->getLocale(); + } + + protected function tearDown(): void + { + $calculation = Calculation::getInstance(); + $calculation->setLocale($this->locale); + } + + public function testDefault(): void + { + $spreadsheet = new Spreadsheet(); + $writer = new HtmlWriter($spreadsheet); + // Default will change with next PhpSpreadsheet release + self::assertFalse($writer->getBetterBoolean()); + $spreadsheet->disconnectWorksheets(); + } + + public function setBetter(HtmlWriter $writer): void + { + $writer->setBetterBoolean(true); + } + + public function setNotBetter(HtmlWriter $writer): void + { + $writer->setBetterBoolean(false); + } + + public function testBetterBoolean(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->getCell('A1')->setValue(10); + $sheet->getCell('B1')->setValue('Hello'); + $sheet->getCell('C1')->setValue(true); + $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + + /** @var callable */ + $callableWriter = [$this, 'setBetter']; + $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter); + $spreadsheet->disconnectWorksheets(); + + $rsheet = $reloaded->getActiveSheet(); + self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); + self::assertTrue($rsheet->getCell('C1')->getValue()); + self::assertFalse($rsheet->getCell('D1')->getValue()); + $reloaded->disconnectWorksheets(); + } + + public function testNotBetterBoolean(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->getCell('A1')->setValue(10); + $sheet->getCell('B1')->setValue('Hello'); + $sheet->getCell('C1')->setValue(true); + $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + + /** @var callable */ + $callableWriter = [$this, 'setNotBetter']; + $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter); + $spreadsheet->disconnectWorksheets(); + + $rsheet = $reloaded->getActiveSheet(); + self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); + self::assertSame(1, $rsheet->getCell('C1')->getValue()); + self::assertNull($rsheet->getCell('D1')->getValue()); + $reloaded->disconnectWorksheets(); + } + + public function testLocale(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->getCell('A1')->setValue(10); + $sheet->getCell('B1')->setValue('Hello'); + $sheet->getCell('C1')->setValue(true); + $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + $calc = Calculation::getInstance(); + $calc->setLocale('fr'); + $writer = new HtmlWriter($spreadsheet); + $writer->setBetterBoolean(true); + $html = $writer->generateHtmlAll(); + self::assertStringContainsString('VRAI', $html); + self::assertStringNotContainsString('TRUE', $html); + + /** @var callable */ + $callableWriter = [$this, 'setBetter']; + $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter); + $spreadsheet->disconnectWorksheets(); + + $rsheet = $reloaded->getActiveSheet(); + self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); + self::assertTrue($rsheet->getCell('C1')->getValue()); + self::assertFalse($rsheet->getCell('D1')->getValue()); + $reloaded->disconnectWorksheets(); + } + + public function testForeignNoLocale(): void + { + $fragment = '' + . '' + . '' + . '' // Bulgarian TRUE + . '' // Finnish FALSE + . '' + . '' + . '
10HelloИСТИНАEPÄTOSIwhatevertRuE
'; + $reader = new HtmlReader(); + $spreadsheet = $reader->loadFromString($fragment); + $sheet = $spreadsheet->getActiveSheet(); + self::assertTrue($sheet->getCell('C1')->getValue()); + self::assertFalse($sheet->getCell('D1')->getValue()); + self::assertSame('whatever', $sheet->getCell('E1')->getValue()); + self::assertTrue($sheet->getCell('F1')->getValue()); + $spreadsheet->disconnectWorksheets(); + } +} From 4357263e9dfe7a9bf7f3cbc6fdbc688d38caadfe Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 1 Dec 2024 06:04:52 -0800 Subject: [PATCH 17/21] Upgrade php-cs-fixer Dependabot push required a very minor code change. --- composer.lock | 28 +++++++++---------- .../Worksheet/AutoFilter/Column.php | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/composer.lock b/composer.lock index 1e6ac32a2..6f3dc1766 100644 --- a/composer.lock +++ b/composer.lock @@ -1051,16 +1051,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.64.0", + "version": "v3.65.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "58dd9c931c785a79739310aef5178928305ffa67" + "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67", - "reference": "58dd9c931c785a79739310aef5178928305ffa67", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/79d4f3e77b250a7d8043d76c6af8f0695e8a469f", + "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f", "shasum": "" }, "require": { @@ -1070,7 +1070,7 @@ "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.0", + "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", "react/child-process": "^0.6.5", "react/event-loop": "^1.0", @@ -1090,18 +1090,18 @@ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.3", - "infection/infection": "^0.29.5", - "justinrainbow/json-schema": "^5.2", + "facile-it/paraunit": "^1.3.1 || ^2.4", + "infection/infection": "^0.29.8", + "justinrainbow/json-schema": "^5.3 || ^6.0", "keradus/cli-executor": "^2.1", - "mikey179/vfsstream": "^1.6.11", + "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", - "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", - "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "phpunit/phpunit": "^9.6.21 || ^10.5.38 || ^11.4.3", + "symfony/var-dumper": "^5.4.47 || ^6.4.15 || ^7.1.8", + "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.1.6" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -1142,7 +1142,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.65.0" }, "funding": [ { @@ -1150,7 +1150,7 @@ "type": "github" } ], - "time": "2024-08-30T23:09:38+00:00" + "time": "2024-11-25T00:39:24+00:00" }, { "name": "masterminds/html5", diff --git a/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php b/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php index 514cf1012..73bc7e906 100644 --- a/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php +++ b/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php @@ -360,7 +360,7 @@ class Column public function __clone() { $vars = get_object_vars($this); - /** @var AutoFilter\Column\Rule[] $value */ + /** @var Column\Rule[] $value */ foreach ($vars as $key => $value) { if ($key === 'parent') { // Detach from autofilter parent From 3d6f71f6adbfd9ecb1529ed8115decd6c0a091e7 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 1 Dec 2024 09:20:38 -0800 Subject: [PATCH 18/21] Extend to Formulas, and Numbers Stored As String All still require opt-in. --- src/PhpSpreadsheet/Reader/Html.php | 2 +- src/PhpSpreadsheet/Writer/Html.php | 35 +++++++++------ .../Writer/Html/BetterBooleanTest.php | 43 +++++++++++++++---- 3 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/PhpSpreadsheet/Reader/Html.php b/src/PhpSpreadsheet/Reader/Html.php index 045e6b6b6..431a08fff 100644 --- a/src/PhpSpreadsheet/Reader/Html.php +++ b/src/PhpSpreadsheet/Reader/Html.php @@ -301,7 +301,7 @@ class Html extends BaseReader /** @var array> */ private static array $falseTrueArray = []; - private function convertBoolean(?string $cellContent): bool|string + private static function convertBoolean(?string $cellContent): bool|string { if ($cellContent === '1') { return true; diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php index f85b5f096..677f59966 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -37,9 +37,6 @@ class Html extends BaseWriter private const DEFAULT_CELL_WIDTH_PIXELS = 56; - private const TRUE_SUBSTITUTE = "\u{fffe}"; - private const FALSE_SUBSTITUTE = "\u{feff}"; - /** * Migration aid to tell if html tags will be treated as plaintext in comments. * if ( @@ -1362,14 +1359,14 @@ class Html extends BaseWriter if ($this->preCalculateFormulas) { $origData = $cell->getCalculatedValue(); if ($this->betterBoolean && is_bool($origData)) { - $origData2 = $origData ? self::TRUE_SUBSTITUTE : self::FALSE_SUBSTITUTE; + $origData2 = $origData ? $this->getTrue : $this->getFalse; } else { $origData2 = $cell->getCalculatedValueString(); } } else { $origData = $cell->getValue(); if ($this->betterBoolean && is_bool($origData)) { - $origData2 = $origData ? self::TRUE_SUBSTITUTE : self::FALSE_SUBSTITUTE; + $origData2 = $origData ? $this->getTrue : $this->getFalse; } else { $origData2 = $cell->getValueString(); } @@ -1414,8 +1411,19 @@ class Html extends BaseWriter // Extend CSS class? if (!$this->useInlineCss && is_string($cssClass)) { + $dataType = $cell->getDataType(); + if ($this->betterBoolean && $this->preCalculateFormulas && $dataType === DataType::TYPE_FORMULA) { + $calculatedValue = $cell->getCalculatedValue(); + if (is_bool($calculatedValue)) { + $dataType = DataType::TYPE_BOOL; + } elseif (is_numeric($calculatedValue)) { + $dataType = DataType::TYPE_NUMERIC; + } elseif (is_string($calculatedValue)) { + $dataType = DataType::TYPE_STRING; + } + } $cssClass .= ' style' . $cell->getXfIndex(); - $cssClass .= ' ' . $cell->getDataType(); + $cssClass .= ' ' . $dataType; } elseif (is_array($cssClass)) { $index = $cell->getXfIndex(); $styleIndex = 'td.style' . $index . ', th.style' . $index; @@ -1474,12 +1482,15 @@ class Html extends BaseWriter $htmlx .= $this->generateRowIncludeCharts($worksheet, $coordinate); // Column start $html .= ' <' . $cellType; - if ($cellData === self::TRUE_SUBSTITUTE) { - $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; - $cellData = $this->getTrue; - } elseif ($cellData === self::FALSE_SUBSTITUTE) { - $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; - $cellData = $this->getFalse; + if ($this->betterBoolean) { + $dataType = $worksheet->getCell($coordinate)->getDataType(); + if ($dataType === DataType::TYPE_BOOL) { + $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; + } elseif ($dataType === DataType::TYPE_FORMULA && is_bool($worksheet->getCell($coordinate)->getCalculatedValue())) { + $html .= ' data-type="' . DataType::TYPE_BOOL . '"'; + } elseif (is_numeric($cellData) && $worksheet->getCell($coordinate)->getDataType() === DataType::TYPE_STRING) { + $html .= ' data-type="' . DataType::TYPE_STRING . '"'; + } } if (!$this->useInlineCss && !$this->isPdf && is_string($cssClass)) { $html .= ' class="' . $cssClass . '"'; diff --git a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php index 558dc7ed3..0982c2a78 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace PhpOffice\PhpSpreadsheetTests\Writer\Html; use PhpOffice\PhpSpreadsheet\Calculation\Calculation; +use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Reader\Html as HtmlReader; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter; @@ -49,10 +50,13 @@ class BetterBooleanTest extends Functional\AbstractFunctional { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); - $sheet->getCell('A1')->setValue(10); + $sheet->getCell('A1')->setValue(1); $sheet->getCell('B1')->setValue('Hello'); $sheet->getCell('C1')->setValue(true); $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING); + $sheet->getCell('F1')->setValue('="A"&"B"'); + $sheet->getCell('G1')->setValue('=1+2'); /** @var callable */ $callableWriter = [$this, 'setBetter']; @@ -60,10 +64,13 @@ class BetterBooleanTest extends Functional\AbstractFunctional $spreadsheet->disconnectWorksheets(); $rsheet = $reloaded->getActiveSheet(); - self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame(1, $rsheet->getCell('A1')->getValue()); self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); self::assertTrue($rsheet->getCell('C1')->getValue()); self::assertFalse($rsheet->getCell('D1')->getValue()); + self::assertSame('1', $rsheet->getCell('E1')->getValue()); + self::assertSame('AB', $rsheet->getCell('F1')->getValue()); + self::assertSame(3, $rsheet->getCell('G1')->getValue()); $reloaded->disconnectWorksheets(); } @@ -71,10 +78,13 @@ class BetterBooleanTest extends Functional\AbstractFunctional { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); - $sheet->getCell('A1')->setValue(10); + $sheet->getCell('A1')->setValue(1); $sheet->getCell('B1')->setValue('Hello'); $sheet->getCell('C1')->setValue(true); $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING); + $sheet->getCell('F1')->setValue('="A"&"B"'); + $sheet->getCell('G1')->setValue('=1+2'); /** @var callable */ $callableWriter = [$this, 'setNotBetter']; @@ -82,10 +92,13 @@ class BetterBooleanTest extends Functional\AbstractFunctional $spreadsheet->disconnectWorksheets(); $rsheet = $reloaded->getActiveSheet(); - self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame(1, $rsheet->getCell('A1')->getValue()); self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); self::assertSame(1, $rsheet->getCell('C1')->getValue()); self::assertNull($rsheet->getCell('D1')->getValue()); + self::assertSame(1, $rsheet->getCell('E1')->getValue()); + self::assertSame('AB', $rsheet->getCell('F1')->getValue()); + self::assertSame(3, $rsheet->getCell('G1')->getValue()); $reloaded->disconnectWorksheets(); } @@ -93,17 +106,24 @@ class BetterBooleanTest extends Functional\AbstractFunctional { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); - $sheet->getCell('A1')->setValue(10); + $sheet->getCell('A1')->setValue(1); $sheet->getCell('B1')->setValue('Hello'); $sheet->getCell('C1')->setValue(true); $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING); + $sheet->getCell('F1')->setValue('="A"&"B"'); + $sheet->getCell('G1')->setValue('=1+2'); $calc = Calculation::getInstance(); $calc->setLocale('fr'); $writer = new HtmlWriter($spreadsheet); $writer->setBetterBoolean(true); $html = $writer->generateHtmlAll(); - self::assertStringContainsString('VRAI', $html); self::assertStringNotContainsString('TRUE', $html); + self::assertStringContainsString('VRAI', $html); + self::assertStringContainsString('FAUX', $html); + self::assertStringContainsString('1', $html); + self::assertStringContainsString('AB', $html); + self::assertStringContainsString('3', $html); /** @var callable */ $callableWriter = [$this, 'setBetter']; @@ -111,30 +131,37 @@ class BetterBooleanTest extends Functional\AbstractFunctional $spreadsheet->disconnectWorksheets(); $rsheet = $reloaded->getActiveSheet(); - self::assertSame(10, $rsheet->getCell('A1')->getValue()); + self::assertSame(1, $rsheet->getCell('A1')->getValue()); self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); self::assertTrue($rsheet->getCell('C1')->getValue()); self::assertFalse($rsheet->getCell('D1')->getValue()); + self::assertSame('1', $rsheet->getCell('E1')->getValue()); + self::assertSame('AB', $rsheet->getCell('F1')->getValue()); + self::assertSame(3, $rsheet->getCell('G1')->getValue()); $reloaded->disconnectWorksheets(); } public function testForeignNoLocale(): void { $fragment = '' - . '' + . '' . '' . '' // Bulgarian TRUE . '' // Finnish FALSE . '' . '' + . '' . '
101HelloИСТИНАEPÄTOSIwhatevertRuE1
'; $reader = new HtmlReader(); $spreadsheet = $reader->loadFromString($fragment); $sheet = $spreadsheet->getActiveSheet(); + self::assertSame(1, $sheet->getCell('A1')->getValue()); + self::assertSame('Hello', $sheet->getCell('B1')->getValue()); self::assertTrue($sheet->getCell('C1')->getValue()); self::assertFalse($sheet->getCell('D1')->getValue()); self::assertSame('whatever', $sheet->getCell('E1')->getValue()); self::assertTrue($sheet->getCell('F1')->getValue()); + self::assertSame('1', $sheet->getCell('G1')->getValue()); $spreadsheet->disconnectWorksheets(); } } From 6a4c2c68c4e53e71b9338df8dd664b3fc07ab444 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:27:00 -0800 Subject: [PATCH 19/21] Include InlineCss --- src/PhpSpreadsheet/Writer/Html.php | 24 +++++------ .../Writer/Html/BetterBooleanTest.php | 43 +++++++++++++++++++ 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php index 677f59966..8bb182449 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -1410,18 +1410,18 @@ class Html extends BaseWriter $cellData = nl2br($cellData); // Extend CSS class? - if (!$this->useInlineCss && is_string($cssClass)) { - $dataType = $cell->getDataType(); - if ($this->betterBoolean && $this->preCalculateFormulas && $dataType === DataType::TYPE_FORMULA) { - $calculatedValue = $cell->getCalculatedValue(); - if (is_bool($calculatedValue)) { - $dataType = DataType::TYPE_BOOL; - } elseif (is_numeric($calculatedValue)) { - $dataType = DataType::TYPE_NUMERIC; - } elseif (is_string($calculatedValue)) { - $dataType = DataType::TYPE_STRING; - } + $dataType = $cell->getDataType(); + if ($this->betterBoolean && $this->preCalculateFormulas && $dataType === DataType::TYPE_FORMULA) { + $calculatedValue = $cell->getCalculatedValue(); + if (is_bool($calculatedValue)) { + $dataType = DataType::TYPE_BOOL; + } elseif (is_numeric($calculatedValue)) { + $dataType = DataType::TYPE_NUMERIC; + } elseif (is_string($calculatedValue)) { + $dataType = DataType::TYPE_STRING; } + } + if (!$this->useInlineCss && is_string($cssClass)) { $cssClass .= ' style' . $cell->getXfIndex(); $cssClass .= ' ' . $dataType; } elseif (is_array($cssClass)) { @@ -1437,7 +1437,7 @@ class Html extends BaseWriter $sharedStyle->getAlignment()->getHorizontal() == Alignment::HORIZONTAL_GENERAL && isset($this->cssStyles['.' . $cell->getDataType()]['text-align']) ) { - $cssClass['text-align'] = $this->cssStyles['.' . $cell->getDataType()]['text-align']; + $cssClass['text-align'] = $this->cssStyles['.' . $dataType]['text-align']; } } } else { diff --git a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php index 0982c2a78..4bd9fb1b6 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -141,6 +141,49 @@ class BetterBooleanTest extends Functional\AbstractFunctional $reloaded->disconnectWorksheets(); } + public function testInline(): void + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $sheet->getCell('A1')->setValue(1); + $sheet->getCell('B1')->setValue('Hello'); + $sheet->getCell('C1')->setValue(true); + $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)'); + $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING); + $sheet->getCell('F1')->setValue('="A"&"B"'); + $sheet->getCell('G1')->setValue('=1+2'); + $calc = Calculation::getInstance(); + $calc->setLocale('fr'); + $writer = new HtmlWriter($spreadsheet); + $writer->setBetterBoolean(true); + $writer->setUseInlineCss(true); + $html = $writer->generateHtmlAll(); + $html = str_replace('vertical-align:bottom; color:#000000; font-family:\'Calibri\'; font-size:11pt; ', '', $html); + $html = str_replace(' width:42pt" class="gridlines gridlinesp"', '"', $html); + self::assertStringNotContainsString('TRUE', $html); + self::assertStringContainsString('1', $html); + self::assertStringContainsString('Hello', $html); + self::assertStringContainsString('VRAI', $html); + self::assertStringContainsString('FAUX', $html); + self::assertStringContainsString('AB', $html); + self::assertStringContainsString('3', $html); + + /** @var callable */ + $callableWriter = [$this, 'setBetter']; + $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter); + $spreadsheet->disconnectWorksheets(); + + $rsheet = $reloaded->getActiveSheet(); + self::assertSame(1, $rsheet->getCell('A1')->getValue()); + self::assertSame('Hello', $rsheet->getCell('B1')->getValue()); + self::assertTrue($rsheet->getCell('C1')->getValue()); + self::assertFalse($rsheet->getCell('D1')->getValue()); + self::assertSame('1', $rsheet->getCell('E1')->getValue()); + self::assertSame('AB', $rsheet->getCell('F1')->getValue()); + self::assertSame(3, $rsheet->getCell('G1')->getValue()); + $reloaded->disconnectWorksheets(); + } + public function testForeignNoLocale(): void { $fragment = '' From c6bb21d8ab073a7b8d9c36cc710a84f05ace79c6 Mon Sep 17 00:00:00 2001 From: Jean-Luc Date: Wed, 4 Dec 2024 15:58:31 +0100 Subject: [PATCH 20/21] Remove unnecessary files from composer package --- .gitattributes | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 91b0574a0..b70296d12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,9 @@ /.gitattributes export-ignore /.github export-ignore /.gitignore export-ignore -/.php_cs.dist export-ignore +/.php-cs-fixer.dist.php export-ignore +/.phpcs.xml.dist export-ignore +/.readthedocs.yaml export-ignore /.scrutinizer.yml export-ignore /CHANGELOG.PHPExcel.md export-ignore /bin export-ignore @@ -11,6 +13,8 @@ /docs export-ignore /infra export-ignore /mkdocs.yml export-ignore +/phpstan-baseline.neon export-ignore +/phpstan.neon.dist export-ignore /phpunit.xml.dist export-ignore /samples export-ignore /tests export-ignore From 1eeb7059752a233048e5bb2c23f881f2638079e4 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:58:35 -0800 Subject: [PATCH 21/21] Update Changelog --- CHANGELOG.md | 4 +++- tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8125f69e1..639e648cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,9 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Fixed -- Nothing yet. +- Html Reader/Writer Better Handling of Booleans. [PR #4257](https://github.com/PHPOffice/PhpSpreadsheet/pull/4257) +- Fill Patterns/Colors When Xml Attributes are Missing. [Issue #4248](https://github.com/PHPOffice/PhpSpreadsheet/issues/4248) [PR #4250](https://github.com/PHPOffice/PhpSpreadsheet/pull/4250) +- Remove Unneccesary files from Composer Package. [PR #4262](https://github.com/PHPOffice/PhpSpreadsheet/pull/4262) ## 2024-11-22 - 3.5.0 diff --git a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php index 4bd9fb1b6..0eac757d4 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -165,6 +165,7 @@ class BetterBooleanTest extends Functional\AbstractFunctional self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); + self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('', $html);
HelloVRAIFAUX1AB3