-
Notifications
You must be signed in to change notification settings - Fork 848
Expand file tree
/
Copy pathCodeMirrorCustomEditor.spec.js
More file actions
executable file
·148 lines (123 loc) · 8.95 KB
/
CodeMirrorCustomEditor.spec.js
File metadata and controls
executable file
·148 lines (123 loc) · 8.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2026, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import { withTheme } from '../fake_theme';
import CodeMirror from 'sources/components/ReactCodeMirror';
import { render } from '@testing-library/react';
describe('CodeMirrorCustomEditorView', ()=>{
const ThemedCM = withTheme(CodeMirror);
let cmInstance, editor;
const cmRerender = (props)=>{
cmInstance.rerender(
<ThemedCM
value={'Init text'}
className="testClass"
currEditor={(obj) => {
editor = obj;
}}
{...props}
/>
);
};
beforeEach(()=>{
cmInstance = render(
<ThemedCM
value={'Init text'}
className="testClass"
currEditor={(obj) => {
editor = obj;
}}
/>);
});
it('single query with no cursor position',()=>{
cmRerender({value:'select * from public.actor;'});
expect(editor.getQueryAt()).toEqual({'value': 'select * from public.actor;', 'from': 0, 'to': 27});
});
it('cursor within a query in multiple queries',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(20)).toEqual({'value': 'select * from public.actor;', 'from': 0, 'to': 27});
});
it('cursor outside the semicolon of a query in multiple queries',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(29)).toEqual({'value': 'select * from public.actor;', 'from': 0, 'to': 27});
});
it('cursor at the starting of a comment block',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(31)).toEqual({'value': '--rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 27, 'to': 107});
});
it('cursor inside a comment block',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(72)).toEqual({'value': '--rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 27, 'to': 107});
});
it('cursor inside a comment block`s 2nd line',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(107)).toEqual({'value': '--rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 27, 'to': 107});
});
it('cursor at the starting of a query in multiple queries',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(109)).toEqual({'value': 'select * from public.address where address_id=5;', 'from': 109, 'to': 157});
});
it('cursor at the next line where query ends with semicolon',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(158)).toEqual({'value': 'select * from public.address where address_id=5;', 'from': 109, 'to': 157});
});
it('cursor at an empty line where query is present one empty line above',()=>{
cmRerender({value: 'select * from public.actor; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5;\n\nselect * from public.city;\n\nselect 1;\n\n\n'});
expect(editor.getQueryAt(198)).toEqual({'value': '', 'from': 198, 'to': 199});
});
it('cursor at 2nd line and query is in 2 lines',()=>{
cmRerender({value: 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address \n\twhere address_id=5;\n\nselect * from public.city;\n\nselect 1;'});
expect(editor.getQueryAt(141)).toEqual({'value':'select * from public.address \n\twhere address_id=5;', 'from': 108, 'to': 158});
});
it('cursor at the start of query and multiple queries without semicolon',()=>{
cmRerender({value: 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5\n\nselect * from public.city\n\nselect 1'});
expect(editor.getQueryAt(0)).toEqual({'value': 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 0, 'to': 106});
});
it('cursor at the end of query and multiple queries without semicolon',()=>{
cmRerender({value: 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5\n\nselect * from public.city\n\nselect 1'});
expect(editor.getQueryAt(26)).toEqual({'value': 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 0, 'to': 106});
});
it('cursor in between of a query and multiple queries without semicolon',()=>{
cmRerender({value: 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5\n\nselect * from public.city\n\nselect 1'});
expect(editor.getQueryAt(17)).toEqual({'value': 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff', 'from': 0, 'to': 106});
});
it('cursor is at a new empty line and just above it a query without semicolon',()=>{
cmRerender({value: 'select * from public.actor --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5\n\nselect * from public.city\n\nselect 1'});
expect(editor.getQueryAt(156)).toEqual({'value': 'select * from public.address where address_id=5', 'from': 108, 'to': 156});
});
it('cursor at a empty query with semicolon',()=>{
cmRerender({value: 'select * from public.actor; ; --rhhryyr select * from public.film\n--skskks\n--sksksksksks\n--sksksksksksdff\n\t\nselect * from public.address where address_id=5\n\nselect * from public.city\n\nselect 1'});
expect(editor.getQueryAt(29)).toEqual({'value': 'select * from public.actor;', 'from': 0, 'to': 27});
});
it('cursor on WHERE clause with blank lines between SELECT and FROM and WHERE',()=>{
// Query with blank lines between clauses: SELECT *\n\nFROM pg_class\n\nWHERE id = 1;
cmRerender({value: 'SELECT *\n\nFROM pg_class\n\nWHERE id = 1;'});
// Cursor at WHERE clause (position 25), should return full query
expect(editor.getQueryAt(25)).toEqual({'value': 'SELECT *\n\nFROM pg_class\n\nWHERE id = 1;', 'from': 0, 'to': 38});
});
it('cursor on FROM clause with blank lines in query',()=>{
// Query with blank lines between clauses
cmRerender({value: 'SELECT *\n\nFROM pg_class\n\nWHERE id = 1;'});
// Cursor at FROM clause (position 10), should return full query
expect(editor.getQueryAt(10)).toEqual({'value': 'SELECT *\n\nFROM pg_class\n\nWHERE id = 1;', 'from': 0, 'to': 38});
});
it('cursor on condition line with WHERE on separate line',()=>{
// Query: select *\n\nfrom pg_attribute\n\nWHERE\n\nattrelid > 3000;
const query = 'select *\n\nfrom pg_attribute\n\nWHERE\n\nattrelid > 3000;';
cmRerender({value: query});
// Cursor at 'attrelid' condition (position 38), should return full query
expect(editor.getQueryAt(38)).toEqual({'value': query, 'from': 0, 'to': query.length});
});
it('cursor on WHERE keyword with blank lines around it',()=>{
// Query: select *\n\nfrom pg_attribute\n\nWHERE\n\nattrelid > 3000;
const query = 'select *\n\nfrom pg_attribute\n\nWHERE\n\nattrelid > 3000;';
cmRerender({value: query});
// Cursor at WHERE keyword (position 30), should return full query
expect(editor.getQueryAt(30)).toEqual({'value': query, 'from': 0, 'to': query.length});
});
});