1
0
Fork 0

Adding upstream version 3.3.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-09 19:58:27 +01:00
parent d1eab1eea9
commit 0fde450255
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
11 changed files with 193 additions and 52 deletions

View file

@ -24,11 +24,11 @@ def step_see_small_results(context):
context,
dedent(
"""\
+------------+\r
| ?column? |\r
|------------|\r
| 1 |\r
+------------+\r
+----------+\r
| ?column? |\r
|----------|\r
| 1 |\r
+----------+\r
SELECT 1\r
"""
),

View file

@ -118,11 +118,11 @@ def step_see_found(context):
+ "\r"
+ dedent(
"""
+------------+\r
| ?column? |\r
|------------|\r
| found |\r
+------------+\r
+----------+\r
| ?column? |\r
|----------|\r
| found |\r
+----------+\r
SELECT 1\r
"""
)

View file

@ -58,11 +58,11 @@ def step_see_data(context, which):
context,
dedent(
"""\
+-----+-----+--------+\r
| x | y | z |\r
|-----+-----+--------|\r
| 1 | 1.0 | 1.0000 |\r
+-----+-----+--------+\r
+---+-----+--------+\r
| x | y | z |\r
|---+-----+--------|\r
| 1 | 1.0 | 1.0000 |\r
+---+-----+--------+\r
SELECT 1\r
"""
),

View file

@ -61,16 +61,47 @@ def test_format_output():
)
expected = [
"Title",
"+---------+---------+",
"| head1 | head2 |",
"|---------+---------|",
"| abc | def |",
"+---------+---------+",
"+-------+-------+",
"| head1 | head2 |",
"|-------+-------|",
"| abc | def |",
"+-------+-------+",
"test status",
]
assert list(results) == expected
def test_format_output_truncate_on():
settings = OutputSettings(
table_format="psql", dcmlfmt="d", floatfmt="g", max_field_width=10
)
results = format_output(
None,
[("first field value", "second field value")],
["head1", "head2"],
None,
settings,
)
expected = [
"+------------+------------+",
"| head1 | head2 |",
"|------------+------------|",
"| first f... | second ... |",
"+------------+------------+",
]
assert list(results) == expected
def test_format_output_truncate_off():
settings = OutputSettings(
table_format="psql", dcmlfmt="d", floatfmt="g", max_field_width=None
)
long_field_value = ("first field " * 100).strip()
results = format_output(None, [(long_field_value,)], ["head1"], None, settings)
lines = list(results)
assert lines[3] == f"| {long_field_value} |"
@dbtest
def test_format_array_output(executor):
statement = """
@ -83,12 +114,12 @@ def test_format_array_output(executor):
"""
results = run(executor, statement)
expected = [
"+----------------+------------------------+--------------+",
"| bigint_array | nested_numeric_array | 配列 |",
"|----------------+------------------------+--------------|",
"| {1,2,3} | {{1,2},{3,4}} | {å,魚,текст} |",
"| {} | <null> | {<null>} |",
"+----------------+------------------------+--------------+",
"+--------------+----------------------+--------------+",
"| bigint_array | nested_numeric_array | 配列 |",
"|--------------+----------------------+--------------|",
"| {1,2,3} | {{1,2},{3,4}} | {å,魚,текст} |",
"| {} | <null> | {<null>} |",
"+--------------+----------------------+--------------+",
"SELECT 2",
]
assert list(results) == expected
@ -128,11 +159,11 @@ def test_format_output_auto_expand():
)
table = [
"Title",
"+---------+---------+",
"| head1 | head2 |",
"|---------+---------|",
"| abc | def |",
"+---------+---------+",
"+-------+-------+",
"| head1 | head2 |",
"|-------+-------|",
"| abc | def |",
"+-------+-------+",
"test status",
]
assert list(table_results) == table
@ -266,6 +297,63 @@ def test_i_works(tmpdir, executor):
run(executor, statement, pgspecial=cli.pgspecial)
@dbtest
def test_watch_works(executor):
cli = PGCli(pgexecute=executor)
def run_with_watch(
query, target_call_count=1, expected_output="", expected_timing=None
):
"""
:param query: Input to the CLI
:param target_call_count: Number of times the user lets the command run before Ctrl-C
:param expected_output: Substring expected to be found for each executed query
:param expected_timing: value `time.sleep` expected to be called with on every invocation
"""
with mock.patch.object(cli, "echo_via_pager") as mock_echo, mock.patch(
"pgcli.main.sleep"
) as mock_sleep:
mock_sleep.side_effect = [None] * (target_call_count - 1) + [
KeyboardInterrupt
]
cli.handle_watch_command(query)
# Validate that sleep was called with the right timing
for i in range(target_call_count - 1):
assert mock_sleep.call_args_list[i][0][0] == expected_timing
# Validate that the output of the query was expected
assert mock_echo.call_count == target_call_count
for i in range(target_call_count):
assert expected_output in mock_echo.call_args_list[i][0][0]
# With no history, it errors.
with mock.patch("pgcli.main.click.secho") as mock_secho:
cli.handle_watch_command(r"\watch 2")
mock_secho.assert_called()
assert (
r"\watch cannot be used with an empty query"
in mock_secho.call_args_list[0][0][0]
)
# Usage 1: Run a query and then re-run it with \watch across two prompts.
run_with_watch("SELECT 111", expected_output="111")
run_with_watch(
"\\watch 10", target_call_count=2, expected_output="111", expected_timing=10
)
# Usage 2: Run a query and \watch via the same prompt.
run_with_watch(
"SELECT 222; \\watch 4",
target_call_count=3,
expected_output="222",
expected_timing=4,
)
# Usage 3: Re-run the last watched command with a new timing
run_with_watch(
"\\watch 5", target_call_count=4, expected_output="222", expected_timing=5
)
def test_missing_rc_dir(tmpdir):
rcfile = str(tmpdir.join("subdir").join("rcfile"))