function testScreenPreview() { require_code('validation'); require_lang('validation'); global $DONE_HEADER, $RECORD_TEMPLATES_USED, $RECORDED_TEMPLATES_USED; $RECORD_TEMPLATES_USED = true; $only_do_these = array(); $lists = find_all_previews__by_template(); foreach ($lists as $template => $list) { $temp_name = basename($template, '.tpl'); if (count($only_do_these) != 0) { if (!in_array($temp_name, $only_do_these)) { continue; } } if ($temp_name == 'tempcode_test') { continue; } if (is_plain_text_template($temp_name)) { continue; } $hook = $list[0]; $function = $list[1]; if (is_file(get_file_base() . '/_tests/screens_tested/' . $function)) { continue; } // To make easier to debug through if (function_exists('set_time_limit')) { @set_time_limit(0); } $DONE_HEADER = false; $RECORDED_TEMPLATES_USED = array(); $out = render_screen_preview($template, $hook, $function); $flag = false; foreach ($lists as $template_2 => $list_2) { $temp_name_2 = basename($template_2, '.tpl'); if (count($only_do_these) != 0) { if (!in_array($temp_name_2, $only_do_these)) { continue; } } if ($temp_name_2 == 'tempcode_test') { continue; } if (is_plain_text_template($temp_name_2)) { continue; } if ($list_2[1] == $function) { if ($temp_name_2 == 'FORM_STANDARD_END' || $temp_name_2 == 'MENU_LINK_PROPERTIES') { continue; } $this->assertTrue(in_array($temp_name_2, $RECORDED_TEMPLATES_USED), $template_2 . ' not used in preview as claimed in ' . $hook . '/' . $function); if (!in_array($temp_name_2, $RECORDED_TEMPLATES_USED)) { $flag = true; } } } if (!is_object($out)) { fatal_exit('Claimed screen for ' . $template . ' is not defined'); } $_out = $out->evaluate(); $result = check_xhtml($_out, false, false, false, true, true, false, false); if (!is_null($result) && count($result['errors']) == 0) { $result = NULL; } $this->assertTrue(is_null($result), $hook . '/' . $temp_name); if (!is_null($result)) { require_code('view_modes'); display_validation_results($_out, $result, false, false); } else { if (!$flag) { fclose(fopen(get_file_base() . '/_tests/screens_tested/' . $function, 'wb')); sync_file(get_file_base() . '/_tests/screens_tested/' . $function); fix_permissions(get_file_base() . '/_tests/screens_tested/' . $function); } } } }
/** * Shows the preview of a screen * * @param ID_TEXT The template to be previewed * @param ?ID_TEXT The hook the preview is in (NULL: search) * @param ID_TEXT The name of the screen preview * @return tempcode The previewed screen */ function render_screen_preview($template, $hook, $function) { if (is_null($hook)) { $hooks = find_all_hooks('systems', 'addon_registry'); foreach (array_keys($hooks) as $hook) { require_code('hooks/systems/addon_registry/' . $hook); $ob = object_factory('Hook_addon_registry_' . $hook); if (method_exists($ob, 'tpl_previews')) { $previews = $ob->tpl_previews(); foreach ($previews as $_function) { if ($function == 'tpl_preview__' . $_function) { break 2; } } } } } require_code('hooks/systems/addon_registry/' . $hook); $ob = object_factory('Hook_addon_registry_' . $hook); // Load all ini/js/css $files = $ob->get_file_list(); foreach ($files as $file) { if (substr($file, -4) == '.ini' && substr($file, 0, 8) == 'lang/EN/') { require_lang(basename($file, '.ini')); } if (substr($file, -4) == '.css' && strpos($file, '/') === false) { require_css(basename($file, '.css')); } if (substr($file, -4) == '.tpl' && strpos($file, '/') === false && substr($file, 0, 11) == 'JAVASCRIPT_' && $file != 'JAVASCRIPT_NEED.tpl' && $file != 'JAVASCRIPT_NEED_INLINE.tpl') { require_javascript(strtolower(basename($file, '.tpl'))); } } $temp_name = substr($template, 0, -4); if (is_full_screen_template($temp_name)) { $complete_html = true; } else { $complete_html = false; } if (is_plain_text_template($temp_name)) { @header('Content-type: text/plain'); $text = true; } else { $text = false; } // Render preview $previews = call_user_func(array($ob, $function)); if ($text) { $previews[0] = do_template('WITH_WHITESPACE', array('CONTENT' => $previews[0])); } $tmp = substr($function, 13); if ($complete_html && get_page_name() == 'admin_themes') { exit($previews[0]->evaluate()); } return $previews[0]; }