PluginProbe
UpStream: a Project Management Plugin for WordPress / trunk
UpStream: a Project Management Plugin for WordPress vtrunk
trunk 1.39.0 1.39.1 1.39.2 1.39.3 2.0.7 2.1.0
upstream / vendor / symfony / process / Tests / ProcessBuilderTest.php

ProcessBuilderTest.php in UpStream: a Project Management Plugin for WordPress trunk, at vendor/symfony/process/Tests/ProcessBuilderTest.php

221 lines 6.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\Process\Tests;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Process\ProcessBuilder;
16
17 /**
18 * @group legacy
19 */
20 class ProcessBuilderTest extends TestCase
21 {
22 public function testInheritEnvironmentVars()
23 {
24 $proc = ProcessBuilder::create()
25 ->add('foo')
26 ->getProcess();
27
28 $this->assertTrue($proc->areEnvironmentVariablesInherited());
29
30 $proc = ProcessBuilder::create()
31 ->add('foo')
32 ->inheritEnvironmentVariables(false)
33 ->getProcess();
34
35 $this->assertFalse($proc->areEnvironmentVariablesInherited());
36 }
37
38 public function testAddEnvironmentVariables()
39 {
40 $pb = new ProcessBuilder();
41 $env = [
42 'foo' => 'bar',
43 'foo2' => 'bar2',
44 ];
45 $proc = $pb
46 ->add('command')
47 ->setEnv('foo', 'bar2')
48 ->addEnvironmentVariables($env)
49 ->getProcess()
50 ;
51
52 $this->assertSame($env, $proc->getEnv());
53 }
54
55 public function testNegativeTimeoutFromSetter()
56 {
57 $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
58 $pb = new ProcessBuilder();
59 $pb->setTimeout(-1);
60 }
61
62 public function testNullTimeout()
63 {
64 $pb = new ProcessBuilder();
65 $pb->setTimeout(10);
66 $pb->setTimeout(null);
67
68 $r = new \ReflectionObject($pb);
69 $p = $r->getProperty('timeout');
70 $p->setAccessible(true);
71
72 $this->assertNull($p->getValue($pb));
73 }
74
75 public function testShouldSetArguments()
76 {
77 $pb = new ProcessBuilder(['initial']);
78 $pb->setArguments(['second']);
79
80 $proc = $pb->getProcess();
81
82 $this->assertStringContainsString('second', $proc->getCommandLine());
83 }
84
85 public function testPrefixIsPrependedToAllGeneratedProcess()
86 {
87 $pb = new ProcessBuilder();
88 $pb->setPrefix('/usr/bin/php');
89
90 $proc = $pb->setArguments(['-v'])->getProcess();
91 if ('\\' === \DIRECTORY_SEPARATOR) {
92 $this->assertEquals('"/usr/bin/php" -v', $proc->getCommandLine());
93 } else {
94 $this->assertEquals("'/usr/bin/php' '-v'", $proc->getCommandLine());
95 }
96
97 $proc = $pb->setArguments(['-i'])->getProcess();
98 if ('\\' === \DIRECTORY_SEPARATOR) {
99 $this->assertEquals('"/usr/bin/php" -i', $proc->getCommandLine());
100 } else {
101 $this->assertEquals("'/usr/bin/php' '-i'", $proc->getCommandLine());
102 }
103 }
104
105 public function testArrayPrefixesArePrependedToAllGeneratedProcess()
106 {
107 $pb = new ProcessBuilder();
108 $pb->setPrefix(['/usr/bin/php', 'composer.phar']);
109
110 $proc = $pb->setArguments(['-v'])->getProcess();
111 if ('\\' === \DIRECTORY_SEPARATOR) {
112 $this->assertEquals('"/usr/bin/php" composer.phar -v', $proc->getCommandLine());
113 } else {
114 $this->assertEquals("'/usr/bin/php' 'composer.phar' '-v'", $proc->getCommandLine());
115 }
116
117 $proc = $pb->setArguments(['-i'])->getProcess();
118 if ('\\' === \DIRECTORY_SEPARATOR) {
119 $this->assertEquals('"/usr/bin/php" composer.phar -i', $proc->getCommandLine());
120 } else {
121 $this->assertEquals("'/usr/bin/php' 'composer.phar' '-i'", $proc->getCommandLine());
122 }
123 }
124
125 public function testShouldEscapeArguments()
126 {
127 $pb = new ProcessBuilder(['%path%', 'foo " bar', '%baz%baz']);
128 $proc = $pb->getProcess();
129
130 if ('\\' === \DIRECTORY_SEPARATOR) {
131 $this->assertSame('""^%"path"^%"" "foo "" bar" ""^%"baz"^%"baz"', $proc->getCommandLine());
132 } else {
133 $this->assertSame("'%path%' 'foo \" bar' '%baz%baz'", $proc->getCommandLine());
134 }
135 }
136
137 public function testShouldEscapeArgumentsAndPrefix()
138 {
139 $pb = new ProcessBuilder(['arg']);
140 $pb->setPrefix('%prefix%');
141 $proc = $pb->getProcess();
142
143 if ('\\' === \DIRECTORY_SEPARATOR) {
144 $this->assertSame('""^%"prefix"^%"" arg', $proc->getCommandLine());
145 } else {
146 $this->assertSame("'%prefix%' 'arg'", $proc->getCommandLine());
147 }
148 }
149
150 public function testShouldThrowALogicExceptionIfNoPrefixAndNoArgument()
151 {
152 $this->expectException('Symfony\Component\Process\Exception\LogicException');
153 ProcessBuilder::create()->getProcess();
154 }
155
156 public function testShouldNotThrowALogicExceptionIfNoArgument()
157 {
158 $process = ProcessBuilder::create()
159 ->setPrefix('/usr/bin/php')
160 ->getProcess();
161
162 if ('\\' === \DIRECTORY_SEPARATOR) {
163 $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
164 } else {
165 $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
166 }
167 }
168
169 public function testShouldNotThrowALogicExceptionIfNoPrefix()
170 {
171 $process = ProcessBuilder::create(['/usr/bin/php'])
172 ->getProcess();
173
174 if ('\\' === \DIRECTORY_SEPARATOR) {
175 $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
176 } else {
177 $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
178 }
179 }
180
181 public function testShouldReturnProcessWithDisabledOutput()
182 {
183 $process = ProcessBuilder::create(['/usr/bin/php'])
184 ->disableOutput()
185 ->getProcess();
186
187 $this->assertTrue($process->isOutputDisabled());
188 }
189
190 public function testShouldReturnProcessWithEnabledOutput()
191 {
192 $process = ProcessBuilder::create(['/usr/bin/php'])
193 ->disableOutput()
194 ->enableOutput()
195 ->getProcess();
196
197 $this->assertFalse($process->isOutputDisabled());
198 }
199
200 public function testInvalidInput()
201 {
202 $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
203 $this->expectExceptionMessage('"Symfony\Component\Process\ProcessBuilder::setInput" only accepts strings, Traversable objects or stream resources.');
204 $builder = ProcessBuilder::create();
205 $builder->setInput([]);
206 }
207
208 public function testDoesNotPrefixExec()
209 {
210 if ('\\' === \DIRECTORY_SEPARATOR) {
211 $this->markTestSkipped('This test cannot run on Windows.');
212 }
213
214 $builder = ProcessBuilder::create(['command', '-v', 'ls']);
215 $process = $builder->getProcess();
216 $process->run();
217
218 $this->assertTrue($process->isSuccessful());
219 }
220 }
221