spreadsheet !== null) { $this->spreadsheet->disconnectWorksheets(); $this->spreadsheet = null; } } private function setUpWorkbook(): void { if ($this->spreadsheet !== null) { $this->spreadsheet->disconnectWorksheets(); } $this->spreadsheet = $spreadsheet = new Spreadsheet(); $strTotal = 0; $strUnique = 0; $str_table = []; $colors = []; $parser = new Parser($spreadsheet); $this->workbook = new Workbook($spreadsheet, $strTotal, $strUnique, $str_table, $colors, $parser); } public function xtestAddColor(array $testColors, array $expectedResult): void { $workbookReflection = new ReflectionClass(Workbook::class); $methodAddColor = $workbookReflection->getMethod('addColor'); $propertyPalette = $workbookReflection->getProperty('palette'); $methodAddColor->setAccessible(true); $propertyPalette->setAccessible(true); foreach ($testColors as $testColor) { $methodAddColor->invoke($this->workbook, $testColor); } $palette = $propertyPalette->getValue($this->workbook); self::assertEquals($expectedResult, $palette); } public function testAddColor(): void { $i = 0; $arrayEntries = $this->arrayAddColor(); while ($i < count($arrayEntries)) { $this->xtestAddColor($arrayEntries[$i][0], $arrayEntries[$i][1]); ++$i; $arrayEntries = $this->arrayAddColor(); } } public function arrayAddColor(): array { $this->setUpWorkbook(); $workbookReflection = new ReflectionClass(Workbook::class); $propertyPalette = $workbookReflection->getProperty('palette'); $propertyPalette->setAccessible(true); $palette = $propertyPalette->getValue($this->workbook); $newColor1 = [0x00, 0x00, 0x01, 0x00]; $newColor2 = [0x00, 0x00, 0x02, 0x00]; $newColor3 = [0x00, 0x00, 0x03, 0x00]; // Add one new color $paletteTestOne = $palette; $paletteTestOne[8] = $newColor1; // Add one new color + one existing color after index 8 $paletteTestTwo = $paletteTestOne; // Add one new color + one existing color before index 9 $paletteTestThree = $paletteTestOne; $paletteTestThree[9] = $palette[8]; // Add three new color $paletteTestFour = $palette; $paletteTestFour[8] = $newColor1; $paletteTestFour[9] = $newColor2; $paletteTestFour[10] = $newColor3; // Add all existing color $colorsAdd = array_map([$this, 'paletteToColor'], $palette); $paletteTestFive = $palette; // Add new color after all existing color $colorsAddTwo = array_map([$this, 'paletteToColor'], $palette); $colorsAddTwo[] = $this->paletteToColor($newColor1); $paletteTestSix = $palette; // Add one existing color $paletteTestSeven = $palette; // Add two existing color $paletteTestHeight = $palette; // Add last existing color and add one new color $keyPalette = array_keys($palette); $last = end($keyPalette); $lastColor = $this->paletteToColor($palette[$last]); $paletteTestNine = $palette; return [ [[$this->paletteToColor($newColor1)], $paletteTestOne], [[$this->paletteToColor($newColor1), $this->paletteToColor($palette[12])], $paletteTestTwo], [[$this->paletteToColor($newColor1), $this->paletteToColor($palette[8])], $paletteTestThree], [[$this->paletteToColor($newColor1), $this->paletteToColor($newColor2), $this->paletteToColor($newColor3)], $paletteTestFour], [$colorsAdd, $paletteTestFive], [$colorsAddTwo, $paletteTestSix], [[$this->paletteToColor($palette[8])], $paletteTestSeven], [[$this->paletteToColor($palette[25]), $this->paletteToColor($palette[10])], $paletteTestHeight], [[$lastColor, $this->paletteToColor($newColor1)], $paletteTestNine], ]; } /** * Change palette color to rgb string. */ private function paletteToColor(array $palette): string { return $this->right('00' . dechex((int) ($palette[0])), 2) . $this->right('00' . dechex((int) ($palette[1])), 2) . $this->right('00' . dechex((int) ($palette[2])), 2); } /** * Return n right character in string. * * @param string $value text to get right character * @param int $nbchar number of char at right of string */ private function right(string $value, int $nbchar): string { return mb_substr($value, mb_strlen($value) - $nbchar, $nbchar); } }