function &capture_call($func_name, $exp_length, $args = array(), $debug = FALSE, $check_for_warning = TRUE) { if ($debug) { capture_stop(); capture_reset_text(); } else { capture_reset_and_start(); } $rval = call_user_func_array($func_name, &$args); $this->set_text(capture_stop_and_get()); capture_reset_text(); $this->_testFor_string_length($exp_length); // this is a paranoia check: make sure that no PHP warnings were // generated, if so, then print a warning and the entire text if ($check_for_warning && (preg_match('/[<]b[>]Warning[<]\\/b[>]:/', $this->get_text()) || preg_match('/[<]b[>]Fatal error[<]\\/b[>]:/', $this->test_text))) { print "<b>CaptureCall: Warning: captured text contained a " . "warning message?</b>\n"; $this->print_text_as_html(); } return $rval; }
function _test_html_function($name, &$args, $exp_length) { $test_for_func = '_testFor_' . $name; $print_func = ereg_replace('^html_', 'htmlp_', $name); $no_chance = 0; if (!function_exists($name) && ($no_chance = 1)) { $this->assert(false, "Function not defined '{$name}' " . "(_test_html_function)"); } if (!function_exists($print_func) && ($no_chance = 1)) { $this->assert(false, "Print function not defined '{$print_func}' " . "(_test_html_function)"); } if (!method_exists($this, $test_for_func) && ($no_chance = 1)) { $this->assert(false, "Test for function not defined " . "'{$test_for_func}' on this object " . "(_test_html_function)"); } // no_chance flag is set if one or more of the required functions // are not defined, then there is no point in continuing if ($no_chance) { return; } for ($idx = 0; $idx < count($args); $idx++) { // first test the function that returns a value, i.e. html_XXXX $this->set_text(call_user_func_array($name, $args[$idx])); $this->set_msg("test {$idx}"); // call the _testFor_html_XXXX method of the class which // generates an expected value for the htmlp_XXXX function call // This method is normally defined in the UnitTest class. $expect = $this->_call_method($test_for_func, $args[$idx]); $this->assertEquals($expect, $this->get_text(), "assert 1: test {$idx}"); // call the print variation of the function assuming that it's // called htmlp_XXXX instead of html_XXXX capture_reset_and_start(); call_user_func_array($print_func, $args[$idx]); $this->set_text(capture_stop_and_get()); $this->_testFor_string_length($exp_length[$idx]); $this->assertEquals($expect, $this->get_text(), "assert 2: test {$idx}"); } }
function testMilestone_not_possible() { global $t; $db_config = new mock_db_configure(1); // top_bar() uses a database $db_config->ignore_all_errors(0); capture_reset_and_start(); $this->assertEquals(0, milestone_not_possible("proid", "page"), "rv"); $this->set_text(capture_stop_and_get()); $ps = array(0 => $t->translate('Milestone not possible'), 1 => $t->translate('Your milestones already reach 100%. ' . 'You should modify your existing ' . 'milestones before creating a new one.')); $this->_testFor_patterns($ps, 2); $this->_testFor_string_length(3245); $this->_check_db($db_config); }
function testShow_referees() { global $t, $bx, $db; $db_config = new mock_db_configure(2); $pid1 = "this sit he proid"; $pid2 = "this sit he proid two"; $q = $this->queries['show_referees']; $db_config->add_query(sprintf($q, $pid1), 0); $db_config->add_num_row(0, 0); $db_config->add_num_row(0, 0); $db_config->add_query(sprintf($q, $pid2), 1); $dat = $this->_generate_records(array('username', 'status', 'creation'), 5); $db_config->add_num_row(count($dat), 1); $db_config->add_num_row(count($dat), 1); for ($idx = 0; $idx < count($dat); $idx++) { $db_config->add_record($dat[$idx], 1); } // test one, no record/data $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); capture_reset_and_start(); show_referees($pid1); $this->set_text(capture_stop_and_get()); $this->push_msg("Test One"); $this->_testFor_string_length(72); $msg = $t->translate("There are no developers that have " . "offered themselves as referees"); $this->_testFor_pattern($this->_to_regexp($msg)); $this->pop_msg(); // test two, data is defined $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); capture_reset_and_start(); show_referees($pid2); $this->set_text(capture_stop_and_get()); $this->push_msg("Test Two"); $this->_testFor_string_length(4940); $msg = $t->translate("There are no developers that have " . "offered themselves as referees"); $this->reverse_next_test(); $this->_testFor_pattern($this->_to_regexp($msg)); $this->_checkFor_a_box('Referees'); $this->_checkFor_columns(4); $this->_checkFor_column_titles(array('Number', 'Username', 'Status', 'Creation'), '', '', ''); $colors = array(0 => '#FFFFFF', 1 => 'gold'); for ($idx = 0; $idx < count($dat); $idx++) { $v = array("<b>" . ($idx + 1) . "</b>", '<b>' . lib_nick($dat[$idx]['username']) . '</b>', '<b>' . show_status($dat[$idx]['status']) . '</b>', '<b>' . timestr(mktimestamp($dat[$idx]['creation'])) . '</b>'); $this->push_msg("Test {$idx}"); $this->_checkFor_column_values($v, '', '', $colors[$idx % 2]); $this->pop_msg(); } $this->pop_msg(); $this->_check_db($db_config); }
function testBox_strip() { $title = "thsi is teh title"; capture_reset_and_start(); $this->box->box_strip($title); $this->set_text(capture_stop_and_get()); $this->_testFor_string_length(479); $this->_testFor_box_begin(); $this->_testFor_box_title($title); $this->_testFor_box_end(); }
function testDeveloping_modify_form() { global $bx, $t, $sess, $db; global $cost, $license, $cooperation, $valid_day, $valid_month, $valid_year, $start_day, $start_month, $start_year, $duration, $creation, $queries; $cost = 'ths is the cost'; $license = 'thsi is the license'; $cooperation = 'this is the coopeartion'; $valid_day = 'this is the valid_day'; $valid_month = 'thsi si the valid month'; $valid_year = 'this is the valid year'; $start_day = 'this is the start day'; $start_month = 'this is the start month'; $start_year = 'this is the start year'; $duration = 'this is the duration'; $creation = 'tjhis si the creation'; $args = $this->_generate_array(array('proid', 'content_id'), 10); $fname = 'developing_modify_form'; $db_config = new mock_db_configure(2); $qs = array(0 => $queries[$fname]); $db_config->add_query($qs[0], 0); $db_config->add_query($qs[0], 1); $db_config->add_num_row(1, 0); $db_config->add_num_row(1, 1); $db_config->add_record(false, 0); $db_config->add_record(false, 1); $bx = $this->_create_default_box(); capture_reset_and_start(); call_user_func_array($fname, $args); $this->set_text(capture_stop_and_get()); $this->_testFor_string_length(4217 + strlen($sess->self_url())); $this->assertRegexp('/Undefined variable: start/', $GLOBALS['err_msg']); $this->_checkFor_a_form('PHP_SELF', array('proid' => $args['proid']), 'POST'); $this->_checkFor_a_box('Developement proposal modification'); $this->_checkFor_submit_preview_buttons(); $start = ''; $valid = ''; $tv = array(html_input_text('cost', 12, 12, $cost) => array('Cost', '<b>%s</b> (12): '), license($license) => array('License', '<b>%s</b> (12): '), html_input_text('cooperation', 12, 12, $cooperation) => array('Developer cooperation wanted?', '<b>%s</b> (SELECT BOX) '), html_input_text('valid', 14, 14, $valid) => array('Valid until (select box)', '<b>%s</b>: '), html_input_text('start', 14, 14, $start) => array('Start (Select box)', '<b>%s</b>: '), html_input_text('duration', 3, 3, $duration) => array('Duration (Select box)', '<b>%s</b>: ')); while (list($val, $key) = each($tv)) { $this->_checkFor_column_titles(array($key[0]), 'right', '30%', '', $key[1]); $this->_checkFor_column_values(array($val)); } $this->_check_db($db_config); }
function testDecisions_step5_votes() { global $db, $queries; $fname = 'decisions_step5_votes'; $qs = array(0 => $queries['decisions_step5_votes'], 1 => $queries['project_budget']); $db_config = new mock_db_configure(8); $args = $this->_generate_records(array('proid', 'milestone_number', 'count', 'decision'), 4); for ($idx = 0, $jdx = 1; $idx < count($args); $idx++, $jdx += 2) { $db_config->add_query(sprintf($qs[0], $args[$idx]['proid'], $args[$idx]['proid'], $args[$idx]['milestone_number'], $args[$idx]['count'], $args[$idx]['decision']), $jdx); } // test one: num rows == 0 $db_config->add_num_row(0, 1); $db = new DB_SourceAgency(); $this->assertEquals(0, $this->capture_call($fname, 0, $args[0])); // test two: project budget == 0, division by zero warning $db_config->add_num_row(1, 3); $db_config->add_record(array('sum_step5' => -1), 3); $db_config->add_query(sprintf($qs[1], $args[1]['proid']), 2); $db_config->add_record(array('SUM(budget)' => 0), 2); $db = new DB_SourceAgency(); capture_reset_and_start(); $this->assertEquals(0, call_user_func_array($fname, $args[1])); $this->set_text(capture_stop_and_get()); $this->_testFor_string_length(0); $this->assertRegexp('/Division by zero/', $GLOBALS['err_msg']); // test three: sum_step5 == 0 $db_config->add_num_row(1, 5); $db_config->add_record(array('sum_step5' => 0), 5); $db_config->add_query(sprintf($qs[1], $args[2]['proid']), 4); $db_config->add_record(array('SUM(budget)' => 10), 4); $db = new DB_SourceAgency(); $this->assertEquals(0, $this->capture_call($fname, 0, $args[2])); // test four: all clear $db_config->add_num_row(1, 7); $db_config->add_record(array('sum_step5' => 10), 7); $db_config->add_query(sprintf($qs[1], $args[3]['proid']), 6); $db_config->add_record(array('SUM(budget)' => 10), 6); $db = new DB_SourceAgency(); $this->assertEquals(100, $this->capture_call($fname, 0, $args[3])); $this->_check_db($db_config); }
function testMonitor_form() { global $importance, $sess, $bx, $t; $importance = "low"; $proid = "proid_0"; $bx = $this->_create_default_box(); capture_reset_and_start(); monitor_form($proid); $this->set_text(capture_stop_and_get()); $this->_testFor_string_length(1897 + strlen($sess->self_url())); $this->_checkFor_a_box('Monitor this project'); $this->_checkFor_a_form('PHP_SELF', array('proid' => $proid)); $this->_checkFor_columns(2); $this->_checkFor_column_titles(array('Importance')); $this->_checkFor_submit_preview_buttons(); }
function testShow_participants_rating() { global $bx, $db, $queries, $sess; $fname = 'show_participants_rating'; $qs = array(0 => $queries[$fname]); $args = $this->_generate_records(array('proid', 'part_type'), 10); $db_config = new mock_db_configure(4); // test one: unknown participant_type, Warning message $args[0]['part_type'] = 'UNKNOWN'; $db_config->add_query(sprintf($qs[0], $args[0]['part_type'], '', $args[0]['proid']), 0); $db_config->add_record(false, 0); $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); capture_reset_and_start(); call_user_func_array($fname, $args[0]); $this->set_text(capture_stop_and_get()); $this->_checkFor_a_box($args[0]['part_type']); $this->_testFor_string_length(674); $str = '/Undefined variable: table/'; $this->assertRegexp($str, $GLOBALS['err_msg']); // test two: participant_type = 'developer' $args[1]['part_type'] = 'developer'; $db_config->add_query(sprintf($qs[0], $args[1]['part_type'], 'developing', $args[1]['proid']), 1); $db_config->add_record(false, 1); $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); $this->capture_call($fname, 676, $args[1]); $this->_checkFor_a_box($args[1]['part_type']); // test three: participant_type = 'referee' $args[2]['part_type'] = 'referee'; $db_config->add_query(sprintf($qs[0], $args[2]['part_type'], 'referees', $args[2]['proid']), 2); $db_config->add_record(false, 2); $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); $this->capture_call($fname, 674, $args[2]); $this->_checkFor_a_box($args[2]['part_type']); // test four: participant_type = 'sponsor' $args[3]['part_type'] = 'sponsor'; $db_config->add_query(sprintf($qs[0], $args[3]['part_type'], 'sponsoring', $args[3]['proid']), 3); $db_config->add_record(false, 3); $bx = $this->_create_default_box(); $db = new DB_SourceAgency(); $this->capture_call($fname, 674, $args[3]); $this->_checkFor_a_box($args[3]['part_type']); $this->_check_db($db_config); }
function testPersonal_monitored_projects() { global $bx; $db_q = "SELECT * FROM monitor,description WHERE " . "monitor.proid=description.proid AND monitor" . ".username='******' ORDER BY creation DESC"; $db_config = new mock_db_configure(3); $db_config->add_num_row(0, 0); $db_config->add_num_row(1, 1); $db_config->add_num_row(2, 2); $db_config->add_query(sprintf($db_q, "fubar"), 0); $db_config->add_query(sprintf($db_q, "snafu"), 1); $db_config->add_query(sprintf($db_q, "fritz"), 2); // this is for the snafu query $row1 = $this->_generate_array(array('status', 'proid', 'project_title'), 1); $db_config->add_record($row1, 1); $db_config->add_record(false, 1); // this is for the fritz query $row2 = $this->_generate_array(array('status', 'proid', 'project_title'), 2); $db_config->add_record($row2, 2); $row3 = $this->_generate_array(array('status', 'proid', 'project_title'), 3); $db_config->add_record($row3, 2); $db_config->add_record(false, 2); // test one $bx = $this->_create_default_box(); capture_reset_and_start(); // here next_record will not be called personal_monitored_projects("fubar"); $this->set_text(capture_stop_and_get()); $this->set_msg('test 1'); $this->_testFor_string_length(696); $this->_testFor_pattern("Monitored Projects"); // title $this->_testFor_pattern("No monitored projects\n"); // test two $bx = $this->_create_default_box(); capture_reset_and_start(); // here next_record should be called once --> num_row == 1 personal_monitored_projects("snafu"); $this->set_text(capture_stop_and_get()); $this->set_msg('test 2'); $this->_testFor_string_length(776); $this->_testFor_pattern("Monitored Projects"); // title $this->_testFor_project_link($row1['proid'], $row1['project_title'], $row1['status']); // test three $bx = $this->_create_default_box(); capture_reset_and_start(); // here next_record should be called once --> num_row == 1 personal_monitored_projects("fritz"); $this->set_text(capture_stop_and_get()); $this->set_msg('test 3'); $this->_testFor_string_length(878); $this->_testFor_pattern("Monitored Projects"); // title $this->_testFor_project_link($row2['proid'], $row2['project_title'], $row2['status']); $this->_testFor_project_link($row3['proid'], $row3['project_title'], $row3['status']); // if using a database, then ensure that it didn't fail $this->_check_db($db_config); }
function testNews_modify() { global $db; $db_config = new mock_db_configure(2); $row = array(0 => $this->_generate_array(array("proid", "user", "subject", "text", "creation"), 0)); $db_q = array(0 => "UPDATE news SET user_news='%s', subject_news=" . "'%s', text_news='%s' WHERE proid='%s' AND " . "creation_news='%s'", 1 => "SELECT email_usr FROM auth_user,monitor " . "WHERE monitor.username=auth_user.username " . "AND proid='%s' AND importance='high'", 2 => "SELECT * FROM news,auth_user WHERE proid='%s' " . "AND user_news=username ORDER BY " . "creation_news DESC"); $db_config->add_query(sprintf($db_q[0], $row[0]["user"], $row[0]["subject"], $row[0]["text"], $row[0]["proid"], $row[0]["creation"]), 0); $db_config->add_query(sprintf($db_q[1], $row[0]["proid"]), 1); $db_config->add_query(sprintf($db_q[2], $row[0]["proid"]), 0); $db_config->add_num_row(0, 0); $db_config->add_record(false, 0); $db_config->add_record(false, 1); // // first call, no records // $db = new DB_SourceAgency(); capture_reset_and_start(); news_modify($row[0]["proid"], $row[0]["user"], $row[0]["subject"], $row[0]["text"], $row[0]["creation"]); $this->set_text(capture_stop_and_get()); $this->set_msg('test 1'); $this->_testFor_string_length(67); $this->_testFor_pattern("<p>There have not been posted any news " . "by the project owner[(]s[)][.]<p>\n"); // check that the database component did not fail $this->_check_db($db_config); }