anbt-sql-formatter 0.0.1

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.
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "helper")
4
+
5
+ require "anbt-sql-formatter/helper"
6
+ require "anbt-sql-formatter/exception"
7
+
8
+
9
+ class TestAnbtSqlHelper < Test::Unit::TestCase
10
+ def setup
11
+ end
12
+
13
+ # Java版では List を使っている
14
+ def test_array_get
15
+ arr = %w(a b c) # index = 0, 1, 2
16
+ assert_raise(IndexOutOfBoundsException, "値が範囲外なのに例外が発生しない"){
17
+ arr.get(3)
18
+ }
19
+ assert_raise(IndexOutOfBoundsException, "値が範囲外なのに例外が発生しない"){
20
+ arr.get(-1)
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,370 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "helper")
4
+
5
+ require "anbt-sql-formatter/rule"
6
+ require "anbt-sql-formatter/parser"
7
+
8
+
9
+ class AnbtSql
10
+ class Parser
11
+ attr_accessor :before, :pos
12
+ end
13
+ end
14
+
15
+
16
+ class TestAnbtSqlParser < Test::Unit::TestCase
17
+ def setup
18
+ @parser = AnbtSql::Parser.new(AnbtSql::Rule.new)
19
+ end
20
+
21
+
22
+ def test_space?
23
+ msg = "space? - "
24
+ assert_equals( msg, true, @parser.space?(" ") )
25
+ assert_equals( msg, true, @parser.space?("\t") )
26
+ assert_equals( msg, true, @parser.space?("\r") )
27
+ assert_equals( msg, true, @parser.space?("\n") )
28
+ end
29
+
30
+
31
+ def test_letter?
32
+ msg = "letter? - "
33
+ assert_equals( msg, false, @parser.letter?("'") )
34
+ assert_equals( msg, false, @parser.letter?('"') )
35
+ end
36
+
37
+
38
+ def test_symbol?
39
+ msg = "symbol?"
40
+ assert_equals( msg, true, @parser.symbol?('"') )
41
+ assert_equals( msg, true, @parser.symbol?("'") )
42
+ end
43
+
44
+
45
+ def test_digit?
46
+ msg = "digit?"
47
+ assert_equals( msg, true, @parser.digit?("0") )
48
+ assert_equals( msg, true, @parser.digit?("5") )
49
+ assert_equals( msg, true, @parser.digit?("9") )
50
+ assert_equals( msg, false, @parser.digit?("a") )
51
+ end
52
+
53
+
54
+ ##
55
+ # コメントと文字列のテストは coarse tokenize で行う。
56
+ def test_next_sql_token_pos
57
+ msg = "token pos"
58
+
59
+ @parser.before = " "
60
+ @parser.pos = 0
61
+ token = @parser.next_sql_token
62
+ assert_equals(msg,
63
+ 0, token.pos)
64
+
65
+ @parser.before = "a b"
66
+ @parser.pos = 1
67
+ token = @parser.next_sql_token
68
+ assert_equals(msg,
69
+ 1, token.pos)
70
+ end
71
+
72
+
73
+ ##
74
+ # コメントと文字列のテストは coarse tokenize で行う。
75
+ def test_next_sql_token
76
+ msg = "token type recognition"
77
+
78
+ ########
79
+ @parser.before = " "
80
+ @parser.pos = 0
81
+ assert_equals( msg + "space",
82
+ (<<EOB
83
+ <space> </>
84
+ EOB
85
+ ).chomp,
86
+ Helper.format_tokens([ @parser.next_sql_token ])
87
+ )
88
+
89
+ ########
90
+ @parser.before = "a b"
91
+ @parser.pos = 1
92
+ assert_equals( msg + "space",
93
+ (<<EOB
94
+ <space> </>
95
+ EOB
96
+ ).chomp,
97
+ Helper.format_tokens([ @parser.next_sql_token ])
98
+ )
99
+
100
+ ########
101
+ @parser.before = ","
102
+ @parser.pos = 0
103
+ assert_equals( msg + "symbol",
104
+ (<<EOB
105
+ <symbol>,</>
106
+ EOB
107
+ ).chomp,
108
+ Helper.format_tokens([ @parser.next_sql_token ])
109
+ )
110
+
111
+ ########
112
+ @parser.before = "select"
113
+ @parser.pos = 0
114
+ assert_equals( msg + "keyword: select",
115
+ (<<EOB
116
+ <keyword>select</>
117
+ EOB
118
+ ).chomp,
119
+ Helper.format_tokens([ @parser.next_sql_token ])
120
+ )
121
+
122
+ ########
123
+ @parser.before = "case"
124
+ @parser.pos = 0
125
+ assert_equals( msg + "keyword: case",
126
+ (<<EOB
127
+ <keyword>case</>
128
+ EOB
129
+ ).chomp,
130
+ Helper.format_tokens([ @parser.next_sql_token ])
131
+ )
132
+
133
+ ########
134
+ @parser.before = "xxx123"
135
+ @parser.pos = 0
136
+ assert_equals( msg + "name",
137
+ (<<EOB
138
+ <name>xxx123</>
139
+ EOB
140
+ ).chomp,
141
+ Helper.format_tokens([ @parser.next_sql_token ])
142
+ )
143
+
144
+ ########
145
+ @parser.before = '123'
146
+ @parser.pos = 0
147
+ assert_equals( msg + "value",
148
+ (<<EOB
149
+ <value>123</>
150
+ EOB
151
+ ).chomp,
152
+ Helper.format_tokens([ @parser.next_sql_token ])
153
+ )
154
+
155
+ ########
156
+ @parser.before = '1.23'
157
+ @parser.pos = 0
158
+ assert_equals( msg + "value",
159
+ (<<EOB
160
+ <value>1.23</>
161
+ EOB
162
+ ).chomp,
163
+ Helper.format_tokens([ @parser.next_sql_token ])
164
+ )
165
+
166
+ ########
167
+ @parser.before = '-1.23 '
168
+ @parser.pos = 0
169
+ assert_equals( msg + "value",
170
+ (<<EOB
171
+ <value>-1.23</>
172
+ EOB
173
+ ).chomp,
174
+ Helper.format_tokens([ @parser.next_sql_token ])
175
+ )
176
+
177
+ ########
178
+ @parser.before = '1.23e45 '
179
+ @parser.pos = 0
180
+ assert_equals( msg + "value",
181
+ (<<EOB
182
+ <value>1.23e45</>
183
+ EOB
184
+ ).chomp,
185
+ Helper.format_tokens([ @parser.next_sql_token ])
186
+ )
187
+
188
+ ########
189
+ @parser.before = '1.23e-45 '
190
+ @parser.pos = 0
191
+ assert_equals( msg + "value",
192
+ (<<EOB
193
+ <value>1.23e-45</>
194
+ EOB
195
+ ).chomp,
196
+ Helper.format_tokens([ @parser.next_sql_token ])
197
+ )
198
+
199
+ ########
200
+ @parser.before = '-1.23e-45 '
201
+ @parser.pos = 0
202
+ assert_equals( msg + "value",
203
+ (<<EOB
204
+ <value>-1.23e-45</>
205
+ EOB
206
+ ).chomp,
207
+ Helper.format_tokens([ @parser.next_sql_token ])
208
+ )
209
+
210
+ ########
211
+ @parser.before = '0x01 '
212
+ @parser.pos = 0
213
+ assert_equals( msg + "value",
214
+ (<<EOB
215
+ <value>0x01</>
216
+ EOB
217
+ ).chomp,
218
+ Helper.format_tokens([ @parser.next_sql_token ])
219
+ )
220
+
221
+ ########
222
+ @parser.before = '1x'
223
+ @parser.pos = 0
224
+ assert_equals( msg + "value",
225
+ (<<EOB
226
+ <value>1</>
227
+ EOB
228
+ ).chomp,
229
+ Helper.format_tokens([ @parser.next_sql_token ])
230
+ )
231
+ end
232
+
233
+
234
+ def test_parser
235
+ msg = "parser basic case - "
236
+
237
+ ########
238
+ assert_equals( msg + "", (<<EOB
239
+ <keyword>select</>
240
+ <space> </>
241
+ <name>a</>
242
+ <space> </>
243
+ <keyword>from</>
244
+ <space> </>
245
+ <name>b</>
246
+ <symbol>;</>
247
+ EOB
248
+ ).strip, Helper.format_tokens( @parser.parse( (<<EOB
249
+ select a from b;
250
+ EOB
251
+ ).chop
252
+ ))
253
+ )
254
+
255
+ ########
256
+ assert_equals( msg + "minus + non-number", (<<EOB
257
+ <symbol>-</>
258
+ <name>a</>
259
+ EOB
260
+ ).strip, Helper.format_tokens( @parser.parse( (<<EOB
261
+ -a
262
+ EOB
263
+ ).chop
264
+ ))
265
+ )
266
+
267
+ ########
268
+ assert_equals( msg + "single comment", (<<EOB
269
+ <keyword>select</>
270
+ <space>\n</>
271
+ <comment>-- x</>
272
+ <name>a</>
273
+ <space>\n</>
274
+ EOB
275
+ ).strip, Helper.format_tokens( @parser.parse(<<EOB
276
+ select
277
+ -- x
278
+ a
279
+ EOB
280
+ ))
281
+ )
282
+
283
+ ########
284
+ assert_equals( msg + "parenthesis in single quote", (<<EOB
285
+ <value>'()'</>
286
+ EOB
287
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
288
+ '()'
289
+ EOB
290
+ ).strip
291
+ ))
292
+ )
293
+
294
+ ########
295
+ assert_equals( msg + "parenthesis in double quote", (<<EOB
296
+ <name>"()"</>
297
+ EOB
298
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
299
+ "()"
300
+ EOB
301
+ ).strip
302
+ ))
303
+ )
304
+
305
+ ########
306
+ assert_equals( msg + "multiple line comment: 1", (<<EOB
307
+ <name>aa</>
308
+ <comment>/*bb*/</>
309
+ <name>cc</>
310
+ EOB
311
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
312
+ aa/*bb*/cc
313
+ EOB
314
+ ).strip
315
+ ))
316
+ )
317
+
318
+ ########
319
+ assert_equals( msg + "multiple line comment: 2", (<<EOB
320
+ <name>aa</>
321
+ <comment>/*b
322
+ b*/</>
323
+ <name>cc</>
324
+ EOB
325
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
326
+ aa/*b
327
+ b*/cc
328
+ EOB
329
+ ).strip
330
+ ))
331
+ )
332
+
333
+ ########
334
+ assert_equals( msg + "invalid paired double quote", (<<EOB
335
+ <name>aa</>
336
+ <name>"bb</>
337
+ EOB
338
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
339
+ aa"bb
340
+ EOB
341
+ ).strip
342
+ ))
343
+ )
344
+
345
+ ########
346
+ assert_equals( msg + "multiwords keyword", (<<EOB
347
+ <keyword>group by</>
348
+ EOB
349
+ ).strip, Helper.format_tokens( @parser.parse((<<EOB
350
+ group by
351
+ EOB
352
+ ).strip
353
+ ))
354
+ )
355
+
356
+ ########
357
+ assert_equals( msg + "multiwords keyword 2",
358
+ (<<EOB
359
+ <name>a</>
360
+ <space> </>
361
+ <keyword>group by</>
362
+ <space> </>
363
+ <name>B</>
364
+ EOB
365
+ ).strip,
366
+ Helper.format_tokens( @parser.parse("a group by B") )
367
+ )
368
+
369
+ end
370
+ end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "helper")
4
+
5
+ require "anbt-sql-formatter/helper"
6
+ require "anbt-sql-formatter/rule"
7
+
8
+
9
+ class TestAnbtSqlRule < Test::Unit::TestCase
10
+ def setup
11
+ @rule = AnbtSql::Rule.new
12
+ end
13
+
14
+ def test_function?
15
+ msg = "function? - "
16
+
17
+ func_name = "TEST_FUNCTION"
18
+ @rule.function_names << func_name
19
+ assert_equals( msg,
20
+ true,
21
+ @rule.function?(func_name)
22
+ )
23
+
24
+ @rule.function_names.delete(func_name)
25
+ assert_equals( msg,
26
+ false,
27
+ @rule.function?(func_name)
28
+ )
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ require "fileutils"
2
+
3
+ installed_files = "InstalledFiles"
4
+
5
+ if not File.exist? installed_files
6
+ STDERR.puts "'InstalledFiles' not found."
7
+ exit 1
8
+ end
9
+
10
+ open( installed_files ){|f|
11
+ while path = f.gets
12
+ path.chomp!
13
+
14
+ if File.exist? path
15
+ FileUtils.rm path
16
+ end
17
+ end
18
+ }
19
+
20
+ FileUtils.mv installed_files, installed_files + ".old"
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: anbt-sql-formatter
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - sonota
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-09-17 00:00:00 +09:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: A tool for SQL formatting written in Ruby. Ruby port of Blanco SQL Formatter.
18
+ email:
19
+ - yosiot8753@gmail.com
20
+ executables:
21
+ - anbt-sql-formatter
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - Rakefile
30
+ - anbt-sql-formatter.gemspec
31
+ - bin/anbt-sql-formatter
32
+ - lgpl-2.1.txt
33
+ - lib/anbt-sql-formatter/coarse-tokenizer.rb
34
+ - lib/anbt-sql-formatter/constants.rb
35
+ - lib/anbt-sql-formatter/exception.rb
36
+ - lib/anbt-sql-formatter/formatter.rb
37
+ - lib/anbt-sql-formatter/helper.rb
38
+ - lib/anbt-sql-formatter/parser.rb
39
+ - lib/anbt-sql-formatter/rule.rb
40
+ - lib/anbt-sql-formatter/token.rb
41
+ - lib/anbt-sql-formatter/version.rb
42
+ - misc/anbt-sql-formatter-customize-example
43
+ - misc/anbt-sql-formatter-for-sakura-editor.js
44
+ - readme.ja.txt
45
+ - readme.txt
46
+ - sample.sql
47
+ - setup.rb
48
+ - test/helper.rb
49
+ - test/test_coarse-tokenizer.rb
50
+ - test/test_formatter.rb
51
+ - test/test_helper.rb
52
+ - test/test_parser.rb
53
+ - test/test_rule.rb
54
+ - uninstall.rb
55
+ has_rdoc: true
56
+ homepage: ""
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project: anbt-sql-formatter
79
+ rubygems_version: 1.5.2
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: A tool for SQL formatting written in Ruby.
83
+ test_files: []
84
+