Bug setting Superscript/Subscript to false (#1567)
If font style Superscript is set to true, Subscript is set to false. Likewise, setting Subscript to true sets Superscript to false. Both of these are working as they should. However, setting Superscript to false causes Subscript to be set to true, and setting Subscript to false causes Superscript to be set to true. I believe that is an error in both cases. This change fixes it. There seem to be no existing tests for Font styles. I added the tests necessary to validate this change. I will put adding more on my to-do list.
This commit is contained in:
		
							parent
							
								
									b9ca8a1a7b
								
							
						
					
					
						commit
						ef997a0c8e
					
				@ -357,21 +357,18 @@ class Font extends Supervisor
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set Superscript.
 | 
					     * Set Superscript.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param bool $pValue
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return $this
 | 
					     * @return $this
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function setSuperscript($pValue)
 | 
					    public function setSuperscript(bool $pValue)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($pValue == '') {
 | 
					 | 
				
			||||||
            $pValue = false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if ($this->isSupervisor) {
 | 
					        if ($this->isSupervisor) {
 | 
				
			||||||
            $styleArray = $this->getStyleArray(['superscript' => $pValue]);
 | 
					            $styleArray = $this->getStyleArray(['superscript' => $pValue]);
 | 
				
			||||||
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
 | 
					            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $this->superscript = $pValue;
 | 
					            $this->superscript = $pValue;
 | 
				
			||||||
            $this->subscript = !$pValue;
 | 
					            if ($this->superscript) {
 | 
				
			||||||
 | 
					                $this->subscript = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this;
 | 
					        return $this;
 | 
				
			||||||
@ -394,21 +391,18 @@ class Font extends Supervisor
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set Subscript.
 | 
					     * Set Subscript.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param bool $pValue
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return $this
 | 
					     * @return $this
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function setSubscript($pValue)
 | 
					    public function setSubscript(bool $pValue)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($pValue == '') {
 | 
					 | 
				
			||||||
            $pValue = false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if ($this->isSupervisor) {
 | 
					        if ($this->isSupervisor) {
 | 
				
			||||||
            $styleArray = $this->getStyleArray(['subscript' => $pValue]);
 | 
					            $styleArray = $this->getStyleArray(['subscript' => $pValue]);
 | 
				
			||||||
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
 | 
					            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $this->subscript = $pValue;
 | 
					            $this->subscript = $pValue;
 | 
				
			||||||
            $this->superscript = !$pValue;
 | 
					            if ($this->subscript) {
 | 
				
			||||||
 | 
					                $this->superscript = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this;
 | 
					        return $this;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										42
									
								
								tests/PhpSpreadsheetTests/Style/FontTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								tests/PhpSpreadsheetTests/Style/FontTest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace PhpOffice\PhpSpreadsheetTests\Style;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use PhpOffice\PhpSpreadsheet\Spreadsheet;
 | 
				
			||||||
 | 
					use PHPUnit\Framework\TestCase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FontTest extends TestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function testSuperSubScript(): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $spreadsheet = new Spreadsheet();
 | 
				
			||||||
 | 
					        $sheet = $spreadsheet->getActiveSheet();
 | 
				
			||||||
 | 
					        $cell = $sheet->getCell('A1');
 | 
				
			||||||
 | 
					        $cell->setValue('Cell A1');
 | 
				
			||||||
 | 
					        $font = $cell->getStyle()->getFont();
 | 
				
			||||||
 | 
					        $font->setSuperscript(true);
 | 
				
			||||||
 | 
					        $font->setSubscript(true);
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSuperscript(), 'Earlier set true loses');
 | 
				
			||||||
 | 
					        self::assertTrue($font->getSubscript(), 'Last set true wins');
 | 
				
			||||||
 | 
					        $font->setSubscript(true);
 | 
				
			||||||
 | 
					        $font->setSuperscript(true);
 | 
				
			||||||
 | 
					        self::assertTrue($font->getSuperscript(), 'Last set true wins');
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSubscript(), 'Earlier set true loses');
 | 
				
			||||||
 | 
					        $font->setSuperscript(false);
 | 
				
			||||||
 | 
					        $font->setSubscript(false);
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSuperscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSubscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					        $font->setSubscript(false);
 | 
				
			||||||
 | 
					        $font->setSuperscript(false);
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSuperscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSubscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					        $font->setSubscript(true);
 | 
				
			||||||
 | 
					        $font->setSuperscript(false);
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSuperscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					        self::assertTrue($font->getSubscript(), 'True remains unchanged');
 | 
				
			||||||
 | 
					        $font->setSubscript(false);
 | 
				
			||||||
 | 
					        $font->setSuperscript(true);
 | 
				
			||||||
 | 
					        self::assertTrue($font->getSuperscript());
 | 
				
			||||||
 | 
					        self::assertFalse($font->getSubscript(), 'False remains unchanged');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user