Skip to content

Commit 14eafca

Browse files
Merge branch '6.2' into 6.3
* 6.2: minor #49431 [Mailer][Translation] Remove some `static` occurrences that may cause unstable tests (alexandre-daubois) minor #49431 [Mailer][Translation] Remove some `static` occurrences that may cause unstable tests (alexandre-daubois) [Clock] fix url in README.md [Workflow] remove new lines from workflow metadata Fix phpdocs in HttpClient, HttpFoundation, HttpKernel, Intl components [WebProfilerBundle] Render original (not encoded) email headers improve deprecation message [Console] fix clear of section with question
2 parents 9116f05 + fc0e346 commit 14eafca

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

Output/ConsoleSectionOutput.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ public function addContent(string $input, bool $newline = true): int
119119
// re-add the line break (that has been removed in the above `explode()` for
120120
// - every line that is not the last line
121121
// - if $newline is required, also add it to the last line
122-
if ($i < $count || $newline) {
122+
// - if it's not new line, but input ending with `\PHP_EOL`
123+
if ($i < $count || $newline || str_ends_with($input, \PHP_EOL)) {
123124
$lineContent .= \PHP_EOL;
124125
}
125126

Style/SymfonyStyle.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use Symfony\Component\Console\Helper\TableSeparator;
2424
use Symfony\Component\Console\Input\InputInterface;
2525
use Symfony\Component\Console\Output\ConsoleOutputInterface;
26+
use Symfony\Component\Console\Output\ConsoleSectionOutput;
2627
use Symfony\Component\Console\Output\OutputInterface;
2728
use Symfony\Component\Console\Output\TrimmedBufferOutput;
2829
use Symfony\Component\Console\Question\ChoiceQuestion;
@@ -345,6 +346,11 @@ public function askQuestion(Question $question): mixed
345346
$answer = $this->questionHelper->ask($this->input, $this, $question);
346347

347348
if ($this->input->isInteractive()) {
349+
if ($this->output instanceof ConsoleSectionOutput) {
350+
// add the new line of the `return` to submit the input to ConsoleSectionOutput, because ConsoleSectionOutput is holding all it's lines.
351+
// this is relevant when a `ConsoleSectionOutput::clear` is called.
352+
$this->output->addNewLineOfInputSubmit();
353+
}
348354
$this->newLine();
349355
$this->bufferedOutput->write("\n");
350356
}

Tests/Style/SymfonyStyleTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
use Symfony\Component\Console\Exception\RuntimeException;
1717
use Symfony\Component\Console\Formatter\OutputFormatter;
1818
use Symfony\Component\Console\Input\ArrayInput;
19+
use Symfony\Component\Console\Input\Input;
1920
use Symfony\Component\Console\Input\InputInterface;
2021
use Symfony\Component\Console\Output\ConsoleOutputInterface;
2122
use Symfony\Component\Console\Output\ConsoleSectionOutput;
2223
use Symfony\Component\Console\Output\NullOutput;
2324
use Symfony\Component\Console\Output\OutputInterface;
25+
use Symfony\Component\Console\Output\StreamOutput;
2426
use Symfony\Component\Console\Style\SymfonyStyle;
2527
use Symfony\Component\Console\Tester\CommandTester;
2628

@@ -181,4 +183,44 @@ public function testMemoryConsumption()
181183

182184
$this->assertSame(0, memory_get_usage() - $start);
183185
}
186+
187+
public function testAskAndClearExpectFullSectionCleared()
188+
{
189+
$answer = 'Answer';
190+
$inputStream = fopen('php://memory', 'r+');
191+
fwrite($inputStream, $answer.\PHP_EOL);
192+
rewind($inputStream);
193+
$input = $this->createMock(Input::class);
194+
$sections = [];
195+
$output = new ConsoleSectionOutput(fopen('php://memory', 'r+', false), $sections, StreamOutput::VERBOSITY_NORMAL, true, new OutputFormatter());
196+
$input
197+
->method('isInteractive')
198+
->willReturn(true);
199+
$input
200+
->method('getStream')
201+
->willReturn($inputStream);
202+
203+
$style = new SymfonyStyle($input, $output);
204+
205+
$style->writeln('start');
206+
$style->write('foo');
207+
$style->writeln(' and bar');
208+
$givenAnswer = $style->ask('Dummy question?');
209+
$style->write('foo2'.\PHP_EOL);
210+
$output->write('bar2');
211+
$output->clear();
212+
213+
rewind($output->getStream());
214+
$this->assertEquals($answer, $givenAnswer);
215+
$this->assertEquals(
216+
'start'.\PHP_EOL. // write start
217+
'foo'.\PHP_EOL. // write foo
218+
"\x1b[1A\x1b[0Jfoo and bar".\PHP_EOL. // complete line
219+
\PHP_EOL.\PHP_EOL." \033[32mDummy question?\033[39m:".\PHP_EOL.' > '.\PHP_EOL.\PHP_EOL.\PHP_EOL. // question
220+
'foo2'.\PHP_EOL.\PHP_EOL. // write foo2
221+
'bar2'.\PHP_EOL. // write bar
222+
"\033[12A\033[0J", // clear 12 lines (11 output lines and one from the answer input return)
223+
stream_get_contents($output->getStream())
224+
);
225+
}
184226
}

0 commit comments

Comments
 (0)