From: Michael Wallner <mike@php.net>
Date: Sat, 17 Mar 2012 09:35:25 +0000 (+0000)
Subject: add --PUT-- section support based on POST_RAW
X-Git-Tag: PHP-5.4.1-RC1~31
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0b94acdcb85d63ea5ec725cf0595979e95734fd6;p=php

add --PUT-- section support based on POST_RAW
---

diff --git a/run-tests.php b/run-tests.php
index 893eb9b616..4549659ce2 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -1342,8 +1342,8 @@ TEST $file
 
 	$tested = trim($section_text['TEST']);
 
-	/* For GET/POST tests, check if cgi sapi is available and if it is, use it. */
-	if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) {
+	/* For GET/POST/PUT tests, check if cgi sapi is available and if it is, use it. */
+	if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['PUT']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) {
 		if (isset($php_cgi)) {
 			$old_php = $php;
 			$php = $php_cgi . ' -C ';
@@ -1718,6 +1718,46 @@ TEST $file
 		save_text($tmp_post, $request);
 		$cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
 
+	} elseif (array_key_exists('PUT', $section_text) && !empty($section_text['PUT'])) {
+
+		$post = trim($section_text['PUT']);
+		$raw_lines = explode("\n", $post);
+
+		$request = '';
+		$started = false;
+
+		foreach ($raw_lines as $line) {
+
+			if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) {
+				$env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1]));
+				continue;
+			}
+
+			if ($started) {
+				$request .= "\n";
+			}
+
+			$started = true;
+			$request .= $line;
+		}
+
+		$env['CONTENT_LENGTH'] = strlen($request);
+		$env['REQUEST_METHOD'] = 'PUT';
+
+		if (empty($request)) {
+			if ($JUNIT) {
+				$JUNIT['test_total']++;
+				$JUNIT['test_error']++;
+				$JUNIT['result_xml'] .= '<testcase classname="'.$shortname.'" name="'.htmlspecialchars($tested, ENT_QUOTES).'" time="'.$test_execution_time.'">'."\n";
+				$JUNIT['result_xml'] .= '<error type="BORKED" message="empty $request" />'."\n";
+				$JUNIT['result_xml'] .= '</testcase>'."\n";
+			}
+			return 'BORKED';
+		}
+
+		save_text($tmp_post, $request);
+		$cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+
 	} else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {
 
 		$post = trim($section_text['POST']);