From 182d9990f19f2cde73270c7afb00c62e07c86ea5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20Mudr=C3=A1k?= Date: Thu, 19 Nov 2015 13:21:49 +0100 Subject: [PATCH] MDL-52214 core: Fix the is_web_crawler() regression In MDL-50891, the is_web_crawler() was refactored into a core_useragent method and the function itself was deprecated. However, there were no unit tests kept to check the backwards compatible behaviour. It turned out that the deprecated function leads to PHP fatal error due to a typo. This patch fixes the typo and brings back the previous unit tests. To be able to explicitly check the raised debugging message, the test case now must be subclass of advanced_testcase. Additionally fixes missing info about the function being deprecated. --- lib/deprecatedlib.php | 4 +-- lib/tests/useragent_test.php | 59 +++++++++++++++++++++++++++++++++++- lib/upgrade.txt | 1 + 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php index 9ecb9b64060..d09fcc0a520 100644 --- a/lib/deprecatedlib.php +++ b/lib/deprecatedlib.php @@ -2395,8 +2395,8 @@ function get_referer($stripquery = true) { * @deprecated since Moodle 3.0 use \core_useragent::is_web_crawler instead. */ function is_web_crawler() { - debugging("is_web_crawler() has been deprecated, please use \\core_useragent\\is_web_crawler() instead.", DEBUG_DEVELOPER); - return core_useragent::is_crawler(); + debugging('is_web_crawler() has been deprecated, please use core_useragent::is_web_crawler() instead.', DEBUG_DEVELOPER); + return core_useragent::is_web_crawler(); } /** diff --git a/lib/tests/useragent_test.php b/lib/tests/useragent_test.php index b81c59aee1f..5196395e5ab 100644 --- a/lib/tests/useragent_test.php +++ b/lib/tests/useragent_test.php @@ -29,7 +29,7 @@ * @copyright 2013 Sam Hemelryk * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class core_useragent_testcase extends basic_testcase { +class core_useragent_testcase extends advanced_testcase { /** * Restores the user agent to the default one. @@ -1865,4 +1865,61 @@ class core_useragent_testcase extends basic_testcase { $expectation = isset($tests['is_web_crawler']) ? $tests['is_web_crawler'] : false; $this->assertSame($expectation, core_useragent::is_web_crawler()); } + + /** + * Regression tests for the deprecated is_web_crawler() function + */ + public function test_deprecated_is_web_crawler() { + + $browsers = array( + 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:18.0) Gecko/18.0 Firefox/18.0', + 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412', + 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10', + 'Opera/9.0 (Windows NT 5.1; U; en)', + 'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 –Nexus', + 'Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5', + ); + $crawlers = array( + // Google. + 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)', + 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)', + 'Googlebot-Image/1.0', + // Yahoo. + 'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)', + // Bing. + 'Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)', + 'Mozilla/5.0 (compatible; bingbot/2.0 +http://www.bing.com/bingbot.htm)', + // MSN. + 'msnbot/2.1', + // Yandex. + 'Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)', + 'Mozilla/5.0 (compatible; YandexImages/3.0; +http://yandex.com/bots)', + // AltaVista. + 'AltaVista V2.0B crawler@evreka.com', + // ZoomSpider. + 'ZoomSpider - wrensoft.com [ZSEBOT]', + // Baidu. + 'Baiduspider+(+http://www.baidu.com/search/spider_jp.html)', + 'Baiduspider+(+http://www.baidu.com/search/spider.htm)', + 'BaiDuSpider', + // Ask.com. + 'User-Agent: Mozilla/2.0 (compatible; Ask Jeeves/Teoma)', + ); + + foreach ($browsers as $agent) { + core_useragent::instance(true, $agent); + $this->assertSame($agent, core_useragent::get_user_agent_string()); + $this->assertFalse(is_web_crawler()); + $this->assertDebuggingCalled('is_web_crawler() has been deprecated, please use core_useragent::is_web_crawler() instead.', + DEBUG_DEVELOPER); + } + foreach ($crawlers as $agent) { + core_useragent::instance(true, $agent); + $this->assertSame($agent, core_useragent::get_user_agent_string()); + $this->assertTrue(is_web_crawler(), "$agent should be considered a search engine"); + $this->assertDebuggingCalled('is_web_crawler() has been deprecated, please use core_useragent::is_web_crawler() instead.', + DEBUG_DEVELOPER); + } + } } diff --git a/lib/upgrade.txt b/lib/upgrade.txt index 7b5641fb6a0..c38064a04ee 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -151,6 +151,7 @@ information provided here is intended especially for developers. line interface scripts. * External function core_course_external::get_course_contents returned parameter "name" has been changed to PARAM_RAW, this is because the new external_format_string function may return raw data if the global moodlewssettingraw parameter is used. +* Function is_web_crawler() has been deprecated, please use core_useragent::is_web_crawler() instead. === 2.9.1 === -- 2.43.0