public function createProcessMock($successfully = true) { /** @var \PHPUnit_Framework_TestCase $this */ $processBuilderMock = $this->getMock(ProcessBuilder::class); $processMock = $this->getMock(Process::class, [], [], '', false); $processBuilderMock->expects($this->any())->method('getProcess')->willReturn($processMock); $processMock->expects($this->any())->method('run')->willReturn(null); $processMock->expects($this->any())->method('isSuccessful')->willReturn($successfully); ProcessUtil::instance()->setProcessBuilder($processBuilderMock); return $processMock; }
/** * Push printable to print queue * @param PrintableInterface $printable * @throws PrinterTimeoutException * @throws PrinterException * @throws ExecutableNotFoundException * @throws PrinterProfileNotFoundException */ public function enqueue(PrintableInterface $printable) { try { ProcessUtil::instance()->executeCommand($this->getProcessArguments($printable, $this->printerProfile), function ($processBuilder) use($printable) { /** @var ProcessBuilder $processBuilder */ $processBuilder->setTimeout(self::PRINT_TIMEOUT); $processBuilder->setInput($printable->getContent()); }); } catch (ProcessTimedOutException $e) { throw new PrinterTimeoutException('Print timeout.', 0, $e); } catch (ProcessFailedException $e) { $process = $e->getProcess(); if (false !== stripos($process->getErrorOutput(), 'The printer or class does not exist.')) { throw new PrinterProfileNotFoundException($this->printerProfile, $e); } throw new PrinterException($e->getMessage(), $e->getCode(), $e); } catch (RuntimeException $e) { throw new PrinterException($e->getMessage(), $e->getCode(), $e); } }
/** * @param $name * @param $device * @param null $driver * @return bool * @throws InvalidPrinterDeviceException * @throws PrinterConfigurationFailed * @throws ExecutableNotFoundException * @throws InvalidPrinterDeviceException * @throws InvalidPrinterDriverException */ public function configure($name, $device, $driver = null) { try { $arguments = [$this->manager->getLpadminBinary(), '-p', $name, '-v', $device, '-E']; if ($driver) { $arguments = array_merge($arguments, ['-P', $driver]); } // in theory we don't need to check process output if it's succedded ProcessUtil::instance()->executeCommand($arguments); return true; } catch (ProcessFailedException $e) { $output = $e->getProcess()->getErrorOutput(); if (false !== strpos($output, 'lpadmin: Bad device-uri')) { throw new InvalidPrinterDeviceException(sprintf('"%s" is not valid device uri.', $device), 0, $e); } elseif (false !== strpos($output, 'Unable to open PPD')) { throw new InvalidPrinterDriverException(sprintf('"%s" is not valid driver.', $driver), 0, $e); } throw new PrinterConfigurationFailed('Printer configuration failed.', 0, $e); } }
public function getProcessUtil() { return ProcessUtil::instance(); }