Skip to content

Commit e54ab8f

Browse files
authored
Merge pull request #13 from ls1intum/8-test-use-global-search-to-find-text-in-a-file
Dev: Add first search tests
2 parents e54371d + 200494a commit e54ab8f

File tree

4 files changed

+102
-1
lines changed

4 files changed

+102
-1
lines changed

pages/ide/components/MenuBar.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,16 @@ export class MenuBar extends BaseComponent {
5656
async pressRedo(): Promise<void> {
5757
await this.clickMenuItem('Edit', 'Redo');
5858
}
59+
60+
async pressFind(): Promise<void> {
61+
await this.clickMenuItemNth('Edit', 'Find',0);
62+
}
63+
64+
async pressFindAll(): Promise<void> {
65+
await this.clickMenuItem('Edit', 'Find in Files');
66+
}
67+
68+
async pressReplace(): Promise<void> {
69+
await this.clickMenuItem('Edit', 'Replace');
70+
}
5971
}

pages/ide/components/SideBar.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,14 @@ export class SideBar extends BaseComponent {
4949
// Start of Search Section
5050

5151
async openSearch(): Promise<void> {
52-
await this.pagePart.locator('#shell-tab-search-view-container').click();
52+
if (await this.pagePart.locator('.theia-sidepanel-title').getByText('SEARCH').isHidden()) {
53+
await this.pagePart.locator('#shell-tab-search-view-container').click();
54+
}
55+
}
56+
57+
async searchForText(text: string): Promise<void> {
58+
await this.page.locator('#theia-left-content-panel').locator('.search-field-container').locator('#search-input-field').fill(text);
59+
await this.page.keyboard.press('Enter');
5360
}
5461

5562
// End of Search Section

tests/ide/Search.ide.spec.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { test, expect } from '../fixtures/ide.fixture';
2+
import { uniqueWords10, uniqueWords20, uniqueWords30 } from '../../utils/example-texts/lorem-ipsum';
3+
import { get } from 'http';
4+
5+
/**
6+
* @description This test suite is used to test the search functionality of the IDE.
7+
*/
8+
9+
const testPrefix = 'Search-';
10+
11+
test.describe('IDE Search Tests', () => {
12+
13+
test('Search for text in a file', async ({ idePage }) => {
14+
const fileName = testPrefix + 'Test1';
15+
const word = getRandomWord(uniqueWords10) ?? 'Technology';
16+
await idePage.createFileWithContent(fileName, uniqueWords10);
17+
await idePage.menuBar.pressFind();
18+
await expect(idePage.editor.pagePart.locator('.editor-widget').locator('.input').first()).toBeVisible();
19+
await idePage.page.keyboard.type(word);
20+
await expect(idePage.editor.pagePart.locator('.editor-widget').getByText('1 of 1')).toBeVisible
21+
});
22+
23+
test('Search for text globally', async ({ idePage }) => {
24+
const fileName = testPrefix + 'Test2';
25+
const word = getRandomWord(uniqueWords20) ?? 'Artificial';
26+
await idePage.createFileWithContent(fileName, uniqueWords20);
27+
await idePage.sideBar.openSearch();
28+
await expect(idePage.sideBar.pagePart.locator('.theia-sidepanel-title').getByText('SEARCH')).toBeVisible();
29+
await idePage.sideBar.searchForText(word);
30+
await idePage.sideBar.pagePart.locator('.resultContainer').getByText(word).isVisible();
31+
});
32+
33+
test('Search for text globally in multiple files', async ({ idePage }) => {
34+
const fileName1 = testPrefix + 'Test30';
35+
const fileName2 = testPrefix + 'Test31';
36+
const word = getRandomWord(uniqueWords30) ?? 'Software';
37+
await idePage.createFileWithContent(fileName1, uniqueWords30);
38+
await idePage.createFileWithContent(fileName2, uniqueWords30);
39+
await idePage.sideBar.openSearch();
40+
await expect(idePage.sideBar.pagePart.locator('.theia-sidepanel-title').getByText('SEARCH')).toBeVisible();
41+
await idePage.sideBar.searchForText(word);
42+
const occurences = await idePage.sideBar.pagePart.locator('.resultContainer').getByText(word).all();
43+
expect(occurences.length).toBe(2);
44+
});
45+
46+
test.afterAll(async ({ idePage }) => {
47+
await new Promise(resolve => setTimeout(resolve, 1000));
48+
await idePage.executeInTerminal(`rm -rf ${testPrefix}*`);
49+
});
50+
});
51+
52+
53+
// Utility Functions
54+
55+
/**
56+
* @description Get a random word from a text
57+
* @param text - The text to get a random word from
58+
* @returns A random word from the text
59+
*/
60+
function getRandomWord(text: string): string | null {
61+
const words = text.trim().split(/\s+/);
62+
if (words.length === 0) return null;
63+
64+
const randomIndex = Math.floor(Math.random() * words.length);
65+
return words[randomIndex];
66+
}

utils/example-texts/lorem-ipsum.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export const loremIpsum50 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.`;
2+
3+
export const loremIpsum100 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.`;
4+
5+
export const loremIpsum500 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
6+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
7+
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
8+
Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
9+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.
10+
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam`;
11+
12+
export const uniqueWords10 = `Technology advances rapidly transforming digital landscapes while innovative solutions emerge`;
13+
14+
export const uniqueWords20 = `Artificial intelligence reshapes modern business operations through sophisticated algorithms. Cloud computing enables scalable infrastructure development across global networks. Cybersecurity experts`
15+
16+
export const uniqueWords30 = `Software engineers design efficient systems integrating diverse components. Mobile applications revolutionize user experiences creating seamless interactions. Quantum computing promises unprecedented computational power exploring new possibilities. Blockchain technology ensures transparent secure.`

0 commit comments

Comments
 (0)