public function testDoUpdatesWeb() { $this->setMwGlobals('wgCommandLineMode', false); $updates = ['1' => "deferred update 1;\n", '2' => "deferred update 2;\n", '2-1' => "deferred update 1 within deferred update 2;\n", '2-2' => "deferred update 2 within deferred update 2;\n", '3' => "deferred update 3;\n", '3-1' => "deferred update 1 within deferred update 3;\n", '3-2' => "deferred update 2 within deferred update 3;\n", '3-1-1' => "deferred update 1 within deferred update 1 within deferred update 3;\n", '3-2-1' => "deferred update 1 within deferred update 2 with deferred update 3;\n"]; DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['1']; }); DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['2']; DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['2-1']; }); DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['2-2']; }); }); DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['3']; DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['3-1']; DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['3-1-1']; }); }); DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['3-2']; DeferredUpdates::addCallableUpdate(function () use($updates) { echo $updates['3-2-1']; }); }); }); $this->assertEquals(3, DeferredUpdates::pendingUpdatesCount()); $this->expectOutputString(implode('', $updates)); DeferredUpdates::doUpdates(); $x = null; $y = null; DeferredUpdates::addCallableUpdate(function () use(&$x) { $x = 'Sherity'; }, DeferredUpdates::PRESEND); DeferredUpdates::addCallableUpdate(function () use(&$y) { $y = 'Marychu'; }, DeferredUpdates::POSTSEND); $this->assertNull($x, "Update not run yet"); $this->assertNull($y, "Update not run yet"); DeferredUpdates::doUpdates('run', DeferredUpdates::PRESEND); $this->assertEquals("Sherity", $x, "PRESEND update ran"); $this->assertNull($y, "POSTSEND update not run yet"); DeferredUpdates::doUpdates('run', DeferredUpdates::POSTSEND); $this->assertEquals("Marychu", $y, "POSTSEND update ran"); }
/** * @dataProvider provideCreatePages * @covers EditPage */ public function testCreatePageTrx($desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false) { $checkIds = []; $this->setMwGlobals('wgHooks', ['PageContentInsertComplete' => [function (WikiPage &$page, User &$user, Content $content, $summary, $minor, $u1, $u2, &$flags, Revision $revision) { // types/refs checked }], 'PageContentSaveComplete' => [function (WikiPage &$page, User &$user, Content $content, $summary, $minor, $u1, $u2, &$flags, Revision $revision, Status &$status, $baseRevId) use(&$checkIds) { $checkIds[] = $status->value['revision']->getId(); // types/refs checked }]]); wfGetDB(DB_MASTER)->begin(__METHOD__); $edit = ['wpTextbox1' => $editText]; if ($ignoreBlank) { $edit['wpIgnoreBlankArticle'] = 1; } $page = $this->assertEdit($pageTitle, null, $user, $edit, $expectedCode, $expectedText, $desc); $pageTitle2 = (string) $pageTitle . '/x'; $page2 = $this->assertEdit($pageTitle2, null, $user, $edit, $expectedCode, $expectedText, $desc); wfGetDB(DB_MASTER)->commit(__METHOD__); $this->assertEquals(0, DeferredUpdates::pendingUpdatesCount(), 'No deferred updates'); if ($expectedCode != EditPage::AS_BLANK_ARTICLE) { $latest = $page->getLatest(); $page->doDeleteArticleReal($pageTitle); $this->assertGreaterThan(0, $latest, "Page #1 revision ID updated in object"); $this->assertEquals($latest, $checkIds[0], "Revision #1 in Status for hook"); $latest2 = $page2->getLatest(); $page2->doDeleteArticleReal($pageTitle2); $this->assertGreaterThan(0, $latest2, "Page #2 revision ID updated in object"); $this->assertEquals($latest2, $checkIds[1], "Revision #2 in Status for hook"); } }