use strict;
use warnings;

use Config;
use PostgresNode;
use TestLib;
use Test::More tests => 15;

#
# test invalid \if respects ON_ERROR_STOP
#
my $node = get_new_node('master');
$node->init;
$node->start;

my $tests = [
  [ "\\if invalid_expression\n\\endif\n", '', 'boolean expected', 'syntax error' ],
  # unmatched checks
  [ "\\if true\\n", '', 'found EOF before closing.*endif', 'unmatched \if' ],
  [ "\\elif true\\n", '', 'encountered un-matched.*elif', 'unmatched \elif' ],
  [ "\\else\\n", '', 'encountered un-matched.*else', 'unmatched \else' ],
  [ "\\endif\\n", '', 'encountered un-matched.*endif', 'unmatched \endif' ],
];

# 3 checks per tests
for my $test (@$tests) {
  my ($script, $stdout_expect, $stderr_re, $name) = @$test;
  my ($stdout, $stderr);
  my $retcode = $node->psql('postgres', $script,
		stdout => \$stdout, stderr => \$stderr,
		on_error_stop => 1);
  is($retcode,'3',"$name test respects ON_ERROR_STOP");
  is($stdout, $stdout_expect, "$name test STDOUT");
  like($stderr, qr/$stderr_re/, "$name test STDERR");

}

$node->teardown_node;
