parse( '' . $inner . '' )); } private static function node(NodeIndex $index, string $id): Block { $block = $index->find('s0.r0.c0.' . $id); self::assertNotNull($block); return $block; } public function testRemovesAModulePresetFromTheStack(): void { $index = self::index( '' . '' . '' . '' . '' ); $rewrite = new DetachRewrite(new PresetScope('module', 'divi/button'), 'aaaaaaaaaa'); self::assertSame(['modulePreset' => ['bbbbbbbbbb']], $rewrite->rewrite(self::node($index, 'm0'))); self::assertSame(['x' => 1], $rewrite->rewrite(self::node($index, 'm1')), 'an empty stack leaves no key'); self::assertNull($rewrite->rewrite(self::node($index, 'm2')), 'another module'); self::assertSame([], $rewrite->rewrite(self::node($index, 'm3')), 'legacy string form'); self::assertNull($rewrite->rewrite(self::node($index, 'm4')), 'the ID is not in the stack'); } public function testRemovesAGroupPresetFromEveryEntryOfTheGroup(): void { $index = self::index( '' . '' . '' . '' ); $rewrite = new DetachRewrite(new PresetScope('group', 'divi/font-body'), 'gggggggggg'); $first = $rewrite->rewrite(self::node($index, 'm0')); self::assertSame(['hhhhhhhhhh'], $first['groupPreset']['content.decoration.bodyFont']['presetId'] ?? null); self::assertSame( ['presetId' => ['gggggggggg'], 'groupName' => 'divi/spacing'], $first['groupPreset']['module.decoration.spacing'] ?? null, 'another group keeps its preset' ); self::assertSame(['x' => 1], $rewrite->rewrite(self::node($index, 'm1')), 'empty entry and map are removed'); self::assertNull($rewrite->rewrite(self::node($index, 'm2')), 'the ID sits in another group'); self::assertNull($rewrite->rewrite(self::node($index, 'x0')), 'not a Divi block'); } public function testAnUntouchedBlockStaysNull(): void { $index = self::index(''); self::assertNull( (new DetachRewrite(new PresetScope('module', 'divi/button'), 'aaaaaaaaaa'))->rewrite(self::node($index, 'm0')) ); self::assertNull( (new DetachRewrite(new PresetScope('group', 'divi/font-body'), 'gggggggggg'))->rewrite(self::node($index, 'm1')) ); } public function testNotesAreEmpty(): void { $index = self::index(''); self::assertSame( [], (new DetachRewrite(new PresetScope('module', 'divi/button'), 'aaaaaaaaaa')) ->notes(self::node($index, 'm0'), 's0.r0.c0.m0') ); } public function testInstancesThatMentionTheIdConcernTheRewrite(): void { $index = self::index( '' . '' . '' . '' ); $rewrite = new DetachRewrite(new PresetScope('module', 'divi/button'), 'aaaaaaaaaa'); $other = new DetachRewrite(new PresetScope('module', 'divi/button'), 'bbbbbbbbbb'); self::assertTrue($rewrite->concernsInstance(self::node($index, 'g0')), 'localAttrs'); self::assertTrue($rewrite->concernsInstance(self::node($index, 'g1')), 'snapshot of a child'); self::assertFalse($other->concernsInstance(self::node($index, 'g0'))); } }