1--TEST--
2User-space streams: stream_set_option()
3--FILE--
4<?php
5class test_wrapper_base {
6	public $return_value;
7	public $expected_option;
8	public $expected_value;
9	function stream_open($path, $mode, $openedpath) {
10		return true;
11	}
12	function stream_eof() {
13		return false;
14	}
15}
16class test_wrapper extends test_wrapper_base {
17	function stream_set_option($option, $value, $ptrparam) {
18		echo "value:\n";
19		var_dump($value);
20		echo "ptrparam:\n";
21		var_dump($ptrparam);
22		echo "\$option === $option === " . $this->expected_option . ":\n";
23		var_dump($option === $this->expected_option);
24		echo "\$value === $value === " . $this->expected_value. ":\n";
25		var_dump($value === $this->expected_value);
26		return $this->return_value;
27	}
28}
29
30function test($name, $fd, $return_value, $func, $args, $expected_option, $expected_value) {
31	echo "\n------ $name: -------\n";
32	$data = stream_get_meta_data($fd);
33	$data['wrapper_data']->return_value = $return_value;
34	$data['wrapper_data']->expected_option = $expected_option;
35	$data['wrapper_data']->expected_value = $expected_value;
36	var_dump(call_user_func_array($func, $args));
37}
38
39var_dump(stream_wrapper_register('test', 'test_wrapper'));
40var_dump(stream_wrapper_register('test2', 'test_wrapper_base'));
41
42$fd = fopen("test://foo","r");
43$fd2 = fopen("test2://foo","r");
44
45test("stream_set_blocking - 1", $fd, true, "stream_set_blocking", array($fd,0), STREAM_OPTION_BLOCKING, 0);
46test("stream_set_blocking - 2", $fd, false, "stream_set_blocking", array($fd,1), STREAM_OPTION_BLOCKING, 1);
47test("stream_set_blocking - 3", $fd, "foo", "stream_set_blocking", array($fd,0), STREAM_OPTION_BLOCKING, 0);
48test("stream_set_blocking - 4", $fd2, true, "stream_set_blocking", array($fd2,1), STREAM_OPTION_BLOCKING, 1);
49
50test("stream_set_write_buffer - 1", $fd, true, "stream_set_write_buffer", array($fd,0), STREAM_OPTION_WRITE_BUFFER, STREAM_BUFFER_NONE);
51test("stream_set_write_buffer - 2", $fd, true, "stream_set_write_buffer", array($fd,4096), STREAM_OPTION_WRITE_BUFFER, STREAM_BUFFER_FULL);
52test("stream_set_write_buffer - 3", $fd, false, "stream_set_write_buffer", array($fd,8192), STREAM_OPTION_WRITE_BUFFER, STREAM_BUFFER_FULL);
53
54test("stream_set_timeout - 1", $fd, true, "stream_set_timeout", array($fd,10,11), STREAM_OPTION_READ_TIMEOUT, 10);
55test("stream_set_timeout - 2", $fd, false, "stream_set_timeout", array($fd,11,12), STREAM_OPTION_READ_TIMEOUT, 11);
56
57?>
58--EXPECTF--
59bool(true)
60bool(true)
61
62------ stream_set_blocking - 1: -------
63value:
64int(0)
65ptrparam:
66NULL
67$option === 1 === 1:
68bool(true)
69$value === 0 === 0:
70bool(true)
71bool(true)
72
73------ stream_set_blocking - 2: -------
74value:
75int(1)
76ptrparam:
77NULL
78$option === 1 === 1:
79bool(true)
80$value === 1 === 1:
81bool(true)
82bool(false)
83
84------ stream_set_blocking - 3: -------
85value:
86int(0)
87ptrparam:
88NULL
89$option === 1 === 1:
90bool(true)
91$value === 0 === 0:
92bool(true)
93bool(true)
94
95------ stream_set_blocking - 4: -------
96
97Warning: stream_set_blocking(): test_wrapper_base::stream_set_option is not implemented! in %s
98bool(false)
99
100------ stream_set_write_buffer - 1: -------
101value:
102int(0)
103ptrparam:
104int(%d)
105$option === 3 === 3:
106bool(true)
107$value === 0 === 0:
108bool(true)
109int(0)
110
111------ stream_set_write_buffer - 2: -------
112value:
113int(2)
114ptrparam:
115int(4096)
116$option === 3 === 3:
117bool(true)
118$value === 2 === 2:
119bool(true)
120int(0)
121
122------ stream_set_write_buffer - 3: -------
123value:
124int(2)
125ptrparam:
126int(8192)
127$option === 3 === 3:
128bool(true)
129$value === 2 === 2:
130bool(true)
131int(-1)
132
133------ stream_set_timeout - 1: -------
134value:
135int(10)
136ptrparam:
137int(11)
138$option === 4 === 4:
139bool(true)
140$value === 10 === 10:
141bool(true)
142bool(true)
143
144------ stream_set_timeout - 2: -------
145value:
146int(11)
147ptrparam:
148int(12)
149$option === 4 === 4:
150bool(true)
151$value === 11 === 11:
152bool(true)
153bool(false)
154