MDL-55924 behat: Add core features to specified theme's

This commit is contained in:
Rajesh Taneja 2016-10-07 10:55:41 +08:00
parent 95e1d5e50f
commit e1ad3a959d
No known key found for this signature in database
GPG Key ID: B363F7FB787F80E4
6 changed files with 116 additions and 22 deletions

View File

@ -47,13 +47,15 @@ list($options, $unrecognized) = cli_get_params(
'help' => false,
'fromrun' => 1,
'torun' => 0,
'run-with-theme' => false,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
),
array(
'j' => 'parallel',
'm' => 'maxruns',
'h' => 'help',
'o' => 'optimize-runs',
'a' => 'add-core-features-to-theme',
)
);
@ -69,8 +71,9 @@ Options:
-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)
--optimize-runs Split features with specified tags in all parallel runs.
--run-with-theme Run all core features with specified theme.
-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
-h, --help Print out this help
@ -99,7 +102,7 @@ if ($options['parallel'] && $options['parallel'] > 1) {
}
} else {
// Only sanitize options for single run.
$cmdoptionsforsinglerun = array('run-with-theme');
$cmdoptionsforsinglerun = array('add-core-features-to-theme');
foreach ($cmdoptionsforsinglerun as $option) {
if (!empty($options[$option])) {

View File

@ -56,13 +56,15 @@ list($options, $unrecognized) = cli_get_params(
'updatesteps' => false,
'fromrun' => 1,
'torun' => 0,
'run-with-theme' => false,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
),
array(
'h' => 'help',
'j' => 'parallel',
'm' => 'maxruns',
'o' => 'optimize-runs',
'a' => 'add-core-features-to-theme',
)
);
@ -81,10 +83,10 @@ Options:
--diag Get behat test environment status code
--updatesteps Update feature step file.
-j, --parallel Number of parallel behat run operation
-m, --maxruns Max parallel processes to be executed at one time.
--optimize-runs Split features with specified tags in all parallel runs.
--run-with-theme Run all core features with specified theme.
-j, --parallel Number of parallel behat run operation
-m, --maxruns Max parallel processes to be executed at one time.
-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
-h, --help Print out this help
@ -180,14 +182,14 @@ if ($options['diag'] || $options['enable'] || $options['disable']) {
} else if ($options['updatesteps']) {
// Rewrite config file to ensure we have all the features covered.
if (empty($options['parallel'])) {
behat_config_manager::update_config_file('', true, '', $options['run-with-theme'], false, false);
behat_config_manager::update_config_file('', true, '', $options['add-core-features-to-theme'], false, false);
} else {
// Update config file, ensuring we have up-to-date behat.yml.
for ($i = $options['fromrun']; $i <= $options['torun']; $i++) {
$CFG->behatrunprocess = $i;
// Update config file for each run.
behat_config_manager::update_config_file('', true, $options['optimize-runs'], $options['run-with-theme'],
behat_config_manager::update_config_file('', true, $options['optimize-runs'], $options['add-core-features-to-theme'],
$options['parallel'], $i);
}
unset($CFG->behatrunprocess);

View File

@ -47,11 +47,13 @@ list($options, $unrecognized) = cli_get_params(
'diag' => false,
'tags' => '',
'updatesteps' => false,
'run-with-theme' => false,
'optimize-runs' => '',
'add-core-features-to-theme' => false,
),
array(
'h' => 'help',
'o' => 'optimize-runs',
'a' => 'add-core-features-to-theme',
)
);
@ -73,8 +75,9 @@ Options:
--disable Disables test environment
--diag Get behat test environment status code
--updatesteps Update feature step file.
--optimize-runs Split features with specified tags in all parallel runs.
--run-with-theme Run all core features with specified theme.
-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
-h, --help Print out this help
@ -180,7 +183,7 @@ if ($options['install']) {
}
// Enable test mode.
behat_util::start_test_mode($options['run-with-theme'], $options['optimize-runs'], $parallel, $run);
behat_util::start_test_mode($options['add-core-features-to-theme'], $options['optimize-runs'], $parallel, $run);
// This is only displayed once for parallel install.
if (empty($run)) {

View File

@ -597,5 +597,77 @@ class tool_behat_manager_util_testcase extends advanced_testcase {
// There are 6 step definitions.
$this->assertCount(6, $config['default']['extensions']['Moodle\BehatExtension']['steps_definitions']);
}
/**
* Behat config for blacklisted tags.
*/
public function test_core_features_to_include_in_specified_theme() {
$mockbuilder = $this->getMockBuilder('behat_config_util');
$mockbuilder->setMethods(array('get_theme_test_directory', 'get_list_of_themes'));
$behatconfigutil = $mockbuilder->getMock();
$behatconfigutil = $this->get_behat_config_util($behatconfigutil);
// Check features when, no theme is specified.
$behatconfigutil->set_theme_suite_to_include_core_features('');
$config = $behatconfigutil->get_config_file_contents($this->corefatures, $this->corecontexts);
$suites = $config['default']['suites'];
foreach ($this->featurepaths as $themename => $paths) {
$this->assertCount(count($paths), $suites[$themename]['paths']);
foreach ($paths as $key => $feature) {
$this->assertContains($feature, $suites[$themename]['paths'][$key]);
}
}
// Check features when all themes are specified.
$featurepaths = $this->featurepaths;
$featurepaths['withfeatures'] = array_merge ($featurepaths['default'], $featurepaths['withfeatures']);
$featurepaths['nofeatures'] = array_merge ($featurepaths['default'], $featurepaths['nofeatures']);
$behatconfigutil->set_theme_suite_to_include_core_features('ALL');
$config = $behatconfigutil->get_config_file_contents($this->corefatures, $this->corecontexts);
$suites = $config['default']['suites'];
foreach ($featurepaths as $themename => $paths) {
$this->assertCount(count($paths), $suites[$themename]['paths']);
foreach ($paths as $key => $feature) {
$this->assertContains($feature, $suites[$themename]['paths'][$key]);
}
}
// Check features when all themes are specified.
$featurepaths = $this->featurepaths;
$featurepaths['withfeatures'] = array_merge ($featurepaths['default'], $featurepaths['withfeatures']);
$featurepaths['nofeatures'] = array_merge ($featurepaths['default'], $featurepaths['nofeatures']);
$behatconfigutil->set_theme_suite_to_include_core_features('withfeatures, nofeatures');
$config = $behatconfigutil->get_config_file_contents($this->corefatures, $this->corecontexts);
$suites = $config['default']['suites'];
foreach ($featurepaths as $themename => $paths) {
$this->assertCount(count($paths), $suites[$themename]['paths']);
foreach ($paths as $key => $feature) {
$this->assertContains($feature, $suites[$themename]['paths'][$key]);
}
}
// Check features when specified themes are passed..
$featurepaths = $this->featurepaths;
$featurepaths['nofeatures'] = array_merge ($featurepaths['default'], $featurepaths['nofeatures']);
$behatconfigutil->set_theme_suite_to_include_core_features('nofeatures');
$config = $behatconfigutil->get_config_file_contents($this->corefatures, $this->corecontexts);
$suites = $config['default']['suites'];
foreach ($featurepaths as $themename => $paths) {
$this->assertCount(count($paths), $suites[$themename]['paths']);
foreach ($paths as $key => $feature) {
$this->assertContains($feature, $suites[$themename]['paths'][$key]);
}
}
}
}
// @codeCoverageIgnoreEnd

View File

@ -71,9 +71,9 @@ class behat_config_util {
private $componentswithtests;
/**
* @var bool keep track of theme to return suite with all core features included or not.
* @var array|string keep track of theme to return suite with all core features included or not.
*/
private $themesuitewithallfeatures = false;
private $themesuitewithallfeatures = array();
/**
* @var string filter features which have tags.
@ -90,14 +90,27 @@ class behat_config_util {
*/
private $currentrun = 0;
/**
* @var string used to specify if behat should be initialised with all themes.
*/
const ALL_THEMES_TO_RUN = 'ALL';
/**
* Set value for theme suite to include all core features. This should be used if your want all core features to be
* run with theme.
*
* @param bool $val
* @param bool $themetoset
*/
public function set_theme_suite_to_include_core_features($val) {
$this->themesuitewithallfeatures = $val;
public function set_theme_suite_to_include_core_features($themetoset) {
// If no value passed to --run-with-theme or ALL is passed, then set core features for all themes.
if (!empty($themetoset)) {
if (is_number($themetoset) || is_bool($themetoset) || (self::ALL_THEMES_TO_RUN === strtoupper($themetoset))) {
$this->themesuitewithallfeatures = self::ALL_THEMES_TO_RUN;
} else {
$this->themesuitewithallfeatures = explode(',', $themetoset);
$this->themesuitewithallfeatures = array_map('trim', $this->themesuitewithallfeatures);
}
}
}
/**
@ -1027,7 +1040,8 @@ class behat_config_util {
foreach ($themes as $theme) {
// Get list of features which will be included in theme.
// If theme suite with all features is set, then we want all core features to be part of theme suite.
if ($this->themesuitewithallfeatures) {
if ((is_string($this->themesuitewithallfeatures) && ($this->themesuitewithallfeatures === self::ALL_THEMES_TO_RUN)) ||
in_array($theme, $this->themesuitewithallfeatures)) {
// If there is no theme specific feature. Then it's just core features.
if (empty($themefeatures[$theme]['features'])) {
$themesuitefeatures = $features;

View File

@ -215,7 +215,7 @@ class behat_util extends testing_util {
*
* Stores a file in dataroot/behat to allow Moodle to switch
* to the test environment when using cli-server.
* @param bool $themesuitewithallfeatures if only theme specific features need to be included in the suite.
* @param bool $themesuitewithallfeatures List themes to include core features.
* @param string $tags comma separated tag, which will be given preference while distributing features in parallel run.
* @param int $parallelruns number of parallel runs.
* @param int $run current run.