. "CREATE TYPE enum1 AS ENUM ('foo', 'bar', 'baz', 'BLACK');\n"
. "CREATE PUBLICATION some_publication;\n");
-# Developers would not appreciate this test adding a bunch of junk to
-# their ~/.psql_history, so be sure to redirect history into a temp file.
-# We might as well put it in the test log directory, so that buildfarm runs
-# capture the result for possible debugging purposes.
-my $historyfile = "${PostgreSQL::Test::Utils::log_path}/010_psql_history.txt";
-$ENV{PSQL_HISTORY} = $historyfile;
-
-# Another pitfall for developers is that they might have a ~/.inputrc
-# file that changes readline's behavior enough to affect this test.
-# So ignore any such file.
-$ENV{INPUTRC} = '/dev/null';
-
-# Unset $TERM so that readline/libedit won't use any terminal-dependent
-# escape sequences; that leads to way too many cross-version variations
-# in the output.
-delete $ENV{TERM};
-# Some versions of readline inspect LS_COLORS, so for luck unset that too.
-delete $ENV{LS_COLORS};
-
# In a VPATH build, we'll be started in the source directory, but we want
# to run in the build directory so that we can use relative paths to
# access the tab_comp_dir subdirectory; otherwise the output from filename
print $FH "other stuff\n";
close $FH;
+# Arrange to capture, not discard, the interactive session's history output.
+# Put it in the test log directory, so that buildfarm runs capture the result
+# for possible debugging purposes.
+my $historyfile = "${PostgreSQL::Test::Utils::log_path}/010_psql_history.txt";
+
# fire up an interactive psql session
-my $h = $node->interactive_psql('postgres');
+my $h = $node->interactive_psql('postgres', history_file => $historyfile);
# Simple test case: type something and see if psql responds as expected
sub check_completion
Be sure to "quit" the returned object when done with it.
-The only extra parameter currently accepted is
-
=over
=item extra_params => ['--single-transaction']
If given, it must be an array reference containing additional parameters to B<psql>.
+=item history_file => B<path>
+
+Cause the interactive B<psql> session to write its command history to B<path>.
+If not given, the history is sent to B</dev/null>.
+
=back
This requires IO::Pty in addition to IPC::Run.
local %ENV = $self->_get_env();
+ # Since the invoked psql will believe it's interactive, it will use
+ # readline/libedit if available. We need to adjust some environment
+ # settings to prevent unwanted side-effects.
+
+ # Developers would not appreciate tests adding a bunch of junk to
+ # their ~/.psql_history, so redirect readline history somewhere else.
+ # If the calling script doesn't specify anything, just bit-bucket it.
+ $ENV{PSQL_HISTORY} = $params{history_file} || '/dev/null';
+
+ # Another pitfall for developers is that they might have a ~/.inputrc
+ # file that changes readline's behavior enough to affect the test.
+ # So ignore any such file.
+ $ENV{INPUTRC} = '/dev/null';
+
+ # Unset TERM so that readline/libedit won't use any terminal-dependent
+ # escape sequences; that leads to way too many cross-version variations
+ # in the output.
+ delete $ENV{TERM};
+ # Some versions of readline inspect LS_COLORS, so for luck unset that too.
+ delete $ENV{LS_COLORS};
+
my @psql_params = (
$self->installed_command('psql'),
'-XAt', '-d', $self->connstr($dbname));