progressBar = $progressBar; } } class ConsoleUITest extends TestCase { private mixed $output; public function setUp(): void { $this->output = $this->getMockBuilder(OutputInterface::class)->disableOriginalConstructor()->getMock(); $this->progressBar = $this->getMockBuilder(MockableProgressBar::class)->disableOriginalConstructor()->getMockForAbstractClass(); } public function testPrint(): void { $consoleUI = $this->getMockBuilder(ConsoleUI::class) ->setConstructorArgs([$this->output]) ->setMethodsExcept(['print']) ->getMock(); $this->output->expects(self::once())->method('writeln')->with('foo'); $consoleUI->print('foo'); } public function testProgress(): void { $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock(); $consoleUI = $this->getMockBuilder(TestableConsoleUI::class) ->setConstructorArgs([$this->output]) ->setMethodsExcept(['progress', 'setProgressBar']) ->getMock(); $consoleUI->setProgressBar($progressBar); $progressBar->expects(self::once()) ->method('setProgress') ->with(21); $progressBar->expects(self::once()) ->method('setMaxSteps') ->with(100); $consoleUI->progress(21, 100); } public function testProgressEnd(): void { $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock(); $consoleUI = $this->getMockBuilder(TestableConsoleUI::class) ->setConstructorArgs([$this->output]) ->setMethodsExcept(['progress', 'setProgressBar']) ->getMock(); $consoleUI->setProgressBar($progressBar); $progressBar->expects(self::once()) ->method('setProgress') ->with(100); $progressBar->expects(self::once()) ->method('setMaxSteps') ->with(100); $consoleUI->expects(self::once())->method('print')->with(''); $consoleUI->progress(100, 100); } }