Loading core/lib/Drupal/Core/Batch/BatchBuilder.php +4 −4 Original line number Diff line number Diff line Loading @@ -162,12 +162,12 @@ public function setTitle($title) { * * This callback will be executed if the batch process is done. * * @param callable $callback * @param callable|string $callback * The callback. * * @return $this */ public function setFinishCallback(callable $callback) { public function setFinishCallback(callable|string $callback) { $this->finished = $callback; return $this; } Loading Loading @@ -329,14 +329,14 @@ public function setQueue($name, $class) { /** * Adds a batch operation. * * @param callable $callback * @param callable|string $callback * The name of the callback function. * @param array $arguments * An array of arguments to pass to the callback function. * * @return $this */ public function addOperation(callable $callback, array $arguments = []) { public function addOperation(callable|string $callback, array $arguments = []) { $this->operations[] = [$callback, $arguments]; return $this; } Loading core/modules/system/tests/modules/batch_test/src/BatchTestDefinitions.php +18 −25 Original line number Diff line number Diff line Loading @@ -27,16 +27,15 @@ public function batch0(): array { * Operations: op 1 from 1 to 10. */ public function batch1(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (int) (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished1']); ->setFinishCallback(BatchTestCallbacks::class . ':finished1'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch1']; Loading @@ -48,14 +47,13 @@ public function batch1(): array { * Operations: op 2 from 1 to 10. */ public function batch2(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->addOperation([$batch_test_callbacks, 'callback2'], [1, $total, $sleep]) ->setFinishCallback([$batch_test_callbacks, 'finished2']); ->addOperation(BatchTestCallbacks::class . ':callback2', [1, $total, $sleep]) ->setFinishCallback(BatchTestCallbacks::class . ':finished2'); return $batch_builder->toArray() + ['batch_test_id' => 'batch2']; } Loading Loading @@ -98,19 +96,18 @@ public function batch3(): array { * - op 1 from 6 to 10, */ public function batch4(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished4']); ->setFinishCallback(BatchTestCallbacks::class . ':finished4'); for ($i = 1; $i <= round($total / 2); $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } $batch_builder->addOperation([$batch_test_callbacks, 'nestedBatchCallback'], [[2]]); $batch_builder->addOperation(BatchTestCallbacks::class . ':nestedBatchCallback', [[2]]); for ($i = round($total / 2) + 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch4']; Loading @@ -122,15 +119,14 @@ public function batch4(): array { * Operations: op 1 from 1 to 10. */ public function batch5(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished5']); ->setFinishCallback(BatchTestCallbacks::class . ':finished5'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback5'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback5', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch5']; Loading @@ -142,15 +138,14 @@ public function batch5(): array { * Operations: op 6 from 1 to 10. */ public function batch6(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished6']); ->setFinishCallback(BatchTestCallbacks::class . ':finished6'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback6'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback6', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch6']; Loading @@ -166,19 +161,18 @@ public function batch6(): array { * - op 7 from 6 to 10, */ public function batch7(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished7']); ->setFinishCallback(BatchTestCallbacks::class . ':finished7'); for ($i = 1; $i <= $total / 2; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback7'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback7', [$i, $sleep]); } $batch_builder->addOperation([$batch_test_callbacks, 'nestedBatchCallback'], [[6, 5]]); $batch_builder->addOperation(BatchTestCallbacks::class . ':nestedBatchCallback', [[6, 5]]); for ($i = ($total / 2) + 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback7'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback7', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch7']; Loading @@ -188,10 +182,9 @@ public function batch7(): array { * Batch 8: Throws an exception. */ public function batch8(): array { $batch_test_callbacks = new BatchTestCallbacks(); $batch_builder = (new BatchBuilder()) ->addOperation([$batch_test_callbacks, 'callback8'], [FALSE]) ->addOperation([$batch_test_callbacks, 'callback8'], [TRUE]); ->addOperation(BatchTestCallbacks::class . ':callback8', [FALSE]) ->addOperation(BatchTestCallbacks::class . ':callback8', [TRUE]); return $batch_builder->toArray() + ['batch_test_id' => 'batch8']; } Loading core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php +44 −7 Original line number Diff line number Diff line Loading @@ -60,12 +60,45 @@ public function testSetTitle(): void { /** * Tests setFinishCallback(). */ public function testSetFinishCallback(): void { public function testSetFinishCallbackStaticSingle(): void { $batch = (new BatchBuilder()) ->setFinishCallback('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback') ->setFinishCallback(static::class . ':finishedCallback') ->toArray(); $this->assertEquals('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackStaticDouble(): void { $batch = (new BatchBuilder()) ->setFinishCallback(static::class . '::finishedCallback') ->toArray(); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackString(): void { $batch = (new BatchBuilder()) ->setFinishCallback('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback') ->toArray(); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackArray(): void { $batch = (new BatchBuilder()) ->setFinishCallback([static::class, 'finishedCallback']) ->toArray(); $this->assertEquals(['Drupal\Tests\Core\Batch\BatchBuilderTest', 'finishedCallback'], $batch['finished']); } /** Loading Loading @@ -219,14 +252,18 @@ public function testAddOperation(): void { ], $batch['operations']); $batch = $batch_builder ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]) ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]) ->addOperation(static::class . ':operationCallback', [2]) ->addOperation(static::class . ':operationCallback', [3]) ->addOperation('Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [4]) ->addOperation([static::class, 'operationCallback'], [5]) ->toArray(); $this->assertEquals([ ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []], ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]], ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [2]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [3]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [4]], [[static::class, 'operationCallback'], [5]], ], $batch['operations']); } Loading Loading
core/lib/Drupal/Core/Batch/BatchBuilder.php +4 −4 Original line number Diff line number Diff line Loading @@ -162,12 +162,12 @@ public function setTitle($title) { * * This callback will be executed if the batch process is done. * * @param callable $callback * @param callable|string $callback * The callback. * * @return $this */ public function setFinishCallback(callable $callback) { public function setFinishCallback(callable|string $callback) { $this->finished = $callback; return $this; } Loading Loading @@ -329,14 +329,14 @@ public function setQueue($name, $class) { /** * Adds a batch operation. * * @param callable $callback * @param callable|string $callback * The name of the callback function. * @param array $arguments * An array of arguments to pass to the callback function. * * @return $this */ public function addOperation(callable $callback, array $arguments = []) { public function addOperation(callable|string $callback, array $arguments = []) { $this->operations[] = [$callback, $arguments]; return $this; } Loading
core/modules/system/tests/modules/batch_test/src/BatchTestDefinitions.php +18 −25 Original line number Diff line number Diff line Loading @@ -27,16 +27,15 @@ public function batch0(): array { * Operations: op 1 from 1 to 10. */ public function batch1(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (int) (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished1']); ->setFinishCallback(BatchTestCallbacks::class . ':finished1'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch1']; Loading @@ -48,14 +47,13 @@ public function batch1(): array { * Operations: op 2 from 1 to 10. */ public function batch2(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->addOperation([$batch_test_callbacks, 'callback2'], [1, $total, $sleep]) ->setFinishCallback([$batch_test_callbacks, 'finished2']); ->addOperation(BatchTestCallbacks::class . ':callback2', [1, $total, $sleep]) ->setFinishCallback(BatchTestCallbacks::class . ':finished2'); return $batch_builder->toArray() + ['batch_test_id' => 'batch2']; } Loading Loading @@ -98,19 +96,18 @@ public function batch3(): array { * - op 1 from 6 to 10, */ public function batch4(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished4']); ->setFinishCallback(BatchTestCallbacks::class . ':finished4'); for ($i = 1; $i <= round($total / 2); $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } $batch_builder->addOperation([$batch_test_callbacks, 'nestedBatchCallback'], [[2]]); $batch_builder->addOperation(BatchTestCallbacks::class . ':nestedBatchCallback', [[2]]); for ($i = round($total / 2) + 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback1'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback1', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch4']; Loading @@ -122,15 +119,14 @@ public function batch4(): array { * Operations: op 1 from 1 to 10. */ public function batch5(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished5']); ->setFinishCallback(BatchTestCallbacks::class . ':finished5'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback5'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback5', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch5']; Loading @@ -142,15 +138,14 @@ public function batch5(): array { * Operations: op 6 from 1 to 10. */ public function batch6(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished6']); ->setFinishCallback(BatchTestCallbacks::class . ':finished6'); for ($i = 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback6'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback6', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch6']; Loading @@ -166,19 +161,18 @@ public function batch6(): array { * - op 7 from 6 to 10, */ public function batch7(): array { $batch_test_callbacks = new BatchTestCallbacks(); // Ensure the batch takes at least two iterations. $total = 10; $sleep = (1000000 / $total) * 2; $batch_builder = (new BatchBuilder()) ->setFinishCallback([$batch_test_callbacks, 'finished7']); ->setFinishCallback(BatchTestCallbacks::class . ':finished7'); for ($i = 1; $i <= $total / 2; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback7'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback7', [$i, $sleep]); } $batch_builder->addOperation([$batch_test_callbacks, 'nestedBatchCallback'], [[6, 5]]); $batch_builder->addOperation(BatchTestCallbacks::class . ':nestedBatchCallback', [[6, 5]]); for ($i = ($total / 2) + 1; $i <= $total; $i++) { $batch_builder->addOperation([$batch_test_callbacks, 'callback7'], [$i, $sleep]); $batch_builder->addOperation(BatchTestCallbacks::class . ':callback7', [$i, $sleep]); } return $batch_builder->toArray() + ['batch_test_id' => 'batch7']; Loading @@ -188,10 +182,9 @@ public function batch7(): array { * Batch 8: Throws an exception. */ public function batch8(): array { $batch_test_callbacks = new BatchTestCallbacks(); $batch_builder = (new BatchBuilder()) ->addOperation([$batch_test_callbacks, 'callback8'], [FALSE]) ->addOperation([$batch_test_callbacks, 'callback8'], [TRUE]); ->addOperation(BatchTestCallbacks::class . ':callback8', [FALSE]) ->addOperation(BatchTestCallbacks::class . ':callback8', [TRUE]); return $batch_builder->toArray() + ['batch_test_id' => 'batch8']; } Loading
core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php +44 −7 Original line number Diff line number Diff line Loading @@ -60,12 +60,45 @@ public function testSetTitle(): void { /** * Tests setFinishCallback(). */ public function testSetFinishCallback(): void { public function testSetFinishCallbackStaticSingle(): void { $batch = (new BatchBuilder()) ->setFinishCallback('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback') ->setFinishCallback(static::class . ':finishedCallback') ->toArray(); $this->assertEquals('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackStaticDouble(): void { $batch = (new BatchBuilder()) ->setFinishCallback(static::class . '::finishedCallback') ->toArray(); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackString(): void { $batch = (new BatchBuilder()) ->setFinishCallback('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback') ->toArray(); $this->assertEquals('Drupal\Tests\Core\Batch\BatchBuilderTest:finishedCallback', $batch['finished']); } /** * Tests setFinishCallback(). */ public function testSetFinishCallbackArray(): void { $batch = (new BatchBuilder()) ->setFinishCallback([static::class, 'finishedCallback']) ->toArray(); $this->assertEquals(['Drupal\Tests\Core\Batch\BatchBuilderTest', 'finishedCallback'], $batch['finished']); } /** Loading Loading @@ -219,14 +252,18 @@ public function testAddOperation(): void { ], $batch['operations']); $batch = $batch_builder ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]) ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]) ->addOperation(static::class . ':operationCallback', [2]) ->addOperation(static::class . ':operationCallback', [3]) ->addOperation('Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [4]) ->addOperation([static::class, 'operationCallback'], [5]) ->toArray(); $this->assertEquals([ ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []], ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]], ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [2]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [3]], ['Drupal\Tests\Core\Batch\BatchBuilderTest:operationCallback', [4]], [[static::class, 'operationCallback'], [5]], ], $batch['operations']); } Loading