88use SoureCode \Bundle \Screen \Factory \ScreenFactory ;
99use SoureCode \Bundle \Screen \Manager \ScreenManager ;
1010use SoureCode \Bundle \Screen \Model \Screen ;
11+ use SoureCode \Bundle \Screen \Model \ScreenInterface ;
1112use SoureCode \Bundle \Screen \Provider \ArrayScreenProvider ;
1213use Symfony \Component \Filesystem \Filesystem ;
14+ use Symfony \Component \Process \Process ;
1315
1416class ScreenManagerTest extends TestCase
1517{
1618 private const int TIMEOUT_SECONDS = 5 ;
1719 private const int SLEEP_MICROSECONDS = 100 ;
1820
21+ /**
22+ * @var string[] $screenNames
23+ */
24+ private array $ screenNames = [];
25+
1926 private function getScreenManager (string $ randomEcho , int $ randomSleep ): ScreenManager
2027 {
2128 $ factory = new ScreenFactory (Screen::class);
@@ -31,13 +38,41 @@ private function getScreenManager(string $randomEcho, int $randomSleep): ScreenM
3138 $ filesystem = new Filesystem ();
3239 $ logger = new NullLogger ();
3340
34- return new ScreenManager (
41+ $ screenManager = new ScreenManager (
3542 realpath (__DIR__ .'/../app ' ),
3643 'test ' ,
3744 $ filesystem ,
3845 $ screenProvider ,
3946 $ logger ,
4047 );
48+
49+ /**
50+ * @var ScreenInterface[] $screens
51+ */
52+ $ screens = [];
53+ $ screens [] = $ screenManager ->resolveScreen ('echoTest ' );
54+ $ screens [] = $ screenManager ->resolveScreen ('daemonTest ' );
55+
56+ foreach ($ screens as $ screen ) {
57+ $ this ->screenNames [] = $ screenManager ->generateScreenName ($ screen );
58+ }
59+
60+ return $ screenManager ;
61+ }
62+
63+ private function clearScreens (): void
64+ {
65+ foreach ($ this ->screenNames as $ screenName ) {
66+ $ killProcess = new Process (['screen ' , '-S ' , $ screenName , '-X ' , 'quit ' ]);
67+ $ killProcess ->run ();
68+ }
69+
70+ $ this ->screenNames = [];
71+ }
72+
73+ protected function tearDown (): void
74+ {
75+ $ this ->clearScreens ();
4176 }
4277
4378 public function testStartAndLogs (): void
0 commit comments