|
3 | 3 | * Licensed under the MIT License. See License.txt in the project root for license information. |
4 | 4 | *--------------------------------------------------------------------------------------------*/ |
5 | 5 |
|
6 | | -import { strictEqual, deepEqual, ok } from 'assert'; |
| 6 | +import { strictEqual, deepEqual, ok, deepStrictEqual } from 'assert'; |
7 | 7 |
|
8 | 8 | import * as proto from 'vscode-languageclient'; |
9 | 9 | import * as codeConverter from 'vscode-languageclient/$test/common/codeConverter'; |
@@ -859,6 +859,145 @@ suite('Protocol Converter', () => { |
859 | 859 | ok(result.items[0].insertText instanceof vscode.SnippetString); |
860 | 860 | }); |
861 | 861 |
|
| 862 | + test('Completion Result - applyKind:default - commitCharacters', async () => { |
| 863 | + const completionResult: proto.CompletionList = { |
| 864 | + isIncomplete: false, |
| 865 | + itemDefaults: { commitCharacters: ['d'] }, |
| 866 | + items: [{ label: 'item', commitCharacters: ['i'] }] |
| 867 | + }; |
| 868 | + const result = await p2c.asCompletionResult(completionResult); |
| 869 | + deepStrictEqual(result.items[0].commitCharacters, ['i']); |
| 870 | + }); |
| 871 | + |
| 872 | + test('Completion Result - applyKind:replace - commitCharacters', async () => { |
| 873 | + const completionResult: proto.CompletionList = { |
| 874 | + isIncomplete: false, |
| 875 | + itemDefaults: { commitCharacters: ['1'] }, |
| 876 | + // Set other fields to "merge" to ensure the correct field was used. |
| 877 | + applyKind: { commitCharacters: proto.ApplyKind.Replace, data: proto.ApplyKind.Merge }, |
| 878 | + items: [{ label: 'item', commitCharacters: ['2'] }] |
| 879 | + }; |
| 880 | + const result = await p2c.asCompletionResult(completionResult); |
| 881 | + deepStrictEqual(result.items[0].commitCharacters, ['2']); |
| 882 | + }); |
| 883 | + |
| 884 | + test('Completion Result - applyKind:replace - commitCharacters - item empty', async () => { |
| 885 | + const completionResult: proto.CompletionList = { |
| 886 | + isIncomplete: false, |
| 887 | + itemDefaults: { commitCharacters: ['1'] }, |
| 888 | + // Set other fields to "merge" to ensure the correct field was used. |
| 889 | + applyKind: { commitCharacters: proto.ApplyKind.Replace, data: proto.ApplyKind.Merge }, |
| 890 | + items: [{ label: 'item', commitCharacters: [] }] |
| 891 | + }; |
| 892 | + const result = await p2c.asCompletionResult(completionResult); |
| 893 | + deepStrictEqual(result.items[0].commitCharacters, []); |
| 894 | + }); |
| 895 | + |
| 896 | + test('Completion Result - applyKind:merge - commitCharacters - both supplied with overlaps', async () => { |
| 897 | + const completionResult: proto.CompletionList = { |
| 898 | + isIncomplete: false, |
| 899 | + itemDefaults: { commitCharacters: ['d', 'b'] }, |
| 900 | + applyKind: { commitCharacters: proto.ApplyKind.Merge }, |
| 901 | + items: [{ label: 'item', commitCharacters: ['b', 'i'] }] |
| 902 | + }; |
| 903 | + const result = await p2c.asCompletionResult(completionResult); |
| 904 | + deepStrictEqual(result.items[0].commitCharacters, ['d', 'b', 'i']); |
| 905 | + }); |
| 906 | + |
| 907 | + test('Completion Result - applyKind:merge - commitCharacters - only default supplied', async () => { |
| 908 | + const completionResult: proto.CompletionList = { |
| 909 | + isIncomplete: false, |
| 910 | + itemDefaults: { commitCharacters: ['d'] }, |
| 911 | + applyKind: { commitCharacters: proto.ApplyKind.Merge }, |
| 912 | + items: [{ label: 'item' }] |
| 913 | + }; |
| 914 | + const result = await p2c.asCompletionResult(completionResult); |
| 915 | + deepStrictEqual(result.items[0].commitCharacters, ['d']); |
| 916 | + }); |
| 917 | + |
| 918 | + test('Completion Result - applyKind:merge - commitCharacters - only item supplied', async () => { |
| 919 | + const completionResult: proto.CompletionList = { |
| 920 | + isIncomplete: false, |
| 921 | + itemDefaults: { }, |
| 922 | + applyKind: { commitCharacters: proto.ApplyKind.Merge }, |
| 923 | + items: [{ label: 'item', commitCharacters: ['i'] }] |
| 924 | + }; |
| 925 | + const result = await p2c.asCompletionResult(completionResult); |
| 926 | + deepStrictEqual(result.items[0].commitCharacters, ['i']); |
| 927 | + }); |
| 928 | + |
| 929 | + test('Completion Result - applyKind:default - data', async () => { |
| 930 | + const completionResult: proto.CompletionList = { |
| 931 | + isIncomplete: false, |
| 932 | + itemDefaults: { data: { 'd': 'd' } }, |
| 933 | + items: [{ label: 'item', data: { 'i': 'i' } }] |
| 934 | + }; |
| 935 | + const result = await p2c.asCompletionResult(completionResult); |
| 936 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 937 | + deepStrictEqual(protoResult.data, {'i': 'i'}); |
| 938 | + }); |
| 939 | + |
| 940 | + test('Completion Result - applyKind:replace - data', async () => { |
| 941 | + const completionResult: proto.CompletionList = { |
| 942 | + isIncomplete: false, |
| 943 | + itemDefaults: { data: { 'd': 'd' } }, |
| 944 | + // Set other fields to "merge" to ensure the correct field was used. |
| 945 | + applyKind: { data: proto.ApplyKind.Replace, commitCharacters: proto.ApplyKind.Merge }, |
| 946 | + items: [{ label: 'item', data: { 'i': 'i' } }] |
| 947 | + }; |
| 948 | + const result = await p2c.asCompletionResult(completionResult); |
| 949 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 950 | + deepStrictEqual(protoResult.data, {'i': 'i'}); |
| 951 | + }); |
| 952 | + |
| 953 | + test('Completion Result - applyKind:merge - data - both supplied', async () => { |
| 954 | + const completionResult: proto.CompletionList = { |
| 955 | + isIncomplete: false, |
| 956 | + itemDefaults: { data: { 'd': 'd' } }, |
| 957 | + applyKind: { data: proto.ApplyKind.Merge }, |
| 958 | + items: [{ label: 'item', data: { 'i': 'i' } }] |
| 959 | + }; |
| 960 | + const result = await p2c.asCompletionResult(completionResult); |
| 961 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 962 | + deepStrictEqual(protoResult.data, {'d': 'd', 'i': 'i'}); |
| 963 | + }); |
| 964 | + |
| 965 | + test('Completion Result - applyKind:merge - data - default supplied, item null', async () => { |
| 966 | + const completionResult: proto.CompletionList = { |
| 967 | + isIncomplete: false, |
| 968 | + itemDefaults: { data: { 'd': 'd' } }, |
| 969 | + applyKind: { data: proto.ApplyKind.Merge }, |
| 970 | + items: [{ label: 'item', data: null }] // null treated like undefined |
| 971 | + }; |
| 972 | + const result = await p2c.asCompletionResult(completionResult); |
| 973 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 974 | + deepStrictEqual(protoResult.data, {'d': 'd'}); // gets default |
| 975 | + }); |
| 976 | + |
| 977 | + test('Completion Result - applyKind:merge - data - both supplied, item has null fields', async () => { |
| 978 | + const completionResult: proto.CompletionList = { |
| 979 | + isIncomplete: false, |
| 980 | + itemDefaults: { data: { 'd': 'd' } }, |
| 981 | + applyKind: { data: proto.ApplyKind.Merge }, |
| 982 | + items: [{ label: 'item', data: { 'd': null, 'i': 'i'} }] // null treated like undefined |
| 983 | + }; |
| 984 | + const result = await p2c.asCompletionResult(completionResult); |
| 985 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 986 | + deepStrictEqual(protoResult.data, {'d': 'd', 'i': 'i'}); // gets default for 'd' |
| 987 | + }); |
| 988 | + |
| 989 | + test('Completion Result - applyKind:merge - data - both supplied, item has non-null falsy fields', async () => { |
| 990 | + const completionResult: proto.CompletionList = { |
| 991 | + isIncomplete: false, |
| 992 | + itemDefaults: { data: { 'd1': 'd1', 'd2': 'd2' } }, |
| 993 | + applyKind: { data: proto.ApplyKind.Merge }, |
| 994 | + items: [{ label: 'item', data: { 'd1': 0, 'd2': ''} }] // Both falsy, but should be used. |
| 995 | + }; |
| 996 | + const result = await p2c.asCompletionResult(completionResult); |
| 997 | + const protoResult = await c2p.asCompletionItem(result.items[0]); |
| 998 | + deepStrictEqual(protoResult.data, {'d1': 0, 'd2': ''}); |
| 999 | + }); |
| 1000 | + |
862 | 1001 | test('Parameter Information', async () => { |
863 | 1002 | const parameterInfo: proto.ParameterInformation = { |
864 | 1003 | label: 'label' |
|
0 commit comments