--- /dev/null
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2017 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Test\Readline;
+
+use Psy\Readline\GNUReadline;
+
+class GNUReadlineTest extends \PHPUnit_Framework_TestCase
+{
+ private $historyFile;
+
+ public function setUp()
+ {
+ if (!GNUReadline::isSupported()) {
+ $this->markTestSkipped('GNUReadline not enabled');
+ }
+
+ $this->historyFile = tempnam(sys_get_temp_dir(), 'psysh_test_history');
+ file_put_contents($this->historyFile, "_HiStOrY_V2_\n");
+ }
+
+ public function testHistory()
+ {
+ $readline = new GNUReadline($this->historyFile);
+ $this->assertEmpty($readline->listHistory());
+ $readline->addHistory('foo');
+ $this->assertEquals(array('foo'), $readline->listHistory());
+ $readline->addHistory('bar');
+ $this->assertEquals(array('foo', 'bar'), $readline->listHistory());
+ $readline->addHistory('baz');
+ $this->assertEquals(array('foo', 'bar', 'baz'), $readline->listHistory());
+ $readline->clearHistory();
+ $this->assertEmpty($readline->listHistory());
+ }
+
+ /**
+ * @depends testHistory
+ */
+ public function testHistorySize()
+ {
+ $readline = new GNUReadline($this->historyFile, 2);
+ $this->assertEmpty($readline->listHistory());
+ $readline->addHistory('foo');
+ $readline->addHistory('bar');
+ $this->assertEquals(array('foo', 'bar'), $readline->listHistory());
+ $readline->addHistory('baz');
+ $this->assertEquals(array('bar', 'baz'), $readline->listHistory());
+ $readline->addHistory('w00t');
+ $this->assertEquals(array('baz', 'w00t'), $readline->listHistory());
+ $readline->clearHistory();
+ $this->assertEmpty($readline->listHistory());
+ }
+
+ /**
+ * @depends testHistory
+ */
+ public function testHistoryEraseDups()
+ {
+ $readline = new GNUReadline($this->historyFile, 0, true);
+ $this->assertEmpty($readline->listHistory());
+ $readline->addHistory('foo');
+ $readline->addHistory('bar');
+ $readline->addHistory('foo');
+ $this->assertEquals(array('bar', 'foo'), $readline->listHistory());
+ $readline->addHistory('baz');
+ $readline->addHistory('w00t');
+ $readline->addHistory('baz');
+ $this->assertEquals(array('bar', 'foo', 'w00t', 'baz'), $readline->listHistory());
+ $readline->clearHistory();
+ $this->assertEmpty($readline->listHistory());
+ }
+}