1
1
namespace ts . projectSystem {
2
2
describe ( "unittests:: tsserver:: getExportReferences" , ( ) => {
3
- it ( "should get const variable decralation references" , ( ) => {
4
- const mainTs : File = {
5
- path : "/main.ts" ,
6
- content : 'import { value } from "./mod";' ,
7
- } ;
8
- const modTs : File = {
9
- path : "/mod.ts" ,
10
- content : "export const value = 0;" ,
11
- } ;
12
- const tsconfig : File = {
13
- path : "/tsconfig.json" ,
14
- content : "{}" ,
15
- } ;
3
+ const mainTs : File = {
4
+ path : "/main.ts" ,
5
+ content : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
6
+ } ;
7
+ const modTs : File = {
8
+ path : "/mod.ts" ,
9
+ content : `export const value = 0;
10
+ export const [valueA, valueB] = [0, 1];
11
+ export const { valueC, valueD } = { valueC: 0, valueD: 1 };` ,
12
+ } ;
13
+ const tsconfig : File = {
14
+ path : "/tsconfig.json" ,
15
+ content : "{}" ,
16
+ } ;
16
17
18
+ function makeSampleSession ( ) {
17
19
const host = createServerHost ( [ mainTs , modTs , tsconfig ] ) ;
18
20
const session = createSession ( host ) ;
19
21
openFilesForSession ( [ mainTs , modTs ] , session ) ;
22
+ return session ;
23
+ }
24
+
25
+ const referenceMainTs = ( mainTs : File , text : string ) : protocol . ReferencesResponseItem =>
26
+ makeReferenceItem ( {
27
+ file : mainTs ,
28
+ isDefinition : true ,
29
+ lineText : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
30
+ contextText : 'import { value, valueA, valueB, valueC, valueD } from "./mod";' ,
31
+ text,
32
+ } ) ;
33
+
34
+ it ( "should get const variable decralation references" , ( ) => {
35
+ const session = makeSampleSession ( ) ;
20
36
21
37
const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
22
38
session ,
@@ -32,20 +48,83 @@ namespace ts.projectSystem {
32
48
contextText : "export const value = 0;" ,
33
49
text : "value" ,
34
50
} ) ;
35
- const referenceMainTs = ( mainTs : File ) : protocol . ReferencesResponseItem =>
51
+ const expectResponse = {
52
+ refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs , "value" ) ] ,
53
+ symbolDisplayString : "const value: 0" ,
54
+ symbolName : "value" ,
55
+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "value" ) . offset ,
56
+ } ;
57
+
58
+ assert . deepEqual ( response , expectResponse ) ;
59
+ } ) ;
60
+
61
+ it ( "should get array destructuring decralation references" , ( ) => {
62
+ const session = makeSampleSession ( ) ;
63
+ const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
64
+ session ,
65
+ protocol . CommandTypes . References ,
66
+ protocolFileLocationFromSubstring ( modTs , "valueA" ) ,
67
+ ) ;
68
+
69
+ const referenceModTs = ( modTs : File ) : protocol . ReferencesResponseItem =>
36
70
makeReferenceItem ( {
37
- file : mainTs ,
71
+ file : modTs ,
38
72
isDefinition : true ,
39
- lineText : 'import { value } from "./mod";' ,
40
- contextText : 'import { value } from "./mod";' ,
41
- text : "value " ,
73
+ lineText : "export const [valueA, valueB] = [0, 1];" ,
74
+ contextText : "export const [valueA, valueB] = [0, 1];" ,
75
+ text : "valueA " ,
42
76
} ) ;
43
77
44
78
const expectResponse = {
45
- refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs ) ] ,
46
- symbolDisplayString : "const value: 0" ,
47
- symbolName : "value" ,
48
- symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "value" ) . offset ,
79
+ refs : [ referenceModTs ( modTs ) , referenceMainTs ( mainTs , "valueA" ) ] ,
80
+ symbolDisplayString : "const valueA: number" ,
81
+ symbolName : "valueA" ,
82
+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "valueA" ) . offset ,
83
+ } ;
84
+
85
+ assert . deepEqual ( response , expectResponse ) ;
86
+ } ) ;
87
+
88
+ it ( "should get object destructuring decralation references" , ( ) => {
89
+ const session = makeSampleSession ( ) ;
90
+ const response = executeSessionRequest < protocol . ReferencesRequest , protocol . ReferencesResponse > (
91
+ session ,
92
+ protocol . CommandTypes . References ,
93
+ protocolFileLocationFromSubstring ( modTs , "valueC" ) ,
94
+ ) ;
95
+
96
+ const referenceModTs = (
97
+ modTs : File ,
98
+ opts : {
99
+ contextText : string ;
100
+ options ?: SpanFromSubstringOptions ;
101
+ contextOptions ?: SpanFromSubstringOptions ;
102
+ } ,
103
+ ) : protocol . ReferencesResponseItem =>
104
+ makeReferenceItem ( {
105
+ file : modTs ,
106
+ isDefinition : true ,
107
+ lineText : "export const { valueC, valueD } = { valueC: 0, valueD: 1 };" ,
108
+ contextText : opts . contextText ,
109
+ text : "valueC" ,
110
+ options : opts . options ,
111
+ contextOptions : opts . contextOptions ,
112
+ } ) ;
113
+
114
+ const expectResponse = {
115
+ refs : [
116
+ referenceModTs ( modTs , {
117
+ contextText : "export const { valueC, valueD } = { valueC: 0, valueD: 1 };" ,
118
+ } ) ,
119
+ referenceMainTs ( mainTs , "valueC" ) ,
120
+ referenceModTs ( modTs , {
121
+ contextText : "valueC: 0" ,
122
+ options : { index : 1 } ,
123
+ } ) ,
124
+ ] ,
125
+ symbolDisplayString : "const valueC: number" ,
126
+ symbolName : "valueC" ,
127
+ symbolStartOffset : protocolLocationFromSubstring ( modTs . content , "valueC" ) . offset ,
49
128
} ;
50
129
51
130
assert . deepEqual ( response , expectResponse ) ;
0 commit comments