8
8
use PhpOffice \PhpSpreadsheet \Shared \File ;
9
9
use PhpOffice \PhpSpreadsheet \Spreadsheet ;
10
10
use PhpOffice \PhpSpreadsheet \Writer \Xlsx as Writer ;
11
+ use PHPUnit \Framework \Attributes \DataProvider ;
11
12
use PHPUnit \Framework \TestCase ;
12
13
13
14
class FloatsRetainedTest extends TestCase
14
15
{
15
- #[\ PHPUnit \ Framework \ Attributes \ DataProvider('providerIntyFloatsRetainedByWriter ' )]
16
- public function testIntyFloatsRetainedByWriter (float |int $ value ): void
16
+ #[DataProvider('providerIntyFloatsRetainedByWriter ' )]
17
+ public function testIntyFloatsRetainedByWriter (float |int $ value, mixed $ expected = null ): void
17
18
{
19
+ if ($ expected === null ) {
20
+ $ expected = $ value ;
21
+ }
18
22
$ outputFilename = File::temporaryFilename ();
19
23
$ spreadsheet = new Spreadsheet ();
20
- $ spreadsheet ->getActiveSheet ()->getCell ('A1 ' )->setValue ($ value );
24
+ $ spreadsheet ->getActiveSheet ()
25
+ ->getCell ('A1 ' )->setValue ($ value );
21
26
22
27
$ writer = new Writer ($ spreadsheet );
23
28
$ writer ->save ($ outputFilename );
@@ -27,7 +32,11 @@ public function testIntyFloatsRetainedByWriter(float|int $value): void
27
32
$ spreadsheet2 = $ reader ->load ($ outputFilename );
28
33
unlink ($ outputFilename );
29
34
30
- self ::assertSame ($ value , $ spreadsheet2 ->getActiveSheet ()->getCell ('A1 ' )->getValue ());
35
+ self ::assertSame (
36
+ $ expected ,
37
+ $ spreadsheet2 ->getActiveSheet ()
38
+ ->getCell ('A1 ' )->getValue ()
39
+ );
31
40
$ spreadsheet2 ->disconnectWorksheets ();
32
41
}
33
42
@@ -44,10 +53,10 @@ public static function providerIntyFloatsRetainedByWriter(): array
44
53
[1.3e-10 ],
45
54
[1e10 ],
46
55
[3.00000000000000000001 ],
47
- [ 99999999999999999 ],
48
- [99999999999999999 .0 ],
49
- [ 999999999999999999999999999999999999999999 ],
50
- [999999999999999999999999999999999999999999 .0 ],
56
+ ' int but too much precision for Excel ' => [ 99_999_999_999_999_999 , ' 99999999999999999 ' ],
57
+ [99_999_999_999_999_999 .0 ],
58
+ ' int > PHP_INT_MAX so stored as float ' => [ 999_999_999_999_999_999_999_999_999_999_999_999_999_999 ],
59
+ [999_999_999_999_999_999_999_999_999_999_999_999_999_999 .0 ],
51
60
];
52
61
}
53
62
}
0 commit comments