Adding upstream version 1.9.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
2bf0435a35
commit
031879240c
356 changed files with 26924 additions and 0 deletions
356
tests/unittests/test_completers.py
Normal file
356
tests/unittests/test_completers.py
Normal file
|
@ -0,0 +1,356 @@
|
|||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pendulum
|
||||
from prompt_toolkit.formatted_text import FormattedText
|
||||
from prompt_toolkit.completion import Completion
|
||||
|
||||
from iredis.completers import MostRecentlyUsedFirstWordCompleter
|
||||
from iredis.completers import IRedisCompleter, TimestampCompleter, IntegerTypeCompleter
|
||||
|
||||
|
||||
def test_LUF_completer_touch():
|
||||
c = MostRecentlyUsedFirstWordCompleter(3, ["one", "two"])
|
||||
c.touch("hello")
|
||||
assert c.words == ["hello", "one", "two"]
|
||||
|
||||
c.touch("foo")
|
||||
assert c.words == ["foo", "hello", "one"]
|
||||
|
||||
c.touch("hello")
|
||||
assert c.words == ["hello", "foo", "one"]
|
||||
|
||||
|
||||
def test_LUF_completer_touch_words():
|
||||
c = MostRecentlyUsedFirstWordCompleter(3, [])
|
||||
c.touch_words(["hello", "world", "foo", "bar"])
|
||||
assert c.words == ["bar", "foo", "world"]
|
||||
|
||||
c.touch_words(["one", "two"])
|
||||
assert c.words == ["two", "one", "bar"]
|
||||
|
||||
|
||||
def test_newbie_mode_complete_without_meta_dict():
|
||||
fake_document = MagicMock()
|
||||
fake_document.text_before_cursor = fake_document.text = "GEOR"
|
||||
completer = IRedisCompleter(hint=False)
|
||||
completions = list(completer.get_completions(fake_document, None))
|
||||
assert [word.text for word in completions] == ["GEORADIUS", "GEORADIUSBYMEMBER"]
|
||||
assert [word.display_meta for word in completions] == [
|
||||
FormattedText([("", "")]),
|
||||
FormattedText([("", "")]),
|
||||
]
|
||||
|
||||
|
||||
def test_newbie_mode_complete_with_meta_dict():
|
||||
fake_document = MagicMock()
|
||||
fake_document.text_before_cursor = fake_document.text = "GEOR"
|
||||
completer = IRedisCompleter(hint=True)
|
||||
completions = list(completer.get_completions(fake_document, None))
|
||||
|
||||
assert sorted([completion.display_meta for completion in completions]) == [
|
||||
FormattedText(
|
||||
[
|
||||
(
|
||||
"",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member", # noqa
|
||||
)
|
||||
]
|
||||
),
|
||||
FormattedText(
|
||||
[
|
||||
(
|
||||
"",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point", # noqa
|
||||
)
|
||||
]
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def test_newbie_mode_complete_with_meta_dict_command_is_lowercase():
|
||||
fake_document = MagicMock()
|
||||
fake_document.text_before_cursor = fake_document.text = "geor"
|
||||
completer = IRedisCompleter(hint=True)
|
||||
completions = list(completer.get_completions(fake_document, None))
|
||||
|
||||
assert sorted([completion.display_meta for completion in completions]) == [
|
||||
FormattedText(
|
||||
[
|
||||
(
|
||||
"",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member", # noqa
|
||||
)
|
||||
]
|
||||
),
|
||||
FormattedText(
|
||||
[
|
||||
(
|
||||
"",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point", # noqa
|
||||
)
|
||||
]
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def test_iredis_completer_update_for_response():
|
||||
c = IRedisCompleter()
|
||||
c.update_completer_for_response(
|
||||
"HGETALL",
|
||||
(),
|
||||
[
|
||||
b"Behave",
|
||||
b"misbehave",
|
||||
b"Interpret",
|
||||
b"misinterpret",
|
||||
b"Lead",
|
||||
b"mislead",
|
||||
b"Trust",
|
||||
b"mistrust",
|
||||
],
|
||||
)
|
||||
assert c.field_completer.words == ["Trust", "Lead", "Interpret", "Behave"]
|
||||
|
||||
|
||||
def test_categoryname_completer_update_for_response():
|
||||
c = IRedisCompleter()
|
||||
c.update_completer_for_response(
|
||||
"ACL CAT",
|
||||
(),
|
||||
[b"scripting", b"watch"],
|
||||
)
|
||||
assert sorted(c.catetoryname_completer.words) == ["scripting", "watch"]
|
||||
c.update_completer_for_response(
|
||||
"ACL CAT",
|
||||
("scripting"),
|
||||
[b"foo", b"bar"],
|
||||
)
|
||||
assert sorted(c.catetoryname_completer.words) == ["scripting", "watch"]
|
||||
|
||||
|
||||
def test_completer_when_there_are_spaces_in_command():
|
||||
c = IRedisCompleter()
|
||||
c.update_completer_for_response(
|
||||
"ACL cat",
|
||||
(),
|
||||
[b"scripting", b"watch"],
|
||||
)
|
||||
assert sorted(c.catetoryname_completer.words) == ["scripting", "watch"]
|
||||
|
||||
c.update_completer_for_response(
|
||||
"acl \t cat",
|
||||
(),
|
||||
[b"hello", b"world"],
|
||||
)
|
||||
assert sorted(c.catetoryname_completer.words) == [
|
||||
"hello",
|
||||
"scripting",
|
||||
"watch",
|
||||
"world",
|
||||
]
|
||||
|
||||
|
||||
def test_iredis_completer_no_exception_for_none_response():
|
||||
c = IRedisCompleter()
|
||||
c.update_completer_for_response("XPENDING", None, None)
|
||||
c.update_completer_for_response("KEYS", None, None)
|
||||
|
||||
|
||||
def test_group_completer():
|
||||
fake_document = MagicMock()
|
||||
previous_commands = ["xgroup create abc world 123", "xgroup setid abc hello 123"]
|
||||
fake_document.text = fake_document.text_before_cursor = "XGROUP DESTROY key "
|
||||
completer = IRedisCompleter()
|
||||
for command in previous_commands:
|
||||
completer.update_completer_for_input(command)
|
||||
completions = list(completer.get_completions(fake_document, None))
|
||||
assert completions == [
|
||||
Completion(
|
||||
text="hello",
|
||||
start_position=0,
|
||||
display=FormattedText([("", "hello")]),
|
||||
display_meta=FormattedText([("", "")]),
|
||||
),
|
||||
Completion(
|
||||
text="world",
|
||||
start_position=0,
|
||||
display=FormattedText([("", "world")]),
|
||||
display_meta=FormattedText([("", "")]),
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@patch("iredis.completers.pendulum.now")
|
||||
def test_timestamp_completer_humanize_time_completion(fake_now):
|
||||
fake_now.return_value = pendulum.from_timestamp(1578487013)
|
||||
c = TimestampCompleter()
|
||||
|
||||
fake_document = MagicMock()
|
||||
fake_document.text = fake_document.text_before_cursor = "30"
|
||||
completions = list(c.get_completions(fake_document, None))
|
||||
|
||||
assert completions == [
|
||||
Completion(
|
||||
text="1575895013000",
|
||||
start_position=-2,
|
||||
display=FormattedText([("", "1575895013000")]),
|
||||
display_meta="30 days ago (2019-12-09 12:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578379013000",
|
||||
start_position=-2,
|
||||
display=FormattedText([("", "1578379013000")]),
|
||||
display_meta="30 hours ago (2020-01-07 06:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578485213000",
|
||||
start_position=-2,
|
||||
display=FormattedText([("", "1578485213000")]),
|
||||
display_meta="30 minutes ago (2020-01-08 12:06:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578486983000",
|
||||
start_position=-2,
|
||||
display=FormattedText([("", "1578486983000")]),
|
||||
display_meta="30 seconds ago (2020-01-08 12:36:23)",
|
||||
),
|
||||
]
|
||||
|
||||
# No plural
|
||||
fake_document.text = fake_document.text_before_cursor = "1"
|
||||
completions = list(c.get_completions(fake_document, None))
|
||||
|
||||
assert completions == [
|
||||
Completion(
|
||||
text="1546951013000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1546951013000")]),
|
||||
display_meta="1 year ago (2019-01-08 12:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1575808613000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1575808613000")]),
|
||||
display_meta="1 month ago (2019-12-08 12:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578400613000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1578400613000")]),
|
||||
display_meta="1 day ago (2020-01-07 12:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578483413000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1578483413000")]),
|
||||
display_meta="1 hour ago (2020-01-08 11:36:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578486953000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1578486953000")]),
|
||||
display_meta="1 minute ago (2020-01-08 12:35:53)",
|
||||
),
|
||||
Completion(
|
||||
text="1578487012000",
|
||||
start_position=-1,
|
||||
display=FormattedText([("", "1578487012000")]),
|
||||
display_meta="1 second ago (2020-01-08 12:36:52)",
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def test_timestamp_completer_datetime_format_time_completion():
|
||||
c = TimestampCompleter()
|
||||
fake_document = MagicMock()
|
||||
fake_document.text = fake_document.text_before_cursor = "2020-02-07"
|
||||
completions = list(c.get_completions(fake_document, None))
|
||||
|
||||
assert completions == [
|
||||
Completion(
|
||||
text="1581033600000",
|
||||
start_position=-10,
|
||||
display=FormattedText([("", "1581033600000")]),
|
||||
display_meta="2020-02-07T00:00:00+00:00",
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
def test_integer_type_completer():
|
||||
c = IntegerTypeCompleter()
|
||||
fake_document = MagicMock()
|
||||
fake_document.text = fake_document.get_word_before_cursor.return_value = "i"
|
||||
completions = list(c.get_completions(fake_document, None))
|
||||
assert len(completions) == 64
|
||||
|
||||
fake_document.text = fake_document.get_word_before_cursor.return_value = "u"
|
||||
completions = list(c.get_completions(fake_document, None))
|
||||
assert len(completions) == 63
|
||||
|
||||
c.touch("u4")
|
||||
assert list(c.get_completions(fake_document, None))[0].text == "u4"
|
||||
|
||||
|
||||
def test_completion_casing():
|
||||
c = IRedisCompleter(completion_casing="auto")
|
||||
fake_document = MagicMock()
|
||||
fake_document.text = fake_document.text_before_cursor = "ge"
|
||||
assert [
|
||||
completion.text for completion in c.get_completions(fake_document, None)
|
||||
] == [
|
||||
"get",
|
||||
"getset",
|
||||
"getbit",
|
||||
"geopos",
|
||||
"geoadd",
|
||||
"geohash",
|
||||
"geodist",
|
||||
"getrange",
|
||||
"georadius",
|
||||
"georadiusbymember",
|
||||
]
|
||||
|
||||
c = IRedisCompleter(completion_casing="auto")
|
||||
fake_document.text = fake_document.text_before_cursor = "GET"
|
||||
assert [
|
||||
completion.text for completion in c.get_completions(fake_document, None)
|
||||
] == ["GET", "GETSET", "GETBIT", "GETRANGE"]
|
||||
|
||||
c = IRedisCompleter(completion_casing="upper")
|
||||
fake_document.text = fake_document.text_before_cursor = "get"
|
||||
assert [
|
||||
completion.text for completion in c.get_completions(fake_document, None)
|
||||
] == ["GET", "GETSET", "GETBIT", "GETRANGE"]
|
||||
|
||||
c = IRedisCompleter(completion_casing="lower")
|
||||
fake_document.text = fake_document.text_before_cursor = "GET"
|
||||
assert [
|
||||
completion.text for completion in c.get_completions(fake_document, None)
|
||||
] == ["get", "getset", "getbit", "getrange"]
|
||||
|
||||
|
||||
def test_username_completer():
|
||||
completer = IRedisCompleter()
|
||||
completer.update_completer_for_input("acl deluser laixintao")
|
||||
completer.update_completer_for_input("acl deluser antirez")
|
||||
|
||||
fake_document = MagicMock()
|
||||
fake_document.text_before_cursor = fake_document.text = "acl deluser "
|
||||
completions = list(completer.get_completions(fake_document, None))
|
||||
assert sorted([completion.text for completion in completions]) == [
|
||||
"antirez",
|
||||
"laixintao",
|
||||
]
|
||||
|
||||
|
||||
def test_username_touch_for_response():
|
||||
c = IRedisCompleter()
|
||||
c.update_completer_for_response(
|
||||
"acl users",
|
||||
(),
|
||||
[b"hello", b"world"],
|
||||
)
|
||||
assert sorted(c.username_completer.words) == [
|
||||
"hello",
|
||||
"world",
|
||||
]
|
Loading…
Add table
Add a link
Reference in a new issue