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");
 }
Exemple #2
0
 /**
  * @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");
     }
 }