// Now let us trigger 7 instances of the event.
$event = \mod_book\event\course_module_instance_list_viewed::create_from_course($course);
$event->trigger();
- sleep(1); // Add a second delay, to prevent time collisions.
+ $this->waitForSecond(); // Add a second delay, to prevent time collisions.
}
$this->run_adhock_tasks();
$messages = $messagesink->get_messages();
}
}
}
+
+ /**
+ * Wait for a second to roll over, ensures future calls to time() return a different result.
+ *
+ * This is implemented instead of sleep() as we do not need to wait a full second. In some cases
+ * due to calls we may wait more than sleep() would have, on average it will be less.
+ */
+ public function waitForSecond() {
+ $starttime = time();
+ while (time() == $starttime) {
+ usleep(50000);
+ }
+ }
}
$this->setCurrentTimeStart();
$this->assertTimeCurrent(time());
- sleep(2);
+ $this->waitForSecond();
$this->assertTimeCurrent(time());
$this->assertTimeCurrent(time()-1);
$timecreated = $category1->timemodified;
$this->assertSame('Cat1', $category1->name);
$this->assertTrue(empty($category1->description));
- sleep(2);
+ $this->waitForSecond();
$testdescription = 'This is cat 1 а также русский текст';
$category1->update(array('description' => $testdescription));
$this->assertSame($testdescription, $category1->description);
$this->assertEquals(1, $progress->get_direction());
$this->assertTimeCurrent($progress->get_last_wibble());
// Wait 1 second to ensure that all code in update_progress is run.
- sleep(1);
+ $this->waitForSecond();
$progress->update_progress();
$this->assertEquals(2, $progress->get_current_state());
$this->assertEquals(1, $progress->get_direction());
// Set wibbler to final state and progress to check that it reverses direction.
$progress->set_current_state(core_mock_progress_display::WIBBLE_STATES);
- sleep(1);
+ $this->waitForSecond();
$progress->update_progress();
$this->assertEquals(core_mock_progress_display::WIBBLE_STATES - 1, $progress->get_current_state());
$this->assertEquals(-1, $progress->get_direction());
// Set wibbler to beginning and progress to check that it reverses direction.
$progress->set_current_state(0);
- sleep(1);
+ $this->waitForSecond();
$progress->update_progress();
$this->assertEquals(1, $progress->get_current_state());
$this->assertEquals(1, $progress->get_direction());
$assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0);
// This is required so that the submissions timemodified > the grade timemodified.
- sleep(2);
+ $this->waitForSecond();
// Edit the submission again.
$this->setUser($this->students[0]);
$assign->testable_update_submission($submission, $this->students[0]->id, true, false);
// This is required so that the submissions timemodified > the grade timemodified.
- sleep(2);
+ $this->waitForSecond();
// Allow the student another attempt.
$this->teachers[0]->ignoresesskey = true;
// This is to make sure the grade happens after the submission because
// we have no control over the timemodified values.
- sleep(1);
+ $this->waitForSecond();
// Grade the submission.
$this->setUser($this->teachers[0]);
$plugin->save($submission, $data);
// Wait 1 second so the submission and grade do not have the same timemodified.
- sleep(1);
+ $this->waitForSecond();
// Simulate adding a grade.
$this->setUser($this->editingteachers[0]);
$data = new stdClass();