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 b5a3927039..8b27155d90 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 c4711f12a0..6348cc0051 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -146,6 +146,7 @@ '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 209a9199e4..709792031f 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 6acb8333c5..7f1777676c 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 207d8ec978..d3e845c1ea 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 896b73339f..0000000000 --- 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 f1847fb645..976e8d54bc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/ArrayFormulaTest.php @@ -10,9 +10,7 @@ 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 86b8697563..5ceabe0225 100644 --- a/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/BinaryComparisonTest.php @@ -24,9 +24,7 @@ protected function tearDown(): void 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 978162667f..7a5e062efa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationFunctionListTest.php @@ -24,9 +24,7 @@ protected function tearDown(): void 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 afaf58d0ee..d57161fd53 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationSettingsTest.php @@ -29,9 +29,7 @@ protected function tearDown(): void $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 4910eb0bad..3a4e67aef8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ public function testBranchPruningFormulaParsingInequalitiesConditionsCase(): voi * 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 d011f3c7f6..4485a591ee 100644 --- a/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/DefinedNamesCalculationTest.php @@ -9,9 +9,7 @@ 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 @@ public function testNamedRangeCalculations1(string $cellAddress, float $expected 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 @@ public function testNamedRangeCalculationsWithAdjustedRateValue(string $cellAddr 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 @@ public function testNamedFormulaCalculations1(string $cellAddress, float $expect 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 c23f738709..d9dd251423 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberSlashTest.php @@ -17,9 +17,7 @@ protected function tearDown(): void 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 @@ public static function providerNumbers(): array ]; } - /** - * @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 @@ public static function providerPercentages(): array ]; } - /** - * @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 fef4d66b5b..3410a04c63 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/FormattedNumberTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerNumbers(): array ]; } - /** - * @dataProvider providerFractions - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFractions')] public function testFraction(string $expected, string $value): void { $originalValue = $value; @@ -60,9 +56,7 @@ public static function providerFractions(): array ]; } - /** - * @dataProvider providerPercentages - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPercentages')] public function testPercentage(string $expected, string $value): void { $originalValue = $value; @@ -189,9 +183,7 @@ public static function providerPercentages(): array ]; } - /** - * @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 aa7bc529d9..85ed7fdc42 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/RangeTest.php @@ -33,9 +33,7 @@ protected function tearDown(): void } } - /** - * @dataProvider providerRangeEvaluation - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRangeEvaluation')] public function testRangeEvaluation(string $formula, int|string $expectedResult): void { $this->spreadSheet = $this->getSpreadsheet(); @@ -97,9 +95,7 @@ public function test3dRangeEvaluation(): void $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 @@ public static function providerNamedRangeEvaluation(): array } /** - * @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 @@ public static function providerUTF8NamedRangeEvaluation(): array ]; } - /** - * @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 bd94002f9c..68e5f3ade3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceSlashTest.php @@ -54,9 +54,7 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @dataProvider structuredReferenceProviderColumnData - */ + #[\PHPUnit\Framework\Attributes\DataProvider('structuredReferenceProviderColumnData')] public function testStructuredReferenceColumns(string $expectedCellRange, string $structuredReference): void { $spreadsheet = $this->getSpreadsheet(); @@ -65,9 +63,7 @@ public function testStructuredReferenceColumns(string $expectedCellRange, string 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 4597957013..40223813d6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Engine/StructuredReferenceTest.php @@ -70,9 +70,7 @@ public function testStructuredReferenceInvalidCellForTable(): void $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 @@ public function testStructuredReferenceColumns(string $expectedCellRange, string 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 aeb13e0b5b..ab6c40e67b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FormulaAsStringTest.php @@ -9,9 +9,7 @@ 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 10ce2cd488..a747710de8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FormulaParserTest.php @@ -31,9 +31,7 @@ public function testNoFormula(): void 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 18978afa04..75d381ea75 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DAverageTest.php @@ -9,18 +9,14 @@ 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 6ddcfd6cbb..2a9fd2f40f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountATest.php @@ -9,18 +9,14 @@ 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 ded350b937..4a3e18cefc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DCountTest.php @@ -9,18 +9,14 @@ 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 0522616045..57b9e9bdb3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DGetTest.php @@ -9,18 +9,14 @@ 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 2689fa3cf3..ec8fa3ff87 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMaxTest.php @@ -9,18 +9,14 @@ 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 c1e553dc18..5fb3d121fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DMinTest.php @@ -9,18 +9,14 @@ 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 57590ee253..dd86903b5a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DProductTest.php @@ -10,18 +10,14 @@ 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 bb80b211bb..349abcae55 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevPTest.php @@ -9,18 +9,14 @@ 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 73eb7a4108..2edd578c48 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DStDevTest.php @@ -9,18 +9,14 @@ 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 3589e89595..6f97f49f94 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DSumTest.php @@ -9,18 +9,14 @@ 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 c880bb62e7..a3bbbf32ad 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarPTest.php @@ -9,18 +9,14 @@ 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 7a0e923f99..0a77db76e7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Database/DVarTest.php @@ -9,18 +9,14 @@ 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 79cc6f0a74..e6d81c8822 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateDifTest.php @@ -16,18 +16,14 @@ 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 @@ public function testDATEDIFAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerDATEDIF(): array 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 @@ public function testDateObject(): void 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 57d535a031..043c35b7ba 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateTest.php @@ -36,18 +36,14 @@ protected function tearDown(): void 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 @@ public function testDATEAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerDATE(): array 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 @@ public function testDATEWith1904Calendar(): void 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 @@ public static function providerDateArray(): array ]; } - /** - * @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 27b652e423..4c2d0d4bce 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DateValueTest.php @@ -54,9 +54,7 @@ private function parseTemplatedExpectation(float|int|string $expectedResult): st 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 @@ public function testDirectCallToDATEVALUE(int|string $expectedResult, bool|int|s 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 @@ public function testDATEVALUEAsFormula(float|int|string $expectedResult, mixed . 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 @@ public function testRefArgNull(): void $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 @@ public function testDATEVALUEWith1904Calendar(): void 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 c439d03759..e507deef69 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DayTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testDAYAsFormula(mixed $expectedResultExcel, mixed ...$args): vo 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 @@ public static function providerDAY(): array 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 @@ public function testDirectCallToDAYOpenOffice(mixed $expectedResultOpenOffice, m 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 @@ public static function providerDAYOpenOffice(): array 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 @@ public function testDirectCallToDAYWithNull(): void 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 9f8c9a6088..1967b09652 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/Days360Test.php @@ -16,18 +16,14 @@ 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 @@ public function testDAYS360AsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerDAYS360(): array 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 @@ public function testDateObject(): void 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 8a783a3ec5..7ba4f5ecfe 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/DaysTest.php @@ -15,18 +15,14 @@ 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 @@ public function testDAYSAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerDAYS(): array 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 @@ public function testDateObject(): void 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 a1618cf0d0..3b5b054345 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EDateTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testEDATEAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerEDATE(): array 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 @@ public function testEDATEtoDateTimeObject(): void 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 a6d5738960..1b5a747951 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/EoMonthTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testEOMONTHAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerEOMONTH(): array 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 @@ public function testEOMONTHtoDateTimeObject(): void 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 c787aed984..0b4c27a0ea 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/HourTest.php @@ -13,18 +13,14 @@ 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 @@ public function testHOURAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerHOUR(): array 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 @@ public static function providerUnhappyHOUR(): array ]; } - /** - * @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 b66fab6ab5..863d9f35d9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/IsoWeekNumTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testISOWEEKNUMAsFormula(mixed $expectedResult, mixed ...$args): 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 @@ public static function providerISOWEEKNUM(): array 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 @@ public static function providerUnhappyISOWEEKNUM(): array ]; } - /** - * @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 @@ public static function providerISOWEEKNUM1904(): array 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 4e354faa26..177a684c6b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MinuteTest.php @@ -13,18 +13,14 @@ 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 @@ public function testMINUTEAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerMINUTE(): array 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 @@ public static function providerUnhappyMINUTE(): array ]; } - /** - * @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 d3434d1d97..969d07fc00 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/MonthTest.php @@ -13,18 +13,14 @@ 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 @@ public function testMONTHAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerMONTH(): array 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 @@ public static function providerUnhappyMONTH(): array ]; } - /** - * @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 0e853040af..a2640f38a7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/NetworkDaysTest.php @@ -12,18 +12,14 @@ 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 @@ public function testNETWORKDAYSAsFormula(mixed $expectedResult, mixed ...$args): 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 @@ public static function providerNETWORKDAYS(): array 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 @@ public static function providerUnhappyNETWORKDAYS(): array ]; } - /** - * @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 72f9ccb605..1510449607 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/SecondTest.php @@ -12,18 +12,14 @@ 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 @@ public function testSECONDAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerSECOND(): array 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 @@ public static function providerUnhappySECOND(): array ]; } - /** - * @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 3f757315b3..71e5e02f79 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeTest.php @@ -36,18 +36,14 @@ protected function tearDown(): void 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 @@ public static function providerTIME(): array 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 @@ public function testTIME1900(): void 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 @@ public static function providerTimeArray(): array ]; } - /** - * @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 f512d4c458..769254e596 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/TimeValueTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testTIMEVALUEAsFormula(mixed $expectedResult, mixed ...$args): v 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 @@ public function testTIMEVALUEtoDateTimeObject(): void 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 @@ public static function providerUnhappyTIMEVALUE(): array ]; } - /** - * @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 c147b84464..f97be1ec50 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekDayTest.php @@ -29,18 +29,14 @@ protected function tearDown(): void 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 @@ public function testWEEKDAYAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerWEEKDAY(): array 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 @@ public function testWEEKDAYWith1904Calendar(): void 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 bff6ec6197..a08c13a065 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WeekNumTest.php @@ -30,18 +30,14 @@ protected function tearDown(): void 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 @@ public function testWEEKNUMAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerWEEKNUM(): array 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 @@ public static function providerUnhappyWEEKNUM(): array ]; } - /** - * @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 @@ public static function providerWEEKNUM1904(): array 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 db9d95d172..06c65ff6d3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/WorkDayTest.php @@ -12,18 +12,14 @@ 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 @@ public function testWORKDAYAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerWORKDAY(): array 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 @@ public static function providerUnhappyWORKDAY(): array ]; } - /** - * @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 74157492a2..0ad70f9543 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearFracTest.php @@ -13,18 +13,14 @@ 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 @@ public function testYEARFRACAsFormula(mixed $expectedResult, mixed ...$args): vo 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 @@ public static function providerYEARFRAC(): array 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 @@ public static function providerUnhappyYEARFRAC(): array ]; } - /** - * @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 6234900e5b..6a7f5a095a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/DateTime/YearTest.php @@ -12,18 +12,14 @@ 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 @@ public function testYEARAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerYEAR(): array 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 @@ public static function providerUnhappyYEAR(): array ]; } - /** - * @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 8a659358c8..603f23533c 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 @@ public function testBESSELIAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBESSELI(): array 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 @@ public static function providerUnhappyBESSELI(): array ]; } - /** - * @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 ce8930505b..a4b3b1dd06 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 @@ public function testBESSELJAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBESSELJ(): array 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 @@ public static function providerUnhappyBESSELJ(): array ]; } - /** - * @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 8a17b5c824..a810c3133e 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 @@ public function testBESSELKAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBESSELK(): array 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 @@ public static function providerUnhappyBESSELK(): array ]; } - /** - * @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 598cd95a77..bbd9e58d25 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 @@ public function testBESSELYAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBESSELY(): array 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 @@ public static function providerUnhappyBESSELY(): array ]; } - /** - * @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 1f4c1ad372..afcbb9a0c3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2DecTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testBIN2DECAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBIN2DEC(): array 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 @@ public static function providerUnhappyBIN2DEC(): array ]; } - /** - * @dataProvider providerBIN2DECOds - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerBIN2DECOds')] public function testBIN2DECOds(string $expectedResult, bool $arg1): void { Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); @@ -146,9 +136,7 @@ public function testBIN2DECFractional(): void 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 b2cf5bc406..8afcdf6615 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2HexTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testBIN2HEXAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBIN2HEX(): array 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 @@ public static function providerUnhappyBIN2HEX(): array ]; } - /** - * @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 @@ public function testBIN2HEXFractional(): void 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 f0db0c1fbd..2c320f4885 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Bin2OctTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testBIN2OCTAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerBIN2OCT(): array 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 @@ public static function providerUnhappyBIN2OCT(): array ]; } - /** - * @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 @@ public function testBIN2OCTFractional(): void 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 1f913cbed8..4ad529b266 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitAndTest.php @@ -13,18 +13,14 @@ 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 @@ public function testBITANDAsFormula(float|int|string $expectedResult, mixed ...$ 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 @@ public static function providerBITAND(): array 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 @@ public static function providerUnhappyBITAND(): array ]; } - /** - * @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 a0bd6b7583..82d1f749d1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitLShiftTest.php @@ -13,18 +13,14 @@ 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 @@ public function testBITLSHIFTAsFormula(mixed $expectedResult, mixed ...$args): v 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 @@ public static function providerBITLSHIFT(): array 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 @@ public static function providerUnhappyBITLSHIFT(): array ]; } - /** - * @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 f27f731f3c..6cc1390190 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitOrTest.php @@ -13,18 +13,14 @@ 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 @@ public function testBITORAsFormula(float|int|string $expectedResult, mixed ...$a 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 @@ public static function providerBITOR(): array 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 @@ public static function providerUnhappyBITOR(): array ]; } - /** - * @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 e68173e361..084932a6bb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitRShiftTest.php @@ -13,18 +13,14 @@ 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 @@ public function testBITRSHIFTAsFormula(mixed $expectedResult, mixed ...$args): v 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 @@ public static function providerBITRSHIFT(): array 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 @@ public static function providerUnhappyBITRSHIFT(): array ]; } - /** - * @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 1c42c0f041..38b59b59d1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/BitXorTest.php @@ -13,18 +13,14 @@ 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 @@ public function testBITXORAsFormula(float|int|string $expectedResult, mixed ...$ 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 @@ public static function providerBITXOR(): array 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 @@ public static function providerUnhappyBITXOR(): array ]; } - /** - * @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 17954601bc..1a5933e342 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ComplexTest.php @@ -12,9 +12,7 @@ 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testCOMPLEXAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerCOMPLEX(): array 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 e8044792ad..ad30125d9e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ConvertUoMTest.php @@ -51,18 +51,14 @@ public function testGetBinaryConversionMultipliers(): void 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 @@ public function testCONVERTUOMAsFormula(mixed $expectedResult, mixed ...$args): 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 @@ public static function providerCONVERTUOM(): array 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 @@ public static function providerUnhappyCONVERTUOM(): array ]; } - /** - * @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 51f73261fb..cdee5b47fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2BinTest.php @@ -26,9 +26,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testDEC2BINAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerDEC2BIN(): array 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 @@ public static function providerUnhappyDEC2BIN(): array ]; } - /** - * @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 @@ public function testDEC2BINFrac(): void 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 2be971d815..03a129b06f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2HexTest.php @@ -26,9 +26,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testDEC2HEXAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerDEC2HEX(): array 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 @@ public static function providerUnhappyDEC2HEX(): array ]; } - /** - * @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 @@ public function test32bitHex(): void 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 3207107011..b99fa9e27c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Dec2OctTest.php @@ -26,9 +26,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testDEC2OCTAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerDEC2OCT(): array 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 @@ public static function providerUnhappyDEC2OCT(): array ]; } - /** - * @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 @@ public function testDEC2OCTFrac(): void 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 6dbd164ec4..54c0eb8f18 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/DeltaTest.php @@ -13,18 +13,14 @@ 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 @@ public function testDELTAAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerDELTA(): array 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 @@ public static function providerUnhappyDELTA(): array ]; } - /** - * @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 515fe9e8f8..2b4927c0e6 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 @@ public function testERFCAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerERFC(): array 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 @@ public static function providerUnhappyERFC(): array ]; } - /** - * @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 edc59284aa..1dd8ab8dee 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 @@ public function testERFPRECISEAsFormula(mixed $expectedResult, mixed ...$args): 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 @@ public static function providerERFPRECISE(): array 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 e9d239238a..7fd9bcb33c 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 @@ public function testERFAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerERF(): array 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 @@ public static function providerUnhappyERF(): array ]; } - /** - * @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 34b42ceaef..f39a8cbdfa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/GeStepTest.php @@ -13,18 +13,14 @@ 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 @@ public function testGESTEPAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerGESTEP(): array 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 @@ public static function providerUnhappyGESTEP(): array ]; } - /** - * @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 bcd263235d..abbe317120 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2BinTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testHEX2BINAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerHEX2BIN(): array 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 @@ public static function providerUnhappyHEX2BIN(): array ]; } - /** - * @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 @@ public function testHEX2BINFrac(): void 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 7586b43ea5..888fba09df 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2DecTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testHEX2DECAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerHEX2DEC(): array 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 @@ public static function providerUnhappyHEX2DEC(): array ]; } - /** - * @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 @@ public function testHEX2DECFrac(): void 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 603d4b2dc8..ef02a41cbc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Hex2OctTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testHEX2OCTAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerHEX2OCT(): array 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 @@ public static function providerUnhappyHEX2OCT(): array ]; } - /** - * @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 @@ public function testHEX2OCTFrac(): void 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 2325a3b135..b1029fa7c8 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 @@ public function testIMABSAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerIMABS(): array 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 @@ public static function providerUnhappyIMABS(): array ]; } - /** - * @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 6b15ddaf91..e701d5a30e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImArgumentTest.php @@ -21,18 +21,14 @@ protected function setUp(): void 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 @@ public function testIMARGUMENTAsFormula(mixed $expectedResult, mixed ...$args): 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 @@ public static function providerIMARGUMENT(): array 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 213331eb5d..d3588c7564 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImConjugateTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCONJUGATEAsFormula(mixed $expectedResult, mixed ...$args): ); } - /** - * @dataProvider providerIMCONJUGATE - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCONJUGATE')] public function testIMCONJUGATEInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCONJUGATE(): array 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 @@ public static function providerUnhappyIMCONJUGATE(): array ]; } - /** - * @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 ef7332f322..77b2e61db7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCosTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCOSAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMCOS - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOS')] public function testIMCOSInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCOS(): array 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 @@ public static function providerUnhappyIMCOS(): array ]; } - /** - * @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 a972e7d1f9..be3532ccef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCoshTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCOSHAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMCOSH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOSH')] public function testIMCOSHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCOSH(): array 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 @@ public static function providerUnhappyIMCOSH(): array ]; } - /** - * @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 97f88b604a..3cba95456f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCotTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCOTAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMCOT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCOT')] public function testIMCOTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCOT(): array 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 @@ public static function providerUnhappyIMCOT(): array ]; } - /** - * @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 d694bc9d77..83cc422dc3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCSCAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMCSC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSC')] public function testIMCSCInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCSC(): array 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 @@ public static function providerUnhappyIMCSC(): array ]; } - /** - * @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 cf1a888172..834fa2a0f0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCschTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMCSCHAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMCSCH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMCSCH')] public function testIMCSCHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMCSCH(): array 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 @@ public static function providerUnhappyIMCSCH(): array ]; } - /** - * @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 9c73efa811..5c709752bf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImDivTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMDIVAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMDIV - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMDIV')] public function testIMDIVInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMDIV(): array 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 @@ public static function providerUnhappyIMDIV(): array ]; } - /** - * @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 23541b2cc7..c9b480fb8b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImExpTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMEXPAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMEXP - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMEXP')] public function testIMEXPInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMEXP(): array 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 @@ public static function providerUnhappyIMEXP(): array ]; } - /** - * @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 655ae31c5f..0e0c5a558c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLnTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMLNAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMLN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLN')] public function testIMLNInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMLN(): array 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 @@ public static function providerUnhappyIMLN(): array ]; } - /** - * @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 c7940c6006..08d5a7ffae 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog10Test.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMLOG10AsFormula(mixed $expectedResult, mixed ...$args): voi ); } - /** - * @dataProvider providerIMLOG10 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG10')] public function testIMLOG10InWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMLOG10(): array 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 @@ public static function providerUnhappyIMLOG10(): array ]; } - /** - * @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 42ab29cf60..02e6cdbedf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImLog2Test.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMLOG2AsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMLOG2 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMLOG2')] public function testIMLOG2InWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMLOG2(): array 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 @@ public static function providerUnhappyIMLOG2(): array ]; } - /** - * @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 4a33ba6a32..edb3a1724a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImPowerTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMPOWERAsFormula(mixed $expectedResult, mixed ...$args): voi ); } - /** - * @dataProvider providerIMPOWER - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPOWER')] public function testIMPOWERInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMPOWER(): array 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 @@ public static function providerUnhappyIMPOWER(): array ]; } - /** - * @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 256498b71b..fb7fc7f8df 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImProductTest.php @@ -26,10 +26,9 @@ protected function setUp(): void } /** - * @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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMPRODUCTAsFormula(mixed $expectedResult, mixed ...$args): v ); } - /** - * @dataProvider providerIMPRODUCT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMPRODUCT')] public function testIMPRODUCTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +85,7 @@ public static function providerIMPRODUCT(): array 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 4cbc4a7836..57ef95390e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImRealTest.php @@ -21,18 +21,14 @@ protected function setUp(): void 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 @@ public function testIMREALAsFormula(mixed $expectedResult, mixed ...$args): void 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 @@ public static function providerIMREAL(): array 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 @@ public static function providerUnhappyIMREAL(): array ]; } - /** - * @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 583b08494a..d37552ab7c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSecTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSECAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSEC - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSEC')] public function testIMSECInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSEC(): array 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 @@ public static function providerUnhappyIMSEC(): array ]; } - /** - * @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 c1840a4274..8083880584 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSechTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSECHAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSECH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSECH')] public function testIMSECHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSECH(): array 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 @@ public static function providerUnhappyIMSECH(): array ]; } - /** - * @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 347d522e19..e413da1e8a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSINAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSIN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSIN')] public function testIMSINInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSIN(): array 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 @@ public static function providerUnhappyIMSIN(): array ]; } - /** - * @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 4198033fa3..99b6b6245c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSinhTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSINHAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSINH - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSINH')] public function testIMSINHInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSINH(): array 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 @@ public static function providerUnhappyIMSINH(): array ]; } - /** - * @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 7edf1e0322..08ee4b78b1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSqrtTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSQRTAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSQRT - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSQRT')] public function testIMSQRTInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSQRT(): array 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 @@ public static function providerUnhappyIMSQRT(): array ]; } - /** - * @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 ff95604ed7..cfcd5d3bd7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSubTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSUBAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSUB - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUB')] public function testIMSUBInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMSUB(): array 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 @@ public static function providerUnhappyIMSUB(): array ]; } - /** - * @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 625348de66..dbf6a7463c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImSumTest.php @@ -26,10 +26,9 @@ protected function setUp(): void } /** - * @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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMSUMAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMSUM - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMSUM')] public function testIMSUMInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -90,9 +85,7 @@ public static function providerIMSUM(): array 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 949e42a640..b4d5af1b80 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImTanTest.php @@ -25,9 +25,7 @@ protected function setUp(): void $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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testIMTANAsFormula(mixed $expectedResult, mixed ...$args): void ); } - /** - * @dataProvider providerIMTAN - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerIMTAN')] public function testIMTANInWorksheet(mixed $expectedResult, mixed ...$args): void { $arguments = new FormulaArguments(...$args); @@ -88,9 +82,7 @@ public static function providerIMTAN(): array 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 @@ public static function providerUnhappyIMTAN(): array ]; } - /** - * @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 f62cc1d893..4f1f7b85e0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImaginaryTest.php @@ -21,18 +21,14 @@ protected function setUp(): void 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 @@ public function testIMAGINARYAsFormula(mixed $expectedResult, mixed ...$args): v 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 @@ public static function providerIMAGINARY(): array 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 @@ public static function providerUnhappyIMAGINARY(): array ]; } - /** - * @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 9e02a442f7..be2aeaeafe 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2BinTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testOCT2BINAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerOCT2BIN(): array 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 @@ public static function providerUnhappyOCT2BIN(): array ]; } - /** - * @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 @@ public function testOCT2BINFrac(): void 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 45a868e6ab..911aac805f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2DecTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testOCT2DECAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerOCT2DEC(): array 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 @@ public static function providerUnhappyOCT2DEC(): array ]; } - /** - * @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 @@ public function testOCT2DECFrac(): void 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 a350bd7593..94da193a26 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/Oct2HexTest.php @@ -27,9 +27,7 @@ protected function tearDown(): void 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 @@ private function trimIfQuoted(string $value): string 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 @@ public function testOCT2HEXAsFormula(mixed $expectedResult, mixed ...$args): voi 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 @@ public static function providerOCT2HEX(): array 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 @@ public static function providerUnhappyOCT2HEX(): array ]; } - /** - * @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 @@ public function testOCT2HEXFrac(): void 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 07f99cc2db..9889693ada 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintMTest.php @@ -6,9 +6,7 @@ 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 97bd742df1..98bc0654fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AccrintTest.php @@ -6,9 +6,7 @@ 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 459b7674ac..77153d3965 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorDegRcTest.php @@ -6,9 +6,7 @@ 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 95db9bc190..a963c38d8b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/AmorLincTest.php @@ -6,9 +6,7 @@ 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 15633fd8e0..3907f268ae 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDayBsTest.php @@ -6,9 +6,7 @@ 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 7696f61f85..848f763dee 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysNcTest.php @@ -6,9 +6,7 @@ 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 f7ba0e7be0..6d5fe6d650 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupDaysTest.php @@ -6,9 +6,7 @@ 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 f3f04792f0..fd88e6a3ad 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNcdTest.php @@ -6,9 +6,7 @@ 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 86360ecb33..792ccad443 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupNumTest.php @@ -6,9 +6,7 @@ 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 8c02ea048c..5566e6b73e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CoupPcdTest.php @@ -6,9 +6,7 @@ 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 a27724ab8b..7260f1b553 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumIpmtTest.php @@ -6,9 +6,7 @@ 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 b241c29406..80059ca190 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/CumPrincTest.php @@ -6,9 +6,7 @@ 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 13856c048b..6a39933ad8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DbTest.php @@ -6,9 +6,7 @@ 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 5e513ed646..fce33e5c6b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DdbTest.php @@ -6,9 +6,7 @@ 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 317854edc1..48ce7159d9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DiscTest.php @@ -6,9 +6,7 @@ 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 c379377401..cd8b091d81 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarDeTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerDOLLARDE(): array 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 992b5a64eb..c305ab9e8c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/DollarFrTest.php @@ -6,9 +6,7 @@ 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 4811c64c3c..049e3de5e3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/EffectTest.php @@ -6,9 +6,7 @@ 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 bb72492f52..bc2c8b7a0d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvScheduleTest.php @@ -6,9 +6,7 @@ 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 1dbfee1af2..df0c5db07f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/FvTest.php @@ -6,9 +6,7 @@ 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 1d5087034e..4ccf358ddd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/HelpersTest.php @@ -9,9 +9,7 @@ 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 75faf79272..46d6112251 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IPmtTest.php @@ -6,9 +6,7 @@ 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 fc111f1cd7..307f95f222 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IntRateTest.php @@ -6,9 +6,7 @@ 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 08d09c5875..ade1cbe46c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IrrTest.php @@ -6,9 +6,7 @@ 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 ea085fb50c..2c460a1a08 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/IsPmtTest.php @@ -6,9 +6,7 @@ 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 d2a65dd068..ebdf0ac1b5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/MirrTest.php @@ -8,9 +8,7 @@ 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 302ad808fb..8d36412b77 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NPerTest.php @@ -6,9 +6,7 @@ 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 302d5a0c17..df805207b2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NominalTest.php @@ -6,9 +6,7 @@ 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 c43d819bdc..77e1efcb67 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/NpvTest.php @@ -6,9 +6,7 @@ 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 7c31158e14..d4cc3095c9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PDurationTest.php @@ -6,9 +6,7 @@ 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 ae3f6ea9fe..c8adfb83a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PmtTest.php @@ -6,9 +6,7 @@ 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 820d315d8c..dc3d795f68 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PpmtTest.php @@ -6,9 +6,7 @@ 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 2abb6effbc..065299bdb0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceDiscTest.php @@ -6,9 +6,7 @@ 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 a30c196b83..b275fc4bf8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceMatTest.php @@ -6,9 +6,7 @@ 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 56328f882a..cb22ff8ca3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PriceTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerPRICE(): array 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 ffdb1e25b4..d095d311b0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/PvTest.php @@ -6,9 +6,7 @@ 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 f36437395e..02914cdf5e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RateTest.php @@ -6,9 +6,7 @@ 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 d5ac3000b2..fd13f6a724 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/ReceivedTest.php @@ -6,9 +6,7 @@ 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 ccfd7587b3..ea08d37720 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/RriTest.php @@ -6,9 +6,7 @@ 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 abe5a7a9cf..3e67a673c6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SlnTest.php @@ -6,9 +6,7 @@ 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 6b8561771c..6a2534dbf6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/SydTest.php @@ -6,9 +6,7 @@ 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 d18aa52852..e67358d1e4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillEqTest.php @@ -6,9 +6,7 @@ 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 c8778fc28b..62ca8f1f8d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillPriceTest.php @@ -6,9 +6,7 @@ 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 30d58c3277..807d22f9d6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/TBillYieldTest.php @@ -6,9 +6,7 @@ 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 91714a169e..3bb4af0432 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/UsDollarTest.php @@ -6,9 +6,7 @@ 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 a94a9210d3..65c2fce18b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XNpvTest.php @@ -6,9 +6,7 @@ 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 d48bd1b610..76275e8f9c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/XirrTest.php @@ -6,9 +6,7 @@ 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 32f8431747..cb5c25ca50 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldDiscTest.php @@ -6,9 +6,7 @@ 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 28c5540607..73c799cbc0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Financial/YieldMatTest.php @@ -6,9 +6,7 @@ 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 c0e9eb4d02..eae76a1a6a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/ErrorTypeTest.php @@ -16,9 +16,7 @@ public function testErrorTypeNoArgument(): void 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 @@ public static function providerErrorType(): array 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 8a047a59e3..495798fd64 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsBlankTest.php @@ -16,9 +16,7 @@ public function testIsBlankNoArgument(): void 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 @@ public static function providerIsBlank(): array 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 a24dde86f0..5b93149fbc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrTest.php @@ -16,9 +16,7 @@ public function testIsErrNoArgument(): void 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 @@ public static function providerIsErr(): array 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 765cb8e558..526a379cb4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsErrorTest.php @@ -16,9 +16,7 @@ public function testIsErrorNoArgument(): void 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 @@ public static function providerIsError(): array 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 0ebf0ed059..c8293d6df9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsEvenTest.php @@ -17,9 +17,7 @@ public function testIsEvenNoArgument(): void 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 @@ public static function providerIsEven(): array 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 ea53a56dcb..e00cccb3bb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsLogicalTest.php @@ -16,9 +16,7 @@ public function testIsLogicalNoArgument(): void 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 @@ public static function providerIsLogical(): array 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 87e6be25b3..72b8413678 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNaTest.php @@ -16,9 +16,7 @@ public function testIsNaNoArgument(): void 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 @@ public static function providerIsNa(): array 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 e84c835cc7..c639c93a53 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNonTextTest.php @@ -16,9 +16,7 @@ public function testIsNonTextNoArgument(): void 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 @@ public static function providerIsNonText(): array 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 91850022cc..180fbc22d7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsNumberTest.php @@ -16,9 +16,7 @@ public function testIsNumberNoArgument(): void 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 @@ public static function providerIsNumber(): array 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 fb94d483c0..6ff3d6ec38 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsOddTest.php @@ -17,9 +17,7 @@ public function testIsOddNoArgument(): void 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 @@ public static function providerIsOdd(): array 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 0fee579c09..f75e2ff172 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/IsTextTest.php @@ -16,9 +16,7 @@ public function testIsTextNoArgument(): void 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 @@ public static function providerIsText(): array 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 2224ad87ae..8c534dba2d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/NTest.php @@ -15,9 +15,7 @@ public function testNNoArgument(): void 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 4b36ccd6db..63ff4712ba 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Information/TypeTest.php @@ -15,9 +15,7 @@ public function testTypeNoArgument(): void 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 277318cf28..e1eb46aa14 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/AndTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerAND(): array 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 6329c9b0e8..adb98070dc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfErrorTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerIFERROR(): array 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 a629bd7ab1..f0fb8fdaaa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfNaTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerIFNA(): array 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 fc631043ae..ebe5f3b545 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfTest.php @@ -6,9 +6,7 @@ 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 eeb38b9a28..ff52852d87 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/IfsTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerIFS(): array 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 db53b38949..a4a0716430 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/NotTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNOT(): array 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 c54448e038..1b975aa0dc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/OrTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerOR(): array 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 c07daa8b49..b1311f38c8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/SwitchTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSwitch(): array 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 e319cbb4a4..ea4a8bb066 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Logical/XorTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerXOR(): array 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 d7aa9101c6..0c9b84e9eb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressInternationalTest.php @@ -24,9 +24,7 @@ protected function tearDown(): void 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 @@ public static function providerInternational(): array ]; } - /** - * @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 0bb9833ab2..0fa5b2f8de 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/AddressTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerADDRESS(): array 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 7a495a5ca3..815ee8f2d2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ChooseTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerCHOOSE(): array 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 de7a6cc229..3382a1e38d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnOnSpreadsheetTest.php @@ -8,9 +8,7 @@ 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 9b007b0a93..eb16ae6d80 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnTest.php @@ -8,9 +8,7 @@ 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 76c866e5ca..f3814d4f95 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsOnSpreadsheetTest.php @@ -8,9 +8,7 @@ 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 641119a9d7..74696967df 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/ColumnsTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerCOLUMNS(): array 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 23a52cab33..0b13cc8fb9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/FormulaTextTest.php @@ -11,9 +11,7 @@ */ 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 682a12e021..679cbe28b1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/HLookupTest.php @@ -12,9 +12,7 @@ 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 @@ public static function providerHLOOKUP(): array 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 @@ public static function providerHLookupNamedRange(): array ]; } - /** - * @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 5e8420e14e..7e8f7d157a 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 @@ public function testHYPERLINK(mixed $expectedResult, ?string $linkUrl, ?string $ } } - /** - * @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 3f508405ae..08cf905c5c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexOnSpreadsheetTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerINDEXonSpreadsheet(): array 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 9b3f5de2ec..930bfd8a99 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndexTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerINDEX(): array 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 e0624ed8df..556b7c653f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectInternationalTest.php @@ -24,9 +24,7 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @dataProvider providerInternational - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInternational')] public function testR1C1International(string $locale): void { Settings::setLocale($locale); @@ -79,9 +77,7 @@ public static function providerInternational(): array ]; } - /** - * @dataProvider providerRelativeInternational - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerRelativeInternational')] public function testRelativeInternational(string $locale, string $cell, string $relative): void { Settings::setLocale($locale); @@ -101,9 +97,7 @@ public static function providerRelativeInternational(): array ]; } - /** - * @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 4b29a787ce..2ffa013818 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/IndirectTest.php @@ -10,9 +10,7 @@ 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 @@ public function testDeprecatedCall(): void 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 7194fe3806..6e6c674376 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/LookupTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerLOOKUP(): array 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 211680f7da..2acbccf404 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatchTest.php @@ -8,9 +8,7 @@ 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 @@ public function testMATCH(mixed $expectedResult, mixed $input, array $array, nul 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 @@ public static function providerMATCH(): array 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 62e3b03578..eeb2cec49a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/MatrixHelperFunctionsTest.php @@ -9,18 +9,14 @@ 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 2bf7f67bc6..c6a66c4c27 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/OffsetTest.php @@ -9,9 +9,7 @@ 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 53fdbf0877..ca22fdcc86 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowOnSpreadsheetTest.php @@ -8,9 +8,7 @@ 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 fbc4c12d6b..9d8d8c3930 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowTest.php @@ -8,9 +8,7 @@ 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 5d21d9fc7e..aeb589c4d3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsOnSpreadsheetTest.php @@ -8,9 +8,7 @@ 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 11781aabc5..312304f60e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/RowsTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerROWS(): array 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 99e0a6e45d..7d2ba3ec7e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortByTest.php @@ -18,9 +18,7 @@ public function testSortOnScalar(): void 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 @@ public static function providerSortWithScalarArgumentErrorReturns(): array ]; } - /** - * @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 8334c20bff..2670caa16f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/SortTest.php @@ -18,9 +18,7 @@ public function testSortOnScalar(): void 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 @@ public static function providerSortWithScalarArgumentErrorReturns(): array ]; } - /** - * @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 @@ public static function providerSortByRow(): array ]; } - /** - * @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 @@ public static function providerSortByRowMultiLevel(): array ]; } - /** - * @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 1892695698..67d0c2bde0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/TransposeTest.php @@ -15,9 +15,7 @@ protected function setUp(): void 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 c7996ea2a6..3a38248be5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/UniqueTest.php @@ -10,9 +10,7 @@ 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 ad320dfd0a..169f203a0c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/LookupRef/VLookupTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerVLOOKUP(): array 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 e16a05d77f..e3561996f3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AbsTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAbs(): array 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 8ba2e2a3a9..c4214f587f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcosTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAcos(): array 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 98ca3353cc..9a31fa8d1c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcoshTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAcosh(): array 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 8e508aa158..3b85fff8fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcotTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerACOT(): array 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 85ccdf44ad..1475d77d26 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AcothTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerACOTH(): array 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 d5fd394a73..60e108272e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ArabicTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerARABIC(): array 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 6024504c4c..cbf9914942 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAsin(): array 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 019ffb5507..2795b36a8b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AsinhTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAsinh(): array 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 be37fdd241..bbfa4da2d2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Atan2Test.php @@ -8,9 +8,7 @@ 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 @@ public static function providerATAN2(): array 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 d4156d6c2e..7c217f81b2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAtan(): array 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 0433535e3e..3a121aa943 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/AtanhTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerAtanh(): array 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 77b661c669..a1c5e4e0be 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/BaseTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBASE(): array 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 384600d5b5..78d947e173 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingMathTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCEILINGMATH(): array 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 d6e60e5294..922500c81e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingPreciseTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFLOORPRECISE(): array 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 ba246a03e3..72cac55820 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CeilingTest.php @@ -8,9 +8,7 @@ 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 @@ public function testCEILINGExcel1Arg(): void 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 bc3d41ba81..0dced2da86 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinATest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCOMBINA(): array 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 6c4cdfa26c..ffe44293a9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CombinTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCOMBIN(): array 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 0f5513d2da..538e2a964d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CosTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCos(): array 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 0239c1ee6f..40611d754b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CoshTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCosh(): array 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 d47520334e..c62a76befd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CotTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCOT(): array 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 d41b093708..445d97b448 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CothTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCOTH(): array 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 5cf58296ea..9e835b5030 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CscTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCSC(): array 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 5865c4c822..77237729ef 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/CschTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCSCH(): array 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 14d3d72bd4..b6f5462663 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/DegreesTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerDegrees(): array 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 4f56e921a0..653e4d083c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/EvenTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerEVEN(): array 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 7af6b3b095..188acd934c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ExpTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerEXP(): array 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 e405c5d0f5..15f8159a2f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FactDoubleTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFACTDOUBLE(): array 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 1b1dbdb5c3..3ff4da9713 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 @@ public static function providerFACT(): array 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 @@ public static function providerFACTGnumeric(): array 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 f91076a239..5f528cc865 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorMathTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFLOORMATH(): array 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 3a43822e94..74d3ce4064 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorPreciseTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFLOORPRECISE(): array 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 3d56fb3282..df19f229e1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/FloorTest.php @@ -8,9 +8,7 @@ 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 @@ public function testFLOORExcel1Arg(): void 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 e7684ba14a..20103cbfd6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/GcdTest.php @@ -6,9 +6,7 @@ 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 7f551e3430..0e81fcafb1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/IntTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerINT(): array 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 13d3b99402..d27358f5c4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LcmTest.php @@ -6,9 +6,7 @@ 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 ca7eb78e86..774e2bc835 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LnTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLN(): array 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 63ff4e9521..52635d426a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/Log10Test.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLOG10(): array 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 69cd275be2..62afdd287d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/LogTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLOG(): array 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 63c118572f..cc98cab1aa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MInverseTest.php @@ -8,9 +8,7 @@ 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 86ee26fd9c..8925151f78 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MMultTest.php @@ -8,9 +8,7 @@ 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 eab6e20ae9..32020c71fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MRoundTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerMROUND(): array 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 cd9b090a9e..f171cf6f80 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MdeTermTest.php @@ -6,9 +6,7 @@ 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 f33b886509..bbedd1f3db 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ModTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerMOD(): array 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 ce189b44ef..695d63c798 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/MultinomialTest.php @@ -6,9 +6,7 @@ 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 d73235a7cd..a61259643b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/OddTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerODD(): array 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 130f02f980..71337d1b52 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PiTest.php @@ -6,9 +6,7 @@ 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 0bf42f09a8..abf9f7ef30 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/PowerTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerPOWER(): array 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 7b4bc296e3..34bbf0db98 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/ProductTest.php @@ -6,9 +6,7 @@ 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 84c2856be4..eb5827d5ba 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/QuotientTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerQUOTIENT(): array 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 fb3c784eb1..63dfb7fd08 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RadiansTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerRADIANS(): array 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 6086685f91..9b64991b5d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RandBetweenTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerRANDBETWEEN(): array 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 de8be1b07e..57096ac275 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RomanTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerROMAN(): array 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 2f5945d3f3..7c440df13e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundDownTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerRoundDown(): array 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 91dcc86109..c10c982d1b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerRound(): array 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 79a32ed682..d7629357b8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/RoundUpTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerRoundUp(): array 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 3c391b6871..e05c99b8ee 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SecTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSEC(): array 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 632685070f..d2e4df742a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SechTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSECH(): array 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 c3b1196c0d..c52f998734 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SequenceTest.php @@ -9,11 +9,10 @@ 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 8608f91c87..5f3469f18d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SeriesSumTest.php @@ -9,9 +9,7 @@ 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 @@ public static function providerSERIESSUM(): array 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 a767de73d6..2a77d6eb3d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SignTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSIGN(): array 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 83bc295f80..ea78813616 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSin(): array 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 0ad727757e..50b7b32c41 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SinhTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCosh(): array 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 e6a1e783d3..1aecc8b6ee 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtPiTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSQRTPI(): array 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 4bd348ffc7..4e4fea06cb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SqrtTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSqrt(): array 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 cc694aa495..6a2e5c59a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SubTotalTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerSUBTOTAL(): array 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 @@ public function testSubtotalColumnHidden(float|int|string $expectedResult, float 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 1f61aa8632..9199ada28e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfTest.php @@ -6,9 +6,7 @@ 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 eca29781f2..fbf6032ef8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumIfsTest.php @@ -8,9 +8,7 @@ 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 2158894b94..ddb4ddafc0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumProductTest.php @@ -8,9 +8,7 @@ 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 41b3e4c61f..7af25a1b8b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumSqTest.php @@ -6,9 +6,7 @@ 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 5c9bd238d8..dfa27f35fc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSUM(): array 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 @@ public static function providerSUMLiterals(): array 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 c7d1bf8c2b..9e36ac572b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2MY2Test.php @@ -8,9 +8,7 @@ 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 b75ea02dfc..46bc3e17ce 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumX2PY2Test.php @@ -8,9 +8,7 @@ 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 4cce0ada0e..d4f91a8cd9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/SumXMY2Test.php @@ -8,9 +8,7 @@ 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 c21d451a1b..b58562c1ce 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTan(): array 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 8de5d6803e..31f704b224 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TanhTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTanh(): array 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 9e610f234f..0f6bd0b977 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/MathTrig/TruncTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTRUNC(): array 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 @@ public static function providerTruncArray(): array ]; } - /** - * @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 ea9c61ef84..7b58094a7a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AveDevTest.php @@ -6,9 +6,7 @@ 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 48788ab402..d8a7542c35 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageATest.php @@ -6,9 +6,7 @@ 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 2b23a77d24..62db48efa5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfTest.php @@ -8,9 +8,7 @@ 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 e3f835809d..9aecc553ee 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageIfsTest.php @@ -8,9 +8,7 @@ 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 078a8313b2..21e24c149f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/AverageTest.php @@ -6,9 +6,7 @@ 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 2a25cbfe6f..a50693c00e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBETADIST(): array 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 eab0cf4ba1..7550510d14 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BetaInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBETAINV(): array 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 9a8ac452fc..6ac55ec890 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistRangeTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBINOMDISTRANGE(): array 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 5f824d7178..94b1b71a5d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBINOMDIST(): array 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 ecd12285c2..9cddd74629 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/BinomInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerBINOMINV(): array 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 ba9e26438e..e0581e7f77 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistLeftTailTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCHIDIST(): array 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 94835eb614..b2a3e18f6f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiDistRightTailTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCHIDIST(): array 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 483575756b..475cf88876 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvLeftTailTest.php @@ -8,9 +8,7 @@ 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 @@ public function invVersusDistTest(): void 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 971ea55151..a09d14be4a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiInvRightTailTest.php @@ -8,9 +8,7 @@ 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 @@ public function invVersusDistTest(): void 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 0059a9de8b..ea3b2ab0cd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ChiTestTest.php @@ -10,9 +10,7 @@ // 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 006ad32eb0..2ea9ac53dc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ConfidenceTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCONFIDENCE(): array 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 e832a89e7b..c698cb896e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CorrelTest.php @@ -9,9 +9,7 @@ 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 381b1384d2..61e1f1cdfc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountATest.php @@ -6,9 +6,7 @@ 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 e5f44f78d1..4856547617 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountBlankTest.php @@ -8,9 +8,7 @@ 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 794751d6f0..a4e803138b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfTest.php @@ -6,9 +6,7 @@ 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 54c8a05bef..1c589a6113 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountIfsTest.php @@ -7,9 +7,7 @@ // 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 ef951be3f1..1074d74acf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CountTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerBasicCOUNT(): array 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 @@ public static function providerExcelCOUNT(): array 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 @@ public static function providerOpenOfficeCOUNT(): array 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 63b11e8d3f..2c7f51a153 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/CovarTest.php @@ -6,9 +6,7 @@ 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 e239e105a9..993723aacd 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/DevSqTest.php @@ -6,9 +6,7 @@ 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 2cb5b64cbb..516783c6b1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ExponDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerEXPONDIST(): array 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 6c6478f288..20aad121a8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFDIST(): array 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 aa3189742e..2a5eaaadd0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFISHERINV(): array 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 352a3afc53..d0f369ebd9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/FisherTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFISHER(): array 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 396e69e0ba..8dee257100 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ForecastTest.php @@ -12,9 +12,7 @@ // 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 @@ public static function providerFORECAST(): array 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 64ef50a5f3..0a63798217 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerGAMMADIST(): array 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 b3d1a3409b..1b48f49982 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerGAMMAINV(): array 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 8c9c4c76a3..d7e47b49ac 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaLnTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerGAMMALN(): array 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 9db243cc02..ba246a55a0 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GammaTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerGAMMA(): array 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 4fb98f5ec5..528d47bb3e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GaussTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerGAUSS(): array 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 f5b8b91b4f..c2fe6b8aa9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GeoMeanTest.php @@ -6,9 +6,7 @@ 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 51d379a8d9..fc790889cc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/GrowthTest.php @@ -10,9 +10,7 @@ // 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 497f8127cc..a991bc9854 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HarMeanTest.php @@ -6,9 +6,7 @@ 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 b240d874b0..92db287c2e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/HypGeomDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerHYPGEOMDIST(): array 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 c340c98997..0f0cc9a6fe 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/InterceptTest.php @@ -6,9 +6,7 @@ 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 1b2d791683..32d362e2e6 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/KurtTest.php @@ -6,9 +6,7 @@ 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 de1e4aa1ea..f3b50da55b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LargeTest.php @@ -6,9 +6,7 @@ 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 d8a3fd8bed..e7573b1508 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LinEstTest.php @@ -10,9 +10,7 @@ // 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 93524d2d07..c6ef9fd25a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogEstTest.php @@ -10,9 +10,7 @@ // 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 fce4a4b246..25c5bc6653 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLOGINV(): array 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 0857e54249..fd8f3fb4f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDist2Test.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLOGNORMDIST2(): array 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 fcb01d5a44..4820944a09 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/LogNormDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLOGNORMDIST(): array 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 4e65e2db45..3d4470144d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxATest.php @@ -6,9 +6,7 @@ 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 25a7ac696a..3af46098a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxIfsTest.php @@ -6,9 +6,7 @@ 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 ea1e5110bd..03c0a86d46 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MaxTest.php @@ -6,9 +6,7 @@ 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 2eeaf6042d..0abb86c2ae 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MedianTest.php @@ -6,9 +6,7 @@ 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 28d417dae7..d825ef517c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinATest.php @@ -6,9 +6,7 @@ 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 7fb91bfbcb..44d1dae7f2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinIfsTest.php @@ -6,9 +6,7 @@ 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 c699cfedf3..9777151738 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/MinTest.php @@ -6,9 +6,7 @@ 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 5ae2c4977c..a61689fe0a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ModeTest.php @@ -9,9 +9,7 @@ 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 7725556eef..3a83fed896 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NegBinomDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNEGBINOMDIST(): array 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 ba62123ec3..f9c444bf8e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNORMDIST(): array 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 5aa42fc85b..14a479c6fe 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNORMINV(): array 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 c85c125c7c..ea07827d68 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDist2Test.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNORMSDIST2(): array 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 95d8ff32de..53b3aafe88 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNORMSDIST(): array 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 e935538023..f763123318 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/NormSInvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerNORMSINV(): array 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 153b768224..b931977b99 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentRankTest.php @@ -7,10 +7,9 @@ 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 47faff9e31..f3707768ec 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PercentileTest.php @@ -6,9 +6,7 @@ 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 75a7999564..94223ce82a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerPERMUT(): array 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 2cfc6a567d..57cf1169a5 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PermutationATest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerPERMUT(): array 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 2233a74eca..23bcbfa679 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/PoissonTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerPOISSON(): array 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 daf658b849..5afdc256e1 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/QuartileTest.php @@ -6,9 +6,7 @@ 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 6f2a5ae465..9eeffb958b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RankTest.php @@ -7,10 +7,9 @@ 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 fba99b1b82..49fa2541f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/RsqTest.php @@ -6,9 +6,7 @@ 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 f88287cc33..fad689b61c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SkewTest.php @@ -6,9 +6,7 @@ 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 12220561b7..e7ae4e320e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SlopeTest.php @@ -6,9 +6,7 @@ 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 13dc6f99c4..25cf80b316 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SmallTest.php @@ -6,9 +6,7 @@ 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 c6964f9487..5971dbb492 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevATest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerSTDEVA(): array 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 db309b2f7a..6c1d5e7c2e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPATest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerSTDEVPA(): array 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 89898d2a1e..e3d067d672 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevPTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerSTDEVP(): array 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 b920621533..b0712dcb54 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StDevTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerSTDEV(): array 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 8defe4c03c..02846869de 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/StandardizeTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSTANDARDIZE(): array 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 5c195630a1..9cabfe0bdf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/SteyxTest.php @@ -6,9 +6,7 @@ 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 c57deb2663..19811cf230 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TDistTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTDIST(): array 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 ed16e9dbaa..bdbabebfb7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TinvTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTINV(): array 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 1a09ce9b4c..a9ee4a33fa 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrendTest.php @@ -10,9 +10,7 @@ // 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 1e6adfdcb5..b267e5c64f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/TrimMeanTest.php @@ -6,9 +6,7 @@ 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 084a452e42..bf39c05b8a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarATest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerVARA(): array 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 9c1e62fdb7..73b260003e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPATest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerVARPA(): array 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 45f46d08b6..fb85dc077d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarPTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerVARP(): array 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 c565b4177c..0b3d8c9f72 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/VarTest.php @@ -6,9 +6,7 @@ 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 @@ public static function providerVAR(): array 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 533477525f..66d9e92754 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/WeibullTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerWEIBULL(): array 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 32ae58a1c6..b76f36b7fb 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Statistical/ZTestTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerZTEST(): array 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 56d035729a..a65b3a18f4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ArrayToTextTest.php @@ -6,9 +6,7 @@ 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 370ec308c9..5dd049a2cf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharNonPrintableTest.php @@ -9,9 +9,7 @@ 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 e9549e4528..4782e9d668 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CharTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCHAR(): array 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 7b83438cd2..196f5a8d54 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CleanTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCLEAN(): array 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 e29c057a69..c1ff8d8caf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/CodeTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerCODE(): array 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 3e0c88f096..3438e1431b 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatTest.php @@ -8,9 +8,7 @@ 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 2b4f12a2f7..9f2697faea 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 3a5f33cff5..7e2cfb2953 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ConcatenateTest.php @@ -9,9 +9,7 @@ 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 19c9dc3b6d..c383285fd8 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/DollarTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerDOLLAR(): array 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 802b73e4cc..9f3a15f633 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ExactTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerEXACT(): array 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 6f5e187b83..5497f69c9a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FindTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFIND(): array 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 0ee5c1cc39..a9ad677124 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/FixedTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerFIXED(): array 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 94ac23fd43..f59e53311e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LeftTest.php @@ -11,11 +11,10 @@ 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 @@ public static function providerLEFT(): array 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 @@ public static function providerLocaleLEFT(): array ]; } - /** - * @dataProvider providerCalculationTypeLEFTTrue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTTrue')] public function testCalculationTypeTrue(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -107,9 +102,7 @@ public static function providerCalculationTypeLEFTTrue(): array ]; } - /** - * @dataProvider providerCalculationTypeLEFTFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -143,9 +136,7 @@ public static function providerCalculationTypeLEFTFalse(): array ]; } - /** - * @dataProvider providerCalculationTypeLEFTNull - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeLEFTNull')] public function testCalculationTypeNull(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -178,9 +169,7 @@ public static function providerCalculationTypeLEFTNull(): array ]; } - /** - * @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 e2db773ae4..029a510107 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LenTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerLEN(): array 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 279332c6f3..e254c07c96 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/LowerTest.php @@ -9,9 +9,7 @@ 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 @@ public static function providerLOWER(): array 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 @@ public static function providerLocaleLOWER(): array ]; } - /** - * @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 364fb16861..2b36d8cf43 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/MidTest.php @@ -11,12 +11,11 @@ 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 @@ public static function providerMID(): array 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 @@ public static function providerLocaleMID(): array ]; } - /** - * @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 @@ public static function providerCalculationTypeMIDTrue(): array ]; } - /** - * @dataProvider providerCalculationTypeMIDFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeMIDFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -159,9 +152,7 @@ public static function providerCalculationTypeMIDFalse(): array ]; } - /** - * @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 @@ public static function providerCalculationTypeMIDNull(): array ]; } - /** - * @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 9dfa1fa205..15afdcd636 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 @@ public static function providerNUMBERVALUE(): array 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 c7af96f64f..5a73568b6e 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/OpenOfficeTest.php @@ -6,9 +6,7 @@ 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 6df021fe64..3767f91185 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ProperTest.php @@ -9,9 +9,7 @@ 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 @@ public static function providerPROPER(): array 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 @@ public static function providerLocaleLOWER(): array ]; } - /** - * @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 68a6f501e8..8478bb69bc 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReplaceTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerREPLACE(): array 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 8cbed14d3d..3a04a346f9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ReptTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerREPT(): array 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 1ecc051fc6..007ad28c25 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/RightTest.php @@ -11,11 +11,10 @@ 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 @@ public static function providerRIGHT(): array 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 @@ public static function providerLocaleRIGHT(): array ]; } - /** - * @dataProvider providerCalculationTypeRIGHTTrue - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTTrue')] public function testCalculationTypeTrue(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -107,9 +102,7 @@ public static function providerCalculationTypeRIGHTTrue(): array ]; } - /** - * @dataProvider providerCalculationTypeRIGHTFalse - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTFalse')] public function testCalculationTypeFalse(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -143,9 +136,7 @@ public static function providerCalculationTypeRIGHTFalse(): array ]; } - /** - * @dataProvider providerCalculationTypeRIGHTNull - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCalculationTypeRIGHTNull')] public function testCalculationTypeNull(string $type, string $resultB1, string $resultB2): void { Functions::setCompatibilityMode($type); @@ -178,9 +169,7 @@ public static function providerCalculationTypeRIGHTNull(): array ]; } - /** - * @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 5c441b7dd4..656762cb36 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SearchTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSEARCH(): array 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 9273302527..51bce11af2 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/SubstituteTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerSUBSTITUTE(): array 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 6f2bf123a2..46886d5bcf 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerT(): array 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 9f50af3ef2..ea3c38f8ec 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextAfterTest.php @@ -6,9 +6,7 @@ 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 05f0715ee0..d49457317d 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextBeforeTest.php @@ -6,9 +6,7 @@ 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 e9a231a057..6a23a1550f 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextJoinTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTEXTJOIN(): array 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 91f90fad84..9ac0c94659 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextSplitTest.php @@ -26,9 +26,7 @@ private function setDelimiterValues(Worksheet $worksheet, string $column, mixed } } - /** - * @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 eedd8b93b4..111d8cd9b9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TextTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTEXT(): array 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 30929afd9d..32c10329b4 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/TrimTest.php @@ -8,9 +8,7 @@ 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 @@ public static function providerTRIM(): array 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 7522373da3..9d6b2210e7 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/UpperTest.php @@ -9,9 +9,7 @@ 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 @@ public static function providerUPPER(): array 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 @@ public static function providerLocaleLOWER(): array ]; } - /** - * @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 2df5db47bd..124df52785 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueTest.php @@ -17,9 +17,7 @@ protected function tearDown(): void 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 @@ public static function providerVALUE(): array 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 37c33701e7..337fd03554 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/TextData/ValueToTextTest.php @@ -9,9 +9,7 @@ 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 8ab1337f18..21a3becd2a 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/UrlEncodeTest.php @@ -9,9 +9,7 @@ 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 48c528c6ac..812ad8a055 100644 --- a/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Web/WebServiceTest.php @@ -26,9 +26,7 @@ protected function tearDown(): void 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 71f400dc2d..f1795b2383 100644 --- a/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php @@ -71,9 +71,7 @@ public function testDUMMY(): void 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 093922d13c..0175e7b786 100644 --- a/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/InternalFunctionsTest.php @@ -10,9 +10,7 @@ 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 @@ public static function anchorArrayDataProvider(): array ]; } - /** - * @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 efaefc9a04..2c8849ece9 100644 --- a/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/MergedCellTest.php @@ -12,9 +12,7 @@ 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 @@ public static function providerWorksheetFormulaeColumns(): array ]; } - /** - * @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 e57d0cd041..c9f994aa02 100644 --- a/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/MissingArgumentsTest.php @@ -10,9 +10,7 @@ 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 0a8d2105d9..4e06f9ca03 100644 --- a/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/ParseFormulaTest.php @@ -12,9 +12,7 @@ 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 657d79fbb5..3054a3d40c 100644 --- a/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/RefErrorTest.php @@ -9,9 +9,7 @@ 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 e34f8c87ed..1a1cfa88f3 100644 --- a/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/RowColumnReferenceTest.php @@ -35,9 +35,7 @@ protected function setUp(): void $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 0c917a658c..8327e03b09 100644 --- a/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/StructuredReferenceFormulaTest.php @@ -11,9 +11,7 @@ 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 a3b8460230..e1ab28f290 100644 --- a/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php +++ b/tests/PhpSpreadsheetTests/Calculation/TranslationTest.php @@ -33,9 +33,7 @@ protected function tearDown(): void 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 7b41d8bd2d..b823286798 100644 --- a/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php +++ b/tests/PhpSpreadsheetTests/Cell/AddressHelperTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerR1C1ConversionToA1Absolute(): array 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 @@ public static function providerR1C1ConversionToA1Relative(): array 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 @@ public static function providerR1C1ConversionToA1Exception(): array 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 @@ public static function providerA1ConversionToR1C1Absolute(): array 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 @@ public static function providerA1ConversionToR1C1Relative(): array 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 @@ public static function providerA1ConversionToR1C1Exception(): array 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 @@ public static function providerConvertFormulaToA1FromSpreadsheetXml(): array 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 @@ public static function providerConvertFormulaToA1FromR1C1Absolute(): array 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 d8de97a332..bf34a40cad 100644 --- a/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php @@ -84,9 +84,7 @@ public function testBooleanLocale(): void $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 @@ public static function currencyProvider(): array ]; } - /** - * @dataProvider fractionProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('fractionProvider')] public function testFractions(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -160,9 +156,7 @@ public static function fractionProvider(): array ]; } - /** - * @dataProvider percentageProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('percentageProvider')] public function testPercentages(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -187,9 +181,7 @@ public static function percentageProvider(): array ]; } - /** - * @dataProvider timeProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('timeProvider')] public function testTimes(mixed $value, mixed $valueBinded): void { $spreadsheet = new Spreadsheet(); @@ -212,9 +204,7 @@ public static function timeProvider(): array ]; } - /** - * @dataProvider stringProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('stringProvider')] public function testStringWrapping(string $value): void { $spreadsheet = new Spreadsheet(); @@ -234,9 +224,7 @@ public static function stringProvider(): array ]; } - /** - * @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 3cb204b3f2..e0e030e8eb 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellAddressTest.php @@ -11,9 +11,7 @@ class CellAddressTest extends TestCase { - /** - * @dataProvider providerCreateFromCellAddress - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromCellAddress')] public function testCreateFromCellAddress( string $cellAddress, string $expectedColumnName, @@ -38,9 +36,7 @@ public static function providerCreateFromCellAddress(): array ]; } - /** - * @dataProvider providerCreateFromCellAddressException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromCellAddressException')] public function testCreateFromCellAddressException(string $cellAddress): void { $this->expectException(Exception::class); @@ -63,9 +59,7 @@ public static function providerCreateFromCellAddressException(): array ]; } - /** - * @dataProvider providerCreateFromColumnAndRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnAndRow')] public function testCreateFromColumnAndRow( int $columnId, int $rowId, @@ -81,9 +75,7 @@ public function testCreateFromColumnAndRow( 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 @@ public static function providerCreateFromColumnAndRow(): array ]; } - /** - * @dataProvider providerCreateFromColumnRowArray - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnRowArray')] public function testCreateFromColumnRowArray( int $columnId, int $rowId, @@ -129,9 +119,7 @@ public static function providerCreateFromColumnRowArray(): array ]; } - /** - * @dataProvider providerCreateFromColumnRowException - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCreateFromColumnRowException')] public function testCreateFromColumnRowArrayException(mixed $columnId, mixed $rowId): void { $this->expectException(Exception::class); @@ -149,9 +137,7 @@ public static function providerCreateFromColumnRowException(): array ]; } - /** - * @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 faec5dbd91..db8bea661a 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellDetachTest.php @@ -21,9 +21,7 @@ protected function tearDown(): void } } - /** - * @dataProvider providerMethodName - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMethodName')] public function testDetach(string $method): void { $this->expectException(SpreadsheetException::class); @@ -51,9 +49,7 @@ public static function providerMethodName(): array ]; } - /** - * @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 0a4308b614..f3539c6075 100644 --- a/tests/PhpSpreadsheetTests/Cell/CellTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CellTest.php @@ -76,9 +76,7 @@ public function testSetValueBinderOverride2(): void $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 @@ public function testInvalidIsoDateSetValueExplicit(): void $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 @@ public function testAppliedStyleWithRange(): void $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 d155928308..35a7fbb823 100644 --- a/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php +++ b/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php @@ -11,9 +11,7 @@ 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 @@ public function testColumnIndexFromStringTooShort(): void 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 @@ public static function providerColumnIndex(): array 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 @@ public static function providerCoordinates(): array 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 @@ public function testCoordinateFromStringWithInvalidAddress(): void 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 @@ public function testAbsoluteCoordinateFromStringWithRangeAddress(): void 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 @@ public function testAbsoluteReferenceFromStringWithRangeAddress(): void 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 @@ public static function providerSplitRange(): array 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 @@ public function testBuildRangeInvalid2(): void 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 @@ public static function providerRangeBoundaries(): array 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 @@ public static function providerRangeDimension(): array 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 @@ public static function providerGetRangeBoundaries(): array 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 @@ public static function providerCoordinateIsInsideRange(): array 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 @@ public static function providerCoordinateIsInsideRangeException(): array 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 @@ public static function providerExtractAllCellReferencesInRange(): array 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 @@ public static function providerInvalidRange(): array 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 @@ public static function providerMergeRangesInCollection(): array 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 8cb5d8876a..cbb6eaf815 100644 --- a/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php @@ -15,9 +15,7 @@ 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 @@ public function testNonStringableBindValue(): void $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 71006fff8a..ecd3b4a535 100644 --- a/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php +++ b/tests/PhpSpreadsheetTests/Cell/StringValueBinderTest.php @@ -28,9 +28,7 @@ protected function tearDown(): void Cell::setValueBinder($this->valueBinder); } - /** - * @dataProvider providerDataValuesDefault - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesDefault')] public function testStringValueBinderDefaultBehaviour( mixed $value, mixed $expectedValue, @@ -98,9 +96,7 @@ public function testNonStringableBindValue(): void $spreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerDataValuesSuppressNullConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressNullConversion')] public function testStringValueBinderSuppressNullConversion( mixed $value, mixed $expectedValue, @@ -127,9 +123,7 @@ public static function providerDataValuesSuppressNullConversion(): array ]; } - /** - * @dataProvider providerDataValuesSuppressBooleanConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressBooleanConversion')] public function testStringValueBinderSuppressBooleanConversion( mixed $value, mixed $expectedValue, @@ -157,9 +151,7 @@ public static function providerDataValuesSuppressBooleanConversion(): array ]; } - /** - * @dataProvider providerDataValuesSuppressNumericConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressNumericConversion')] public function testStringValueBinderSuppressNumericConversion( mixed $value, mixed $expectedValue, @@ -194,9 +186,7 @@ public static function providerDataValuesSuppressNumericConversion(): array ]; } - /** - * @dataProvider providerDataValuesSuppressFormulaConversion - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerDataValuesSuppressFormulaConversion')] public function testStringValueBinderSuppressFormulaConversion( mixed $value, mixed $expectedValue, @@ -227,9 +217,7 @@ public static function providerDataValuesSuppressFormulaConversion(): array ]; } - /** - * @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 572ffbff06..d555de4237 100644 --- a/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php +++ b/tests/PhpSpreadsheetTests/CellReferenceHelperTest.php @@ -10,9 +10,7 @@ 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 @@ public static function cellReferenceHelperInsertColumnsProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperDeleteColumnsProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperInsertRowsProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperDeleteRowsProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperInsertColumnsAbsoluteProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperDeleteColumnsAbsoluteProvider(): array ]; } - /** - * @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 @@ public static function cellReferenceHelperInsertRowsAbsoluteProvider(): array ]; } - /** - * @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 0937345cd0..cbc235e76d 100644 --- a/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php +++ b/tests/PhpSpreadsheetTests/Chart/Charts32CatAxValAxTest.php @@ -34,9 +34,7 @@ protected function tearDown(): void } } - /** - * @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 d6b6564a0a..282c9588b2 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 @@ public function testAreaPercentageNoCat(): void 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 21bb903fa6..ce9d6c5c5c 100644 --- a/tests/PhpSpreadsheetTests/Chart/Issue562Test.php +++ b/tests/PhpSpreadsheetTests/Chart/Issue562Test.php @@ -29,9 +29,7 @@ public function writeCharts(XlsxWriter $writer): void $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 131163def6..4117c4745e 100644 --- a/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php +++ b/tests/PhpSpreadsheetTests/DefinedNameFormulaTest.php @@ -11,9 +11,7 @@ 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 feb98c8af9..9947b2918c 100644 --- a/tests/PhpSpreadsheetTests/Document/EpochTest.php +++ b/tests/PhpSpreadsheetTests/Document/EpochTest.php @@ -25,9 +25,7 @@ public static function providerFormats(): array ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testSetCreated(string $format, string $timestamp): void { $spreadsheet = new Spreadsheet(); @@ -77,9 +75,7 @@ public static function providerFormats2(): array ]; } - /** - * @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 7d491d25e6..1b32aeaec9 100644 --- a/tests/PhpSpreadsheetTests/Document/PropertiesTest.php +++ b/tests/PhpSpreadsheetTests/Document/PropertiesTest.php @@ -44,9 +44,7 @@ public function testSetCreator(): void 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 @@ public function testSetModifier(): void 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 @@ public function testSetManager(): void 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 015e32ba29..75cf5106f9 100644 --- a/tests/PhpSpreadsheetTests/Document/SecurityTest.php +++ b/tests/PhpSpreadsheetTests/Document/SecurityTest.php @@ -54,9 +54,7 @@ public static function providerLocks(): array ]; } - /** - * @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 a14e2c5acc..1ce621f749 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 a6e1b33ffb..c6a2d43d21 100644 --- a/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ActiveSheetTest.php @@ -18,9 +18,8 @@ public static function providerFormats(): array /** * 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 fa6e958f25..0f7e5f7e4a 100644 --- a/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php @@ -16,9 +16,7 @@ public static function providerFormats(): array ]; } - /** - * @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 36ec29b974..c92f1c4e1d 100644 --- a/tests/PhpSpreadsheetTests/Functional/CommentsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/CommentsTest.php @@ -21,9 +21,8 @@ public static function providerFormats(): array /** * 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 b886c9e061..7c091c2f7e 100644 --- a/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php @@ -18,9 +18,7 @@ public static function providerFormats(): array ]; } - /** - * @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 c1b7671922..bf58132af9 100644 --- a/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php +++ b/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php @@ -19,9 +19,7 @@ public static function providerFormats(): array ]; } - /** - * @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 28b05b2d73..88dd4606b1 100644 --- a/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php +++ b/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php @@ -19,9 +19,7 @@ public static function providerFormats(): array ]; } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePane(string $format): void { $cellSplit = 'B4'; @@ -43,9 +41,7 @@ public function testFreezePane(string $format): void $reloadedSpreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePaneWithInvalidSelectedCells(string $format): void { $cellSplit = 'A7'; @@ -71,9 +67,7 @@ public function testFreezePaneWithInvalidSelectedCells(string $format): void $reloadedSpreadsheet->disconnectWorksheets(); } - /** - * @dataProvider providerFormats - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] public function testFreezePaneUserSelectedCell(string $format): void { $spreadsheet = new Spreadsheet(); @@ -115,9 +109,7 @@ public function testFreezePaneUserSelectedCell(string $format): void $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 c99826bfd6..b6e8b10bf9 100644 --- a/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php @@ -18,9 +18,7 @@ public static function providerFormats(): array ]; } - /** - * @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 535f927feb..2918341eba 100644 --- a/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php +++ b/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php @@ -17,9 +17,7 @@ public static function providerFormats(): array ]; } - /** - * @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 be00dd3927..b44c43f318 100644 --- a/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ReadBlankCellsTest.php @@ -50,9 +50,8 @@ public function testLoadDontReadEmptyCells(): void /** * 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 @@ public function testLoadAndSaveReadEmpty(string $format, bool $expected): void /** * 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 7b352dde27..9b4920d846 100644 --- a/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php +++ b/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php @@ -33,9 +33,8 @@ public static function providerCellsValues(): array /** * 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 @@ public function testXlsxLoadWithoutReadFilter(string $format, array $arrayData): /** * 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 89a7327e58..90f806b02f 100644 --- a/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Functional/SelectedCellsTest.php @@ -17,9 +17,8 @@ public static function providerFormats(): array /** * 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 c67c1ab22c..4a43f77c5f 100644 --- a/tests/PhpSpreadsheetTests/Functional/StreamTest.php +++ b/tests/PhpSpreadsheetTests/Functional/StreamTest.php @@ -11,9 +11,8 @@ /** * 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 @@ public static function providerFormats(): array 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 e90cf42677..20aecf94bb 100644 --- a/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php +++ b/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php @@ -31,9 +31,8 @@ public static function providerFormulae(): array /** * 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 @@ public static function customizeWriter(WriterXlsx $writer): void /** * 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 5c21443a95..fee6dbbe8f 100644 --- a/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php +++ b/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php @@ -21,9 +21,8 @@ public static function providerFormats(): array * 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 e6a823c763..46ea88a162 100644 --- a/tests/PhpSpreadsheetTests/Helper/DimensionTest.php +++ b/tests/PhpSpreadsheetTests/Helper/DimensionTest.php @@ -10,18 +10,14 @@ 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 26f22847a1..6779fb9b5d 100644 --- a/tests/PhpSpreadsheetTests/Helper/HtmlTest.php +++ b/tests/PhpSpreadsheetTests/Helper/HtmlTest.php @@ -10,9 +10,7 @@ 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 2c54dd68fc..52fe5c0da7 100644 --- a/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php +++ b/tests/PhpSpreadsheetTests/Helper/SampleCoverageTest.php @@ -8,9 +8,7 @@ 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 f20c2163c7..e8c79bed41 100644 --- a/tests/PhpSpreadsheetTests/Helper/SampleTest.php +++ b/tests/PhpSpreadsheetTests/Helper/SampleTest.php @@ -9,13 +9,9 @@ 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 90628fbeeb..86244e7de5 100644 --- a/tests/PhpSpreadsheetTests/IOFactoryTest.php +++ b/tests/PhpSpreadsheetTests/IOFactoryTest.php @@ -13,9 +13,7 @@ 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 @@ public function testRegisterWriter(): void 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 @@ public function testRegisterReader(): void 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 9061d6e1e0..04b3e0031c 100644 --- a/tests/PhpSpreadsheetTests/NamedRange2Test.php +++ b/tests/PhpSpreadsheetTests/NamedRange2Test.php @@ -90,9 +90,7 @@ public function testNamedRangeSetStyle(): void 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 7ce3c5f4ff..3e4ce79abb 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvEncodingTest.php @@ -9,9 +9,7 @@ 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 @@ public function testEncodings(string $filename, string $encoding): void 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 @@ public static function providerEncodings(): array ]; } - /** - * @dataProvider providerGuessEncoding - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerGuessEncoding')] public function testGuessEncoding(string $filename): void { $reader = new Csv(); @@ -86,9 +80,7 @@ public function testSurrogate(): void 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 191aa9d84b..05f69fb4bc 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvIssue2232Test.php @@ -29,9 +29,7 @@ protected function tearDown(): void 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 @@ public static function providerIssue2232(): array ]; } - /** - * @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 28ff9f30fe..9ff77268a7 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvLineEndingTest.php @@ -20,9 +20,7 @@ protected function tearDown(): void } } - /** - * @dataProvider providerEndings - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEndings')] public function testEndings(string $ending): void { if ($ending === "\r" && PHP_VERSION_ID >= 90000) { @@ -40,9 +38,7 @@ public function testEndings(string $ending): void $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 f6bd4e9cb9..513576b19b 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatLocaleTest.php @@ -44,11 +44,8 @@ protected function tearDown(): void } } - /** - * @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 @@ public static function providerNumberFormatNoConversionTest(): array ]; } - /** - * @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 5b3e7a0626..d80cfc44ea 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvNumberFormatTest.php @@ -20,9 +20,7 @@ protected function setUp(): void $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 @@ public static function providerNumberFormatNoConversionTest(): array ]; } - /** - * @dataProvider providerNumberValueConversionTest - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNumberValueConversionTest')] public function testNumberValueConversion(mixed $expectedValue, string $cellAddress): void { $this->csvReader->castFormattedNumberToNumeric(true); @@ -104,9 +100,7 @@ public static function providerNumberValueConversionTest(): array ]; } - /** - * @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 e3da06bcc4..a142cb7340 100644 --- a/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Csv/CsvTest.php @@ -10,9 +10,7 @@ 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 @@ public static function providerDelimiterDetection(): array ]; } - /** - * @dataProvider providerCanLoad - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCanLoad')] public function testCanLoad(bool $expected, string $filename): void { $reader = new Csv(); @@ -229,9 +225,7 @@ public function testReadNonexistentFileName(): void $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 6ea143565f..bf45461c8f 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormula2Test.php @@ -9,9 +9,7 @@ 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 f0e9599cc7..2943ebead2 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/ArrayFormulaTest.php @@ -9,9 +9,7 @@ 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 e8d332895d..dfb046f512 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericStylesTest.php @@ -14,9 +14,7 @@ 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 @@ public function testBorderStyleCoverage(): void } } - /** - * @dataProvider providerfillType - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerfillType')] public function testFillType(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -68,9 +64,7 @@ public function testFillTypeCoverage(): void } } - /** - * @dataProvider providerHorizontal - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerHorizontal')] public function testHorizontal(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -95,9 +89,7 @@ public function testHorizontalCoverage(): void } } - /** - * @dataProvider providerunderline - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerunderline')] public function testUnderline(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -122,9 +114,7 @@ public function testUnderlineCoverage(): void } } - /** - * @dataProvider providerVertical - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerVertical')] public function testVertical(string $style, string $expectedResult): void { $styles = Gnumeric::gnumericMappings(); @@ -149,9 +139,7 @@ public function testVerticalCoverage(): void } } - /** - * @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 16a4708109..80002f3c72 100644 --- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/PageSetupTest.php @@ -20,9 +20,7 @@ public static function fileProvider(): array ]; } - /** - * @dataProvider fileProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('fileProvider')] public function testPageSetup(string $filename): void { $reader = new Gnumeric(); @@ -51,9 +49,7 @@ public function testPageSetup(string $filename): void $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 a525b321a5..b516de04cd 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlBorderTest.php @@ -78,9 +78,7 @@ public function testCanApplyInlineBordersStyles(): void 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 1daacaf62b..f4c0193f21 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlCharsetTest.php @@ -10,9 +10,7 @@ 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 bb29eb6c55..5df5c249b1 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlLibxmlTest.php @@ -14,9 +14,8 @@ * 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 175f0e8bb5..d691a40ced 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlPhpunit10Test.php @@ -11,9 +11,8 @@ * 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 afb01cbfef..8d23411443 100644 --- a/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php @@ -64,9 +64,7 @@ public static function providerCanReadVerySmallFile(): array ]; } - /** - * @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 726b42ba3f..9accf01ae3 100644 --- a/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Ods/ArrayFormulaTest.php @@ -9,9 +9,7 @@ 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 9299161f0e..fa099ef76c 100644 --- a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php @@ -13,9 +13,7 @@ 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 @@ public static function providerValidXML(): array return $tests; } - /** - * @dataProvider providerInvalidXML - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerInvalidXML')] public function testInvalidXML(string $filename): void { $this->expectException(ReaderException::class); @@ -94,9 +90,7 @@ public function testGetSecurityScannerForNonXmlBasedReader2(): void $fileReader->getSecurityScannerOrThrow(); } - /** - * @dataProvider providerValidXMLForCallback - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerValidXMLForCallback')] public function testSecurityScanWithCallback(string $filename, string $expectedResult): void { $fileReader = new Xlsx(); @@ -136,9 +130,7 @@ public function testEncodingAllowsMixedCase(): void 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 @@ public static function providerInvalidXlsx(): array ]; } - /** - * @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 ee571b9568..45787c75fe 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ColorMapTest.php @@ -11,9 +11,7 @@ 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 684c3d2630..ee39c7ce2d 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingBasicTest.php @@ -11,9 +11,7 @@ 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 abdfb90884..eb7a679161 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ConditionalFormattingExpressionTest.php @@ -10,9 +10,7 @@ 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 80619af997..3d30e8ab63 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/DataValidationTest.php @@ -10,9 +10,7 @@ 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 c853d50208..170a38a1ec 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/ErrorCodeMapTest.php @@ -9,9 +9,7 @@ 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 f064ec9f3d..653a76cd7d 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/AutoFilterTest.php @@ -30,9 +30,7 @@ public static function loadDataProvider(): array ]; } - /** - * @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 3de53c7c7e..4935511cbb 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DataValidationTest.php @@ -25,9 +25,8 @@ public function testLoadXlsxDataValidation(): void /** * 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 e90d599a10..c2d8b31529 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DirectorySeparatorTest.php @@ -10,9 +10,7 @@ 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 @@ public function testDirectorySeparatorIdentify(string $fileName): void 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 @@ public function testDirectorySeparatorWorksheetNames(string $fileName): void 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 @@ public function testDirectorySeparatorWorksheetInfo(string $fileName): void 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 5387ea738c..1d0003f0c1 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/GridlinesTest.php @@ -9,9 +9,7 @@ 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 344f0666a2..3b5bbb193b 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/XlsxTest.php @@ -234,9 +234,8 @@ public function testLoadSaveWithEmptyDrawings(): void /** * 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 73c3d1d53a..1aa95cfd12 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xml/XmlStyleCoverageTest.php @@ -11,9 +11,7 @@ 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 @@ public function testBorderStyleCoverage(): void } } - /** - * @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 a308b068d6..63ec368dfa 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xml/XmlTest.php @@ -11,9 +11,7 @@ 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 17b4e3cd67..7cf3d08e8d 100644 --- a/tests/PhpSpreadsheetTests/RefRangeTest.php +++ b/tests/PhpSpreadsheetTests/RefRangeTest.php @@ -10,9 +10,7 @@ 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 c0dc756115..920acf8611 100644 --- a/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php +++ b/tests/PhpSpreadsheetTests/ReferenceHelper4Test.php @@ -9,9 +9,7 @@ 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 a28477ca17..a768da97da 100644 --- a/tests/PhpSpreadsheetTests/ReferenceHelperTest.php +++ b/tests/PhpSpreadsheetTests/ReferenceHelperTest.php @@ -102,9 +102,7 @@ public function testCellReverseSort(): void } } - /** - * @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 @@ public static function providerFormulaUpdates(): array 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 e7c021835e..448bff3e98 100644 --- a/tests/PhpSpreadsheetTests/Shared/CodePageTest.php +++ b/tests/PhpSpreadsheetTests/Shared/CodePageTest.php @@ -11,10 +11,9 @@ 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 f5e51728fc..c109e02790 100644 --- a/tests/PhpSpreadsheetTests/Shared/Date2Test.php +++ b/tests/PhpSpreadsheetTests/Shared/Date2Test.php @@ -37,9 +37,7 @@ public function testInvalidType(): void 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 @@ public static function providerTimeOnly(): array ]; } - /** - * @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 @@ public static function providerDateAndTime(): array ]; } - /** - * @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 @@ public function testDefault(int|float $expectedResult, int|float|string $value, 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 c770ac260e..e3dbedb6b2 100644 --- a/tests/PhpSpreadsheetTests/Shared/DateTest.php +++ b/tests/PhpSpreadsheetTests/Shared/DateTest.php @@ -51,9 +51,7 @@ public function testSetExcelCalendarWithInvalidValue(): void 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 @@ public static function providerDateTimeExcelToTimestamp1900(): array 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 @@ public static function providerDateTimeTimestampToExcel1900(): array 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 @@ public static function providerDateTimeDateTimeToExcel(): array } /** - * @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 @@ public static function providerDateTimeFormattedPHPToExcel1900(): array 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 @@ public static function providerDateTimeExcelToTimestamp1904(): array 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 @@ public static function providerDateTimeTimestampToExcel1904(): array 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 @@ public static function providerIsDateTimeFormatCode(): array 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 972576e605..7eb41e643e 100644 --- a/tests/PhpSpreadsheetTests/Shared/DrawingTest.php +++ b/tests/PhpSpreadsheetTests/Shared/DrawingTest.php @@ -10,9 +10,7 @@ class DrawingTest extends TestCase { - /** - * @dataProvider providerPixelsToCellDimension - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerPixelsToCellDimension')] public function testPixelsToCellDimension( float $expectedResult, int $pixelSize, @@ -27,9 +25,7 @@ public function testPixelsToCellDimension( 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 c5a3aa0d88..fcae3303ba 100644 --- a/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php +++ b/tests/PhpSpreadsheetTests/Shared/ExactFontTest.php @@ -82,7 +82,7 @@ protected function tearDown(): void $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 2bfa429ef9..e35ae3e3ba 100644 --- a/tests/PhpSpreadsheetTests/Shared/Font2Test.php +++ b/tests/PhpSpreadsheetTests/Shared/Font2Test.php @@ -10,9 +10,7 @@ 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 5d45d720b2..d953245ece 100644 --- a/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php +++ b/tests/PhpSpreadsheetTests/Shared/FontFileNameTest.php @@ -39,9 +39,7 @@ protected function tearDown(): void 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 @@ public static function providerDefault(): array ]; } - /** - * @dataProvider providerMac - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerMac')] public function testMacFilenames(string $expected, array $fontArray): void { if ($expected === 'exception') { @@ -123,9 +119,7 @@ public static function providerMac(): array ]; } - /** - * @dataProvider providerOverride - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerOverride')] public function testOverrideFilenames(string $expected, array $fontArray): void { Font::setTrueTypeFontPath(self::DEFAULT_DIRECTORY); @@ -153,9 +147,7 @@ public static function providerOverride(): array ]; } - /** - * @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 @@ public static function providerOverrideAbsolute(): array ]; } - /** - * @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 e9b1a2ed89..c59cc33159 100644 --- a/tests/PhpSpreadsheetTests/Shared/FontTest.php +++ b/tests/PhpSpreadsheetTests/Shared/FontTest.php @@ -41,9 +41,7 @@ public function testSetAutoSizeMethodWithInvalidValue(): void 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 @@ public static function providerFontSizeToPixels(): array 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 @@ public static function providerInchSizeToPixels(): array 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 @@ public function testVerdanaRotation(): void 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 7b97a979d2..22505530d0 100644 --- a/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php +++ b/tests/PhpSpreadsheetTests/Shared/OLEPhpunit10Test.php @@ -11,9 +11,8 @@ * 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 78a89386c1..e22a8e86b2 100644 --- a/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php +++ b/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php @@ -10,9 +10,7 @@ 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 50b5b1f93c..965d003000 100644 --- a/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php +++ b/tests/PhpSpreadsheetTests/Shared/PasswordReloadTest.php @@ -10,9 +10,7 @@ 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 e6f26bf6e2..47326f9295 100644 --- a/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php +++ b/tests/PhpSpreadsheetTests/Shared/Trend/ExponentialBestFitTest.php @@ -10,11 +10,10 @@ 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 e9de8a2e5c..f23b9bfca5 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 a35ab101f3..5fbeb4fa4e 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -52,9 +52,7 @@ public static function dataProviderForSheetNames(): array 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 31d980ebd3..e2add4c2a1 100644 --- a/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php +++ b/tests/PhpSpreadsheetTests/Style/ColorIndexTest.php @@ -9,9 +9,7 @@ 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 91f03e3fee..0b8093d68c 100644 --- a/tests/PhpSpreadsheetTests/Style/ColorTest.php +++ b/tests/PhpSpreadsheetTests/Style/ColorTest.php @@ -76,9 +76,7 @@ public function testRGBFromArray(): void 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 @@ public static function providerColorGetRed(): array 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 @@ public static function providerColorGetGreen(): array 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 @@ public static function providerColorGetBlue(): array 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 334736e87d..00c026169b 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/CellMatcherTest.php @@ -42,9 +42,7 @@ private function confirmString(Worksheet $worksheet, Cell $cell, string $cellAdd 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 @@ public function testUnknownSheet(): void $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 @@ public static function rangeCellIsComparisonDataProvider(): array ]; } - /** - * @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 @@ public static function cellIsExpressionMultipleDataProvider(): array ]; } - /** - * @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 @@ public static function cellIsExpressionDataProvider(): array ]; } - /** - * @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 @@ public static function textExpressionsDataProvider(): array ]; } - /** - * @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 @@ public static function blanksDataProvider(): array ]; } - /** - * @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 @@ public static function errorDataProvider(): array ]; } - /** - * @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 @@ public static function dateOccurringDataProvider(): array ]; } - /** - * @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 @@ public static function duplicatesDataProvider(): array ]; } - /** - * @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 d16ca99ea5..2dc0a2463c 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/CellValueWizardTest.php @@ -24,9 +24,7 @@ protected function setUp(): void $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 @@ public static function basicCellValueDataProvider(): array ]; } - /** - * @dataProvider relativeCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('relativeCellValueDataProvider')] public function testRelativeCellValueWizard(mixed $operand, mixed $expectedCondition): void { $ruleType = Wizard::CELL_VALUE; @@ -94,9 +90,7 @@ public static function relativeCellValueDataProvider(): array ]; } - /** - * @dataProvider formulaCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('formulaCellValueDataProvider')] public function testCellValueWizardWithFormula(mixed $operand, mixed $expectedCondition): void { $ruleType = Wizard::CELL_VALUE; @@ -129,9 +123,7 @@ public static function formulaCellValueDataProvider(): array ]; } - /** - * @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 @@ public static function rangeCellValueDataProvider(): array ]; } - /** - * @dataProvider rangeRelativeCellValueDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('rangeRelativeCellValueDataProvider')] public function testRelativeRangeCellValueWizard(array $operands, array $expectedConditions): void { $ruleType = Wizard::CELL_VALUE; @@ -193,9 +183,7 @@ public static function rangeRelativeCellValueDataProvider(): array ]; } - /** - * @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 57778fc8d3..cb2175bc60 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/DateValueWizardTest.php @@ -24,9 +24,7 @@ protected function setUp(): void $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 770af66af1..d012814235 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/ExpressionWizardTest.php @@ -24,9 +24,7 @@ protected function setUp(): void $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 @@ public function testExpressionWizard(string $expression, string $expectedExpress 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 5002bcaa1a..46f5008607 100644 --- a/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php +++ b/tests/PhpSpreadsheetTests/Style/ConditionalFormatting/Wizard/WizardFactoryTest.php @@ -21,10 +21,9 @@ protected function setUp(): void } /** - * @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 @@ public static function basicWizardFactoryProvider(): array ]; } - /** - * @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 60c1f88cc9..819ddca2a3 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/AccountingTest.php @@ -15,9 +15,7 @@ class AccountingTest extends TestCase { - /** - * @dataProvider providerAccounting - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAccounting')] public function testAccounting( string $expectedResultPositive, string $expectedResultNegative, @@ -47,9 +45,7 @@ public static function providerAccounting(): array ]; } - /** - * @dataProvider providerAccountingLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAccountingLocale')] public function testAccountingLocale( string $expectedResult, string $currencyCode, @@ -109,9 +105,7 @@ public function testIcu721(): void } } - /** - * @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 d0bc08ef09..a8b59e45f6 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/CurrencyTest.php @@ -15,9 +15,7 @@ class CurrencyTest extends TestCase { - /** - * @dataProvider providerCurrency - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrency')] public function testCurrency( string $expectedResultPositive, string $expectedResultNegative, @@ -48,9 +46,7 @@ public static function providerCurrency(): array ]; } - /** - * @dataProvider providerCurrencyLocale - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCurrencyLocale')] public function testCurrencyLocale( string $expectedResult, string $currencyCode, @@ -110,9 +106,7 @@ public function testIcu721(): void } } - /** - * @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 cc19a4129e..fd9af38f51 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTest.php @@ -10,11 +10,10 @@ 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 17fedffa3b..18dc3205c1 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DateTimeTest.php @@ -12,11 +12,10 @@ 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 0804deee02..b4a50c2455 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/DurationTest.php @@ -10,11 +10,10 @@ 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 950496ed45..8216f81277 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/NumberTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerNumber(): array ]; } - /** - * @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 23f45b9c95..8a7c72ed1b 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/PercentageTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerPercentage(): array ]; } - /** - * @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 9120284c61..84a78d54b2 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/ScientificTest.php @@ -11,9 +11,7 @@ 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 @@ public static function providerScientific(): array ]; } - /** - * @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 de86ffe96d..dcd3c8da53 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormat/Wizard/TimeTest.php @@ -10,11 +10,10 @@ 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 0c2b4748a1..f0bcbbae93 100644 --- a/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php @@ -25,10 +25,9 @@ protected function tearDown(): void } /** - * @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 @@ public static function providerNumberFormat(): array } /** - * @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 @@ public static function providerNumberFormatFractions(): array } /** - * @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 @@ public function testCurrencyCode(): void 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 55c80dfc60..4246707fbb 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterAverageTop10Test.php @@ -36,9 +36,7 @@ public static function providerAverage(): array ]; } - /** - * @dataProvider providerAverage - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerAverage')] public function testAboveAverage(array $expectedVisible, string $rule): void { $sheet = $this->initSheet(); @@ -68,9 +66,7 @@ public static function providerTop10(): array ]; } - /** - * @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 @@ public static function providerTop10Ties(): array ]; } - /** - * @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 e36135a6cb..3539df389a 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomNumericTest.php @@ -43,9 +43,7 @@ public static function providerCustomRule(): array ]; } - /** - * @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 dcaba9ef3c..42aa6b2e2a 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterCustomTextTest.php @@ -48,9 +48,7 @@ public static function providerCustomText(): array ]; } - /** - * @dataProvider providerCustomText - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerCustomText')] public function testCustomTest(array $expectedVisible, string $pattern): void { $sheet = $this->initSheet(); @@ -191,9 +189,7 @@ public static function providerCustomRule(): array ]; } - /** - * @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 742e6cbc3b..3cbbd2da1d 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterMonthTest.php @@ -52,9 +52,7 @@ private function setCells(Worksheet $sheet, int $startMonth): void $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 20fd146b22..afc2c13efd 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterQuarterTest.php @@ -36,9 +36,7 @@ private function setCells(Worksheet $sheet): void $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 dfe8b57400..686fa6d3c7 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterTodayTest.php @@ -19,9 +19,7 @@ public static function providerYesterdayTodayTomorrow(): array ]; } - /** - * @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 cbd5379e94..9e40f20b29 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterWeekTest.php @@ -37,9 +37,7 @@ private function setCells(Worksheet $sheet): void $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 84316d2d5e..3928b69028 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/AutoFilterYearTest.php @@ -22,9 +22,7 @@ public static function providerYear(): array ]; } - /** - * @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 7f643e8edb..174eefb885 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/RuleCustomTest.php @@ -28,9 +28,7 @@ protected function initSheet(): Worksheet 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 894a8adf7a..9c889c69b3 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIterator2Test.php @@ -11,9 +11,7 @@ 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 @@ public static function providerExistingCell(): array ]; } - /** - * @dataProvider providerEmptyColumn - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEmptyColumn')] public function testEmptyColumn(?bool $existing, int $expectedResult): void { $spreadsheet = new Spreadsheet(); @@ -78,9 +74,7 @@ public static function providerEmptyColumn(): array ]; } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCreatedResult): void { $spreadsheet = new Spreadsheet(); @@ -93,9 +87,7 @@ public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCr 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 e65c003e84..a0fc303307 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnDimension2Test.php @@ -11,9 +11,7 @@ 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 b1e0f07a7b..cd4c1f7dc2 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorEmptyTest.php @@ -32,9 +32,7 @@ private static function getPopulatedSheet(Spreadsheet $spreadsheet): Worksheet return $sheet; } - /** - * @dataProvider emptyColumnBasic - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnBasic')] public function testIteratorEmptyColumn(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -62,9 +60,7 @@ public static function emptyColumnBasic(): array ]; } - /** - * @dataProvider emptyColumnNullAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnNullAsEmpty')] public function testIteratorEmptyColumnWithNull(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -92,9 +88,7 @@ public static function emptyColumnNullAsEmpty(): array ]; } - /** - * @dataProvider emptyColumnEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnEmptyStringAsEmpty')] public function testIteratorEmptyColumnWithEmptyString(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -122,9 +116,7 @@ public static function emptyColumnEmptyStringAsEmpty(): array ]; } - /** - * @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 44ce5bcb86..6d73dc32fe 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/ConditionalStyleTest.php @@ -54,9 +54,7 @@ protected function setUp(): void ); } - /** - * @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 @@ public function testCellHasConditionalStyles(string $cellReference, bool $expect 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 9b230a9c9b..5b5b3e035c 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 4147f86353..eff6e7e6e7 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/MergeBehaviourTest.php @@ -94,9 +94,7 @@ public function testMergeCellsHideBehaviourFormatted(): void $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 f6795fc99c..176b426bfe 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/PageMarginsTest.php @@ -9,54 +9,42 @@ 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 1f3e883e23..64f7da2645 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowCellIterator2Test.php @@ -11,9 +11,7 @@ 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 @@ public static function providerExistingCell(): array ]; } - /** - * @dataProvider providerEmptyRow - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerEmptyRow')] public function testEmptyRow(?bool $existing, int $expectedResult): void { $spreadsheet = new Spreadsheet(); @@ -78,9 +74,7 @@ public static function providerEmptyRow(): array ]; } - /** - * @dataProvider providerNullOrCreate - */ + #[\PHPUnit\Framework\Attributes\DataProvider('providerNullOrCreate')] public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCreatedResult): void { $spreadsheet = new Spreadsheet(); @@ -93,9 +87,7 @@ public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCr 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 8bce187936..049ae824e0 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowDimensionSaveTest.php @@ -10,9 +10,7 @@ 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 1d8a83caf9..86baa4ac77 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/RowIteratorEmptyTest.php @@ -32,9 +32,7 @@ private static function getPopulatedSheet(Spreadsheet $spreadsheet): Worksheet return $sheet; } - /** - * @dataProvider emptyRowBasic - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowBasic')] public function testIteratorEmptyRow(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -64,9 +62,7 @@ public static function emptyRowBasic(): array ]; } - /** - * @dataProvider emptyRowNullAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowNullAsEmpty')] public function testIteratorEmptyRowWithNull(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -94,9 +90,7 @@ public static function emptyRowNullAsEmpty(): array ]; } - /** - * @dataProvider emptyRowEmptyStringAsEmpty - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowEmptyStringAsEmpty')] public function testIteratorEmptyRowWithEmptyString(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -124,9 +118,7 @@ public static function emptyRowEmptyStringAsEmpty(): array ]; } - /** - * @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 24ea1051c1..075eb451a6 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/Table/TableTest.php @@ -27,9 +27,7 @@ public function testToString(): void 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 @@ public static function validTableNamesProvider(): array ]; } - /** - * @dataProvider invalidTableNamesProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('invalidTableNamesProvider')] public function testInvalidTableNames(string $name): void { $table = new Table(self::INITIAL_RANGE); @@ -201,9 +197,7 @@ public function testClearRange(): void 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 3966c7f0fe..251e66c39a 100644 --- a/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php +++ b/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php @@ -34,9 +34,7 @@ public static function setTitleInvalidProvider(): array ]; } - /** - * @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 @@ public static function setCodeNameInvalidProvider(): array ]; } - /** - * @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 @@ public static function extractSheetTitleProvider(): array ]; } - /** - * @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 @@ public static function removeColumnProvider(): array ]; } - /** - * @dataProvider removeColumnProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('removeColumnProvider')] public function testRemoveColumn( array $initialData, string $columnToBeRemoved, @@ -427,9 +419,7 @@ public static function removeRowsProvider(): array ]; } - /** - * @dataProvider removeRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('removeRowsProvider')] public function testRemoveRows( array $initialData, int $rowToRemove, @@ -485,9 +475,7 @@ private static function getPopulatedSheetForEmptyColumnTest(Spreadsheet $spreads return $sheet; } - /** - * @dataProvider emptyRowProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyRowProvider')] public function testIsEmptyRow(int $rowId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -514,9 +502,7 @@ public static function emptyRowProvider(): array ]; } - /** - * @dataProvider emptyColumnProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('emptyColumnProvider')] public function testIsEmptyColumn(string $columnId, bool $expectedEmpty): void { $spreadsheet = new Spreadsheet(); @@ -566,9 +552,7 @@ public function testGetTableByName(): void self::assertInstanceOf(Table::class, $table); } - /** - * @dataProvider toArrayHiddenRowsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('toArrayHiddenRowsProvider')] public function testHiddenRows( array $initialData, array $hiddenRows, @@ -601,9 +585,7 @@ public static function toArrayHiddenRowsProvider(): array ]; } - /** - * @dataProvider toArrayHiddenColumnsProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('toArrayHiddenColumnsProvider')] public function testHiddenColumns( array $initialData, array $hiddenColumns, @@ -636,9 +618,7 @@ public static function toArrayHiddenColumnsProvider(): array ]; } - /** - * @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 ccd0e84f05..3abf561103 100644 --- a/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Dompdf/PaperSizeArrayTest.php @@ -13,9 +13,8 @@ /** * 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 074b351f6d..45d1515941 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/HtmlCommentsTest.php @@ -77,9 +77,7 @@ public static function providerCommentRichText(): array ]; } - /** - * @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 de81f35e88..b7c85f3041 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/HtmlNumberFormatTest.php @@ -135,9 +135,7 @@ public function testColorNumberFormatComplex(): void $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 @@ public static function providerNumberFormat(): array 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 a23327f50c..17e3da98f1 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/LongTitleTest.php @@ -9,9 +9,7 @@ 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 ab2baea817..f30e679694 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/MemoryDrawingOffsetTest.php @@ -11,9 +11,7 @@ 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 4bc99e65e4..324f1d073c 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php @@ -28,9 +28,7 @@ public static function providerXssRichText(): array ]; } - /** - * @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 98fc58f9cf..eb9530bde8 100644 --- a/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php +++ b/tests/PhpSpreadsheetTests/Writer/PreCalcTest.php @@ -174,9 +174,7 @@ private function verifyCsv(?bool $preCalc, string $type): void } } - /** - * @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 821a947451..d639fc9971 100644 --- a/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/RetainSelectedCellsTest.php @@ -34,9 +34,8 @@ public static function providerFormats(): array /** * 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 @@ public function testRetainSelectedCells(string $format): void } } - /** @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 cd0de111db..f30b8d51db 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xls/VisibilityTest.php @@ -10,9 +10,7 @@ class VisibilityTest extends AbstractFunctional { - /** - * @dataProvider dataProviderRowVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderRowVisibility')] public function testRowVisibility(array $visibleRows): void { $spreadsheet = new Spreadsheet(); @@ -38,9 +36,7 @@ public static function dataProviderRowVisibility(): array ]; } - /** - * @dataProvider dataProviderColumnVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderColumnVisibility')] public function testColumnVisibility(array $visibleColumns): void { $spreadsheet = new Spreadsheet(); @@ -66,9 +62,7 @@ public static function dataProviderColumnVisibility(): array ]; } - /** - * @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 a907b96cfa..91e8a3b646 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php @@ -24,9 +24,7 @@ protected function tearDown(): void } } - /** - * @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 a8616aada9..77050b16a3 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ConditionalTest.php @@ -94,9 +94,7 @@ public function testWriteTextConditionalFromWizard(): void 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 @@ public function testWriteDateConditionalFromWizard(): void 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 @@ public function testWriteNonBlankConditionalFromWizard(): void 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 @@ public function testWriteErrorConditionalFromWizard(): void 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 @@ public function testWriteDuplicateConditionalFromWizard(): void 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 @@ public function testWriteExpressionConditionalFromWizard(): void 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 26c55a0560..2b17d60aef 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php @@ -501,9 +501,8 @@ public function testTwoCellAnchorDrawing(): void /** * 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 85b68cc40e..c10a1b9b47 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/FloatsRetainedTest.php @@ -12,9 +12,7 @@ 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 d4995c8fea..c5055370ba 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/FunctionPrefixTest.php @@ -9,9 +9,7 @@ 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 637dec1d09..2d9650bcb4 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue2266Test.php @@ -9,9 +9,7 @@ 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 0833301a62..e728ad700e 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3951Test.php @@ -9,9 +9,7 @@ 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 9c691f4c80..18080a0394 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/LocaleFloatsTest.php @@ -49,9 +49,8 @@ protected function tearDown(): void /** * 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 @@ public function testPercentageStoredAsString(): void /** * 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 af3b040b1c..a9ba624e7f 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/VisibilityTest.php @@ -10,9 +10,7 @@ class VisibilityTest extends AbstractFunctional { - /** - * @dataProvider dataProviderRowVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderRowVisibility')] public function testRowVisibility(array $visibleRows): void { $spreadsheet = new Spreadsheet(); @@ -38,9 +36,7 @@ public static function dataProviderRowVisibility(): array ]; } - /** - * @dataProvider dataProviderColumnVisibility - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderColumnVisibility')] public function testColumnVisibility(array $visibleColumns): void { $spreadsheet = new Spreadsheet(); @@ -66,9 +62,7 @@ public static function dataProviderColumnVisibility(): array ]; } - /** - * @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 5a5e07d276..79adbabc4e 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 75d22bae9c..ec3916a9cf 100644 --- a/samples/Basic4/53_ImageOpacity.php +++ b/samples/Basic4/53_ImageOpacity.php @@ -5,9 +5,6 @@ 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->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->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 326b8d6d23..135f5b2161 100644 --- a/src/PhpSpreadsheet/Worksheet/BaseDrawing.php +++ b/src/PhpSpreadsheet/Worksheet/BaseDrawing.php @@ -197,15 +197,18 @@ public function getWorksheet(): ?Worksheet 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 @@ public function setWorksheet(?Worksheet $worksheet = null, bool $overrideOld = f } } - // 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 @@ public function getCoordinates(): string 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 bee049100d..35933af3f7 100644 --- a/src/PhpSpreadsheet/Worksheet/Drawing.php +++ b/src/PhpSpreadsheet/Worksheet/Drawing.php @@ -148,6 +148,12 @@ public function setPath(string $path, bool $verifyFile = true, ?ZipArchive $zip 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 0000000000..84943cab42 --- /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 8125f69e15..0993b77ebe 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 8ae33354ae..886cb688ef 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -126,7 +126,13 @@ public static function toFormattedString($value, string $format, ?array $callBac // 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 7296a248cc..374390e749 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1682,4 +1682,24 @@ '#,##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 | 15 ++++++++-- tests/data/Style/NumberFormat.php | 28 ++++++++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php index 886cb688ef..7a6b38f376 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 @@ public static function toFormattedString($value, string $format, ?array $callBac 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); + $value = str_replace( + ['$', '"'], + ['\\$', self::QUOTE_REPLACEMENT], + (string) $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 374390e749..da06d7a368 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1682,24 +1682,44 @@ '#,##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 7a6b38f376..cb15e8f375 100644 --- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php +++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php @@ -126,7 +126,8 @@ public static function toFormattedString($value, string $format, ?array $callBac } // 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 @@ public static function toFormattedString($value, string $format, ?array $callBac 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 da06d7a368..58d6151284 100644 --- a/tests/data/Style/NumberFormat.php +++ b/tests/data/Style/NumberFormat.php @@ -1722,4 +1722,9 @@ '"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 afcfa016ec..dfcea10e45 100644 --- a/src/PhpSpreadsheet/ReferenceHelper.php +++ b/src/PhpSpreadsheet/ReferenceHelper.php @@ -1215,7 +1215,7 @@ private function duplicateStylesByRow(Worksheet $worksheet, int $beforeColumn, i 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 0000000000..bdb658896e --- /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 8125f69e15..4a1e3a895f 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 8125f69e15..2e58c91065 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 0672854ad7..b02f3d3ffb 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/Styles.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/Styles.php @@ -149,14 +149,22 @@ public function readFillStyle(Fill $fillStyle, SimpleXMLElement $fillStyleXml): $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 @@ public function readFillStyle(Fill $fillStyle, SimpleXMLElement $fillStyleXml): $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 6f9db8a21d..8aa4734fc9 100644 --- a/src/PhpSpreadsheet/Style/Color.php +++ b/src/PhpSpreadsheet/Style/Color.php @@ -230,12 +230,14 @@ public function getARGB(): ?string * * @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 1b2d33abff..ad95efd18c 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -1139,9 +1139,16 @@ private function createCSSStyleFill(Fill $fill): array // 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 a1a5faf8f4..c2b4496a53 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Workbook.php +++ b/src/PhpSpreadsheet/Writer/Xls/Workbook.php @@ -210,8 +210,20 @@ public function addXfWriter(Style $style, bool $isStyleXf = false): int $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 5258bbad38..5b0e4e00d0 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php @@ -2875,9 +2875,9 @@ private function writeCFRule( $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 a31b8e2498..37c6c31276 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Style.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Style.php @@ -199,7 +199,7 @@ private function writeGradientFill(XMLWriter $objWriter, Fill $fill): void $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 @@ private function writeGradientFill(XMLWriter $objWriter, Fill $fill): void $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 @@ private function writePatternFill(XMLWriter $objWriter, Fill $fill): void // 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 44fb8e57d9..7bdfecdd0a 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/DefaultFillTest.php @@ -40,6 +40,6 @@ public function testDefaultConditionalFill(): void $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 0000000000..c06fabb2d1 --- /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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

-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 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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

-q-&q40G1k3`Km-k{A?jnU0b-pgZQL7KidO6A?A)8*Fh1=>j5oes_& z7!(ey30NF!3BDg|NxtizFjJjs&BUXxkv5y}%w2y+)7W=m&u(_2O6OOLqgeX>K2DID z;)wYtu_`m{OW5?Bli3RVvXuns=(W&;8ktZYAVf8GY@x+u0a0nfGMejQ{}96*+BwIZ zbp1+gibe(!=-sQ2%Ju%UOXA~sp+^VeJ?McKvb5F>UUh5Vco{&YpQqlo3rP0WEk+P$ z`G^FscmyLNf+-MFyvbB|1b*b@<56ujtCD)quIrW-5Ek~)pH?L-d%n0(DB_jU${lU4 z-5NTr-NGz;u&lz6YrZB_FH_vtdvQu+8?Uu_U(SBrd*JBmo&zb@iRrT*5DL6ePphl1EC4K2Drpio$6&}Uq;Jq3n^c~2gxRpp5G=1L5F~lPBj&74j)#(s&3_+AVhd>XOgz(1xxdg zrU;sI8`0pQaR-DzYKx4C3L&%mq{HX7C_4Axw1Hfar1!}s%USG)m3^{cvqmM}dpl~p z?PSz)4ML=C^Xa$`I>5OPy~SX#wc986wT8^MQxeSx{Q4kXavl`>o>mctuuizR;Uz>W z*gPgss7Uvh*M9W)!^*vEsA*hk+zXoh9_AU^#S?33Efb%ifht&x0DawrnoO)phmpErNPJN!O-|6ya7UfdwxRy* zos~lCKRU$h{8sxLgX<~~cJY8c5Xd7uE@!)pS8 zG#9IA5b#_aZ!LJlOUE^l$MSSJtJOlwkeGkG75us+sYm~Lmz;V|cm%IU_X}weCc&_CH%y!_^kVMQ!pb|zMeN&{2>i$;i(t5c4 zs?Ab~@zUL9A9hcn0$QuNsZhO49b7%A=uzq{GA@I2;pZdW)Bf>Ed71M+QeP(%j_oSf zuE~t8Z|zBIj!wdM;p(`)sUaG4%Lxgxb2zFw`EIINkyFTl{wdI7dAH|W%1?v$d8O>q z8UxTG{j>KM7bz_@1A6}!pxydIn{_?WPK+9`7-GbFvmNf}*TJFbWc`rRI=4JBa(IwT z&_4uj2g8Al%(^Hk|NerfBkBv}tm)Ah6oe`%*|lwfORmqhZpEu#=Vb6c+6ll7;6i$C zyqwOyut(+BvK4=#leB_Au=b+2@wvKHvE%vLRKUCEuorfg%Q~A=j7Y*7g@%+H@q`B3 zvw3B!K0gF{%uV1(MfArMY6?)8guvqnBi?+vqa*H6t3Jofs70gG#ECWX`8JaTNYGk* zwRM~2@ihtFAqeagZa$V@SRAuV)ACcqxo;7l8CNGl#+M;pgl+RdSN#+b+Cl){XyQ|r1kJz zVxVK>VUc4+Fz+mwQvFnZRy+ToUYh|j$d-w_M|nLRLFVE#wB9Gk6;g8gt(K*?dT9MS z@0Q0K5ygc>!EI$sZo!YDGai8r$<5I59Togh8) z<;L)sJZu*CYC0w%-8g^VX_vW%(?sFEwWvd@Ly5fp@{yq{Y&G-fW*Sq5wTkoO_tBXx z+-b0@0(AUsL!IX-Sv1_NB|l;Qq@DlgCP3zYO@RLwnE(gskaYBbDYw*bCO};?ePI(_ zu*KDA%1&w8!kZYUUc1DBc&ZR9ORI92eE^cb;SlsxjZNOHg?4f>ROyN5;o#!@nG4Zt z&U1UZpXlDEuj7U4CWMF$CR9S|(s$M)KW&i6k;dM)bf#ALNr}ZvkerN4ZrNS;Jp@|) zNiNptqT{)scy#$n)z^I$l7n~KZYw{tiTsch#-8j*jtB*71*LA<`*G8OLj5q1sSQ+} z*{G+U^siCf>v2S%ujOnW2-f(X`T>d#@e4fuBj+O-=DeWUIyxA974LqyHCAS0&-Ih< z5*PxoyZT|oun2l#AJ`iUKSf$<>F9qmB4e)wOPEP{Ckih;S=4JxLMdtRo#3^vDW1rz zJ^!N39I~wqhj*&j5t(CWP^j?f-7vOK8(@tWi3Iz6EQN^h?a-8Z$qm)<9il}l!fA+~ zCHbgckD}58$%@^hwoB8U;{>+Q5q8H>asGZEh@PQ&2-=I@(a>kZa_%SEpX%dqYN^PR zD|rAt1}2CCblZA%-B}Q)J_7w`!&zPglchJXf_N#pG>xNA?BS8!^;JANA?0InUn9nN zhrOhm8;SHFs&cIz*R<7kt%Iz}HvM9e6Wnq+8%nBtFuRUV^w&f@J5LbPOz4IC^d_zjYljurvhA9{*3rlG$`tzQakn_Ng95?vuOzYpTNB2j2ZX)7 zc%UAc^TC(*-0xwAV2)O>18Z7POGWE>6+fNcB{#0_FbF`3$>QvxY8DaWK@JN*^*}IlGUhj+^A6;Td>+X=12;a6GaQkB~KC8r!p9sjM2C!b?fT-@s<=T+-mvG4b z2f_h?@*<~ArvUM6Be}w*IjhB7j-u|uV(7!O%1I(tM`sKaWRv4cOqx@>9(B#Ih6$EH z+mNzg+kPM78vHiGz(+37=wvAEXOfTtja(@dujTh?7Om<@0NNLLb~PvhW^65U0rwiL z3!$P0mm*XPs1>pcxn1W;hZWfvG!b@WEbYox6#COWJPxOU#n(eaRgq|h^5-HF56x49 zxBK~hj=k>n9es$G-9)CakX&a)Dz@X%%TRjwx*HAe8L?B$h!4?%NSkm`*c<;gXmC7F3>uf9*(khUN6fvquBWN7Wf$sN{=ee;r>)3 z>wWY{!vLL_1QKu@*&WGWPdSNG|7Susd&`3g*l}SBy#^!cR{9rMJrU) z3I61sQCX;X$``9OaUJTpKaed?}6zUcYN}3REV*#m*5l? zl0tpY47Ne;^r%nHhOZ@^)s6g;EXPmmIBe~pmf60(F_h?fRD=j;UWnrCzOLW+NOlm_ zMidF9v_ocdD~IsRI*g1j#T&^pph?KjX%+8~yh~Um-On}go7(+Y<>>a*yu;#^9}fl| zEF>N-yc2;i7Y?=@e_HmC>&O(6)YS`VT<7gda60jH^dhGz3_UAZN>{6E8g@3iwkBE(jKD>2plf&a`}L#${`r>!|8n48 z4*bi3e>w0k2ma;2za03N1ONYV;I?zEodDPCCg5dMz@VQH@XENcH~jKTzVg|*p4eWy zCI9Q9@k=f~eT{*Dqb%%P?Ho_kR8p_wz3^2>HSD^8s=0DIW|mg4Vgl94A-3#e+6^Xz z`rSi?2Wzg;}VSY?~ z%FY;&o;12afgJN#5~thX!^6BN=1^`mhjP-jS6Y^K7v_RTy1BxZ#6%~s!^iQGdzb7e z-VQ%Swy+tyh|s@It5Rt;xqOML>R=D0f(3%YRVL(4A=SJ*Xm_9fql>j>4CSNd|DXle zbH9JJ;J1niXaO+61+)Ng7}l}VPCR6k3>cEaU1AqSs>c(Pc&6X2DhZx-%gn-t<&hMc zWnlAjjvGN?aSnuKS4KfhOPgsQXgJWBcIBqCAG*q4gQ!)$8<#v(M7a za|DE)bP#E0=qb}pLh~5kx1R+B0b$zo8j#)?zto6!eo`6Yc3OD;$Hf5WACPJPNeynC z?Eh^H{%#EZQUl#XRqo2|+vqJ2n(yOMy7 zMIojrKGU$g`m+vDgCPSINs~D*WWRavko%lz2K_Du^T%8=_9FkK`q2&S;28X_xHW@J zjQrse$E5tz3c`a5bM05vY&umeBb>NYi^HDWS~k*dW<$JiewItU=#gibDbw-33o4qk zNQMO^bcC&f_kzbpr4+Ye`1Vh>KF|Nr2956G@5l)B2N>5jXqewT^{!nxf4M9{{OhZi z9zOdLFtK~g!krQc&6w*An+B?@y9*M*dcSf;!^`g{i%2gp+;G=UUmsoGq-&pcJ(?!h zN^V7eruptkC-MmrGDK{MDcpqd&MR$a1n4&AiITJkUhfAMbKLGO;>qQB)fG@24J7HE zbB$lEeZ#=0nvA7Z;8o_NK`*rjYlJxk_;@dJzmrv!`Rmj@?den{uiJ%#E36waxC}H? zW|@qyJU6tfaXLZy>>)Fr(laN9d*2XuzJv5W9WT+TMkp-np_LcYL_})lyERNNYkG=% z;uKSBz7eC~zJ9Is>_{zwb_e}eZ~MlX80r0qlwT>gKM6PE&=vehg&Nrt;S<-!y05rD z8JYTSMBv=(-7Kah++owfl0_Y6-m>#(-{fpxo%?04*pKRhLm;SjfPRH8>c?6io zu-X4)SN+RH_I15NN3Lo;%MUFCo)lUqc-vn?}jxc*a|LYAG15lovu< zjSM3_vDlhuRAUt%}|a6=|eti>#M-dKb~pt);@h_+!zU%q5;71XG~ z)1u&EOk4 z$#wS6HR-rA%>MIMrHB&Zr{7!1J3c{?u_sP<)YNH!5k~53jP#)8b(S>xBvwaV zLTmh~fhAcTni#Tw!7O0Hv`p8m@?j_ogoJ$sigkj4L_@Dt2?6DkdwSgOWhhE_W0;@b z6V^w8X*CIY!}v9W*tJV20pa^{a7IcpOG3zt%b(33T}5LQXuMPQW0(uV%={S5e%hsc zEQeMFM>Nc+B`EGP!GoVNrzj?Wh+pqDHekS`sG%E%KS^?z=hVjm$O)E>2;bES zmUcVMZg#%eJ!wg;4aGpll&78Wr%?EnQy$NjhZB3Ujk$vY%unEV-Ms?JtYAG+ zqkE*wE*|rFFfP;Iuj^ISH@7Lc&)nE5M>_QG!V}*gku-C<)crK<@8ZD9aQu-I?76t7#80Z=6NOQT+NZ$<0|X(?1sYjyu{tS*L;kY^KV!@b7V#0| z{p`BkyrZ#_SGyOQDQhLI31^)4L{z%^%b;?v~!k#iV_Qp;9sUf zBq4~F|M@QCeo4Mf|4={%0em}hDwT<_Q7pk$Y(^8OxV^u*aT?AjZHjA_!fzc*Zi>1%uOU zKE#x_()w7PkmX|-f!!J}mc_aG$TclVs`Cfvj_AtBbSr}T(_A)D;`BvXyw8?H1%xjW zTqraAU4lvPJrG0_WV z7g!NvHlK}8=rvuJ*<&!ThDuSf+RJMSYsbWNj5*{T z*oz3su)`fbPU0Rp&|!{?7d;?v5S%3($7-gZ-VIX7x4Xp^@x7K3S7E} zEUqr%3iLT1PbMr$&-@h*1(QhjPEZ-fioA`?yvdJp$%;e^4aZ+w;4C%`=PPl*&{fCA zfEy7qn^|Al+k~}Kkfo!l_qd=9Dq~a3J?}7@t4AL}s){nQvS_G7Wps)1{2^$d;UwmG|J1={~>%PgAE zo~FV)vol`oM?NWZqbQuFM5j+5WASR7s4n`Zis6T7DugQ{%RgC%rapu`9)87EI0(s? zH-eS#mP(kDf1|x`o^heuIi~HGAGP}RN>tv8TD+tdQd(_c3{g7)5rzL z@OY%MhQ>2)!j;;eaaP{zrBu~))s7SSXQK>MXKzXeqEIoip6|+3^y|vj?;aJVgpVr) zjMC=}XCh|_H!Y4@s~t2(h3ug0SO~jJs-6g5Za>s#Bs7tthOJ{GN#8b~twy z%u65nMO-?_OlN?#%p!I0$EOrrmC}H&uv+}Ia)mmh4%p)p5ou1&2laB*59{JvI7NAS08V-Zgha&{RPi zUu&tDy>2HBdNx`y%AzX zgjc)B12%jOqLn^H-o3-tF~3i{8&*oW{g4tXpiMG&JMo{M;XF+Cee#aY(3| zrt_T2XOfxvzB7#vPIE!&uJJetGI(RR1y?px->a_y%7FZfR!S_EX){A{-JEi4%1qn$ z$$q$8=6vlucS{%fHd8u8Y!%qA3?Db-ksloQj^w7=%I;tY|MXC^Cna5B^HFXbCB}Xi z@$l>YH!;1awyJOXUl_X>IHp3|2r1WoQDm?(?S3GFG3y==>b{3kZfa}M!V>i)o8)*I z4nnmgOk~caJqA03$^(Ep4y&YWW#56Cvb)vSI}Ircc0jH-LaDM?MxVI2KC(Gw zQ89_V2(C3i&gGr(KH(!Ijc)FyA~t?v4lg0$WG>klJ9nJw z*1p{yN9==TwV1hkLWI>`d!Br#&pCEzI3LO^00)WqF%gVrKAM}{bA<53u#okV=!D_V zcFx$Nd3x|7<-NXLy@UlJi)iIoE6}h{yiHHKT4a1y) z3kmfis@${!PSRK^JbqE!-{2C0wa+6X4|24lwaH$}GtrQLgP` zcTwOtq&As=x7LWEXZ<6}^;Z77C`ZF)A#DJ{ zK0wcHlx|?^^_Osd=L_4Pq+~xo>}ml>2nOK7ZRKj`xkj-wF*G-1xc+->FuqGh&FP0^ zUqC<7tUw@ux4&IR!q)({c22-fjz7J7a2&Z)3DB!~re7}9H+ivTe`Ph%wJ|hMv;#J; z8~+jEQF$=eDv<3;k4bN`19yopt`Ytm9N@<0dABr$@sC5k1K~YjDDE<~P5U8!v^4_)4g(mAe~YXIliMiv=4MZS#V=r@2k!3zi9Kh`x!N*A4%DOD<(qkV8|YVM z`irP*t^2Jq-8ipkw?~w+aDhNq>9)9M%&q~=4GqA$3}ACzV?!o-D+}Xa6x{$&389zK z0y(eJZ2+Ony8z680w@&W?yv!PbCqrbBv;=BV4=6Q{|5!xp3GE=%plNJx(y&ycNc*5 zPZY5BEgRARJNmBDZGg6|y8vu|0vIUjOn!n30$rus03@&wS2gc9CbHiE+_dOuisf6l zKx=;iD97!p8%cBx@VDCjb@N+ebR&u-^Xs%E9?3fQDQ+1mJ6y6Pga|4(a z`M&|Y35Ii*!n+Y=ZU8f)t^xmM{jDbUX7Thc;N7hkH-KHy*MN6ouiTBzavh81F6iBm z9>0OcUW48W@NqZy?br=Bc|jne1jIX@uQ!n#?xNh@>Hj+lMqy=K5aHjLgyxVvHN27w{#9|(UO>iqYT?aBF{NcMV*&0VtY z?$o#;tLNh{$^O1?<8JQT`wDLI0*z7rUCI8jOt&52e+M`yxC?OO4u6-7+s@R#qih%5 zMft5SyQ$Wm#iEyQh~iJQD2P*45uH2i7@ zZhKJN#k#%n{yWyt=Rafp_hZuA%eTK{eQo?R)_>o8-d+Rz9c#Y%w@UcSUF1(=_S?%l izXOQ1{Z7mkd;aRAV1OW1AP@)euNRoA#134^>wf`;H97qN 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 5b0e4e00d0..5e3aa0b820 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php @@ -2875,9 +2875,9 @@ private function writeCFRule( $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 c06fabb2d1..06b0b7f31c 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php @@ -27,7 +27,6 @@ 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); @@ -85,7 +84,6 @@ 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://'; 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 585ebaf0c7..8b41ba1456 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 585ebaf0c7..f2f9ffa303 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 585ebaf0c7..0121e74c11 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 33bee9cdfa..89cbfd5ad1 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 28ff9f30fe..f14bdeb137 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 @@ public function testEndings(string $ending): void $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 0cc64c32e8..ab52fb1af9 100644 --- a/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/src/PhpSpreadsheet/Calculation/Calculation.php @@ -3141,6 +3141,53 @@ private function getLocaleFile(string $localeDir, string $locale, string $langua 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 4ca781a87d..045e6b6b6e 100644 --- a/src/PhpSpreadsheet/Reader/Html.php +++ b/src/PhpSpreadsheet/Reader/Html.php @@ -7,6 +7,7 @@ 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 @@ protected function flushCell(Worksheet $sheet, string $column, int|string $row, ->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 @@ protected function flushCell(Worksheet $sheet, string $column, int|string $row, $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 1b2d33abff..f85b5f0961 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -5,6 +5,7 @@ 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 @@ public function __construct(Spreadsheet $spreadsheet) { $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 @@ private function generateRowCellDataValue(Worksheet $worksheet, Cell $cell, stri 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 @@ private function generateRowWriteCell( $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 @@ private function shouldGenerateColumn(Worksheet $sheet, string $colStr): bool 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 0000000000..558dc7ed34 --- /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 1e6ac32a27..6f3dc17666 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 514cf10123..73bc7e9063 100644 --- a/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php +++ b/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php @@ -360,7 +360,7 @@ public function clearRules(): static 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 045e6b6b6e..431a08ffff 100644 --- a/src/PhpSpreadsheet/Reader/Html.php +++ b/src/PhpSpreadsheet/Reader/Html.php @@ -301,7 +301,7 @@ protected function flushCell(Worksheet $sheet, string $column, int|string $row, /** @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 f85b5f0961..677f59966d 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 @@ private function generateRowCellDataValue(Worksheet $worksheet, Cell $cell, stri 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 @@ private function generateRowCellData(Worksheet $worksheet, null|Cell|string $cel // 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 @@ private function generateRowWriteCell( $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 558dc7ed34..0982c2a786 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -5,6 +5,7 @@ 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 @@ public function testBetterBoolean(): void { $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 @@ public function testBetterBoolean(): void $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 @@ public function testNotBetterBoolean(): void { $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 @@ public function testNotBetterBoolean(): void $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 @@ public function testLocale(): void { $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 @@ public function testLocale(): void $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 677f59966d..8bb1824490 100644 --- a/src/PhpSpreadsheet/Writer/Html.php +++ b/src/PhpSpreadsheet/Writer/Html.php @@ -1410,18 +1410,18 @@ private function generateRowCellData(Worksheet $worksheet, null|Cell|string $cel $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 @@ private function generateRowCellData(Worksheet $worksheet, null|Cell|string $cel $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 0982c2a786..4bd9fb1b66 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -141,6 +141,49 @@ public function testLocale(): void $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 91b0574a08..b70296d120 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 8125f69e15..639e648cfb 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 4bd9fb1b66..0eac757d4d 100644 --- a/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Html/BetterBooleanTest.php @@ -165,6 +165,7 @@ public function testInline(): void self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); + self::assertStringContainsString('', $html); self::assertStringContainsString('', $html); self::assertStringContainsString('', $html);
HelloVRAIFAUX1AB3