From 3b9041fe36798639b4316fb3e413ac7a04c43da3 Mon Sep 17 00:00:00 2001 From: Amjith Ramanujam Date: Tue, 27 Nov 2018 07:49:54 -0800 Subject: Fix special commands (#973) * Add tests for special commands completion. --- changelog.rst | 5 ++++- tests/metadata.py | 8 +++++++- tests/test_naive_completion.py | 10 ++++++++++ tests/test_smart_completion_public_schema_only.py | 9 ++++++++- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/changelog.rst b/changelog.rst index 0c477429..e15e48e6 100644 --- a/changelog.rst +++ b/changelog.rst @@ -1,7 +1,10 @@ Upcoming: ========= -TODO +Internal: +--------- + +* Added tests for special command completion. (Thanks: `Amjith Ramanujam`_) 2.0.1: ====== diff --git a/tests/metadata.py b/tests/metadata.py index 1245a589..782d58d5 100644 --- a/tests/metadata.py +++ b/tests/metadata.py @@ -6,6 +6,7 @@ from pgcli.packages.parseutils.meta import FunctionMetadata, ForeignKey from prompt_toolkit.completion import Completion from prompt_toolkit.document import Document from mock import Mock +from six import iteritems import pytest parametrize = pytest.mark.parametrize @@ -78,6 +79,9 @@ class MetaData(object): def keywords(self, pos=0): return [keyword(kw, pos) for kw in self.completer.keywords_tree.keys()] + def specials(self, pos=0): + return [Completion(text=k, start_position=pos, display_meta=v.description) for k, v in iteritems(self.completer.pgspecial.commands)] + def columns(self, tbl, parent='public', typ='tables', pos=0): if typ == 'functions': fun = [x for x in self.metadata[typ][parent] if x[0] == tbl][0] @@ -200,7 +204,9 @@ class MetaData(object): def get_completer(self, settings=None, casing=None): metadata = self.metadata from pgcli.pgcompleter import PGCompleter - comp = PGCompleter(smart_completion=True, settings=settings) + from pgspecial import PGSpecial + comp = PGCompleter(smart_completion=True, + settings=settings, pgspecial=PGSpecial()) schemata, tables, tbl_cols, views, view_cols = [], [], [], [], [] diff --git a/tests/test_naive_completion.py b/tests/test_naive_completion.py index 87fc4378..761c8996 100644 --- a/tests/test_naive_completion.py +++ b/tests/test_naive_completion.py @@ -78,3 +78,13 @@ def test_alter_well_known_keywords_completion(completer, complete_event): Completion(text="SYSTEM", display_meta='keyword'), ]) assert Completion(text="CREATE", display_meta="keyword") not in result + + +def test_special_name_completion(completer, complete_event): + text = '\\' + position = len('\\') + result = set(completer.get_completions( + Document(text=text, cursor_position=position), + complete_event)) + # Special commands will NOT be suggested during naive completion mode. + assert result == set() diff --git a/tests/test_smart_completion_public_schema_only.py b/tests/test_smart_completion_public_schema_only.py index 76424610..3ccac9e5 100644 --- a/tests/test_smart_completion_public_schema_only.py +++ b/tests/test_smart_completion_public_schema_only.py @@ -99,7 +99,7 @@ def test_drop_alter_function(completer, action): @parametrize('completer', completers()) def test_empty_string_completion(completer): result = result_set(completer, '') - assert set(testdata.keywords()) == result + assert set(testdata.keywords() + testdata.specials()) == result @parametrize('completer', completers()) @@ -929,3 +929,10 @@ def test_set_schema(completer): result = result_set(completer, text) expected = set([schema(u"'public'")]) assert result == expected + + +@parametrize('completer', completers()) +def test_special_name_completion(completer): + result = result_set(completer, '\\t') + assert result == set([Completion( + text='\\timing', start_position=-2, display_meta='Toggle timing of commands.')]) -- cgit v1.2.3