anbt-sql-formatter 0.1.0 → 0.1.2

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.
data/test/test_parser.rb CHANGED
@@ -1,5 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
-
3
1
  require File.join(File.expand_path(File.dirname(__FILE__)), "helper")
4
2
 
5
3
  require "anbt-sql-formatter/rule"
@@ -34,8 +32,8 @@ class TestAnbtSqlParser < Test::Unit::TestCase
34
32
 
35
33
  def test_letter?
36
34
  msg = "letter? - "
37
- assert_equals( msg, false, @parser.letter?("'") )
38
- assert_equals( msg, false, @parser.letter?('"') )
35
+ assert_equals( msg, false, @parser.letter?("'") )
36
+ assert_equals( msg, false, @parser.letter?('"') )
39
37
  end
40
38
 
41
39
 
@@ -77,447 +75,441 @@ class TestAnbtSqlParser < Test::Unit::TestCase
77
75
 
78
76
  ##
79
77
  # コメントと文字列のテストは coarse tokenize で行う。
80
- def test_next_sql_token
81
- msg = "token type recognition"
82
-
83
- ########
84
- @parser.before = " "
85
- @parser.pos = 0
86
- assert_equals(
87
- msg + "space",
88
- strip_indent(
89
- <<-EOB
90
- space ( )
91
- EOB
92
- ),
93
- _format([ @parser.next_sql_token ])
94
- )
95
-
96
- ########
97
- @parser.before = "!="
98
- @parser.pos = 0
99
- assert_equals(
100
- msg + "!=",
101
- strip_indent(
102
- <<-EOB
103
- symbol (!=)
104
- EOB
105
- ),
106
- _format([ @parser.next_sql_token ])
107
- )
108
-
109
-
110
- ########
111
- @parser.before = "a b"
112
- @parser.pos = 1
113
- assert_equals(
114
- msg + "space",
115
- strip_indent(
116
- <<-EOB
117
- space ( )
118
- EOB
119
- ),
120
- _format([ @parser.next_sql_token ])
121
- )
122
-
123
- ########
124
- @parser.before = ","
125
- @parser.pos = 0
126
- assert_equals(
127
- msg + "symbol",
128
- strip_indent(
129
- <<-EOB
130
- symbol (,)
131
- EOB
132
- ),
133
- _format([ @parser.next_sql_token ])
134
- )
135
-
136
- ########
137
- @parser.before = "select"
138
- @parser.pos = 0
139
- assert_equals(
140
- msg + "keyword: select",
141
- strip_indent(
142
- <<-EOB
143
- keyword (select)
144
- EOB
145
- ),
146
- _format([ @parser.next_sql_token ])
147
- )
148
-
149
- ########
150
- @parser.before = "case"
151
- @parser.pos = 0
152
- assert_equals(
153
- msg + "keyword: case",
154
- strip_indent(
155
- <<-EOB
156
- keyword (case)
157
- EOB
158
- ),
159
- _format([ @parser.next_sql_token ])
160
- )
161
-
162
- ########
163
- @parser.before = "xxx123"
164
- @parser.pos = 0
165
- assert_equals(
166
- msg + "name",
167
- strip_indent(
168
- <<-EOB
169
- name (xxx123)
170
- EOB
171
- ),
172
- _format([ @parser.next_sql_token ])
173
- )
174
-
175
- ########
176
- @parser.before = '123'
177
- @parser.pos = 0
178
- assert_equals(
179
- msg + "value",
180
- strip_indent(
181
- <<-EOB
182
- value (123)
183
- EOB
184
- ),
185
- _format([ @parser.next_sql_token ])
186
- )
187
-
188
- ########
189
- @parser.before = '1.23'
190
- @parser.pos = 0
191
- assert_equals(
192
- msg + "value",
193
- strip_indent(
194
- <<-EOB
195
- value (1.23)
196
- EOB
197
- ),
198
- _format([ @parser.next_sql_token ])
199
- )
200
-
201
- ########
202
- @parser.before = '-1.23 '
203
- @parser.pos = 0
204
- assert_equals(
205
- msg + "value",
206
- strip_indent(
207
- <<-EOB
208
- value (-1.23)
209
- EOB
210
- ),
211
- _format([ @parser.next_sql_token ])
212
- )
213
-
214
- ########
215
- @parser.before = '1.23e45 '
216
- @parser.pos = 0
217
- assert_equals(
218
- msg + "value",
219
- strip_indent(
220
- <<-EOB
221
- value (1.23e45)
222
- EOB
223
- ),
224
- _format([ @parser.next_sql_token ])
225
- )
226
-
227
- ########
228
- @parser.before = '1.23e-45 '
229
- @parser.pos = 0
230
- assert_equals(
231
- msg + "value",
232
- strip_indent(
233
- <<-EOB
234
- value (1.23e-45)
235
- EOB
236
- ),
237
- _format([ @parser.next_sql_token ])
238
- )
239
-
240
- ########
241
- @parser.before = '-1.23e-45 '
242
- @parser.pos = 0
243
- assert_equals(
244
- msg + "value",
245
- strip_indent(
246
- <<-EOB
247
- value (-1.23e-45)
248
- EOB
249
- ),
250
- _format([ @parser.next_sql_token ])
251
- )
252
-
253
- ########
254
- @parser.before = '0x01 '
255
- @parser.pos = 0
256
- assert_equals(
257
- msg + "value",
258
- strip_indent(
259
- <<-EOB
260
- value (0x01)
261
- EOB
262
- ),
263
- _format([ @parser.next_sql_token ])
264
- )
265
-
266
- ########
267
- @parser.before = '1x'
268
- @parser.pos = 0
269
- assert_equals(
270
- msg + "value",
271
- strip_indent(
272
- <<-EOB
273
- value (1)
274
- EOB
275
- ),
276
- _format([ @parser.next_sql_token ])
277
- )
78
+ sub_test_case "next_sql_token" do
79
+ test "space 010" do
80
+ @parser.before = " "
81
+ @parser.pos = 0
82
+ assert_equal(
83
+ strip_indent(
84
+ <<-EOB
85
+ space ( )
86
+ EOB
87
+ ),
88
+ _format([ @parser.next_sql_token ])
89
+ )
90
+ end
91
+
92
+ test "symbol 010" do
93
+ @parser.before = "!="
94
+ @parser.pos = 0
95
+ assert_equal(
96
+ strip_indent(
97
+ <<-EOB
98
+ symbol (!=)
99
+ EOB
100
+ ),
101
+ _format([ @parser.next_sql_token ])
102
+ )
103
+ end
104
+
105
+ test "pos = 1" do
106
+ @parser.before = "a b"
107
+ @parser.pos = 1
108
+ assert_equal(
109
+ strip_indent(
110
+ <<-EOB
111
+ space ( )
112
+ EOB
113
+ ),
114
+ _format([ @parser.next_sql_token ])
115
+ )
116
+ end
117
+
118
+ test "symbol 020" do
119
+ @parser.before = ","
120
+ @parser.pos = 0
121
+ assert_equal(
122
+ strip_indent(
123
+ <<-EOB
124
+ symbol (,)
125
+ EOB
126
+ ),
127
+ _format([ @parser.next_sql_token ])
128
+ )
129
+ end
130
+
131
+ test "keyword 010" do
132
+ @parser.before = "select"
133
+ @parser.pos = 0
134
+ assert_equal(
135
+ strip_indent(
136
+ <<-EOB
137
+ keyword (select)
138
+ EOB
139
+ ),
140
+ _format([ @parser.next_sql_token ])
141
+ )
142
+ end
143
+
144
+ test "keyword 020" do
145
+ @parser.before = "case"
146
+ @parser.pos = 0
147
+ assert_equal(
148
+ strip_indent(
149
+ <<-EOB
150
+ keyword (case)
151
+ EOB
152
+ ),
153
+ _format([ @parser.next_sql_token ])
154
+ )
155
+ end
156
+
157
+ test "name 010" do
158
+ @parser.before = "xxx123"
159
+ @parser.pos = 0
160
+ assert_equal(
161
+ strip_indent(
162
+ <<-EOB
163
+ name (xxx123)
164
+ EOB
165
+ ),
166
+ _format([ @parser.next_sql_token ])
167
+ )
168
+ end
169
+
170
+ test "value 010" do
171
+ @parser.before = '123'
172
+ @parser.pos = 0
173
+ assert_equal(
174
+ strip_indent(
175
+ <<-EOB
176
+ value (123)
177
+ EOB
178
+ ),
179
+ _format([ @parser.next_sql_token ])
180
+ )
181
+ end
182
+
183
+ test "value 020" do
184
+ @parser.before = '1.23'
185
+ @parser.pos = 0
186
+ assert_equal(
187
+ strip_indent(
188
+ <<-EOB
189
+ value (1.23)
190
+ EOB
191
+ ),
192
+ _format([ @parser.next_sql_token ])
193
+ )
194
+ end
195
+
196
+ test "value 030" do
197
+ @parser.before = '-1.23 '
198
+ @parser.pos = 0
199
+ assert_equal(
200
+ strip_indent(
201
+ <<-EOB
202
+ value (-1.23)
203
+ EOB
204
+ ),
205
+ _format([ @parser.next_sql_token ])
206
+ )
207
+ end
208
+
209
+ test "value 040" do
210
+ @parser.before = '1.23e45 '
211
+ @parser.pos = 0
212
+ assert_equal(
213
+ strip_indent(
214
+ <<-EOB
215
+ value (1.23e45)
216
+ EOB
217
+ ),
218
+ _format([ @parser.next_sql_token ])
219
+ )
220
+ end
221
+
222
+ test "value 050" do
223
+ @parser.before = '1.23e-45 '
224
+ @parser.pos = 0
225
+ assert_equal(
226
+ strip_indent(
227
+ <<-EOB
228
+ value (1.23e-45)
229
+ EOB
230
+ ),
231
+ _format([ @parser.next_sql_token ])
232
+ )
233
+ end
234
+
235
+ test "value 060" do
236
+ @parser.before = '-1.23e-45 '
237
+ @parser.pos = 0
238
+ assert_equal(
239
+ strip_indent(
240
+ <<-EOB
241
+ value (-1.23e-45)
242
+ EOB
243
+ ),
244
+ _format([ @parser.next_sql_token ])
245
+ )
246
+ end
247
+
248
+ test "value 070" do
249
+ @parser.before = '0x01 '
250
+ @parser.pos = 0
251
+ assert_equal(
252
+ strip_indent(
253
+ <<-EOB
254
+ value (0x01)
255
+ EOB
256
+ ),
257
+ _format([ @parser.next_sql_token ])
258
+ )
259
+ end
260
+
261
+ test "value 080" do
262
+ @parser.before = '1x'
263
+ @parser.pos = 0
264
+ assert_equal(
265
+ strip_indent(
266
+ <<-EOB
267
+ value (1)
268
+ EOB
269
+ ),
270
+ _format([ @parser.next_sql_token ])
271
+ )
272
+ end
278
273
  end
279
274
 
280
275
 
281
- def test_parser
282
- msg = "parser basic case - "
283
-
284
- ########
285
- assert_equals(
286
- msg + "",
287
- strip_indent(
288
- <<-EOB
289
- keyword (select)
290
- space ( )
291
- name (a)
292
- space ( )
293
- keyword (from)
294
- space ( )
295
- name (b)
296
- symbol (;)
297
- EOB
298
- ),
299
- _format( @parser.parse( strip_indent(
300
- <<-EOB
301
- select a from b;
302
- EOB
303
- )))
304
- )
305
-
306
- ########
307
- assert_equals(
308
- msg + "double-quoted schema and table",
309
- strip_indent(
310
- <<-EOB
311
- name ("admin"."test")
312
- EOB
313
- ),
314
- _format( @parser.parse( strip_indent(
315
- <<-EOB
316
- "admin"."test"
317
- EOB
318
- )))
319
- )
320
-
321
- ########
322
- assert_equals(
323
- msg + "minus + non-number",
324
- strip_indent(
325
- <<-EOB
326
- name ("admin"."test")
327
- EOB
328
- ),
329
- _format( @parser.parse( strip_indent(
330
- <<-EOB
331
- "admin"."test"
332
- EOB
333
- )))
334
- )
335
-
336
- ########
337
- assert_equals(
338
- msg + "minus + non-number",
339
- strip_indent(
340
- <<-EOB
341
- symbol (-)
342
- name (a)
343
- EOB
344
- ),
345
- _format( @parser.parse( strip_indent(
346
- <<-EOB
347
- -a
348
- EOB
349
- )))
350
- )
351
-
352
- ########
353
- assert_equals(
354
- msg + "single comment",
355
- strip_indent(
356
- <<-EOB
357
- keyword (select)
358
- space (\n)
359
- comment (-- x)
360
- name (a)
361
- EOB
362
- ),
363
- _format( @parser.parse(strip_indent(
364
- <<-EOB
365
- select
366
- -- x
367
- a
368
- EOB
369
- )))
370
- )
371
-
372
- ########
373
- assert_equals(
374
- msg + "parenthesis in single quote",
375
- strip_indent(
376
- <<-EOB
377
- value ('()')
378
- EOB
379
- ),
380
- _format( @parser.parse(strip_indent(
381
- <<-EOB
382
- '()'
383
- EOB
384
- )))
385
- )
386
-
387
- ########
388
- assert_equals(
389
- msg + "parenthesis in double quote",
390
- strip_indent(
391
- <<-EOB
392
- name ("()")
393
- EOB
394
- ),
395
- _format( @parser.parse(strip_indent(
396
- <<-EOB
397
- "()"
398
- EOB
399
- )))
400
- )
401
-
402
- ########
403
- assert_equals(
404
- msg + "multiple line comment: 1",
405
- strip_indent(
406
- <<-EOB
407
- name (aa)
408
- comment (/*bb*/)
409
- name (cc)
410
- EOB
411
- ),
412
- _format( @parser.parse(strip_indent(
413
- <<-EOB
414
- aa/*bb*/cc
415
- EOB
416
- )))
417
- )
418
-
419
- ########
420
- assert_equals(
421
- msg + "multiple line comment: 2",
422
- strip_indent(
423
- <<-EOB
424
- name (aa)
425
- comment (/*b
426
- b*/)
427
- name (cc)
428
- EOB
429
- ),
430
- _format( @parser.parse(strip_indent(
431
- <<-EOB
432
- aa/*b
433
- b*/cc
434
- EOB
435
- )))
436
- )
437
-
438
- ########
439
- assert_equals(
440
- msg + "invalid paired double quote",
441
- strip_indent(
442
- <<-EOB
443
- name (aa)
444
- name ("bb)
445
- EOB
446
- ),
447
- _format( @parser.parse(strip_indent(
448
- <<-EOB
449
- aa"bb
450
- EOB
451
- )))
452
- )
453
-
454
- ########
455
- assert_equals(
456
- msg + "multiwords keyword",
457
- strip_indent(
458
- <<-EOB
459
- keyword (group by)
460
- EOB
461
- ),
462
- _format( @parser.parse(strip_indent(
463
- <<-EOB
464
- group by
465
- EOB
466
- )))
467
- )
468
-
469
- ########
470
- assert_equals(
471
- msg + "multiwords keyword 2",
472
- strip_indent(
473
- <<-EOB
474
- name (a)
475
- space ( )
476
- keyword (group by)
477
- space ( )
478
- name (B)
479
- EOB
480
- ),
481
- _format( @parser.parse(strip_indent(
482
- <<-EOB
483
- a group by B
484
- EOB
485
- )))
486
- )
487
-
488
- ########
489
- assert_equals(
490
- msg + "multiwords keyword 3",
491
- strip_indent(
492
- <<-EOB
493
- keyword (select)
494
- space ( )
495
- value ('group by')
496
- EOB
497
- ),
498
- _format( @parser.parse(strip_indent(
499
- <<-EOB
500
- select 'group by'
501
- EOB
502
- )))
503
- )
504
-
505
- ########
506
- assert_equals(
507
- msg + "multiwords keyword 4",
508
- strip_indent(
509
- <<-EOB
510
- keyword (select)
511
- space ( )
512
- comment (/*group by*/)
513
- EOB
514
- ),
515
- _format( @parser.parse(strip_indent(
516
- <<-EOB
517
- select /*group by*/
518
- EOB
519
- )))
520
- )
521
-
276
+ sub_test_case "parser" do
277
+ test "basic case" do
278
+ assert_equal(
279
+ strip_indent(
280
+ <<-EOB
281
+ keyword (select)
282
+ space ( )
283
+ name (a)
284
+ space ( )
285
+ keyword (from)
286
+ space ( )
287
+ name (b)
288
+ symbol (;)
289
+ EOB
290
+ ),
291
+ _format( @parser.parse( strip_indent(
292
+ <<-EOB
293
+ select a from b;
294
+ EOB
295
+ )))
296
+ )
297
+ end
298
+
299
+ test "double-quoted schema and table" do
300
+ assert_equal(
301
+ strip_indent(
302
+ <<-EOB
303
+ name ("admin"."test")
304
+ EOB
305
+ ),
306
+ _format( @parser.parse( strip_indent(
307
+ <<-EOB
308
+ "admin"."test"
309
+ EOB
310
+ )))
311
+ )
312
+ end
313
+
314
+ test "name with dot" do
315
+ assert_equal(
316
+ strip_indent(
317
+ <<-EOB
318
+ name ("admin"."test")
319
+ EOB
320
+ ),
321
+ _format( @parser.parse( strip_indent(
322
+ <<-EOB
323
+ "admin"."test"
324
+ EOB
325
+ )))
326
+ )
327
+ end
328
+
329
+ test "minus + non-number" do
330
+ assert_equal(
331
+ strip_indent(
332
+ <<-EOB
333
+ symbol (-)
334
+ name (a)
335
+ EOB
336
+ ),
337
+ _format( @parser.parse( strip_indent(
338
+ <<-EOB
339
+ -a
340
+ EOB
341
+ )))
342
+ )
343
+ end
344
+
345
+ test "single comment" do
346
+ assert_equal(
347
+ strip_indent(
348
+ <<-EOB
349
+ keyword (select)
350
+ space (\n)
351
+ comment (-- x)
352
+ name (a)
353
+ EOB
354
+ ),
355
+ _format( @parser.parse(strip_indent(
356
+ <<-EOB
357
+ select
358
+ -- x
359
+ a
360
+ EOB
361
+ )))
362
+ )
363
+ end
364
+
365
+ test "parenthesis in single quote" do
366
+ assert_equal(
367
+ strip_indent(
368
+ <<-EOB
369
+ value ('()')
370
+ EOB
371
+ ),
372
+ _format( @parser.parse(strip_indent(
373
+ <<-EOB
374
+ '()'
375
+ EOB
376
+ )))
377
+ )
378
+ end
379
+
380
+ test "parenthesis in double quote" do
381
+ assert_equal(
382
+ strip_indent(
383
+ <<-EOB
384
+ name ("()")
385
+ EOB
386
+ ),
387
+ _format( @parser.parse(strip_indent(
388
+ <<-EOB
389
+ "()"
390
+ EOB
391
+ )))
392
+ )
393
+ end
394
+
395
+ test "multiple line comment: 1" do
396
+ assert_equal(
397
+ strip_indent(
398
+ <<-EOB
399
+ name (aa)
400
+ comment (/*bb*/)
401
+ name (cc)
402
+ EOB
403
+ ),
404
+ _format( @parser.parse(strip_indent(
405
+ <<-EOB
406
+ aa/*bb*/cc
407
+ EOB
408
+ )))
409
+ )
410
+ end
411
+
412
+ test "multiple line comment: 2" do
413
+ assert_equal(
414
+ strip_indent(
415
+ <<-EOB
416
+ name (aa)
417
+ comment (/*b
418
+ b*/)
419
+ name (cc)
420
+ EOB
421
+ ),
422
+ _format( @parser.parse(strip_indent(
423
+ <<-EOB
424
+ aa/*b
425
+ b*/cc
426
+ EOB
427
+ )))
428
+ )
429
+ end
430
+
431
+ test "invalid paired double quote" do
432
+ assert_equal(
433
+ strip_indent(
434
+ <<-EOB
435
+ name (aa)
436
+ name ("bb)
437
+ EOB
438
+ ),
439
+ _format( @parser.parse(strip_indent(
440
+ <<-EOB
441
+ aa"bb
442
+ EOB
443
+ )))
444
+ )
445
+ end
446
+
447
+ test "multiwords keyword" do
448
+ assert_equal(
449
+ strip_indent(
450
+ <<-EOB
451
+ keyword (group by)
452
+ EOB
453
+ ),
454
+ _format( @parser.parse(strip_indent(
455
+ <<-EOB
456
+ group by
457
+ EOB
458
+ )))
459
+ )
460
+ end
461
+
462
+ test "multiwords keyword 2" do
463
+ assert_equal(
464
+ strip_indent(
465
+ <<-EOB
466
+ name (a)
467
+ space ( )
468
+ keyword (group by)
469
+ space ( )
470
+ name (B)
471
+ EOB
472
+ ),
473
+ _format( @parser.parse(strip_indent(
474
+ <<-EOB
475
+ a group by B
476
+ EOB
477
+ )))
478
+ )
479
+ end
480
+
481
+ test "multiwords keyword 3" do
482
+ assert_equal(
483
+ strip_indent(
484
+ <<-EOB
485
+ keyword (select)
486
+ space ( )
487
+ value ('group by')
488
+ EOB
489
+ ),
490
+ _format( @parser.parse(strip_indent(
491
+ <<-EOB
492
+ select 'group by'
493
+ EOB
494
+ )))
495
+ )
496
+ end
497
+
498
+ test "multiwords keyword 4" do
499
+ assert_equal(
500
+ strip_indent(
501
+ <<-EOB
502
+ keyword (select)
503
+ space ( )
504
+ comment (/*group by*/)
505
+ EOB
506
+ ),
507
+ _format( @parser.parse(strip_indent(
508
+ <<-EOB
509
+ select /*group by*/
510
+ EOB
511
+ )))
512
+ )
513
+ end
522
514
  end
523
515
  end