public function test_legacy()
 {
     global $DB;
     $this->resetAfterTest(true);
     $observers = array(array('eventname' => '\\core_tests\\event\\unittest_executed', 'callback' => '\\core_tests\\event\\unittest_observer::observe_one'), array('eventname' => '*', 'callback' => '\\core_tests\\event\\unittest_observer::observe_all', 'includefile' => null, 'internal' => 1, 'priority' => 9999));
     $DB->delete_records('log', array());
     events_update_definition('unittest');
     $DB->delete_records_select('events_handlers', "component <> 'unittest'");
     events_get_handlers('reset');
     $this->assertEquals(3, $DB->count_records('events_handlers'));
     set_config('loglifetime', 60 * 60 * 24 * 5);
     \core\event\manager::phpunit_replace_observers($observers);
     \core_tests\event\unittest_observer::reset();
     $event1 = \core_tests\event\unittest_executed::create(array('courseid' => 1, 'context' => \context_system::instance(), 'other' => array('sample' => 5, 'xx' => 10)));
     $event1->trigger();
     $event2 = \core_tests\event\unittest_executed::create(array('courseid' => 2, 'context' => \context_system::instance(), 'other' => array('sample' => 6, 'xx' => 11)));
     $event2->nest = true;
     $event2->trigger();
     $this->assertSame(array('observe_all-1', 'observe_one-1', 'legacy_handler-1', 'observe_all-nesting-2', 'legacy_handler-3', 'observe_one-2', 'observe_all-3', 'observe_one-3', 'legacy_handler-2'), \core_tests\event\unittest_observer::$info);
     $this->assertSame($event1, \core_tests\event\unittest_observer::$event[0]);
     $this->assertSame($event1, \core_tests\event\unittest_observer::$event[1]);
     $this->assertSame(array(1, 5), \core_tests\event\unittest_observer::$event[2]);
     $logs = $DB->get_records('log', array(), 'id ASC');
     $this->assertCount(3, $logs);
     $log = array_shift($logs);
     $this->assertEquals(1, $log->course);
     $this->assertSame('core_unittest', $log->module);
     $this->assertSame('view', $log->action);
     $log = array_shift($logs);
     $this->assertEquals(2, $log->course);
     $this->assertSame('core_unittest', $log->module);
     $this->assertSame('view', $log->action);
     $log = array_shift($logs);
     $this->assertEquals(3, $log->course);
     $this->assertSame('core_unittest', $log->module);
     $this->assertSame('view', $log->action);
 }
 /**
  * This tests the internal method of \core\event\manager::get_observing_classes.
  *
  * What we are testing is if we can subscribe to a parent event class, instead of only
  * the base event class or the final, implemented event class.  This enables us to subscribe
  * to things like all course module view events, all comment created events, etc.
  */
 public function test_observe_parent_event()
 {
     $this->resetAfterTest();
     // Ensure this has been reset prior to using it.
     \core_tests\event\unittest_observer::reset();
     $course = $this->getDataGenerator()->create_course();
     $feed = $this->getDataGenerator()->create_module('feedback', ['course' => $course->id]);
     $context = context_module::instance($feed->cmid);
     $data = ['context' => $context, 'courseid' => $course->id, 'objectid' => $feed->id];
     // This assertion ensures that basic observe use case did not break.
     \core\event\manager::phpunit_replace_observers([['eventname' => '\\core_tests\\event\\course_module_viewed', 'callback' => ['\\core_tests\\event\\unittest_observer', 'observe_all_alt']]]);
     $pageevent = \core_tests\event\course_module_viewed::create($data);
     $pageevent->trigger();
     $this->assertSame(['observe_all_alt'], \core_tests\event\unittest_observer::$info, 'Error observing triggered event');
     \core_tests\event\unittest_observer::reset();
     // This assertion tests that we can observe an abstract (parent) class instead of the implemented class.
     \core\event\manager::phpunit_replace_observers([['eventname' => '\\core\\event\\course_module_viewed', 'callback' => ['\\core_tests\\event\\unittest_observer', 'observe_all_alt']]]);
     $pageevent = \core_tests\event\course_module_viewed::create($data);
     $pageevent->trigger();
     $this->assertSame(['observe_all_alt'], \core_tests\event\unittest_observer::$info, 'Error observing parent class event');
     \core_tests\event\unittest_observer::reset();
 }