<commit_before><?php  // $Id$
/**
 * Run database functional tests.
 * @package SimpleTestEx
 */

/** */
require_once(dirname(__FILE__).'/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/simpletestlib.php');
require_once('ex_simple_test.php');
require_once('ex_reporter.php');

require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));

$showpasses = optional_param('showpasses', 0, PARAM_BOOL);
$selected   = optional_param('selected', array(), PARAM_INT);

global $UNITTEST;
$UNITTEST = new object();

if (!data_submitted()) {
    $selected = array();
    for ($i=0; $i<=10; $i++) {
        $selected[$i] = 1;
    }
}

// Print the header.
admin_externalpage_setup('reportdbtest');
admin_externalpage_print_header();

$dbinfos     = array();
$tests       = array();

$dbinfos[0]     = array('name'=>"Current database ($CFG->dblibrary/$CFG->dbtype)", 'installed'=>true, 'configured'=>true); // TODO: localise
if (data_submitted() and !empty($selected[0])) {
    $tests[0] = $DB;
}

for ($i=1; $i<=10; $i++) {
    $name = 'func_test_db_'.$i;
    if (!isset($CFG->$name)) {
        continue;
    }
    list($library, $driver, $dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions) = $CFG->$name;
    $dbinfos[$i] = array('name'=>"External database $i ($library/$driver/$dbhost/$dbname)", 'installed'=>false, 'configured'=>false);

    $classname = "{$driver}_{$library}_moodle_database";
    require_once("$CFG->libdir/dml/$classname.php");
    $d = new $classname();
    if (!$d->driver_installed()) {
        continue;
    }
    $dbinfos[$i]['installed'] = true;

    if ($d->connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions)) {
        $dbinfos[$i]['configured'] = true;
        if (data_submitted() and !empty($selected[$i])) {
            $tests[$i] = $d;
        } else {
            $d->dispose();
        }
    }
}

if (!empty($tests)) {
    @ob_implicit_flush(true);
    while(@ob_end_flush());

    foreach ($tests as $i=>$database) {
        $dbinfo = $dbinfos[$i];
        $UNITTEST->func_test_db = $database; // pass the db to the tests through global

        print_heading('Running tests on: '.$dbinfo['name'], '', 3); // TODO: localise

        // Create the group of tests.
        $test = new AutoGroupTest(false, true);

        $test->addTestFile($CFG->libdir.'/dml/simpletest/testdmllib.php');
        $test->addTestFile($CFG->libdir.'/ddl/simpletest/testddllib.php');

        // Make the reporter, which is what displays the results.
        $reporter = new ExHtmlReporter($showpasses);

        $test->run($reporter);

        unset($UNITTEST->func_test_db);

        echo '<hr />';
    }

}

// Print the form for adjusting options.
print_simple_box_start('center', '70%');
echo '<form method="post" action="dbtest.php">';
echo '<div>';
print_heading("Run functional database tests"); // TODO: localise
echo '<p>'; print_checkbox('showpasses', 1, $showpasses, get_string('showpasses', 'simpletest')); echo '</p>';
echo '<p><strong>'."Databases:".'</strong>';
echo '<ul>';
foreach ($dbinfos as $i=>$dbinfo) {
    $name = $dbinfo['name'];
    if ($dbinfo['installed']) {
        if (!$dbinfo['configured']) {
            $name = "$name (misconfigured)"; // TODO: localise
        }
        echo '<li>'; print_checkbox('selected['.$i.']', 1, intval(!empty($selected[$i])), $name); echo '</li>';
    } else {
        echo '<li>'."$name: driver not installed".'</li'; // TODO: localise
    }
}
echo '</ul></p>';
echo '<p>External databases are configured in config.php, add lines:
<pre>
$CFG->func_test_db_1 = array("adodb", "postgres7", "localhost", "moodleuser", "password", "<PASSWORD>", false, "test", null);
$CFG->func_test_db_2 = array("adodb", "mssql", "localhost", "moodleuser", "password", "<PASSWORD>", false, "test", null);
</pre>
where order of parameters is: dblibrary, dbtype, dbhost, dbuser, dbpass, dbname, dbpersist, prefix, dboptions
</p>';
echo '<p><input type="submit" value="' . get_string('runtests', 'simpletest') . '" /></p>';
echo '</div>';
echo '</form>';
print_simple_box_end();

// Footer.
admin_externalpage_print_footer();

?>
<commit_msg>MDL-14905 towards functional DB tests<commit_after><?php  // $Id$
/**
 * Run database functional tests.
 * @package SimpleTestEx
 */

/** */
require_once(dirname(__FILE__).'/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/simpletestlib.php');
require_once('ex_simple_test.php');
require_once('ex_reporter.php');

require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));

$showpasses = optional_param('showpasses', 0, PARAM_BOOL);
$selected   = optional_param('selected', array(), PARAM_INT);

global $UNITTEST;
$UNITTEST = new object();

if (!data_submitted()) {
    $selected = array();
    for ($i=0; $i<=10; $i++) {
        $selected[$i] = 1;
    }
}

// Print the header.
admin_externalpage_setup('reportdbtest');
admin_externalpage_print_header();

$dbinfos     = array();
$tests       = array();

$dbinfos[0]     = array('name'=>"Current database ($CFG->dblibrary/$CFG->dbtype)", 'installed'=>true, 'configured'=>true); // TODO: localise
if (data_submitted() and !empty($selected[0])) {
    $tests[0] = $DB;
}

for ($i=1; $i<=10; $i++) {
    $name = 'func_test_db_'.$i;
    if (!isset($CFG->$name)) {
        continue;
    }
    list($library, $driver, $dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions) = $CFG->$name;
    $dbinfos[$i] = array('name'=>"External database $i ($library/$driver/$dbhost/$dbname/$prefix)", 'installed'=>false, 'configured'=>false);

    $classname = "{$driver}_{$library}_moodle_database";
    require_once("$CFG->libdir/dml/$classname.php");
    $d = new $classname();
    if (!$d->driver_installed()) {
        continue;
    }
    $dbinfos[$i]['installed'] = true;

    if ($d->connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions)) {
        $dbinfos[$i]['configured'] = true;
        if (data_submitted() and !empty($selected[$i])) {
            $tests[$i] = $d;
        } else {
            $d->dispose();
        }
    }
}

if (!empty($tests)) {
    @ob_implicit_flush(true);
    while(@ob_end_flush());

    foreach ($tests as $i=>$database) {
        $dbinfo = $dbinfos[$i];
        $UNITTEST->func_test_db = $database; // pass the db to the tests through global

        print_heading('Running tests on: '.$dbinfo['name'], '', 3); // TODO: localise

        // Create the group of tests.
        $test = new AutoGroupTest(false, true);

        $test->addTestFile($CFG->libdir.'/dml/simpletest/testdmllib.php');
        $test->addTestFile($CFG->libdir.'/ddl/simpletest/testddllib.php');

        // Make the reporter, which is what displays the results.
        $reporter = new ExHtmlReporter($showpasses);

        set_time_limit(300);
        $test->run($reporter);

        unset($UNITTEST->func_test_db);

        echo '<hr />';
    }

}

// Print the form for adjusting options.
print_simple_box_start('center', '70%');
echo '<form method="post" action="dbtest.php">';
echo '<div>';
print_heading("Run functional database tests"); // TODO: localise
echo '<p>'; print_checkbox('showpasses', 1, $showpasses, get_string('showpasses', 'simpletest')); echo '</p>';
echo '<p><strong>'."Databases:".'</strong>';
echo '<ul>';
foreach ($dbinfos as $i=>$dbinfo) {
    $name = $dbinfo['name'];
    if ($dbinfo['installed']) {
        if (!$dbinfo['configured']) {
            $name = "$name (misconfigured)"; // TODO: localise
        }
        echo '<li>'; print_checkbox('selected['.$i.']', 1, intval(!empty($selected[$i])), $name); echo '</li>';
    } else {
        echo '<li>'."$name: driver not installed".'</li'; // TODO: localise
    }
}
echo '</ul></p>';
echo '<p>External databases are configured in config.php, add lines:
<pre>
$CFG->func_test_db_1 = array("adodb", "postgres7", "localhost", "moodleuser", "password", "<PASSWORD>", false, "test", null);
$CFG->func_test_db_2 = array("adodb", "mssql", "localhost", "moodleuser", "password", "<PASSWORD>", false, "test", null);
</pre>
where order of parameters is: dblibrary, dbtype, dbhost, dbuser, dbpass, dbname, dbpersist, prefix, dboptions
</p>';
echo '<p><input type="submit" value="' . get_string('runtests', 'simpletest') . '" /></p>';
echo '</div>';
echo '</form>';
print_simple_box_end();

// Footer.
admin_externalpage_print_footer();

?>

{'fraction_non_alphanumeric': 0.21062551537283544, 'fraction_numerical': 0.005418777241135587, 'mean_word_length': 3.9131944444444446, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 109, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5505685', 'n_tokens_mistral': 2924, 'n_tokens_neox': 2870, 'n_words': 599}