diff --git a/.upgradenotes/MDL-82212-2024081207484596.yml b/.upgradenotes/MDL-82212-2024081207484596.yml new file mode 100644 index 0000000000000..838096c78f14e --- /dev/null +++ b/.upgradenotes/MDL-82212-2024081207484596.yml @@ -0,0 +1,7 @@ +issueNumber: MDL-82212 +notes: + tool_behat: + - message: >- + Behat tests are now checking for deprecated icons. This check can be + disabled by using the --no-icon-deprecations option in the behat CLI. + type: improved diff --git a/admin/tool/behat/cli/init.php b/admin/tool/behat/cli/init.php index 87f7774260595..26f58a5c27065 100644 --- a/admin/tool/behat/cli/init.php +++ b/admin/tool/behat/cli/init.php @@ -54,6 +54,7 @@ 'composer-upgrade' => true, 'composer-self-update' => true, 'scss-deprecations' => false, + 'no-icon-deprecations' => false, ), array( 'j' => 'parallel', @@ -70,18 +71,20 @@ Usage: php init.php [--parallel=value [--maxruns=value] [--fromrun=value --torun=value]] - [--no-axe] [--scss-deprecations] [-o | --optimize-runs] [-a | --add-core-features-to-theme] + [--no-axe] [--scss-deprecations] [--no-icon-deprecations] [-o | --optimize-runs] + [-a | --add-core-features-to-theme] [--no-composer-self-update] [--no-composer-upgrade] [--disable-composer] [--help] Options: --j, --parallel Number of parallel behat run to initialise --m, --maxruns Max parallel processes to be executed at one time ---fromrun Execute run starting from (Used for parallel runs on different vms) ---torun Execute run till (Used for parallel runs on different vms) ---no-axe Disable axe accessibility tests. ---scss-deprecations Enable SCSS deprecation checks. +-j, --parallel Number of parallel behat run to initialise +-m, --maxruns Max parallel processes to be executed at one time +--fromrun Execute run starting from (Used for parallel runs on different vms) +--torun Execute run till (Used for parallel runs on different vms) +--no-axe Disable axe accessibility tests. +--scss-deprecations Enable SCSS deprecation checks. +--no-icon-deprecations Disable icon deprecation checks. -o, --optimize-runs Split features with specified tags in all parallel runs. @@ -134,6 +137,7 @@ 'add-core-features-to-theme', 'axe', 'scss-deprecations', + 'no-icon-deprecations', ]; foreach ($cmdoptionsforsinglerun as $option) { diff --git a/admin/tool/behat/cli/util.php b/admin/tool/behat/cli/util.php index 7d36ffa611cb9..0a65b4e0a2b88 100644 --- a/admin/tool/behat/cli/util.php +++ b/admin/tool/behat/cli/util.php @@ -59,6 +59,7 @@ 'add-core-features-to-theme' => false, 'axe' => true, 'scss-deprecations' => false, + 'no-icon-deprecations' => false, ), array( 'h' => 'help', @@ -74,18 +75,20 @@ Behat utilities to manage the test environment Usage: - php util.php [--install|--drop|--enable|--disable|--diag|--updatesteps|--no-axe|--scss-deprecations|--help] + php util.php [--install|--drop|--enable|--disable|--diag|--updatesteps] + [--no-axe|--scss-deprecations|--no-icon-deprecations|--help] [--parallel=value [--maxruns=value]] Options: ---install Installs the test environment for acceptance tests ---drop Drops the database tables and the dataroot contents ---enable Enables test environment and updates tests list ---disable Disables test environment ---diag Get behat test environment status code ---updatesteps Update feature step file. ---no-axe Disable axe accessibility tests. ---scss-deprecations Enable SCSS deprecation checks. +--install Installs the test environment for acceptance tests +--drop Drops the database tables and the dataroot contents +--enable Enables test environment and updates tests list +--disable Disables test environment +--diag Get behat test environment status code +--updatesteps Update feature step file. +--no-axe Disable axe accessibility tests. +--scss-deprecations Enable SCSS deprecation checks. +--no-icon-deprecations Disable icon deprecation checks. -j, --parallel Number of parallel behat run operation -m, --maxruns Max parallel processes to be executed at one time. diff --git a/admin/tool/behat/cli/util_single_run.php b/admin/tool/behat/cli/util_single_run.php index 942a6f834f5d1..20ef49f132208 100644 --- a/admin/tool/behat/cli/util_single_run.php +++ b/admin/tool/behat/cli/util_single_run.php @@ -54,6 +54,7 @@ 'add-core-features-to-theme' => false, 'axe' => true, 'scss-deprecations' => false, + 'no-icon-deprecations' => false, ), array( 'h' => 'help', @@ -74,14 +75,15 @@ php util_single_run.php [--install|--drop|--enable|--disable|--diag|--updatesteps|--help] Options: ---install Installs the test environment for acceptance tests ---drop Drops the database tables and the dataroot contents ---enable Enables test environment and updates tests list ---disable Disables test environment ---diag Get behat test environment status code ---updatesteps Update feature step file. ---no-axe Disable axe accessibility tests. ---scss-deprecations Enable SCSS deprecation checks. +--install Installs the test environment for acceptance tests +--drop Drops the database tables and the dataroot contents +--enable Enables test environment and updates tests list +--disable Disables test environment +--diag Get behat test environment status code +--updatesteps Update feature step file. +--no-axe Disable axe accessibility tests. +--scss-deprecations Enable SCSS deprecation checks. +--no-icon-deprecations Disable icon deprecation checks. -o, --optimize-runs Split features with specified tags in all parallel runs. -a, --add-core-features-to-theme Add all core features to specified theme's @@ -194,6 +196,9 @@ // Define whether to run Behat with SCSS deprecation checks. behat_config_manager::set_behat_run_config_value('scss-deprecations', $options['scss-deprecations']); + // Define whether to run Behat with icon deprecation checks. + behat_config_manager::set_behat_run_config_value('no-icon-deprecations', $options['no-icon-deprecations']); + // Enable test mode. $timestart = microtime(true); mtrace('Creating Behat configuration ...', ''); diff --git a/lib/behat/classes/behat_session_trait.php b/lib/behat/classes/behat_session_trait.php index 6d324ecfb3f39..7ec03499b403e 100644 --- a/lib/behat/classes/behat_session_trait.php +++ b/lib/behat/classes/behat_session_trait.php @@ -1049,6 +1049,39 @@ public function look_for_deprecated_styles() { } } + + /** + * Internal step definition to find deprecated icons. + * + * Part of behat_hooks class as is part of the testing framework, is auto-executed + * after each step so no features will splicitly use it. + * + * @throws Exception Unknown type, depending on what we caught in the hook or basic \Exception. + * @see Moodle\BehatExtension\Tester\MoodleStepTester + */ + public function look_for_deprecated_icons() { + if (behat_config_manager::get_behat_run_config_value('no-icon-deprecations')) { + return; + } + + if (!$this->running_javascript()) { + return; + } + + // Look for any DOM element with deprecated icon. + $js = << true + ); + EOF; + if ($this->evaluate_script($js)) { + throw new \Exception(html_entity_decode( + "Deprecated icon in use. Enable \$CFG->debugdisplay for detailed debugging information in the console", + ENT_COMPAT, + )); + } + } + /** * Converts HTML tags to line breaks to display the info in CLI * @@ -1090,6 +1123,9 @@ protected function execute($contextapi, $params = array()) { // Look for deprecated styles. $this->look_for_deprecated_styles(); + + // Look for deprecated icons. + $this->look_for_deprecated_icons(); } /** diff --git a/lib/behat/classes/util.php b/lib/behat/classes/util.php index 25d9bfb7db6ce..2ea60f255d9f9 100644 --- a/lib/behat/classes/util.php +++ b/lib/behat/classes/util.php @@ -519,11 +519,13 @@ public static function get_site_info() { $accessibility = empty(behat_config_manager::get_behat_run_config_value('axe')) ? 'No' : 'Yes'; $scssdeprecations = empty(behat_config_manager::get_behat_run_config_value('scss-deprecations')) ? 'No' : 'Yes'; + $icondeprecations = empty(behat_config_manager::get_behat_run_config_value('no-icon-deprecations')) ? 'Yes' : 'No'; $siteinfo .= <<