function all_tests($testset = 'tests.xml') { $tests = new is_email_test($testset); $version = $tests->version(); $description = $tests->description(); $test_count = $tests->count(); echo <<<PHP \t<h3>Test package version {$version}</h3> {$description} PHP; $coverage_actual = array(); // List of diagnoses returned by the test set $statistics_count = 0; $statistics_alert_category = 0; $statistics_alert_diagnosis = 0; $html = ''; for ($i = 0; $i < $test_count; $i++) { $test = $tests->item($i); $id = $test->id; $address = $test->address; $category = $test->category; $diagnosis = $test->diagnosis; $email = $test->email; $address_html = $test->address_html; $comment = $test->comment; $result = $tests->test($email, $category, $diagnosis); // This is why we're here $category_result = $result['actual']['analysis'][ISEMAIL_META_CAT_VALUE]; $diagnosis_result = $result['actual']['diagnosis']; $constant_category = $result['actual']['analysis'][ISEMAIL_META_CATEGORY]; $constant_diagnosis = $result['actual']['analysis'][ISEMAIL_META_CONSTANT]; $text = $result['actual']['analysis'][ISEMAIL_META_DESC]; $references = array_key_exists(ISEMAIL_META_REF_ALT, $result['actual']['analysis']) ? '<span>' . $result['actual']['analysis'][ISEMAIL_META_REF_ALT] . '</span>' : ''; $comments = array(); if (strlen($comment) !== 0) { $comments[] = '<em>' . stripslashes($comment) . '</em>'; } if ($text !== '') { $comments[] = stripslashes($text); } if ($result['actual']['alert_category']) { $class_category = ' unexpected'; $rag_category = ' red'; $comments[] = 'Expected category was ' . $result['expected']['analysis'][ISEMAIL_META_CATEGORY]; } else { $class_category = ''; $rag_category = ''; } if ($result['actual']['alert_diagnosis']) { $class_diagnosis = ' unexpected'; $rag_diagnosis = ' amber'; $comments[] = 'Expected diagnosis was ' . $result['expected']['analysis'][ISEMAIL_META_CONSTANT]; } else { $class_diagnosis = ''; $rag_diagnosis = ''; } // Validity $validity = $diagnosis_result < ISEMAIL_THRESHOLD; $valid = $validity ? 'valid' : 'invalid'; $validity_rag = ''; // if ($validity === $result['actual']['simple']) $validity_rag = ' red'; // Other diagnoses $alternates = alternate_diagnoses($result['actual']['parsedata']['status'], $diagnosis_result); if ($alternates !== '') { $comments[] = $alternates; } $comments_html = implode('<br/>', $comments); $address_length = strlen($address); $address_class = $address_length > 39 ? 'small' : ($address_length < 29 ? 'large' : 'medium'); $html .= <<<HTML \t\t\t<tr id="{$id}"> \t\t\t\t<td><p class="address {$address_class}">{$address_html}</p></td> \t\t\t\t<td> \t\t\t\t\t<div class="infoblock"> \t\t\t\t\t\t<div class="validity"><p class="{$valid} {$address_class}{$validity_rag}"/></div> \t\t\t\t\t\t<div> \t\t\t\t\t\t\t<div class="label">Test #</div>\t\t<div class="id">{$id}</div><br/> \t\t\t\t\t\t\t<div class="label">Category</div>\t<div class="category{$class_category}{$rag_category}">{$constant_category}</div><br/> \t\t\t\t\t\t\t<div class="label">Diagnosis</div>\t<div class="diagnosis{$class_diagnosis}{$rag_diagnosis}">{$constant_diagnosis}</div><br/> {$references} \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t</td> \t\t\t\t<td><div class="comment">{$comments_html}</div></td> \t\t\t</tr> HTML; // Update statistics for this test $coverage_actual[] = $diagnosis_result; $statistics_count++; $statistics_alert_category += $result['actual']['alert_category'] ? 1 : 0; $statistics_alert_diagnosis += $result['actual']['alert_diagnosis'] ? 1 : 0; } // Revision 2.7: Added test run statistics if ($statistics_alert_category !== 0) { $statistics_class = 'red'; } else { if ($statistics_alert_diagnosis !== 0) { $statistics_class = 'amber'; } else { $statistics_class = 'green'; } } $statistics_plural_count = $statistics_count === 1 ? '' : 's'; $statistics_plural_category = $statistics_alert_category === 1 ? 'y' : 'ies'; $statistics_plural_diagnosis = $statistics_alert_diagnosis === 1 ? 'is' : 'es'; // Coverage $coverage_actual = array_unique($coverage_actual, SORT_NUMERIC); $coverage_theory = is_email_list(ISEMAIL_META_VALUE); $coverage_count_actual = count($coverage_actual); $coverage_count_theory = count($coverage_theory); $coverage_percent = sprintf('%d', 100 * $coverage_count_actual / $coverage_count_theory); $coverage_diff = array_diff($coverage_theory, $coverage_actual); $coverage_missing = ''; $separator = ''; foreach ($coverage_diff as $value) { $constant = is_email_analysis((int) $value, ISEMAIL_META_CONSTANT); $coverage_missing .= $separator . $constant; $separator = ', '; } if ($coverage_missing !== '') { $coverage_missing = " Missing outcomes: {$coverage_missing}"; } echo <<<PHP \t<p class="rubric">Coverage: {$coverage_percent}% ({$coverage_count_actual} outcomes recorded / {$coverage_count_theory} defined).{$coverage_missing}</p> \t<p class="statistics {$statistics_class}">{$statistics_count} test{$statistics_plural_count}: {$statistics_alert_category} unexpected categor{$statistics_plural_category}, {$statistics_alert_diagnosis} unexpected diagnos{$statistics_plural_diagnosis}</p> \t<table> \t\t<thead> \t\t\t<tr> \t\t\t\t<th><p class="heading address">Address</p></th> \t\t\t\t<th class="heading infoblock">Results</th> \t\t\t\t<th class="heading comment">Comments</th> \t\t\t</tr> \t\t</thead> \t\t<tbody> {$html}\t\t</tbody> \t</table> \t<a id="bottom" href="#top">« back to top</a> PHP; }
<pre> <?php // Demonstrates diagnostic testing of an email address require_once '../is_email.php'; require_once '../test/meta.php'; $email = '*****@*****.**'; $result = is_email($email, true, true); $analysis = is_email_analysis($result, ISEMAIL_META_ALL); echo "Result is {$result}" . PHP_EOL; echo 'Result description is ' . $analysis[ISEMAIL_META_DESC] . PHP_EOL; echo 'PHP constant name is ' . $analysis[ISEMAIL_META_CONSTANT] . PHP_EOL; echo 'SMTP enhanced status code is ' . $analysis[ISEMAIL_META_SMTP] . PHP_EOL; ?> </pre>
public static function test($email, $expected_category_test = '', $expected_diagnosis = '') { $result = array('actual' => array()); $parsedata = array(); $diagnosis_value = is_email($email, true, true, $parsedata); $result['actual']['diagnosis'] = $diagnosis_value; $result['actual']['parsedata'] = $parsedata; $result['actual']['analysis'] = is_email_analysis($diagnosis_value, ISEMAIL_META_ALL); if ($expected_diagnosis === '') { $result['actual']['alert_category'] = false; $result['actual']['alert_diagnosis'] = false; } else { $result['expected'] = array(); $result['expected']['diagnosis'] = $expected_diagnosis; $result['expected']['analysis'] = is_email_analysis($expected_diagnosis, ISEMAIL_META_ALL); $category = $result['actual']['analysis'][ISEMAIL_META_CATEGORY]; $expected_category = $result['expected']['analysis'][ISEMAIL_META_CATEGORY]; $diagnosis = $result['actual']['analysis'][ISEMAIL_META_CONSTANT]; $result['actual']['alert_category'] = $category !== $expected_category; $result['actual']['alert_diagnosis'] = $diagnosis !== $expected_diagnosis; } // Sanity check expected category // (this is necessary because we decided to keep both category // and diagnosis in the test data) if ($expected_category_test !== '' && $expected_category_test !== $expected_category) { die("The expected category {$expected_category_test} from the test data for '{$email}' does not match the true expected category {$expected_category}"); } return $result; }
function validateEmail($emailToValidate) { global $errors; require_once 'scripts/validate-email/is_email.php'; require_once 'scripts/validate-email/meta.php'; $emailresult = is_email($emailToValidate, true, true); $analysis = is_email_analysis($emailresult, ISEMAIL_META_ALL); if ($emailresult === ISEMAIL_VALID) { $errors['email'] = ''; } else { if ($emailresult < ISEMAIL_THRESHOLD) { if ($_POST['didcheck'] != "true") { $errors['email'] = "Are you sure that's your email? Click submit again to confirm."; $errors['didCheck'] = true; } } else { $errors['email'] = "That's not a valid e-mail address."; } } }