| from clang.cindex import TranslationUnit |
| |
| def check_completion_results(cr, expected): |
| assert cr is not None |
| assert len(cr.diagnostics) == 0 |
| |
| completions = [str(c) for c in cr.results] |
| |
| for c in expected: |
| assert c in completions |
| |
| def test_code_complete(): |
| files = [('fake.c', """ |
| /// Aaa. |
| int test1; |
| |
| /// Bbb. |
| void test2(void); |
| |
| void f() { |
| |
| } |
| """)] |
| |
| tu = TranslationUnit.from_source('fake.c', ['-std=c99'], unsaved_files=files, |
| options=TranslationUnit.PARSE_INCLUDE_BRIEF_COMMENTS_IN_CODE_COMPLETION) |
| |
| cr = tu.codeComplete('fake.c', 9, 1, unsaved_files=files, include_brief_comments=True) |
| |
| expected = [ |
| "{'int', ResultType} | {'test1', TypedText} || Priority: 50 || Availability: Available || Brief comment: Aaa.", |
| "{'void', ResultType} | {'test2', TypedText} | {'(', LeftParen} | {')', RightParen} || Priority: 50 || Availability: Available || Brief comment: Bbb.", |
| "{'return', TypedText} || Priority: 40 || Availability: Available || Brief comment: None" |
| ] |
| check_completion_results(cr, expected) |
| |
| def test_code_complete_availability(): |
| files = [('fake.cpp', """ |
| class P { |
| protected: |
| int member; |
| }; |
| |
| class Q : public P { |
| public: |
| using P::member; |
| }; |
| |
| void f(P x, Q y) { |
| x.; // member is inaccessible |
| y.; // member is accessible |
| } |
| """)] |
| |
| tu = TranslationUnit.from_source('fake.cpp', ['-std=c++98'], unsaved_files=files) |
| |
| cr = tu.codeComplete('fake.cpp', 12, 5, unsaved_files=files) |
| |
| expected = [ |
| "{'const', TypedText} || Priority: 40 || Availability: Available || Brief comment: None", |
| "{'volatile', TypedText} || Priority: 40 || Availability: Available || Brief comment: None", |
| "{'operator', TypedText} || Priority: 40 || Availability: Available || Brief comment: None", |
| "{'P', TypedText} | {'::', Text} || Priority: 75 || Availability: Available || Brief comment: None", |
| "{'Q', TypedText} | {'::', Text} || Priority: 75 || Availability: Available || Brief comment: None" |
| ] |
| check_completion_results(cr, expected) |
| |
| cr = tu.codeComplete('fake.cpp', 13, 5, unsaved_files=files) |
| expected = [ |
| "{'P', TypedText} | {'::', Text} || Priority: 75 || Availability: Available || Brief comment: None", |
| "{'P &', ResultType} | {'operator=', TypedText} | {'(', LeftParen} | {'const P &', Placeholder} | {')', RightParen} || Priority: 34 || Availability: Available || Brief comment: None", |
| "{'int', ResultType} | {'member', TypedText} || Priority: 35 || Availability: NotAccessible || Brief comment: None", |
| "{'void', ResultType} | {'~P', TypedText} | {'(', LeftParen} | {')', RightParen} || Priority: 34 || Availability: Available || Brief comment: None" |
| ] |
| check_completion_results(cr, expected) |