PotatoSalad-rak 0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+
2
+ class Rak
3
+ VERSION = "0.9"
4
+ end
@@ -0,0 +1,50 @@
1
+
2
+
3
+ require File.dirname(__FILE__) + "/spec_helpers"
4
+
5
+ describe "Rak", "help and errors" do
6
+ before(:all) do
7
+ ENV['RAK_TEST'] = "true"
8
+ end
9
+ after(:all) do
10
+ ENV['RAK_TEST'] = "false"
11
+ end
12
+
13
+ it "--version prints version information" do
14
+ strip_ansi(%x{rak --version}).should == t=<<END
15
+ rak 0.9
16
+
17
+ Copyright 2008 Daniel Lucraft, all rights reserved.
18
+ Based on the perl tool 'ack' by Andy Lester.
19
+
20
+ This program is free software; you can redistribute it and/or modify it
21
+ under the same terms as Ruby.
22
+ END
23
+ end
24
+
25
+ it "prints unknown type errors" do
26
+ %x{rak Virg --type=pyth}.should == t=<<END
27
+ rak: Unknown --type "pyth"
28
+ rak: See rak --help types
29
+ END
30
+ end
31
+
32
+ it "--help prints help information" do
33
+ %x{rak Virg --help}.split("\n")[0].should == "Usage: rak [OPTION]... PATTERN [FILES]"
34
+ end
35
+
36
+ it "--help types prints type information" do
37
+ %x{rak --help types}.split("\n")[2].should == "The following is the list of filetypes supported by rak. You can"
38
+ end
39
+
40
+ it "no options or patterns prints the usage info" do
41
+ %x{rak}.split("\n")[0].should == "Usage: rak [OPTION]... PATTERN [FILES]"
42
+ end
43
+
44
+ it "prints a nice message for unknown options" do
45
+ t=<<END
46
+ rak: see rak --help for usage.
47
+ END
48
+ %x{rak foo --asfdasfd}.include?(t).should be_true
49
+ end
50
+ end
@@ -0,0 +1,529 @@
1
+
2
+ require 'fileutils'
3
+
4
+ require File.dirname(__FILE__) + "/spec_helpers"
5
+
6
+ describe "Rak", "with no options" do
7
+ before(:all) do
8
+ ENV['RAK_TEST'] = "true"
9
+ end
10
+ before(:each)do
11
+ FileUtils.cd(HERE+"/example/")
12
+ end
13
+ after(:all) do
14
+ ENV['RAK_TEST'] = "false"
15
+ end
16
+ it "prints all matches from files in the current directory" do
17
+ asterize_ansi(%x{rak Cap.ic}).should == t=<<END
18
+ *foo.rb*
19
+ 3|foo foo foo *Capric*a foo foo foo
20
+ 4|foo *Capsic*um foo foo foo foo foo
21
+
22
+ END
23
+ end
24
+
25
+ it "prints all matches correctly" do
26
+ strip_ansi(%x{rak foo}).should == t=<<END
27
+ foo.rb
28
+ 3|foo foo foo Caprica foo foo foo
29
+ 4|foo Capsicum foo foo foo foo foo
30
+ 6|foo foo foo foo foo Pikon foo foo
31
+ 8|foo Pikon foo foo foo foo foo foo
32
+ 10|foo foo Six foo foo foo Six foo
33
+ 11|foo foo foo foo Six foo foo foo
34
+ 13|foo foo foo Gemenon foo foo foo
35
+
36
+ END
37
+ end
38
+
39
+ it "prints all matches from files in subdirectories" do
40
+ asterize_ansi(%x{rak Pikon}).should == t=<<END
41
+ *dir1/bar.rb*
42
+ 2|bar bar bar bar *Pikon* bar
43
+ 9|bar bar *Pikon* bar bar bar
44
+
45
+ *foo.rb*
46
+ 6|foo foo foo foo foo *Pikon* foo foo
47
+ 8|foo *Pikon* foo foo foo foo foo foo
48
+
49
+ END
50
+ end
51
+
52
+ it "prints multiple matches in a line" do
53
+ asterize_ansi(%x{rak Six}).should == t=<<END
54
+ *foo.rb*
55
+ 10|foo foo *Six* foo foo foo *Six* foo
56
+ 11|foo foo foo foo *Six* foo foo foo
57
+
58
+ END
59
+ end
60
+
61
+ it "skips VC dirs" do
62
+ %x{rak Aerelon}.should == ""
63
+ end
64
+
65
+ it "does not follow symlinks" do
66
+ %x{rak Sagitarron}.should == ""
67
+ end
68
+
69
+ it "changes defaults when redirected" do
70
+ ENV['RAK_TEST'] = "false"
71
+ asterize_ansi(%x{rak Six | cat}).should == t=<<END
72
+ foo.rb 10|foo foo Six foo foo foo Six foo
73
+ foo.rb 11|foo foo foo foo Six foo foo foo
74
+ END
75
+ ENV['RAK_TEST'] = "true"
76
+ end
77
+
78
+ it "searches shebangs for valid inputs" do
79
+ asterize_ansi(%x{rak Aquaria}).should == t=<<END
80
+ *shebang*
81
+ 3|goo goo goo *Aquaria* goo goo
82
+
83
+ END
84
+ end
85
+
86
+ it "recognizes Makefiles and Rakefiles" do
87
+ asterize_ansi(%x{rak Canceron}).should == t=<<END
88
+ *Rakefile*
89
+ 1|rakefile rakefile *Canceron* rakefile
90
+
91
+ END
92
+ end
93
+ end
94
+
95
+ describe "Rak", "with FILE or STDIN inputs" do
96
+ before(:all) do
97
+ ENV['RAK_TEST'] = "true"
98
+ end
99
+ after(:all) do
100
+ ENV['RAK_TEST'] = "false"
101
+ end
102
+ it "should only search in given files or directories" do
103
+ asterize_ansi(%x{rak Pikon foo.rb}).should == t=<<END
104
+ 6|foo foo foo foo foo *Pikon* foo foo
105
+ 8|foo *Pikon* foo foo foo foo foo foo
106
+ END
107
+ strip_ansi(%x{rak Pikon dir1/}).should == t=<<END
108
+ dir1/bar.rb
109
+ 2|bar bar bar bar Pikon bar
110
+ 9|bar bar Pikon bar bar bar
111
+
112
+ END
113
+ end
114
+
115
+ it "should search in STDIN by default if no files are specified" do
116
+ asterize_ansi(%x{cat _darcs/baz.rb | rak Aere}).should == t=<<END
117
+ 2|baz baz baz *Aere*lon baz baz baz
118
+ END
119
+ end
120
+
121
+ it "only searches STDIN when piped to" do
122
+ asterize_ansi(%x{echo asdfCapasdf | rak Cap}).should == t=<<END
123
+ 1|asdf*Cap*asdf
124
+ END
125
+ end
126
+ end
127
+
128
+ describe "Rak", "options" do
129
+ before(:all) do
130
+ ENV['RAK_TEST'] = "true"
131
+ end
132
+ after(:all) do
133
+ ENV['RAK_TEST'] = "false"
134
+ end
135
+ it "prints only files with --files" do
136
+ t=<<END
137
+ Rakefile
138
+ quux.py
139
+ dir1/bar.rb
140
+ foo.rb
141
+ shebang
142
+ END
143
+ sort_lines(%x{rak -f}).should == sort_lines(t)
144
+ end
145
+
146
+ it "prints a maximum number of matches if --max-count=x is specified" do
147
+ strip_ansi(%x{rak Cap.ic -m 1}).should == t=<<END
148
+ foo.rb
149
+ 3|foo foo foo Caprica foo foo foo
150
+
151
+ END
152
+ end
153
+
154
+ it "prints the evaluated output for --output" do
155
+ strip_ansi(%x{rak Cap --output='$&'}).should == t=<<END
156
+ Cap
157
+ Cap
158
+ END
159
+ end
160
+
161
+
162
+ it "-c prints only the number of matches found per file" do
163
+ t=<<END
164
+ quux.py:0
165
+ dir1/bar.rb:2
166
+ foo.rb:2
167
+ shebang:0
168
+ Rakefile:0
169
+ END
170
+ sort_lines(strip_ansi(%x{rak Pik -c})).should == sort_lines(t)
171
+ end
172
+
173
+ it "-h suppresses filename and line number printing" do
174
+ asterize_ansi(%x{rak Pik -h}).should == t=<<END
175
+ bar bar bar bar *Pik*on bar
176
+ bar bar *Pik*on bar bar bar
177
+ foo foo foo foo foo *Pik*on foo foo
178
+ foo *Pik*on foo foo foo foo foo foo
179
+ END
180
+ end
181
+
182
+ it "ignores case with -i" do
183
+ strip_ansi(%x{rak six -i}).should == t=<<END
184
+ foo.rb
185
+ 10|foo foo Six foo foo foo Six foo
186
+ 11|foo foo foo foo Six foo foo foo
187
+
188
+ END
189
+ end
190
+
191
+ it "inverts the match with -v" do
192
+ t1=<<END
193
+ quux.py
194
+ 1|quux quux quux quux Virgon quux quux
195
+ END
196
+ t12=<<END
197
+ dir1/bar.rb
198
+ 1|
199
+ 2|bar bar bar bar Pikon bar
200
+ 3|
201
+ 4|
202
+ 5|
203
+ 6|
204
+ 7|
205
+ 8|
206
+ 9|bar bar Pikon bar bar bar
207
+ END
208
+ t2=<<END
209
+ foo.rb
210
+ 1|
211
+ 2|
212
+ 5|
213
+ 7|
214
+ 9|
215
+ 12|
216
+ END
217
+ t3=<<END
218
+ shebang
219
+ 1|#!/usr/bin/env ruby
220
+ 2|
221
+ 3|goo goo goo Aquaria goo goo
222
+ END
223
+ t4=<<END
224
+ Rakefile
225
+ 1|rakefile rakefile Canceron rakefile
226
+ END
227
+ r = strip_ansi(%x{rak foo -v})
228
+ r.include?(t1).should be_true
229
+ r.include?(t12).should be_true
230
+ r.include?(t2).should be_true
231
+ r.include?(t3).should be_true
232
+ r.include?(t4).should be_true
233
+ r.split("\n").length.should == 26
234
+ end
235
+
236
+ it "doesn't descend into subdirs with -n" do
237
+ strip_ansi(%x{rak Pikon -n}).should == t=<<END
238
+ foo.rb
239
+ 6|foo foo foo foo foo Pikon foo foo
240
+ 8|foo Pikon foo foo foo foo foo foo
241
+
242
+ END
243
+ end
244
+
245
+ it "quotes meta-characters with -Q" do
246
+ strip_ansi(%x{rak Cap. -Q}).should == ""
247
+ end
248
+
249
+ it "prints only the matching portion with -o" do
250
+ strip_ansi(%x{rak Cap -o}).should == t=<<END
251
+ Cap
252
+ Cap
253
+ END
254
+ end
255
+
256
+ it "matches whole words only with -w" do
257
+ strip_ansi(%x{rak Cap -w}).should == ""
258
+ end
259
+
260
+ it "prints the file on each line with --nogroup" do
261
+ asterize_ansi(%x{rak Cap --nogroup}).should == t=<<END
262
+ *foo.rb* 3|foo foo foo *Cap*rica foo foo foo
263
+ *foo.rb* 4|foo *Cap*sicum foo foo foo foo foo
264
+ END
265
+ end
266
+
267
+ it "-l means only print filenames with matches" do
268
+ asterize_ansi(%x{rak Caprica -l}).should == t=<<END
269
+ foo.rb
270
+ END
271
+ end
272
+
273
+ it "-L means only print filenames without matches" do
274
+ t=<<END
275
+ quux.py
276
+ dir1/bar.rb
277
+ shebang
278
+ Rakefile
279
+ END
280
+ sort_lines(asterize_ansi(%x{rak Caprica -L})).should == sort_lines(t)
281
+ end
282
+
283
+ it "--passthru means print all lines whether matching or not" do
284
+ t1=<<END
285
+ quux quux quux quux Virgon quux quux
286
+ END
287
+
288
+ t2=<<END
289
+ *foo.rb*
290
+ 3|foo foo foo *Caprica* foo foo foo
291
+ foo Capsicum foo foo foo foo foo
292
+
293
+ foo foo foo foo foo Pikon foo foo
294
+
295
+ foo Pikon foo foo foo foo foo foo
296
+
297
+ foo foo Six foo foo foo Six foo
298
+ foo foo foo foo Six foo foo foo
299
+
300
+ foo foo foo Gemenon foo foo foo
301
+ END
302
+ t3=<<END
303
+ #!/usr/bin/env ruby
304
+
305
+ goo goo goo Aquaria goo goo
306
+ END
307
+ r = asterize_ansi(%x{rak Caprica --passthru -n})
308
+ r.include?(t1).should be_true
309
+ r.include?(t2).should be_true
310
+ r.include?(t3).should be_true
311
+ r.split("\n").length.should < (t1+t2+t3).split("\n").length+5
312
+ end
313
+
314
+ it "--nocolour means do not colourize the output" do
315
+ asterize_ansi(%x{rak Cap --nocolour}).should == t=<<END
316
+ foo.rb
317
+ 3|foo foo foo Caprica foo foo foo
318
+ 4|foo Capsicum foo foo foo foo foo
319
+
320
+ END
321
+ end
322
+
323
+ it "-a means to search every file" do
324
+ asterize_ansi(%x{rak Libris -a}).should == t=<<END
325
+ *qux*
326
+ 1|qux qux qux *Libris* qux qux qux
327
+
328
+ END
329
+
330
+ end
331
+
332
+ it "--ruby means only ruby files" do
333
+ asterize_ansi(%x{rak Virgon --ruby}).should == ""
334
+ end
335
+
336
+ it "--python means only python files" do
337
+ asterize_ansi(%x{rak Cap --python}).should == ""
338
+ end
339
+
340
+ it "--noruby means exclude ruby files" do
341
+ asterize_ansi(%x{rak Cap --noruby}).should == ""
342
+ end
343
+
344
+ it "--type=ruby means only ruby files" do
345
+ asterize_ansi(%x{rak Virgon --type=ruby}).should == ""
346
+ end
347
+
348
+ it "--type=python means only python files" do
349
+ asterize_ansi(%x{rak Cap --type=python}).should == ""
350
+ end
351
+
352
+ it "--type=noruby means exclude ruby files" do
353
+ asterize_ansi(%x{rak Cap --type=noruby}).should == ""
354
+ end
355
+
356
+ it "--sort-files" do
357
+ %x{rak -f --sort-files}.should == t=<<END
358
+ dir1/bar.rb
359
+ foo.rb
360
+ quux.py
361
+ Rakefile
362
+ shebang
363
+ END
364
+ end
365
+
366
+ it "--follow means follow symlinks" do
367
+ strip_ansi(%x{rak Sagitarron --follow}).should == t=<<END
368
+ corge.rb
369
+ 1|corge corge corge Sagitarron corge
370
+
371
+ ln_dir/corge.rb
372
+ 1|corge corge corge Sagitarron corge
373
+
374
+ END
375
+ end
376
+
377
+ it "-A NUM means show NUM lines after" do
378
+ strip_ansi(%x{rak Caps -A 2}).should == t=<<END
379
+ foo.rb
380
+ 4|foo Capsicum foo foo foo foo foo
381
+ 5|
382
+ 6|foo foo foo foo foo Pikon foo foo
383
+
384
+ END
385
+ end
386
+
387
+ it "-A should work when there are matches close together" do
388
+ strip_ansi(%x{rak foo -A 2}).should == t=<<END
389
+ foo.rb
390
+ 3|foo foo foo Caprica foo foo foo
391
+ 4|foo Capsicum foo foo foo foo foo
392
+ 5|
393
+ 6|foo foo foo foo foo Pikon foo foo
394
+ 7|
395
+ 8|foo Pikon foo foo foo foo foo foo
396
+ 9|
397
+ 10|foo foo Six foo foo foo Six foo
398
+ 11|foo foo foo foo Six foo foo foo
399
+ 12|
400
+ 13|foo foo foo Gemenon foo foo foo
401
+
402
+ END
403
+ end
404
+
405
+ it "-B NUM means show NUM lines before" do
406
+ strip_ansi(%x{rak Caps -B 2}).should == t=<<END
407
+ foo.rb
408
+ 2|
409
+ 3|foo foo foo Caprica foo foo foo
410
+ 4|foo Capsicum foo foo foo foo foo
411
+
412
+ END
413
+ end
414
+
415
+ it "-C means show 2 lines before and after" do
416
+ strip_ansi(%x{rak Caps -C}).should == t=<<END
417
+ foo.rb
418
+ 2|
419
+ 3|foo foo foo Caprica foo foo foo
420
+ 4|foo Capsicum foo foo foo foo foo
421
+ 5|
422
+ 6|foo foo foo foo foo Pikon foo foo
423
+
424
+ END
425
+ end
426
+
427
+ it "-C 1 means show 1 lines before and after" do
428
+ strip_ansi(%x{rak Caps -C 1}).should == t=<<END
429
+ foo.rb
430
+ 3|foo foo foo Caprica foo foo foo
431
+ 4|foo Capsicum foo foo foo foo foo
432
+ 5|
433
+
434
+ END
435
+ end
436
+
437
+ it "-C works correctly for nearby results" do
438
+ strip_ansi(%x{rak Pik -g foo -C}).should == t=<<END
439
+ foo.rb
440
+ 4|foo Capsicum foo foo foo foo foo
441
+ 5|
442
+ 6|foo foo foo foo foo Pikon foo foo
443
+ 7|
444
+ 8|foo Pikon foo foo foo foo foo foo
445
+ 9|
446
+ 10|foo foo Six foo foo foo Six foo
447
+
448
+ END
449
+ end
450
+ it "-g REGEX only searches in files matching REGEX" do
451
+ asterize_ansi(%x{rak Pikon -g f.o}).should == t=<<END
452
+ *foo.rb*
453
+ 6|foo foo foo foo foo *Pikon* foo foo
454
+ 8|foo *Pikon* foo foo foo foo foo foo
455
+
456
+ END
457
+ end
458
+
459
+ it "-x means match only whole lines" do
460
+ asterize_ansi(%x{rak Cap -x}).should == ""
461
+ asterize_ansi(%x{rak "(foo )+Cap\\w+( foo)+" -x}).should == t=<<END
462
+ *foo.rb*
463
+ 3|*foo foo foo Caprica foo foo foo*
464
+ 4|*foo Capsicum foo foo foo foo foo*
465
+
466
+ END
467
+ end
468
+
469
+ it "-s means match only at the start of a line" do
470
+ asterize_ansi(%x{rak -s "foo Cap"}).should == t=<<END
471
+ *foo.rb*
472
+ 4|*foo Cap*sicum foo foo foo foo foo
473
+
474
+ END
475
+ end
476
+
477
+ it "-e means match only at the end of a line" do
478
+ asterize_ansi(%x{rak -e "kon foo foo"}).should == t=<<END
479
+ *foo.rb*
480
+ 6|foo foo foo foo foo Pi*kon foo foo*
481
+
482
+ END
483
+ end
484
+
485
+ it "should not recurse down '..' when used with . " do
486
+ FileUtils.cd(HERE+"/example/dir1/")
487
+ asterize_ansi(%x{rak foo .}).should == t=<<END
488
+ END
489
+ end
490
+ end
491
+
492
+ describe "Rak", "with combinations of options" do
493
+ before(:all) do
494
+ ENV['RAK_TEST'] = "true"
495
+ end
496
+ before(:each)do
497
+ FileUtils.cd(HERE+"/example/")
498
+ end
499
+ after(:all) do
500
+ ENV['RAK_TEST'] = "false"
501
+ end
502
+
503
+ it "should process -c -v " do
504
+ t1=<<END
505
+ quux.py:1
506
+ dir1/bar.rb:7
507
+ foo.rb:11
508
+ shebang:3
509
+ Rakefile:1
510
+ END
511
+ sort_lines(strip_ansi(%x{rak Pikon -c -v})).should == sort_lines(t1)
512
+ end
513
+
514
+ it "-h and redirection" do
515
+ ENV['RAK_TEST'] = "false"
516
+ %x{rak Pik -h | cat}.should == t=<<END
517
+ bar bar bar bar Pikon bar
518
+ bar bar Pikon bar bar bar
519
+ foo foo foo foo foo Pikon foo foo
520
+ foo Pikon foo foo foo foo foo foo
521
+ END
522
+ ENV['RAK_TEST'] = "true"
523
+ end
524
+ end
525
+
526
+
527
+
528
+
529
+