command = $options?->toCommand(); $structure = '(("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "BASE64" 16 1)' . '("TEXT" "HTML" ("CHARSET" "UTF-8") NIL NIL "7BIT" 12 1) "ALTERNATIVE" ("BOUNDARY" "b") NIL NIL)'; yield 7 => FetchMessageParser::parse( "* 1 FETCH (UID 7 BODYSTRUCTURE {$structure} BODY[1] {16}\r\nSGVsbG8gd29ybGQ= BODY[2] {12}\r\n

Hello

)" ); } }; $sections = $live->messageSections('INBOX', 7, '1', '2'); $this->assertStringContainsString('BODYSTRUCTURE', (string) $live->command); $this->assertStringContainsString('BODY.PEEK[1]', (string) $live->command); $this->assertStringContainsString('BODY.PEEK[2]', (string) $live->command); $this->assertSame(['1' => 'Hello world', '2' => '

Hello

'], $sections); } public function testCompleteSectionReplacesNestedContentAndClearsTheMark(): void { $properties = new MessageProperties([]); $properties->jsonDeserialize(['body' => [ 'partId' => '1', 'type' => 'multipart/alternative', 'subParts' => [ ['partId' => '1.1', 'type' => 'text/plain', 'content' => 'Hi'], ['partId' => '1.2', 'type' => 'text/html', 'content' => '

Hello wor'], ], ]]); $properties->setIncompleteSections('1.2'); $this->assertTrue($properties->completeSection('1.2', '

Hello world

')); $this->assertFalse($properties->completeSection('9', 'x')); $this->assertSame('

Hello world

', $properties->getBodyTextHtml()); $this->assertSame('Hi', $properties->getBodyTextPlain()); $this->assertSame([], $properties->getIncompleteSections()); } }