Re: pgsql: Add basic TAP tests for psql's tab-completion logic.

[email protected] (Dagfinn Ilmari Mannsåker)
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <[email protected]>
[email protected] (Dagfinn Ilmari Mannsåker) writes:

> Tom Lane <[email protected]> writes:
>
>> Cool, I'll go commit a fix along those lines.  Thanks for tracing
>> this down!
>
> Here's one final style cleanup for the TAP test.
>
> - use like() for the banner test
> - pass the regexes around as qr// objects, so they can be
>   syntax-highlighted properly, and don't need regex
>   metacharacter-escaping backslashes doubled.
> - include the regex that didn't match in the diagnostic

This time with the actual attachment...

- ilmari
-- 
- Twitter seems more influential [than blogs] in the 'gets reported in
  the mainstream press' sense at least.               - Matt McLeod
- That'd be because the content of a tweet is easier to condense down
  to a mainstream media article.                      - Calle Dybedahl
0001-Use-qr-for-passed-in-regexes-in-tab-completion-TAP-t.patch (text/x-diff, 3.6 KB)
From 0307bdea0f95e47e9ed7cf9678c12d568006d772 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <[email protected]>
Date: Sun, 5 Jan 2020 13:20:10 +0000
Subject: [PATCH] Use qr// for passed-in regexes in tab-completion TAP test

This lets editors syntax-highlight them as regexes, not just plain
strings, and avoids having to double backslashes when escaping regex
metacharacters like *.

Also include the pattern that didn't match in the failure diagnostic,
and use like() for the startup banner test.
---
 src/bin/psql/t/010_tab_completion.pl | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl
index 9cfd7ec79c..bff954de24 100644
--- a/src/bin/psql/t/010_tab_completion.pl
+++ b/src/bin/psql/t/010_tab_completion.pl
@@ -58,7 +58,7 @@ my $timer = timer(5);
 
 my $h = $node->interactive_psql('postgres', \$in, \$out, $timer);
 
-ok($out =~ /psql/, "print startup banner");
+like($out, qr/psql/, "print startup banner");
 
 # Simple test case: type something and see if psql responds as expected
 sub check_completion
@@ -75,13 +75,14 @@ sub check_completion
 	# send the data to be sent
 	$in .= $send;
 	# wait ...
-	pump $h until ($out =~ m/$pattern/ || $timer->is_expired);
-	my $okay = ($out =~ m/$pattern/ && !$timer->is_expired);
+	pump $h until ($out =~ $pattern || $timer->is_expired);
+	my $okay = ($out =~ $pattern && !$timer->is_expired);
 	ok($okay, $annotation);
 	# for debugging, log actual output if it didn't match
 	local $Data::Dumper::Terse = 1;
 	local $Data::Dumper::Useqq = 1;
-	diag 'Actual output was ' . Dumper($out) . "\n" if !$okay;
+	diag 'Actual output was ' . Dumper($out) .
+		"Did not match $pattern\n" if !$okay;
 	return;
 }
 
@@ -89,20 +90,20 @@ sub check_completion
 # (won't work if we are inside a string literal!)
 sub clear_query
 {
-	check_completion("\\r\n", "postgres=# ", "\\r works");
+	check_completion("\\r\n", qr/postgres=# /, "\\r works");
 	return;
 }
 
 # check basic command completion: SEL<tab> produces SELECT<space>
-check_completion("SEL\t", "SELECT ", "complete SEL<tab> to SELECT");
+check_completion("SEL\t", qr/SELECT /, "complete SEL<tab> to SELECT");
 
 clear_query();
 
 # check case variation is honored
-check_completion("sel\t", "select ", "complete sel<tab> to select");
+check_completion("sel\t", qr/select /, "complete sel<tab> to select");
 
 # check basic table name completion
-check_completion("* from t\t", "\\* from tab1 ", "complete t<tab> to tab1");
+check_completion("* from t\t", qr/\* from tab1 /, "complete t<tab> to tab1");
 
 clear_query();
 
@@ -110,14 +111,14 @@ clear_query();
 # note: readline might print a bell before the completion
 check_completion(
 	"select * from my\t",
-	"select \\* from my\a?tab",
+	qr/select \* from my\a?tab/,
 	"complete my<tab> to mytab when there are multiple choices");
 
 # some versions of readline/libedit require two tabs here, some only need one
-check_completion("\t\t", "mytab123 +mytab246",
+check_completion("\t\t", qr/mytab123 +mytab246/,
 	"offer multiple table choices");
 
-check_completion("2\t", "246 ",
+check_completion("2\t", qr/246 /,
 	"finish completion of one of multiple table choices");
 
 clear_query();
@@ -125,7 +126,7 @@ clear_query();
 # check case-sensitive keyword replacement
 # note: various versions of readline/libedit handle backspacing
 # differently, so just check that the replacement comes out correctly
-check_completion("\\DRD\t", "drds ", "complete \\DRD<tab> to \\drds");
+check_completion("\\DRD\t", qr/\\drds /, "complete \\DRD<tab> to \\drds");
 
 clear_query();
 
-- 
2.22.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.