Skip to content

Commit 1ba88a5

Browse files
committed
Add some CLI feedback and handle file-server swap
1 parent 8ac25da commit 1ba88a5

2 files changed

Lines changed: 88 additions & 2 deletions

File tree

src/Phug/PhugDevServer.php

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,51 @@ class PhugDevServer
2121

2222
public function __construct($server, $file, $browserReloadPort)
2323
{
24+
if (ctype_digit(strval($file)) && !file_exists($file)) {
25+
$__server = $server;
26+
$server = $file;
27+
$file = $__server;
28+
}
29+
2430
$this->server = $server;
2531
$this->file = $file;
26-
$this->browserReloadPort = $browserReloadPort;
32+
$this->browserReloadPort = intval($browserReloadPort);
33+
}
34+
35+
/**
36+
* @return int|string
37+
*/
38+
public function getServer()
39+
{
40+
$serverPort = intval($this->server);
41+
if ($serverPort) {
42+
return "localhost:$serverPort";
43+
}
44+
45+
return $this->server;
2746
}
2847

48+
/**
49+
* @return string
50+
*/
51+
public function getFile()
52+
{
53+
return $this->file;
54+
}
55+
56+
/**
57+
* @return int
58+
*/
59+
public function getBrowserReloadPort()
60+
{
61+
return $this->browserReloadPort;
62+
}
63+
64+
/**
65+
* Start browser-reload and dev-server listening.
66+
*
67+
* @return bool
68+
*/
2969
public function listen()
3070
{
3171
$browserReloadPort = $this->browserReloadPort;
@@ -35,22 +75,26 @@ public function listen()
3575
}
3676
$php = PHP_BINARY;
3777
$file = escapeshellarg($this->file);
38-
$watcher = realpath(file_exists('vendor/bin/watcher') ? 'vendor/bin/watcher' : 'watcher');
78+
$watcher = realpath(file_exists('vendor/phug/watcher/watcher') ? 'vendor/phug/watcher/watcher' : 'watcher');
3979
if (!$watcher) {
4080
throw new \RuntimeException('No watcher program found in the vendor/bin directory.');
4181
}
4282

4383
// @codeCoverageIgnoreStart
4484
if (strtolower(substr(php_uname(), 0, 3)) === 'win') {
85+
echo "Opening new window for browser-reload watching on port $browserReloadPort (or superior if not available).\n";
4586
pclose(popen("start $php $watcher --browser-reload=$browserReloadPort ".
4687
"> watcher-output.log 2> watcher-error.log", 'r'));
88+
echo "Listening $file on $server.\n";
4789
echo shell_exec("set BROWSER_RELOAD_PORT=$browserReloadPort && $php -S $server $file");
4890

4991
return true;
5092
}
5193

94+
echo "Browser-reload watching listening on port $browserReloadPort (or superior if not available).\n";
5295
shell_exec("$php $watcher --browser-reload=$browserReloadPort ".
5396
"> watcher-output.log 2> watcher-error.log &");
97+
echo "Listening $file on $server.\n";
5498
echo shell_exec("BROWSER_RELOAD_PORT=$browserReloadPort $php -S $server $file");
5599

56100
return true;

tests/Phug/PhugDevServerTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Phug\Test;
4+
5+
use Phug\PhugDevServer;
6+
7+
/**
8+
* @coversDefaultClass \Phug\PhugDevServer
9+
*/
10+
class PhugDevServerTest extends AbstractWatcherTestCase
11+
{
12+
/**
13+
* @covers ::<public>
14+
*/
15+
public function testCreate()
16+
{
17+
$server = new PhugDevServer('localhost:9000', 'index.php', '3600');
18+
19+
self::assertSame('index.php', $server->getFile());
20+
self::assertSame('localhost:9000', $server->getServer());
21+
self::assertSame(3600, $server->getBrowserReloadPort());
22+
23+
$server = new PhugDevServer('7500', 'script', '3600');
24+
25+
self::assertSame('script', $server->getFile());
26+
self::assertSame('localhost:7500', $server->getServer());
27+
self::assertSame(3600, $server->getBrowserReloadPort());
28+
}
29+
30+
/**
31+
* @group i
32+
* @covers ::<public>
33+
*/
34+
public function testCreateArgumentsSwap()
35+
{
36+
$server = new PhugDevServer('script.php', '3600', '3000');
37+
38+
self::assertSame('script.php', $server->getFile());
39+
self::assertSame('localhost:3600', $server->getServer());
40+
self::assertSame(3000, $server->getBrowserReloadPort());
41+
}
42+
}

0 commit comments

Comments
 (0)