Chris@13: markTestSkipped('Libedit not enabled'); Chris@13: } Chris@13: Chris@17: $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history'); Chris@17: if (false === \file_put_contents($this->historyFile, "_HiStOrY_V2_\n")) { Chris@13: $this->fail('Unable to write history file: ' . $this->historyFile); Chris@13: } Chris@13: // Calling readline_read_history before readline_clear_history Chris@13: // avoids segfault with PHP 5.5.7 & libedit v3.1 Chris@17: \readline_read_history($this->historyFile); Chris@17: \readline_clear_history(); Chris@13: } Chris@13: Chris@13: public function tearDown() Chris@13: { Chris@17: if (\is_file($this->historyFile)) { Chris@17: \unlink($this->historyFile); Chris@13: } Chris@13: } Chris@13: Chris@13: public function testHistory() Chris@13: { Chris@13: $readline = new Libedit($this->historyFile); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: $readline->addHistory('foo'); Chris@13: $this->assertSame(['foo'], $readline->listHistory()); Chris@13: $readline->addHistory('bar'); Chris@13: $this->assertSame(['foo', 'bar'], $readline->listHistory()); Chris@13: $readline->addHistory('baz'); Chris@13: $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory()); Chris@13: $readline->clearHistory(); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @depends testHistory Chris@13: */ Chris@13: public function testHistorySize() Chris@13: { Chris@13: $readline = new Libedit($this->historyFile, 2); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: $readline->addHistory('foo'); Chris@13: $readline->addHistory('bar'); Chris@13: $this->assertSame(['foo', 'bar'], $readline->listHistory()); Chris@13: $readline->addHistory('baz'); Chris@13: $this->assertSame(['bar', 'baz'], $readline->listHistory()); Chris@13: $readline->addHistory('w00t'); Chris@13: $this->assertSame(['baz', 'w00t'], $readline->listHistory()); Chris@13: $readline->clearHistory(); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @depends testHistory Chris@13: */ Chris@13: public function testHistoryEraseDups() Chris@13: { Chris@13: $readline = new Libedit($this->historyFile, 0, true); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: $readline->addHistory('foo'); Chris@13: $readline->addHistory('bar'); Chris@13: $readline->addHistory('foo'); Chris@13: $this->assertSame(['bar', 'foo'], $readline->listHistory()); Chris@13: $readline->addHistory('baz'); Chris@13: $readline->addHistory('w00t'); Chris@13: $readline->addHistory('baz'); Chris@13: $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory()); Chris@13: $readline->clearHistory(); Chris@13: $this->assertEmpty($readline->listHistory()); Chris@13: } Chris@13: Chris@13: public function testListHistory() Chris@13: { Chris@13: $readline = new Libedit($this->historyFile); Chris@17: \file_put_contents( Chris@13: $this->historyFile, Chris@13: "This is an entry\n\0This is a comment\nThis is an entry\0With a comment\n", Chris@13: FILE_APPEND Chris@13: ); Chris@13: $this->assertSame([ Chris@13: 'This is an entry', Chris@13: 'This is an entry', Chris@13: ], $readline->listHistory()); Chris@13: $readline->clearHistory(); Chris@13: } Chris@13: Chris@13: /** Chris@13: * Libedit being a BSD library, Chris@13: * it doesn't support non-unix line separators. Chris@13: */ Chris@13: public function testLinebreaksSupport() Chris@13: { Chris@13: $readline = new Libedit($this->historyFile); Chris@17: \file_put_contents( Chris@13: $this->historyFile, Chris@13: "foo\rbar\nbaz\r\nw00t", Chris@13: FILE_APPEND Chris@13: ); Chris@13: $this->assertSame([ Chris@13: "foo\rbar", Chris@13: "baz\r", Chris@13: 'w00t', Chris@13: ], $readline->listHistory()); Chris@13: $readline->clearHistory(); Chris@13: } Chris@13: }