Skip to content

Commit 8f4f6a5

Browse files
test(e2e): fix outline tree expansion, method validation, and virtualization handling W-21714868 (#263)
* fix: improving the e2e tests * feat: adding prettier to linter --------- Co-authored-by: peternhale <peternhale@users.noreply.github.com>
1 parent f9d269f commit 8f4f6a5

File tree

8 files changed

+279
-288
lines changed

8 files changed

+279
-288
lines changed

e2e-tests/pages/ApexEditorPage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,6 @@ export class ApexEditorPage extends BasePage {
383383
'.cls-ext-file-icon',
384384
'[aria-label*=".cls"]',
385385
'.tab [title*=".cls"]',
386-
'.monaco-editor',
387386
];
388387

389388
const timeout = this.isDesktopMode ? 5000 : 3000;

e2e-tests/tests/apex-goto-definition.spec.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ test.describe('Apex Go-to-Definition', () => {
281281
*/
282282
test('should handle generic type references', async ({ apexEditor }) => {
283283
await test.step('Position cursor on generic type', async () => {
284-
await apexEditor.positionCursorOnWord('List<Account>');
284+
// Use single-word search; 'List<Account>' won't reliably position via Find
285+
await apexEditor.positionCursorOnWord('accounts');
285286
});
286287

287288
await test.step('Trigger go-to-definition', async () => {
@@ -292,8 +293,6 @@ test.describe('Apex Go-to-Definition', () => {
292293
// Generic types may not have definitions in user code
293294
// Just verify no crash occurred
294295
expect(await apexEditor.isApexFileOpen()).toBe(true);
295-
296-
console.log('✅ Handled generic type reference');
297296
});
298297
});
299298

@@ -392,7 +391,8 @@ test.describe('Apex Go-to-Definition', () => {
392391
*/
393392
test('should handle this keyword appropriately', async ({ apexEditor }) => {
394393
await test.step('Position cursor on this keyword', async () => {
395-
await apexEditor.positionCursorOnWord('this.instanceId');
394+
// Use 'this' alone; 'this.instanceId' is multi-word and unreliable via Find
395+
await apexEditor.positionCursorOnWord('this');
396396
});
397397

398398
await test.step('Trigger go-to-definition', async () => {
@@ -402,8 +402,6 @@ test.describe('Apex Go-to-Definition', () => {
402402
await test.step('Verify stayed in file', async () => {
403403
// 'this' should either navigate to class or stay in place
404404
expect(await apexEditor.isApexFileOpen()).toBe(true);
405-
406-
console.log('✅ Handled this keyword reference');
407405
});
408406
});
409407

@@ -491,8 +489,6 @@ test.describe('Apex Go-to-Definition - Advanced Scenarios', () => {
491489
'abstract class BaseHandler',
492490
);
493491
expect(content).toMatch(/abstract\s+class\s+BaseHandler/);
494-
495-
console.log('✅ Navigated to base class definition');
496492
});
497493
});
498494

@@ -517,13 +513,11 @@ test.describe('Apex Go-to-Definition - Advanced Scenarios', () => {
517513
});
518514

519515
await test.step('Navigate to overridden execute method', async () => {
520-
await apexEditor.positionCursorOnWord('override void execute');
516+
await apexEditor.positionCursorOnWord('execute');
521517
await apexEditor.goToDefinition();
522518

523519
const content = await apexEditor.findAndGetViewportContent('execute');
524520
expect(content).toMatch(/execute/);
525-
526-
console.log('✅ Navigated to overridden method');
527521
});
528522
});
529523

@@ -557,8 +551,6 @@ test.describe('Apex Go-to-Definition - Advanced Scenarios', () => {
557551
'interface DataProcessor',
558552
);
559553
expect(content).toMatch(/interface\s+DataProcessor/);
560-
561-
console.log('✅ Navigated to interface definition');
562554
});
563555
});
564556

@@ -589,8 +581,6 @@ test.describe('Apex Go-to-Definition - Advanced Scenarios', () => {
589581
const content =
590582
await apexEditor.findAndGetViewportContent('processRecords');
591583
expect(content).toMatch(/processRecords/);
592-
593-
console.log('✅ Navigated to interface method');
594584
});
595585
});
596586

@@ -621,8 +611,6 @@ test.describe('Apex Go-to-Definition - Advanced Scenarios', () => {
621611
'class Configuration',
622612
);
623613
expect(content).toMatch(/class\s+Configuration/);
624-
625-
console.log('✅ Navigated in complex class structure');
626614
});
627615
});
628616
});

e2e-tests/tests/apex-hover.spec.ts

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ test.describe('Apex Hover Functionality', () => {
3636
await hoverHelper.hoverOnWord('ApexClassExample');
3737
const content = await hoverHelper.getHoverContent();
3838
expect(content.length).toBeGreaterThan(0);
39-
console.log(`✅ Class hover content: ${content.substring(0, 50)}...`);
39+
expect(content).toMatch(/class\b/i);
40+
expect(content).toContain('ApexClassExample');
4041
});
4142

4243
/**
@@ -46,8 +47,7 @@ test.describe('Apex Hover Functionality', () => {
4647
await hoverHelper.hoverOnWord('DEFAULT_STATUS');
4748
const content = await hoverHelper.getHoverContent();
4849
expect(content).toBeTruthy();
49-
expect(content.length).toBeGreaterThan(0);
50-
console.log('✅ Static variable hover provided');
50+
expect(content).toContain('String');
5151
});
5252

5353
/**
@@ -57,17 +57,17 @@ test.describe('Apex Hover Functionality', () => {
5757
await hoverHelper.hoverOnWord('instanceId');
5858
const content = await hoverHelper.getHoverContent();
5959
expect(content).toBeTruthy();
60-
console.log('✅ Instance variable hover provided');
60+
expect(content).toContain('String');
6161
});
6262

6363
/**
6464
* Test: Hover on method name shows method signature.
6565
*/
6666
test('should show hover for method name', async ({ hoverHelper }) => {
6767
await hoverHelper.hoverOnWord('sayHello');
68-
const hasMethodSig = await hoverHelper.hasMethodSignature();
69-
expect(hasMethodSig).toBe(true);
70-
console.log('✅ Method hover shows signature');
68+
const content = await hoverHelper.getHoverContent();
69+
expect(content).toContain('void');
70+
expect(content).toContain('sayHello');
7171
});
7272

7373
/**
@@ -77,8 +77,8 @@ test.describe('Apex Hover Functionality', () => {
7777
await hoverHelper.hoverOnWord('Configuration');
7878
const content = await hoverHelper.getHoverContent();
7979
expect(content).toBeTruthy();
80-
expect(content.length).toBeGreaterThan(0);
81-
console.log('✅ Inner class hover provided');
80+
expect(content).toContain('Configuration');
81+
expect(content).toMatch(/class\b/i);
8282
});
8383

8484
/**
@@ -93,24 +93,24 @@ test.describe('Apex Hover Functionality', () => {
9393
content = await hoverHelper.getHoverContent();
9494
}
9595
expect(content).toBeTruthy();
96-
console.log('✅ Inner enum hover provided');
96+
expect(content).toContain('StatusType');
97+
expect(content).toMatch(/enum\b/i);
9798
});
9899

99100
/**
100101
* Test: Hover contains type information for typed symbols.
101102
*/
102103
test('should show type information in hover', async ({ hoverHelper }) => {
103104
await hoverHelper.hoverOnWord('instanceId');
104-
const hasTypeInfo = await hoverHelper.hasTypeInformation();
105-
expect(hasTypeInfo).toBe(true);
106-
console.log('✅ Hover contains type information');
105+
const content = await hoverHelper.getHoverContent();
106+
// Verify actual type name appears, not just any keyword
107+
expect(content).toContain('String');
107108
});
108109

109110
/**
110111
* Test: Hover is responsive (appears within reasonable time).
111112
*/
112113
test('should show hover within reasonable time', async ({ hoverHelper }) => {
113-
// LSP hover can take a few seconds to resolve in web environment
114114
const isResponsive = await hoverHelper.isHoverResponsive(
115115
'ApexClassExample',
116116
12000,
@@ -134,7 +134,6 @@ test.describe('Apex Hover Functionality', () => {
134134
});
135135

136136
expect(await hoverHelper.isHoverVisible()).toBe(false);
137-
console.log('✅ Hover can be dismissed');
138137
});
139138

140139
/**
@@ -145,8 +144,8 @@ test.describe('Apex Hover Functionality', () => {
145144
}) => {
146145
await hoverHelper.hoverOnWord('add');
147146
const content = await hoverHelper.getHoverContent();
148-
expect(content).toBeTruthy();
149-
console.log('✅ Method with parameters shows signature in hover');
147+
expect(content).toMatch(/Integer/);
148+
expect(content).toMatch(/add/);
150149
});
151150

152151
/**
@@ -155,12 +154,10 @@ test.describe('Apex Hover Functionality', () => {
155154
test('should show generic type for List variable', async ({
156155
hoverHelper,
157156
}) => {
158-
await hoverHelper.hoverOnWord('List<Account> accounts');
157+
await hoverHelper.hoverOnWord('accounts');
159158
const content = await hoverHelper.getHoverContent();
160-
const hasTypeInfo = await hoverHelper.hasTypeInformation();
161-
expect(hasTypeInfo).toBe(true);
162159
expect(content).toBeTruthy();
163-
console.log('✅ List variable hover shows generic type');
160+
expect(content).toMatch(/List|Account/);
164161
});
165162

166163
/**
@@ -169,31 +166,29 @@ test.describe('Apex Hover Functionality', () => {
169166
test('should show generic types for Map variable', async ({
170167
hoverHelper,
171168
}) => {
172-
await hoverHelper.hoverOnWord('Map<Id, Account> accountMap');
169+
await hoverHelper.hoverOnWord('accountMap');
173170
const content = await hoverHelper.getHoverContent();
174171
expect(content).toBeTruthy();
175-
console.log('✅ Map variable hover shows generic types');
172+
expect(content).toMatch(/Map|Account/);
176173
});
177174

178175
/**
179176
* Test: Multiple hovers can be triggered sequentially.
180177
*/
181178
test('should handle multiple sequential hovers', async ({ hoverHelper }) => {
182179
await hoverHelper.hoverOnWord('ApexClassExample');
183-
let content1 = await hoverHelper.getHoverContent();
184-
expect(content1).toBeTruthy();
180+
const content1 = await hoverHelper.getHoverContent();
181+
expect(content1).toContain('ApexClassExample');
185182

186183
await hoverHelper.dismissHover();
187184
await hoverHelper.hoverOnWord('Configuration');
188-
let content2 = await hoverHelper.getHoverContent();
189-
expect(content2).toBeTruthy();
185+
const content2 = await hoverHelper.getHoverContent();
186+
expect(content2).toContain('Configuration');
190187

191188
await hoverHelper.dismissHover();
192189
await hoverHelper.hoverOnWord('StatusType');
193-
let content3 = await hoverHelper.getHoverContent();
194-
expect(content3).toBeTruthy();
195-
196-
console.log('✅ Multiple sequential hovers work correctly');
190+
const content3 = await hoverHelper.getHoverContent();
191+
expect(content3).toContain('StatusType');
197192
});
198193

199194
/**
@@ -208,7 +203,7 @@ test.describe('Apex Hover Functionality', () => {
208203
content = await hoverHelper.getHoverContent();
209204
}
210205
expect(content).toBeTruthy();
211-
console.log('✅ Constructor hover provided');
206+
expect(content).toContain('ApexClassExample');
212207
});
213208

214209
/**
@@ -219,7 +214,7 @@ test.describe('Apex Hover Functionality', () => {
219214
const content = await hoverHelper.getHoverContent();
220215
expect(content.length).toBeGreaterThan(0);
221216
expect(content.trim()).not.toBe('');
222-
console.log(`✅ Hover content is non-empty (${content.length} chars)`);
217+
expect(content).toContain('ApexClassExample');
223218
});
224219

225220
/**
@@ -228,8 +223,8 @@ test.describe('Apex Hover Functionality', () => {
228223
test('should show hover for private method', async ({ hoverHelper }) => {
229224
await hoverHelper.hoverOnWord('validateAccounts');
230225
const content = await hoverHelper.getHoverContent();
231-
expect(content).toBeTruthy();
232-
console.log('✅ Private method hover provided');
226+
expect(content).toContain('void');
227+
expect(content).toContain('validateAccounts');
233228
});
234229

235230
/**
@@ -240,14 +235,15 @@ test.describe('Apex Hover Functionality', () => {
240235
}) => {
241236
await hoverHelper.hoverOnWord('ApexClassExample');
242237
const classHover = await hoverHelper.getHoverContent();
238+
expect(classHover).toMatch(/class\b/i);
243239

244240
await hoverHelper.dismissHover();
245241

246242
await hoverHelper.hoverOnWord('sayHello');
247243
const methodHover = await hoverHelper.getHoverContent();
244+
expect(methodHover).toMatch(/void/);
248245

249246
expect(classHover).not.toBe(methodHover);
250-
console.log('✅ Different symbols provide different hover content');
251247
});
252248

253249
/**
@@ -261,8 +257,6 @@ test.describe('Apex Hover Functionality', () => {
261257
expect(content.length).toBeGreaterThan(0);
262258

263259
await hoverHelper.captureHoverScreenshot('test-hover');
264-
265-
console.log('✅ Hover screenshot captured successfully');
266260
});
267261
});
268262

0 commit comments

Comments
 (0)