system: Linux mars.sprixweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
cmd: 

Direktori : /usr/local/src/mailparse-3.1.6/tests/
Upload File :
Current File : //usr/local/src/mailparse-3.1.6/tests/parse_test_messages.phpt

--TEST--
Parse messages in testdata dir
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse") || !extension_loaded("zlib")) print "skip missing mailparse or zlib"; ?>
--FILE--
<?php
error_reporting(E_ALL ^ E_NOTICE);

$define_expect = isset($argv[1]) && $argv[1] == "define_expect";
$force_test = isset($argv[1]) && !$define_expect ? $argv[1] : null;
$testdir = dirname(__FILE__) . "/testdata";

$dir = opendir($testdir) or die("unable to open test dir!");
$messages = array();

while (($f = readdir($dir)) !== false) {
	if ($f == "CVS" || $f == "." || $f == ".." || !strpos($f, '.'))
		continue;
		
	list($name, $suffix) = explode(".", $f, 2);
	
	switch($suffix) {
		case "txt":
		case "txt.gz":
			$messages[$name]["testfile"] = $f;
			break;
		case "exp":
			$messages[$name]["expectfile"] = $f;
			break;
	}
}
ksort($messages);

if ($force_test !== null) {
	$messages = array($force_test => $messages[$force_test]);
}

if (function_exists("version_compare") && version_compare(phpversion(), "4.3", "ge")) {
	$wrapper = "compress.zlib://";
} else {
	/* this section is here because it is useful to compare to the
	 * original implementaion of mailparse for PHP 4.2 */
	$wrapper = "zlib:";
	
	function file_get_contents($filename)
	{
		$fp = fopen($filename, "rb");
		$data = fread($fp, filesize($filename));
		fclose($fp);
		return $data;
	}
}

function diff_strings($left, $right)
{
	if (is_executable("/usr/bin/diff")) {
		$lf = tempnam("/tmp", "mpt");
		$rf = tempnam("/tmp", "mpt");

		$ok = false;

		$fp = fopen($lf, "wb");
		if ($fp) {
			fwrite($fp, $left);
			fclose($fp);

			$fp = fopen($rf, "wb");
			if ($fp) {
				fwrite($fp, $right);
				fclose($fp);

				$ok = true;
			}
		}

		if ($ok) {
			passthru("/usr/bin/diff -u $lf $rf");
		}

		unlink($lf);
		unlink($rf);

		if ($ok)
			return;
	}

	
	$left = explode("\n", $left);
	$right = explode("\n", $right);

	$n = max(count($left), count($right));

	$difflines = array();

	$runstart = null;
	$runend = null;

	for ($i = 0; $i < $n; $i++) {
		if ($left[$i] != $right[$i]) {
			if ($runstart === null) {
				$runstart = $i;
				$runend = $i;
			} else {
				/* part of the run */
				$runend = $i;
			}
		} else {
			if ($runstart !== null) {
				$difflines[] = array($runstart, $runend);
				$runstart = null;
				$runend = null;
			}
		}
	}
	if ($runstart !== null)
		$difflines[] = array($runstart, $runend);
	
	$lastprint = null;
	foreach ($difflines as $run) {
		list($start, $end) = $run;

		$startline = $start - 3;
		if ($startline < 0)
			$startline = 0;
		$endline = $end;

		if ($lastprint === null) {
			echo "@@ Line: " . ($startline+1) . "\n";
		} else if ($startline <= $lastprint) {
			$startline = $lastprint+1;
		}

		if ($startline > $endline)
			continue;

		/* starting context */
		for ($i = $startline; $i < $start; $i++) {
			echo " " . $left[$i] . "\n";
			$lastprint = $i;
		}

		/* diff run */
		for ($i = $start; $i <= $end; $i++) {
			echo "-" . $left[$i] . "\n";
		}
		for ($i = $start; $i <= $end; $i++) {
			echo "+" . $right[$i] . "\n";
		}
		$lastprint = $i;
	}
	
}

$skip_keys = array("headers", "ending-pos-body");

foreach ($messages as $name => $msgdata) {
	$testname = $testdir . "/" . $msgdata["testfile"];
	if (!isset($msgdata["expectfile"])) {
		continue;
	}
	$expectname = $testdir . "/" . $msgdata["expectfile"];

	$use_wrapper = substr($testname, -3) == ".gz" ? $wrapper : "";
	$use_wrapper = $wrapper;
	$fp = fopen("$use_wrapper$testname", "rb") or die("failed to open the file!");

	$mime = mailparse_msg_create();
	$size = 0;
	while (!feof($fp)) {
		$data = fread($fp, 1024);
		//var_dump($data);
		if ($data !== false) {
			mailparse_msg_parse($mime, $data);
			$size += strlen($data);
		}
	}
	fclose($fp);
	//var_dump($size);

	$struct = mailparse_msg_get_structure($mime);

	ob_start();
	echo "Message: $name\n";
	foreach($struct as $partname) {
		$depth = count(explode(".", $partname)) - 1;
		$indent = str_repeat("  ", $depth * 2);
		$subpart = mailparse_msg_get_part($mime, $partname);
		if (!$subpart) {
			var_dump($partname);
			echo "\n";
			var_dump($struct);
			break;
		}

		$data = mailparse_msg_get_part_data($subpart);
		echo "\n{$indent}Part $partname\n";
		ksort($data);
		foreach ($data as $key => $value) {
			if (in_array($key, $skip_keys))
				continue;
			echo "$indent$key => ";
			var_dump($value);
		}
	}
	$output = ob_get_contents();

	if ($define_expect) {
		$fp = fopen($expectname, "wb");
		fwrite($fp, $output);
		fclose($fp);
	} else {

		$expect = file_get_contents($expectname);

		if ($output != $expect) {
			ob_end_flush();
			diff_strings($expect, $output);
			die("FAIL!");
		}
	}

	ob_end_clean();
}

echo "All messages parsed OK!\n";
?>
--EXPECT--
All messages parsed OK!