|  | 
|  | 1 | +<?php | 
|  | 2 | + | 
|  | 3 | +declare(strict_types=1); | 
|  | 4 | + | 
|  | 5 | +namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx; | 
|  | 6 | + | 
|  | 7 | +use PhpOffice\PhpSpreadsheet\Cell\DataType; | 
|  | 8 | +use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; | 
|  | 9 | +use PhpOffice\PhpSpreadsheet\RichText\RichText; | 
|  | 10 | +use PhpOffice\PhpSpreadsheet\RichText\TextElement; | 
|  | 11 | +use PhpOffice\PhpSpreadsheet\Shared\File; | 
|  | 12 | +use PhpOffice\PhpSpreadsheet\Spreadsheet; | 
|  | 13 | +use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; | 
|  | 14 | +use PHPUnit\Framework\TestCase; | 
|  | 15 | + | 
|  | 16 | +class Issue4537Test extends TestCase | 
|  | 17 | +{ | 
|  | 18 | +    private string $outputFilename = ''; | 
|  | 19 | + | 
|  | 20 | +    protected function tearDown(): void | 
|  | 21 | +    { | 
|  | 22 | +        if ($this->outputFilename !== '') { | 
|  | 23 | +            unlink($this->outputFilename); | 
|  | 24 | +            $this->outputFilename = ''; | 
|  | 25 | +        } | 
|  | 26 | +    } | 
|  | 27 | + | 
|  | 28 | +    public function testBackgroundImage(): void | 
|  | 29 | +    { | 
|  | 30 | +        $this->outputFilename = File::temporaryFilename(); | 
|  | 31 | +        $testString = "\"He\": '<?>'"; | 
|  | 32 | +        $spreadsheet = new Spreadsheet(); | 
|  | 33 | +        $sheet = $spreadsheet->getActiveSheet(); | 
|  | 34 | +        $sheet->getCell('A1')->setValueExplicit($testString, DataType::TYPE_INLINE); | 
|  | 35 | +        $sheet->getCell('A2')->setValue($testString); | 
|  | 36 | +        $richText = new RichText(); | 
|  | 37 | +        $richText->addText(new TextElement($testString)); | 
|  | 38 | +        $sheet->getCell('A3')->setValue($richText); | 
|  | 39 | +        $writer = new XlsxWriter($spreadsheet); | 
|  | 40 | +        $writer->save($this->outputFilename); | 
|  | 41 | +        $spreadsheet->disconnectWorksheets(); | 
|  | 42 | + | 
|  | 43 | +        $reader = new XlsxReader(); | 
|  | 44 | +        $reloadedSpreadsheet = $reader->load($this->outputFilename); | 
|  | 45 | +        $rsheet = $reloadedSpreadsheet->getActiveSheet(); | 
|  | 46 | +        self::assertSame($testString, $rsheet->getCell('A1')->getValueString()); | 
|  | 47 | +        self::assertSame($testString, $rsheet->getCell('A2')->getValueString()); | 
|  | 48 | +        self::assertSame($testString, $rsheet->getCell('A3')->getValueString()); | 
|  | 49 | +        $reloadedSpreadsheet->disconnectWorksheets(); | 
|  | 50 | + | 
|  | 51 | +        $file = 'zip://'; | 
|  | 52 | +        $file .= $this->outputFilename; | 
|  | 53 | +        $file .= '#xl/worksheets/sheet1.xml'; | 
|  | 54 | +        $data = file_get_contents($file); | 
|  | 55 | +        // expected, and expected1/2 below, do not escape apostrophes | 
|  | 56 | +        $expected = 't="inlineStr"><is><t>"He": \'<?>\'</t></is>'; | 
|  | 57 | +        if ($data === false) { | 
|  | 58 | +            self::fail('Unable to read worksheets file'); | 
|  | 59 | +        } else { | 
|  | 60 | +            self::assertStringContainsString($expected, $data, 'inline string'); | 
|  | 61 | +        } | 
|  | 62 | + | 
|  | 63 | +        $file = 'zip://'; | 
|  | 64 | +        $file .= $this->outputFilename; | 
|  | 65 | +        $file .= '#xl/sharedStrings.xml'; | 
|  | 66 | +        $data = file_get_contents($file); | 
|  | 67 | +        $expected1 = '<t>"He": \'<?>\'</t>'; | 
|  | 68 | +        $expected2 = '<t xml:space="preserve">"He": \'<?>\'</t>'; | 
|  | 69 | +        if ($data === false) { | 
|  | 70 | +            self::fail('Unable to read sharedStrings file'); | 
|  | 71 | +        } else { | 
|  | 72 | +            self::assertStringContainsString($expected1, $data, 'string'); | 
|  | 73 | +            self::assertStringContainsString($expected2, $data, 'rich text'); | 
|  | 74 | +        } | 
|  | 75 | +    } | 
|  | 76 | +} | 
0 commit comments