@neo4j-cypher/react-codemirror 2.0.0-next.4 → 2.0.0-next.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/{types/CypherEditor.d.ts → CypherEditor.d.ts} +10 -1
- package/dist/CypherEditor.js +206 -0
- package/dist/CypherEditor.js.map +1 -0
- package/dist/e2e_tests/autoCompletion.spec.js +133 -0
- package/dist/e2e_tests/autoCompletion.spec.js.map +1 -0
- package/dist/e2e_tests/e2eUtils.js +52 -0
- package/dist/e2e_tests/e2eUtils.js.map +1 -0
- package/dist/e2e_tests/extraKeybindings.spec.js +44 -0
- package/dist/e2e_tests/extraKeybindings.spec.js.map +1 -0
- package/dist/e2e_tests/historyNavigation.spec.js +136 -0
- package/dist/e2e_tests/historyNavigation.spec.js.map +1 -0
- package/dist/e2e_tests/performanceTest.spec.d.ts +6 -0
- package/dist/e2e_tests/performanceTest.spec.js +96 -0
- package/dist/e2e_tests/performanceTest.spec.js.map +1 -0
- package/dist/e2e_tests/sanityChecks.spec.js +65 -0
- package/dist/e2e_tests/sanityChecks.spec.js.map +1 -0
- package/dist/e2e_tests/signatureHelp.spec.js +151 -0
- package/dist/e2e_tests/signatureHelp.spec.js.map +1 -0
- package/dist/e2e_tests/syntaxHighlighting.spec.js +91 -0
- package/dist/e2e_tests/syntaxHighlighting.spec.js.map +1 -0
- package/dist/e2e_tests/syntaxValidation.spec.js +79 -0
- package/dist/e2e_tests/syntaxValidation.spec.js.map +1 -0
- package/dist/historyNavigation.js +163 -0
- package/dist/historyNavigation.js.map +1 -0
- package/dist/{types/icons.d.ts → icons.d.ts} +1 -1
- package/dist/icons.js +62 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/{types/lang-cypher → lang-cypher}/autocomplete.d.ts +1 -1
- package/dist/lang-cypher/autocomplete.js +56 -0
- package/dist/lang-cypher/autocomplete.js.map +1 -0
- package/dist/{types/lang-cypher → lang-cypher}/constants.d.ts +9 -0
- package/dist/lang-cypher/constants.js +65 -0
- package/dist/lang-cypher/constants.js.map +1 -0
- package/dist/lang-cypher/contants.test.js +102 -0
- package/dist/lang-cypher/contants.test.js.map +1 -0
- package/dist/lang-cypher/createCypherTheme.js +144 -0
- package/dist/lang-cypher/createCypherTheme.js.map +1 -0
- package/dist/{types/lang-cypher/lang-cypher.d.ts → lang-cypher/langCypher.d.ts} +3 -1
- package/dist/lang-cypher/langCypher.js +24 -0
- package/dist/lang-cypher/langCypher.js.map +1 -0
- package/dist/lang-cypher/lintWorker.d.ts +8 -0
- package/dist/lang-cypher/lintWorker.js +4 -0
- package/dist/lang-cypher/lintWorker.js.map +1 -0
- package/dist/lang-cypher/parser-adapter.d.ts +19 -0
- package/dist/lang-cypher/parser-adapter.js +113 -0
- package/dist/lang-cypher/parser-adapter.js.map +1 -0
- package/dist/lang-cypher/signatureHelp.d.ts +4 -0
- package/dist/lang-cypher/signatureHelp.js +77 -0
- package/dist/lang-cypher/signatureHelp.js.map +1 -0
- package/dist/lang-cypher/syntaxValidation.d.ts +5 -0
- package/dist/lang-cypher/syntaxValidation.js +71 -0
- package/dist/lang-cypher/syntaxValidation.js.map +1 -0
- package/dist/lang-cypher/themeIcons.js +22 -0
- package/dist/lang-cypher/themeIcons.js.map +1 -0
- package/dist/ndlTokensCopy.js +380 -0
- package/dist/ndlTokensCopy.js.map +1 -0
- package/dist/ndlTokensCopy.test.js +11 -0
- package/dist/ndlTokensCopy.test.js.map +1 -0
- package/dist/neo4jSetup.js +86 -0
- package/dist/neo4jSetup.js.map +1 -0
- package/dist/{types/themes.d.ts → themes.d.ts} +1 -1
- package/dist/themes.js +114 -0
- package/dist/themes.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +15 -18
- package/src/CypherEditor.tsx +34 -8
- package/src/e2e_tests/{auto-completion.spec.tsx → autoCompletion.spec.tsx} +8 -4
- package/src/e2e_tests/{extra-keybindings.spec.tsx → extraKeybindings.spec.tsx} +1 -1
- package/src/e2e_tests/{history-navigation.spec.tsx → historyNavigation.spec.tsx} +1 -1
- package/src/e2e_tests/performanceTest.spec.tsx +158 -0
- package/src/e2e_tests/{sanity-checks.spec.tsx → sanityChecks.spec.tsx} +8 -3
- package/src/e2e_tests/signatureHelp.spec.tsx +312 -0
- package/src/e2e_tests/{syntax-highlighting.spec.tsx → syntaxHighlighting.spec.tsx} +1 -1
- package/src/e2e_tests/{syntax-validation.spec.tsx → syntaxValidation.spec.tsx} +3 -3
- package/src/icons.ts +3 -0
- package/src/index.ts +2 -2
- package/src/lang-cypher/autocomplete.ts +7 -2
- package/src/lang-cypher/constants.ts +23 -0
- package/src/lang-cypher/{create-cypher-theme.ts → createCypherTheme.ts} +5 -1
- package/src/lang-cypher/{lang-cypher.ts → langCypher.ts} +16 -7
- package/src/lang-cypher/lintWorker.ts +14 -0
- package/src/lang-cypher/parser-adapter.ts +145 -0
- package/src/lang-cypher/signatureHelp.ts +102 -0
- package/src/lang-cypher/syntaxValidation.ts +99 -0
- package/src/{ndl-tokens-copy.test.ts → ndlTokensCopy.test.ts} +1 -1
- package/src/themes.ts +4 -2
- package/dist/cjs/index.cjs +0 -1441
- package/dist/cjs/index.cjs.map +0 -7
- package/dist/esm/index.mjs +0 -1464
- package/dist/esm/index.mjs.map +0 -7
- package/dist/types/e2e_tests/mock-data.d.ts +0 -3779
- package/dist/types/index.d.ts +0 -4
- package/dist/types/lang-cypher/ParserAdapter.d.ts +0 -14
- package/dist/types/lang-cypher/syntax-validation.d.ts +0 -3
- package/dist/types/tsconfig.tsbuildinfo +0 -1
- package/src/e2e_tests/mock-data.ts +0 -4310
- package/src/e2e_tests/performance-test.spec.tsx +0 -71
- package/src/lang-cypher/ParserAdapter.ts +0 -92
- package/src/lang-cypher/syntax-validation.ts +0 -24
- /package/dist/{types/e2e_tests/auto-completion.spec.d.ts → e2e_tests/autoCompletion.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/e2e-utils.d.ts → e2e_tests/e2eUtils.d.ts} +0 -0
- /package/dist/{types/e2e_tests/extra-keybindings.spec.d.ts → e2e_tests/extraKeybindings.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/history-navigation.spec.d.ts → e2e_tests/historyNavigation.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/performance-test.spec.d.ts → e2e_tests/sanityChecks.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/sanity-checks.spec.d.ts → e2e_tests/signatureHelp.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/syntax-highlighting.spec.d.ts → e2e_tests/syntaxHighlighting.spec.d.ts} +0 -0
- /package/dist/{types/e2e_tests/syntax-validation.spec.d.ts → e2e_tests/syntaxValidation.spec.d.ts} +0 -0
- /package/dist/{types/history-navigation.d.ts → historyNavigation.d.ts} +0 -0
- /package/dist/{types/lang-cypher → lang-cypher}/contants.test.d.ts +0 -0
- /package/dist/{types/lang-cypher/create-cypher-theme.d.ts → lang-cypher/createCypherTheme.d.ts} +0 -0
- /package/dist/{types/lang-cypher/theme-icons.d.ts → lang-cypher/themeIcons.d.ts} +0 -0
- /package/dist/{types/ndl-tokens-copy.d.ts → ndlTokensCopy.d.ts} +0 -0
- /package/dist/{types/ndl-tokens-copy.test.d.ts → ndlTokensCopy.test.d.ts} +0 -0
- /package/dist/{types/neo4j-setup.d.ts → neo4jSetup.d.ts} +0 -0
- /package/src/e2e_tests/{e2e-utils.ts → e2eUtils.ts} +0 -0
- /package/src/{history-navigation.ts → historyNavigation.ts} +0 -0
- /package/src/lang-cypher/{theme-icons.ts → themeIcons.ts} +0 -0
- /package/src/{ndl-tokens-copy.ts → ndlTokensCopy.ts} +0 -0
- /package/src/{neo4j-setup.tsx → neo4jSetup.tsx} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { expect, test } from '@playwright/experimental-ct-react';
|
|
3
|
+
import { CypherEditor } from '../CypherEditor';
|
|
4
|
+
import { CypherEditorPage } from './e2eUtils';
|
|
5
|
+
test.use({ viewport: { width: 500, height: 500 } });
|
|
6
|
+
test('respects preloaded history', async ({ page, mount }) => {
|
|
7
|
+
const editorPage = new CypherEditorPage(page);
|
|
8
|
+
const initialValue = 'MATCH (n) RETURN n;';
|
|
9
|
+
await mount(_jsx(CypherEditor, { value: initialValue, history: ['first', 'second'], onExecute: () => {
|
|
10
|
+
/* needed to turn on history movements */
|
|
11
|
+
} }));
|
|
12
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
13
|
+
await expect(page.getByText('first')).toBeVisible();
|
|
14
|
+
// First arrow up is to get to start of line
|
|
15
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
16
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
17
|
+
await expect(page.getByText('second')).toBeVisible();
|
|
18
|
+
await editorPage.getEditor().press('ArrowDown');
|
|
19
|
+
await expect(page.getByText('first')).toBeVisible();
|
|
20
|
+
await editorPage.getEditor().press('ArrowDown');
|
|
21
|
+
await expect(page.getByText(initialValue)).toBeVisible();
|
|
22
|
+
});
|
|
23
|
+
test('can execute queries and see them in history', async ({ page, mount }) => {
|
|
24
|
+
const editorPage = new CypherEditorPage(page);
|
|
25
|
+
const initialValue = `MATCH (n)
|
|
26
|
+
RETURN n;`;
|
|
27
|
+
const history = [];
|
|
28
|
+
const onExecute = (cmd) => {
|
|
29
|
+
history.unshift(cmd);
|
|
30
|
+
};
|
|
31
|
+
const editor = await mount(_jsx(CypherEditor, { value: initialValue, history: history, onExecute: onExecute }));
|
|
32
|
+
// Execute initial query
|
|
33
|
+
await editorPage.getEditor().press('Control+Enter');
|
|
34
|
+
await editorPage.getEditor().press('Meta+Enter');
|
|
35
|
+
expect(history.length).toBe(1);
|
|
36
|
+
// Ensure query execution doesn't fire if the query is only whitespace
|
|
37
|
+
await editorPage.getEditor().fill(' ');
|
|
38
|
+
await editorPage.getEditor().press('Control+Enter');
|
|
39
|
+
await editorPage.getEditor().press('Meta+Enter');
|
|
40
|
+
expect(history.length).toBe(1);
|
|
41
|
+
// Ensure only enter doesn't execute query
|
|
42
|
+
await editorPage.getEditor().fill('multiline');
|
|
43
|
+
await editorPage.getEditor().press('Enter');
|
|
44
|
+
await editorPage.getEditor().press('Enter');
|
|
45
|
+
await editorPage.getEditor().press('Enter');
|
|
46
|
+
await editorPage.getEditor().press('Enter');
|
|
47
|
+
await page.keyboard.type('entry');
|
|
48
|
+
expect(history.length).toBe(1);
|
|
49
|
+
await editorPage.getEditor().press('Control+Enter');
|
|
50
|
+
await editorPage.getEditor().press('Meta+Enter');
|
|
51
|
+
expect(history.length).toBe(2);
|
|
52
|
+
// rerender with new history
|
|
53
|
+
await editor.update(_jsx(CypherEditor, { value: initialValue, history: history, onExecute: onExecute }));
|
|
54
|
+
// type a new query and make sure it's not lost when navigating history
|
|
55
|
+
await editorPage.getEditor().fill('draft');
|
|
56
|
+
await expect(page.getByText('draft')).toBeVisible();
|
|
57
|
+
expect(history.length).toBe(2);
|
|
58
|
+
// Navigate to the top of the editor before navigating history
|
|
59
|
+
await editorPage.getEditor().press('ArrowLeft');
|
|
60
|
+
await editorPage.getEditor().press('ArrowLeft');
|
|
61
|
+
await editorPage.getEditor().press('ArrowLeft');
|
|
62
|
+
await editorPage.getEditor().press('ArrowLeft');
|
|
63
|
+
await editorPage.getEditor().press('ArrowLeft');
|
|
64
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
65
|
+
// Ensure moving down in the editor doesn't navigate history
|
|
66
|
+
await expect(page.getByText('multiline')).toBeVisible();
|
|
67
|
+
// arrow movements don't matter until bottom is hit
|
|
68
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
69
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
70
|
+
await editorPage.getEditor().press('ArrowDown');
|
|
71
|
+
await editorPage.getEditor().press('ArrowDown');
|
|
72
|
+
// editor still multiline
|
|
73
|
+
await expect(page.getByText('multiline')).toBeVisible();
|
|
74
|
+
// until you hit the end where have the draft we created earlier
|
|
75
|
+
await editorPage.getEditor().press('ArrowDown');
|
|
76
|
+
await expect(page.getByText('draft')).toBeVisible();
|
|
77
|
+
});
|
|
78
|
+
test('can navigate with cmd+up as well', async ({ page, mount }) => {
|
|
79
|
+
const editorPage = new CypherEditorPage(page);
|
|
80
|
+
const isMac = process.platform === 'darwin';
|
|
81
|
+
const metaUp = isMac ? 'Meta+ArrowUp' : 'Control+ArrowUp';
|
|
82
|
+
const metaDown = isMac ? 'Meta+ArrowDown' : 'Control+ArrowDown';
|
|
83
|
+
const initialValue = 'MATCH (n) RETURN n;';
|
|
84
|
+
await mount(_jsx(CypherEditor, { value: initialValue, history: [
|
|
85
|
+
`one
|
|
86
|
+
multiline
|
|
87
|
+
entry
|
|
88
|
+
.`,
|
|
89
|
+
'second',
|
|
90
|
+
], onExecute: () => {
|
|
91
|
+
/* needed to turn on history movements */
|
|
92
|
+
} }));
|
|
93
|
+
await editorPage.getEditor().press(metaUp);
|
|
94
|
+
await expect(page.getByText('multiline')).toBeVisible();
|
|
95
|
+
// Single meta up moves all the way to top of editor on mac
|
|
96
|
+
if (isMac) {
|
|
97
|
+
await editorPage.getEditor().press(metaUp);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
101
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
102
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
103
|
+
await editorPage.getEditor().press('ArrowUp');
|
|
104
|
+
}
|
|
105
|
+
// move in history
|
|
106
|
+
await editorPage.getEditor().press(metaUp);
|
|
107
|
+
await expect(page.getByText('second')).toBeVisible();
|
|
108
|
+
await editorPage.getEditor().press(metaDown);
|
|
109
|
+
await expect(page.getByText('multiline')).toBeVisible();
|
|
110
|
+
});
|
|
111
|
+
test('test onExecute', async ({ page, mount }) => {
|
|
112
|
+
const editorPage = new CypherEditorPage(page);
|
|
113
|
+
const isMac = process.platform === 'darwin';
|
|
114
|
+
const execButton = isMac ? 'Meta+Enter' : 'Control+Enter';
|
|
115
|
+
const initialValue = 'MATCH (n) RETURN n;';
|
|
116
|
+
const history = [];
|
|
117
|
+
const onExecute = (cmd) => {
|
|
118
|
+
history.unshift(cmd);
|
|
119
|
+
};
|
|
120
|
+
const cypherEditor = await mount(_jsx(CypherEditor, { value: initialValue, onExecute: onExecute }));
|
|
121
|
+
await editorPage.getEditor().press(execButton);
|
|
122
|
+
expect(history).toEqual([initialValue]);
|
|
123
|
+
await editorPage.getEditor().press(execButton);
|
|
124
|
+
expect(history).toEqual([initialValue, initialValue]);
|
|
125
|
+
// can update onExecute
|
|
126
|
+
let newExecRan = false;
|
|
127
|
+
const newOnExecute = () => {
|
|
128
|
+
newExecRan = true;
|
|
129
|
+
};
|
|
130
|
+
await cypherEditor.update(_jsx(CypherEditor, { value: initialValue, onExecute: newOnExecute }));
|
|
131
|
+
await editorPage.getEditor().press(execButton);
|
|
132
|
+
expect(newExecRan).toEqual(true);
|
|
133
|
+
// old value should still be only 2
|
|
134
|
+
expect(history).toEqual([initialValue, initialValue]);
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=historyNavigation.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyNavigation.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/historyNavigation.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { testData } from '@neo4j-cypher/language-support';
|
|
3
|
+
import { expect, test } from '@playwright/experimental-ct-react';
|
|
4
|
+
import { CypherEditor } from '../CypherEditor';
|
|
5
|
+
import { CypherEditorPage } from './e2eUtils';
|
|
6
|
+
test.use({ viewport: { width: 1000, height: 500 } });
|
|
7
|
+
test('benchmarking & performance test session', async ({ mount, page }) => {
|
|
8
|
+
const client = await page.context().newCDPSession(page);
|
|
9
|
+
if (process.env.BENCHMARKING === 'true') {
|
|
10
|
+
test.setTimeout(1000000);
|
|
11
|
+
await client.send('Performance.enable');
|
|
12
|
+
await client.send('Emulation.setCPUThrottlingRate', { rate: 4 });
|
|
13
|
+
await client.send('Overlay.setShowFPSCounter', { show: true });
|
|
14
|
+
await page.evaluate(() => {
|
|
15
|
+
window.longtasks = [];
|
|
16
|
+
const observer = new PerformanceObserver((list) => {
|
|
17
|
+
window.longtasks.push(...list.getEntries().map((e) => e.duration));
|
|
18
|
+
});
|
|
19
|
+
observer.observe({ entryTypes: ['longtask'] });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
test.setTimeout(30 * 1000);
|
|
24
|
+
}
|
|
25
|
+
const editorPage = new CypherEditorPage(page);
|
|
26
|
+
const component = await mount(_jsx(CypherEditor, { prompt: "neo4j>", theme: "dark", lint: true, schema: testData.mockSchema }));
|
|
27
|
+
// pressSequentially is less efficient -> we want to test the performance of the editor
|
|
28
|
+
await editorPage.getEditor().pressSequentially(`
|
|
29
|
+
MATCH (n:Person) RETURN m;`);
|
|
30
|
+
await editorPage.checkErrorMessage('m', 'Variable `m` not defined');
|
|
31
|
+
// set and unset large query a few times
|
|
32
|
+
await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
|
|
33
|
+
await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
|
|
34
|
+
await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
|
|
35
|
+
await component.update(_jsx(CypherEditor, { value: "" }));
|
|
36
|
+
await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
|
|
37
|
+
await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
|
|
38
|
+
await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
|
|
39
|
+
await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
|
|
40
|
+
await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
|
|
41
|
+
await editorPage.getEditor().pressSequentially(`
|
|
42
|
+
MATCH (n:P`);
|
|
43
|
+
await expect(page.locator('.cm-tooltip-autocomplete').getByText('Person')).toBeVisible();
|
|
44
|
+
await page.locator('.cm-tooltip-autocomplete').getByText('Person').click();
|
|
45
|
+
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
|
|
46
|
+
await expect(component).toContainText('MATCH (n:Person');
|
|
47
|
+
await editorPage.getEditor().pressSequentially(') RETRN my');
|
|
48
|
+
await expect(component).toContainText('MATCH (n:Person) RETRN m');
|
|
49
|
+
await editorPage.checkErrorMessage('RETRN', 'Unexpected token. Did you mean RETURN?');
|
|
50
|
+
await editorPage
|
|
51
|
+
.getEditor()
|
|
52
|
+
.pressSequentially('veryveryveryverylongvariable');
|
|
53
|
+
if (process.env.BENCHMARKING === 'true') {
|
|
54
|
+
const longtasks = await page.evaluate(() => window.longtasks);
|
|
55
|
+
const sortedLongTasks = longtasks.sort((a, b) => a - b);
|
|
56
|
+
const medianLongTask = sortedLongTasks[Math.floor(sortedLongTasks.length / 2)];
|
|
57
|
+
const averageLongTask = sortedLongTasks.reduce((a, b) => a + b, 0) / sortedLongTasks.length;
|
|
58
|
+
const over500 = sortedLongTasks.filter((t) => t > 500).length;
|
|
59
|
+
const nintyninethPercentile = sortedLongTasks[Math.floor(sortedLongTasks.length * 0.99)];
|
|
60
|
+
const longTaskCount = longtasks.length;
|
|
61
|
+
const totalLongTaskTime = longtasks.reduce((a, b) => a + b, 0);
|
|
62
|
+
const USER_ID = 1226722;
|
|
63
|
+
const API_KEY = process.env.GRAFANA_API_KEY;
|
|
64
|
+
if (!API_KEY) {
|
|
65
|
+
throw new Error('Missing grafana api key');
|
|
66
|
+
}
|
|
67
|
+
const metrics = {
|
|
68
|
+
medianLongTask,
|
|
69
|
+
averageLongTask,
|
|
70
|
+
over500,
|
|
71
|
+
nintyninethPercentile,
|
|
72
|
+
longTaskCount,
|
|
73
|
+
totalLongTaskTime,
|
|
74
|
+
};
|
|
75
|
+
const body = Object.entries(metrics)
|
|
76
|
+
.map(([key, value]) => `benchmark,bar_label=${key},source=playwright metric=${value}`)
|
|
77
|
+
.join('\n');
|
|
78
|
+
await fetch('https://influx-prod-39-prod-eu-north-0.grafana.net/api/v1/push/influx/write', {
|
|
79
|
+
method: 'post',
|
|
80
|
+
body,
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${USER_ID}:${API_KEY}`,
|
|
83
|
+
'Content-Type': 'text/plain',
|
|
84
|
+
},
|
|
85
|
+
}).then((res) => {
|
|
86
|
+
if (res.ok) {
|
|
87
|
+
// eslint-disable-next-line no-console
|
|
88
|
+
console.log('Metrics pushed to grafana successfully');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new Error(`Failed to push metrics to grafana: ${res.statusText}`);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=performanceTest.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceTest.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/performanceTest.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { expect, test } from '@playwright/experimental-ct-react';
|
|
3
|
+
import { CypherEditor } from '../CypherEditor';
|
|
4
|
+
test.use({ viewport: { width: 500, height: 500 } });
|
|
5
|
+
test('can mount the editor with text', async ({ mount }) => {
|
|
6
|
+
const component = await mount(_jsx(CypherEditor, { value: "MATCH (n) RETURN n;" }));
|
|
7
|
+
await expect(component).toContainText('MATCH (n) RETURN n;');
|
|
8
|
+
});
|
|
9
|
+
test('the editors text can be externally controlled ', async ({ mount }) => {
|
|
10
|
+
const intitialValue = 'MATCH (n) RETURN n;';
|
|
11
|
+
const component = await mount(_jsx(CypherEditor, { value: intitialValue }));
|
|
12
|
+
await expect(component).toContainText(intitialValue);
|
|
13
|
+
const newValue = 'RETURN 123';
|
|
14
|
+
await component.update(_jsx(CypherEditor, { value: newValue }));
|
|
15
|
+
await expect(component).toContainText(newValue);
|
|
16
|
+
});
|
|
17
|
+
test('the editor can report changes to the text ', async ({ mount, page }) => {
|
|
18
|
+
const intitialValue = 'MATCH (n) ';
|
|
19
|
+
let editorValueCopy = intitialValue;
|
|
20
|
+
const onChange = (val) => {
|
|
21
|
+
editorValueCopy = val;
|
|
22
|
+
};
|
|
23
|
+
await mount(_jsx(CypherEditor, { value: intitialValue, onChange: onChange }));
|
|
24
|
+
const textField = page.getByRole('textbox');
|
|
25
|
+
await textField.fill('RETURN 12');
|
|
26
|
+
// editor update is debounced, retry wait for debounced
|
|
27
|
+
await expect(() => {
|
|
28
|
+
expect(editorValueCopy).toBe('RETURN 12');
|
|
29
|
+
}).toPass({ intervals: [300, 300, 1000] });
|
|
30
|
+
await page.keyboard.type('34');
|
|
31
|
+
await expect(() => {
|
|
32
|
+
expect(editorValueCopy).toBe('RETURN 12');
|
|
33
|
+
}).toPass({ intervals: [300, 300, 1000] });
|
|
34
|
+
});
|
|
35
|
+
test('can complete RETURN', async ({ page, mount }) => {
|
|
36
|
+
await mount(_jsx(CypherEditor, {}));
|
|
37
|
+
const textField = page.getByRole('textbox');
|
|
38
|
+
await textField.fill('RETU');
|
|
39
|
+
await page.getByText('RETURN').click();
|
|
40
|
+
await expect(textField).toHaveText('RETURN');
|
|
41
|
+
});
|
|
42
|
+
test('can complete CALL/CREATE', async ({ page, mount }) => {
|
|
43
|
+
await mount(_jsx(CypherEditor, {}));
|
|
44
|
+
const textField = page.getByRole('textbox');
|
|
45
|
+
await textField.fill('C');
|
|
46
|
+
await expect(page.getByText('CALL')).toBeVisible();
|
|
47
|
+
await expect(page.getByText('CREATE')).toBeVisible();
|
|
48
|
+
await textField.fill('CA');
|
|
49
|
+
await expect(page.getByText('CALL')).toBeVisible();
|
|
50
|
+
await expect(page.getByText('CREATE')).not.toBeVisible();
|
|
51
|
+
// wait for the autocomplete interactivity
|
|
52
|
+
await page.waitForTimeout(500);
|
|
53
|
+
await textField.press('Enter');
|
|
54
|
+
await expect(textField).toHaveText('CALL');
|
|
55
|
+
});
|
|
56
|
+
test('prompt shows up', async ({ mount, page }) => {
|
|
57
|
+
const component = await mount(_jsx(CypherEditor, { prompt: "neo4j>" }));
|
|
58
|
+
await expect(component).toContainText('neo4j>');
|
|
59
|
+
await component.update(_jsx(CypherEditor, { prompt: "test>" }));
|
|
60
|
+
await expect(component).toContainText('test>');
|
|
61
|
+
const textField = page.getByRole('textbox');
|
|
62
|
+
await textField.press('a');
|
|
63
|
+
await expect(textField).toHaveText('a');
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=sanityChecks.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanityChecks.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/sanityChecks.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { testData } from '@neo4j-cypher/language-support';
|
|
3
|
+
import { expect, test } from '@playwright/experimental-ct-react';
|
|
4
|
+
import { CypherEditor } from '../CypherEditor';
|
|
5
|
+
test.use({ viewport: { width: 1000, height: 500 } });
|
|
6
|
+
function testTooltip(tooltip, expectations) {
|
|
7
|
+
const includes = expectations.includes ?? [];
|
|
8
|
+
const excludes = expectations.excludes ?? [];
|
|
9
|
+
const included = Promise.all(includes.map((text) => {
|
|
10
|
+
return expect(tooltip).toContainText(text, {
|
|
11
|
+
timeout: 2000,
|
|
12
|
+
});
|
|
13
|
+
}));
|
|
14
|
+
const excluded = Promise.all(excludes.map((text) => {
|
|
15
|
+
return expect(tooltip).not.toContainText(text, {
|
|
16
|
+
timeout: 2000,
|
|
17
|
+
});
|
|
18
|
+
}));
|
|
19
|
+
return Promise.all([included, excluded]);
|
|
20
|
+
}
|
|
21
|
+
test('Signature help works for functions', async ({ page, mount }) => {
|
|
22
|
+
const query = 'RETURN abs(';
|
|
23
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
24
|
+
await expect(page.locator('.cm-tooltip-signature-help').last()).toBeVisible({
|
|
25
|
+
timeout: 2000,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
test('Signature help works for procedures', async ({ page, mount }) => {
|
|
29
|
+
const query = 'CALL apoc.import.csv(';
|
|
30
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
31
|
+
await expect(page.locator('.cm-tooltip-signature-help').last()).toBeVisible({
|
|
32
|
+
timeout: 2000,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
test('Signature help shows the description for the first argument', async ({ page, mount, }) => {
|
|
36
|
+
const query = 'CALL apoc.import.csv(';
|
|
37
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
38
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
39
|
+
await testTooltip(tooltip, {
|
|
40
|
+
includes: [
|
|
41
|
+
'nodes :: LIST<MAP>',
|
|
42
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
43
|
+
],
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
test('Signature help shows the description for the first argument when the cursor is at that position', async ({ page, mount, }) => {
|
|
47
|
+
const query = 'CALL apoc.import.csv()';
|
|
48
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 21 }));
|
|
49
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
50
|
+
await testTooltip(tooltip, {
|
|
51
|
+
includes: [
|
|
52
|
+
'nodes :: LIST<MAP>',
|
|
53
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
test('Signature help shows the description for the second argument', async ({ page, mount, }) => {
|
|
58
|
+
const query = 'CALL apoc.import.csv(nodes,';
|
|
59
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
60
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
61
|
+
await testTooltip(tooltip, {
|
|
62
|
+
includes: [
|
|
63
|
+
'rels :: LIST<MAP>',
|
|
64
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
test('Signature help shows the description for the second argument when the cursor is at that position', async ({ page, mount, }) => {
|
|
69
|
+
const query = 'CALL apoc.import.csv(nodes,)';
|
|
70
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 27 }));
|
|
71
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
72
|
+
await testTooltip(tooltip, {
|
|
73
|
+
includes: [
|
|
74
|
+
'rels :: LIST<MAP>',
|
|
75
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
test('Signature help shows the description for the second argument when the cursor is at that position, even after whitespaces', async ({ page, mount, }) => {
|
|
80
|
+
const query = 'CALL apoc.import.csv(nodes, )';
|
|
81
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 28 }));
|
|
82
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
83
|
+
await testTooltip(tooltip, {
|
|
84
|
+
includes: [
|
|
85
|
+
'rels :: LIST<MAP>',
|
|
86
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
test('Signature help shows description for arguments with a space following a separator', async ({ page, mount, }) => {
|
|
91
|
+
const query = 'CALL apoc.import.csv(nodes, ';
|
|
92
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
93
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
94
|
+
await testTooltip(tooltip, {
|
|
95
|
+
includes: [
|
|
96
|
+
'rels :: LIST<MAP>',
|
|
97
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
test('Signature help shows the description for the third argument', async ({ page, mount, }) => {
|
|
102
|
+
const query = 'CALL apoc.import.csv(nodes, rels,';
|
|
103
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
104
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
105
|
+
await testTooltip(tooltip, {
|
|
106
|
+
includes: [
|
|
107
|
+
'config :: MAP',
|
|
108
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
109
|
+
],
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
test('Signature help works on multiline queries', async ({ page, mount }) => {
|
|
113
|
+
const query = `CALL apoc.import.csv(
|
|
114
|
+
nodes,
|
|
115
|
+
rels,
|
|
116
|
+
`;
|
|
117
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
118
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
119
|
+
await testTooltip(tooltip, {
|
|
120
|
+
includes: [
|
|
121
|
+
'config :: MAP',
|
|
122
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
test('Signature help only shows the description past the last argument', async ({ page, mount, }) => {
|
|
127
|
+
const query = 'CALL apoc.import.csv(nodes, rels, config,';
|
|
128
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
129
|
+
const tooltip = page.locator('.cm-tooltip-signature-help').last();
|
|
130
|
+
await testTooltip(tooltip, {
|
|
131
|
+
includes: [
|
|
132
|
+
'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
|
|
133
|
+
],
|
|
134
|
+
excludes: ['config :: MAP'],
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
test('Signature help does not show any help when method finished', async ({ page, mount, }) => {
|
|
138
|
+
const query = 'CALL apoc.import.csv(nodes, rels, config)';
|
|
139
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
140
|
+
await expect(page.locator('.cm-tooltip-signature-help').last()).not.toBeVisible({
|
|
141
|
+
timeout: 2000,
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
test('Signature help does not blow up on empty query', async ({ page, mount, }) => {
|
|
145
|
+
const query = '';
|
|
146
|
+
await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
|
|
147
|
+
await expect(page.locator('.cm-tooltip-signature-help').last()).not.toBeVisible({
|
|
148
|
+
timeout: 2000,
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=signatureHelp.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatureHelp.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/signatureHelp.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { expect, test } from '@playwright/experimental-ct-react';
|
|
3
|
+
import { CypherEditor } from '../CypherEditor';
|
|
4
|
+
import { darkThemeConstants, lightThemeConstants } from '../themes';
|
|
5
|
+
import { CypherEditorPage } from './e2eUtils';
|
|
6
|
+
test.use({ viewport: { width: 500, height: 500 } });
|
|
7
|
+
test('light theme highlighting', async ({ page, mount }) => {
|
|
8
|
+
const editorPage = new CypherEditorPage(page);
|
|
9
|
+
const query = `
|
|
10
|
+
MATCH (variable :Label)-[:REL_TYPE]->()
|
|
11
|
+
WHERE variable.property = "String"
|
|
12
|
+
OR namespaced.function() = false
|
|
13
|
+
// comment
|
|
14
|
+
OR $parameter > 1234
|
|
15
|
+
RETURN variable;`;
|
|
16
|
+
await mount(_jsx(CypherEditor, { value: query, theme: "light" }));
|
|
17
|
+
const keywordcolors = await Promise.all(['MATCH', 'WHERE', 'RETURN'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
|
|
18
|
+
keywordcolors.every((kw) => expect(kw).toEqual(lightThemeConstants.highlightStyles.keyword));
|
|
19
|
+
const labelReltype = await Promise.all(['Label', 'REL_TYPE'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
|
|
20
|
+
labelReltype.every((kw) => expect(kw).toEqual(lightThemeConstants.highlightStyles.label));
|
|
21
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('parameter'))).toEqual(lightThemeConstants.highlightStyles.paramValue);
|
|
22
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('property'))).toEqual(lightThemeConstants.highlightStyles.property);
|
|
23
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('false'))).toEqual(lightThemeConstants.highlightStyles.booleanLiteral);
|
|
24
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('String'))).toEqual(lightThemeConstants.highlightStyles.stringLiteral);
|
|
25
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(lightThemeConstants.highlightStyles.comment);
|
|
26
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('1234', { exact: true }))).toEqual(lightThemeConstants.highlightStyles.numberLiteral);
|
|
27
|
+
expect(await editorPage.editorBackgroundIsUnset()).toEqual(false);
|
|
28
|
+
});
|
|
29
|
+
test('dark theme highlighting', async ({ page, mount }) => {
|
|
30
|
+
const editorPage = new CypherEditorPage(page);
|
|
31
|
+
const query = `
|
|
32
|
+
MATCH (variable :Label)-[:REL_TYPE]->()
|
|
33
|
+
WHERE variable.property = "String"
|
|
34
|
+
OR namespaced.function() = false
|
|
35
|
+
// comment
|
|
36
|
+
OR $parameter > 1234
|
|
37
|
+
RETURN variable;`;
|
|
38
|
+
await mount(_jsx(CypherEditor, { value: query, theme: "dark" }));
|
|
39
|
+
const keywordcolors = await Promise.all(['MATCH', 'WHERE', 'RETURN'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
|
|
40
|
+
keywordcolors.every((kw) => expect(kw).toEqual(darkThemeConstants.highlightStyles.keyword));
|
|
41
|
+
const labelReltype = await Promise.all(['Label', 'REL_TYPE'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
|
|
42
|
+
labelReltype.every((kw) => expect(kw).toEqual(darkThemeConstants.highlightStyles.label));
|
|
43
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('parameter'))).toEqual(darkThemeConstants.highlightStyles.paramValue);
|
|
44
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('property'))).toEqual(darkThemeConstants.highlightStyles.property);
|
|
45
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('false'))).toEqual(darkThemeConstants.highlightStyles.booleanLiteral);
|
|
46
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('String'))).toEqual(darkThemeConstants.highlightStyles.stringLiteral);
|
|
47
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(darkThemeConstants.highlightStyles.comment);
|
|
48
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('1234', { exact: true }))).toEqual(darkThemeConstants.highlightStyles.numberLiteral);
|
|
49
|
+
expect(await editorPage.editorBackgroundIsUnset()).toEqual(false);
|
|
50
|
+
});
|
|
51
|
+
test('can live switch theme ', async ({ page, mount }) => {
|
|
52
|
+
const editorPage = new CypherEditorPage(page);
|
|
53
|
+
const component = await mount(_jsx(CypherEditor, { theme: "light", value: "RETURN" }));
|
|
54
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('RETURN', { exact: true }))).toEqual(lightThemeConstants.highlightStyles.keyword);
|
|
55
|
+
await component.update(_jsx(CypherEditor, { theme: "dark", value: "RETURN" }));
|
|
56
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('RETURN', { exact: true }))).toEqual(darkThemeConstants.highlightStyles.keyword);
|
|
57
|
+
});
|
|
58
|
+
test('respects prop to allow overriding bkg color', async ({ page, mount }) => {
|
|
59
|
+
const editorPage = new CypherEditorPage(page);
|
|
60
|
+
await mount(_jsx(CypherEditor, { theme: "light", value: "text", overrideThemeBackgroundColor: true }));
|
|
61
|
+
expect(await editorPage.editorBackgroundIsUnset()).toEqual(true);
|
|
62
|
+
});
|
|
63
|
+
test('highlights multiline string literal correctly', async ({ page, mount, }) => {
|
|
64
|
+
const editorPage = new CypherEditorPage(page);
|
|
65
|
+
const query = `
|
|
66
|
+
RETURN "
|
|
67
|
+
multilinestring";`;
|
|
68
|
+
await mount(_jsx(CypherEditor, { theme: "light", value: query }));
|
|
69
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('multilinestring'))).toEqual(lightThemeConstants.highlightStyles.stringLiteral);
|
|
70
|
+
});
|
|
71
|
+
test('highlights multiline label correctly', async ({ page, mount }) => {
|
|
72
|
+
const editorPage = new CypherEditorPage(page);
|
|
73
|
+
const query = `
|
|
74
|
+
MATCH (v:\`
|
|
75
|
+
|
|
76
|
+
Label\`)
|
|
77
|
+
`;
|
|
78
|
+
await mount(_jsx(CypherEditor, { theme: "light", value: query }));
|
|
79
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('Label'))).toEqual(lightThemeConstants.highlightStyles.label);
|
|
80
|
+
});
|
|
81
|
+
test('highlights multiline comment correctly', async ({ page, mount }) => {
|
|
82
|
+
const editorPage = new CypherEditorPage(page);
|
|
83
|
+
const query = `
|
|
84
|
+
/*
|
|
85
|
+
|
|
86
|
+
comment
|
|
87
|
+
*/";`;
|
|
88
|
+
await mount(_jsx(CypherEditor, { theme: "light", value: query }));
|
|
89
|
+
expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(lightThemeConstants.highlightStyles.comment);
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=syntaxHighlighting.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntaxHighlighting.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/syntaxHighlighting.spec.tsx"],"names":[],"mappings":"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"}
|