summaryrefslogtreecommitdiffstats
path: root/core/modules/simpletest/tests/queue.test
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/simpletest/tests/queue.test')
-rw-r--r--core/modules/simpletest/tests/queue.test120
1 files changed, 120 insertions, 0 deletions
diff --git a/core/modules/simpletest/tests/queue.test b/core/modules/simpletest/tests/queue.test
new file mode 100644
index 0000000..e8f4c2c
--- /dev/null
+++ b/core/modules/simpletest/tests/queue.test
@@ -0,0 +1,120 @@
+<?php
+
+use Drupal\Core\Queue\Memory;
+use Drupal\Core\Queue\System;
+
+/**
+ * Tests the basic queue functionality.
+ */
+class QueueTestCase extends DrupalWebTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Queue functionality',
+ 'description' => 'Queues and dequeues a set of items to check the basic queue functionality.',
+ 'group' => 'Queue',
+ );
+ }
+
+ /**
+ * Tests the System queue.
+ */
+ public function testSystemQueue() {
+ // Create two queues.
+ $queue1 = new System($this->randomName());
+ $queue1->createQueue();
+ $queue2 = new System($this->randomName());
+ $queue2->createQueue();
+
+ $this->queueTest($queue1, $queue2);
+ }
+
+ /**
+ * Tests the Memory queue.
+ */
+ public function testMemoryQueue() {
+ // Create two queues.
+ $queue1 = new Memory($this->randomName());
+ $queue1->createQueue();
+ $queue2 = new Memory($this->randomName());
+ $queue2->createQueue();
+
+ $this->queueTest($queue1, $queue2);
+ }
+
+ /**
+ * Queues and dequeues a set of items to check the basic queue functionality.
+ *
+ * @param Drupal\Core\Queue\QueueInterface $queue1
+ * An instantiated queue object.
+ * @param Drupal\Core\Queue\QueueInterface $queue2
+ * An instantiated queue object.
+ */
+ protected function queueTest($queue1, $queue2) {
+ // Create four items.
+ $data = array();
+ for ($i = 0; $i < 4; $i++) {
+ $data[] = array($this->randomName() => $this->randomName());
+ }
+
+ // Queue items 1 and 2 in the queue1.
+ $queue1->createItem($data[0]);
+ $queue1->createItem($data[1]);
+
+ // Retrieve two items from queue1.
+ $items = array();
+ $new_items = array();
+
+ $items[] = $item = $queue1->claimItem();
+ $new_items[] = $item->data;
+
+ $items[] = $item = $queue1->claimItem();
+ $new_items[] = $item->data;
+
+ // First two dequeued items should match the first two items we queued.
+ $this->assertEqual($this->queueScore($data, $new_items), 2, t('Two items matched'));
+
+ // Add two more items.
+ $queue1->createItem($data[2]);
+ $queue1->createItem($data[3]);
+
+ $this->assertTrue($queue1->numberOfItems(), t('Queue 1 is not empty after adding items.'));
+ $this->assertFalse($queue2->numberOfItems(), t('Queue 2 is empty while Queue 1 has items'));
+
+ $items[] = $item = $queue1->claimItem();
+ $new_items[] = $item->data;
+
+ $items[] = $item = $queue1->claimItem();
+ $new_items[] = $item->data;
+
+ // All dequeued items should match the items we queued exactly once,
+ // therefore the score must be exactly 4.
+ $this->assertEqual($this->queueScore($data, $new_items), 4, t('Four items matched'));
+
+ // There should be no duplicate items.
+ $this->assertEqual($this->queueScore($new_items, $new_items), 4, t('Four items matched'));
+
+ // Delete all items from queue1.
+ foreach ($items as $item) {
+ $queue1->deleteItem($item);
+ }
+
+ // Check that both queues are empty.
+ $this->assertFalse($queue1->numberOfItems(), t('Queue 1 is empty'));
+ $this->assertFalse($queue2->numberOfItems(), t('Queue 2 is empty'));
+ }
+
+ /**
+ * Returns the number of equal items in two arrays.
+ */
+ protected function queueScore($items, $new_items) {
+ $score = 0;
+ foreach ($items as $item) {
+ foreach ($new_items as $new_item) {
+ if ($item === $new_item) {
+ $score++;
+ }
+ }
+ }
+ return $score;
+ }
+}