fix: Variablen-Detach meldet verbleibende eingebettete Verweise und lehnt Werte mit Verweis, Markup oder leerem Inhalt ab
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
e951cc1353
commit
62f8465e60
@@ -148,19 +148,42 @@ final class VariableDetachRewriteTest extends TestCase
|
||||
$attrs = $rewrite->rewrite($first);
|
||||
self::assertSame($embedded, $attrs['content']['innerContent']['desktop']['value'] ?? null);
|
||||
$first->setAttrs((array) $attrs);
|
||||
self::assertSame(
|
||||
['s0.r0.c0.m0: Die Variable steht hier eingebettet in einem längeren Text; dieser Verweis bleibt stehen – '
|
||||
. 'im Divi-Builder ersetzen.'],
|
||||
$rewrite->notes($first, 's0.r0.c0.m0')
|
||||
);
|
||||
self::assertStringContainsString('eingebettet', (string) $rewrite->leftover($first));
|
||||
self::assertStringContainsString('bleibt unverändert', (string) $rewrite->leftover($first));
|
||||
self::assertNotNull($rewrite->leftover(self::node($index, 'm1')), 'embedded only: still reported');
|
||||
self::assertNull($rewrite->rewrite(self::node($index, 'm1')), 'only embedded: nothing to replace');
|
||||
self::assertSame(
|
||||
[],
|
||||
(new VariableDetachRewrite(self::CLAIM, 'x', 'strings'))->notes($first, 's0.r0.c0.m0'),
|
||||
'another variable is not noted'
|
||||
self::assertNull(
|
||||
(new VariableDetachRewrite(self::CLAIM, 'x', 'strings'))->leftover($first),
|
||||
'another variable is not reported'
|
||||
);
|
||||
}
|
||||
|
||||
public function testUnsafeBeforeAndAfterLeaveTheBlockWholeAndReportIt(): void
|
||||
{
|
||||
$index = self::index([
|
||||
['divi/text', ['content' => ['innerContent' => self::desktop(self::ref(self::CLAIM, ['before' => '<b>']))]]],
|
||||
['divi/text', ['content' => ['innerContent' => self::desktop(
|
||||
// Built by hand: VariableRef::serialize() itself refuses a marker in the settings.
|
||||
'$variable(' . Json::encode(['type' => 'content', 'value' => [
|
||||
'name' => self::CLAIM, 'settings' => ['after' => 'a $variable(b']
|
||||
]]) . ')$'
|
||||
)]]],
|
||||
['divi/text', ['content' => ['innerContent' => self::desktop(self::ref(self::CLAIM, ['before' => '<b>']))]]],
|
||||
]);
|
||||
$strict = new VariableDetachRewrite(self::CLAIM, 'x', 'strings');
|
||||
$allowed = new VariableDetachRewrite(self::CLAIM, 'x', 'strings', true);
|
||||
|
||||
self::assertNull($strict->rewrite(self::node($index, 'm0')));
|
||||
self::assertStringContainsString('Markup', (string) $strict->leftover(self::node($index, 'm0')));
|
||||
self::assertNull($allowed->rewrite(self::node($index, 'm1')), 'a marker is never inlined');
|
||||
self::assertNotNull($allowed->leftover(self::node($index, 'm1')));
|
||||
$third = self::node($index, 'm2');
|
||||
$attrs = (array) $allowed->rewrite($third);
|
||||
self::assertSame('<b>x', $attrs['content']['innerContent']['desktop']['value'] ?? null);
|
||||
$third->setAttrs($attrs);
|
||||
self::assertNull($allowed->leftover($third));
|
||||
}
|
||||
|
||||
public function testInstancesThatMentionTheIdConcernTheRewrite(): void
|
||||
{
|
||||
$index = self::index([
|
||||
|
||||
Reference in New Issue
Block a user