Update to RDoc 2.1.0 r112
[rbx.git] / mspec / spec / utils / options_spec.rb
blob417941fe3cf03dcd7564bdd7451eeddeaadf21a4
1 require File.dirname(__FILE__) + '/../spec_helper'
2 require 'mspec/utils/options'
3 require 'mspec/version'
4 require 'mspec/runner/mspec'
5 require 'mspec/runner/formatters'
7 describe MSpecOptions, "#parser" do
8   it "returns an OptionParser instance" do
9     MSpecOptions.new({}, "spec").parser.should be_kind_of(OptionParser)
10   end
11 end
13 describe "The -B, --config FILE option" do
14   before :each do
15     @options, @config = new_option
16   end
18   it "is enabled with #add_config { }" do
19     @options.should_receive(:on).with("-B", "--config FILE",
20         String, an_instance_of(String))
21     @options.add_config {}
22   end
24   it "calls the passed block" do
25     ["-B", "--config"].each do |opt|
26       ScratchPad.clear
28       @options.add_config { |x| ScratchPad.record x }
29       @options.parse [opt, "file"]
30       ScratchPad.recorded.should == "file"
31     end
32   end
33 end
35 describe "The -n, --name RUBY_NAME option" do
36   before :each do
37     @verbose, $VERBOSE = $VERBOSE, nil
38     @options, @config = new_option
39   end
41   after :each do
42     $VERBOSE = @verbose
43   end
45   it "is enabled with #add_name" do
46     @options.should_receive(:on).with("-n", "--name RUBY_NAME",
47         String, an_instance_of(String))
48     @options.add_name
49   end
51   it "sets RUBY_NAME when invoked" do
52     Object.should_receive(:const_set).with(:RUBY_NAME, "name").twice
53     @options.add_name
54     @options.parse ["-n", "name"]
55     @options.parse ["--name", "name"]
56   end
57 end
59 describe "The -t, --target TARGET option" do
60   before :each do
61     @options, @config = new_option
62     @options.add_targets
63   end
65   it "is enabled with #add_targets" do
66     @options.stub!(:on)
67     @options.should_receive(:on).with("-t", "--target TARGET",
68         String, an_instance_of(String))
69     @options.add_targets
70   end
72   it "sets the target to 'ruby' and flags to verbose with TARGET 'ruby'" do
73     ["-t", "--target"].each do |opt|
74       @options.parse [opt, "ruby"]
75       @config[:target].should == "ruby"
76       @config[:flags].should include("-v")
77     end
78   end
80   it "sets the target to 'ruby19' with TARGET 'r19' or 'ruby19'" do
81     ["-t", "--target"].each do |opt|
82       ["r19", "ruby19"].each do |t|
83         @options.parse [opt, t]
84         @config[:target].should == "ruby19"
85       end
86     end
87   end
89   it "sets the target to 'jruby' with TARGET 'j' or 'jruby'" do
90     ["-t", "--target"].each do |opt|
91       ["j", "jruby"].each do |t|
92         @options.parse [opt, t]
93         @config[:target].should == "jruby"
94       end
95     end
96   end
98   it "sets the target to 'shotgun/rubinius' with TARGET 'x' or 'rubinius'" do
99     ["-t", "--target"].each do |opt|
100       ["x", "rubinius"].each do |t|
101         @options.parse [opt, t]
102         @config[:target].should == "shotgun/rubinius"
103       end
104     end
105   end
107   it "set the target to 'rbx' with TARGET 'rbx'" do
108     ["-t", "--target"].each do |opt|
109       ["X", "rbx"].each do |t|
110         @options.parse [opt, t]
111         @config[:target].should == "rbx"
112       end
113     end
114   end
116   it "sets the target to TARGET" do
117     ["-t", "--target"].each do |opt|
118       @options.parse [opt, "whateva"]
119       @config[:target].should == "whateva"
120     end
121   end
124 describe "The -T, --target-opt OPT option" do
125   before :each do
126     @options, @config = new_option
127     @options.add_targets
128   end
130   it "is enabled with #add_targets" do
131     @options.stub!(:on)
132     @options.should_receive(:on).with("-T", "--target-opt OPT",
133         String, an_instance_of(String))
134     @options.add_targets
135   end
137   it "adds OPT to flags" do
138     ["-T", "--target-opt"].each do |opt|
139       @config[:flags].delete "--whateva"
140       @options.parse [opt, "--whateva"]
141       @config[:flags].should include("--whateva")
142     end
143   end
146 describe "The -I, --include DIR option" do
147   before :each do
148     @options, @config = new_option
149     @options.add_targets
150   end
152   it "is enabled with #add_targets" do
153     @options.stub!(:on)
154     @options.should_receive(:on).with("-I", "--include DIR",
155         String, an_instance_of(String))
156     @options.add_targets
157   end
159   it "add DIR to the includes list" do
160     ["-I", "--include"].each do |opt|
161       @config[:includes].delete "-Ipackage"
162       @options.parse [opt, "package"]
163       @config[:includes].should include("-Ipackage")
164     end
165   end
168 describe "The -r, --require LIBRARY option" do
169   before :each do
170     @options, @config = new_option
171     @options.add_targets
172   end
174   it "is enabled with #add_targets" do
175     @options.stub!(:on)
176     @options.should_receive(:on).with("-r", "--require LIBRARY",
177         String, an_instance_of(String))
178     @options.add_targets
179   end
181   it "adds LIBRARY to the requires list" do
182     ["-r", "--require"].each do |opt|
183       @config[:requires].delete "-rlibrick"
184       @options.parse [opt, "librick"]
185       @config[:requires].should include("-rlibrick")
186     end
187   end
190 describe "The -f, --format FORMAT option" do
191   before :each do
192     @options, @config = new_option
193     @options.add_formatters
194   end
196   it "is enabled with #add_formatters" do
197     @options.stub!(:on)
198     @options.should_receive(:on).with("-f", "--format FORMAT",
199         String, an_instance_of(String))
200     @options.add_formatters
201   end
203   it "sets the SpecdocFormatter with FORMAT 's' or 'specdoc'" do
204     ["-f", "--format"].each do |opt|
205       ["s", "specdoc"].each do |f|
206         @config[:formatter] = nil
207         @options.parse [opt, f]
208         @config[:formatter].should == SpecdocFormatter
209       end
210     end
211   end
213   it "sets the HtmlFormatter with FORMAT 'h' or 'html'" do
214     ["-f", "--format"].each do |opt|
215       ["h", "html"].each do |f|
216         @config[:formatter] = nil
217         @options.parse [opt, f]
218         @config[:formatter].should == HtmlFormatter
219       end
220     end
221   end
223   it "sets the DottedFormatter with FORMAT 'd', 'dot' or 'dotted'" do
224     ["-f", "--format"].each do |opt|
225       ["d", "dot", "dotted"].each do |f|
226         @config[:formatter] = nil
227         @options.parse [opt, f]
228         @config[:formatter].should == DottedFormatter
229       end
230     end
231   end
233   it "sets the UnitdiffFormatter with FORMAT 'u', 'unit', or 'unitdiff'" do
234     ["-f", "--format"].each do |opt|
235       ["u", "unit", "unitdiff"].each do |f|
236         @config[:formatter] = nil
237         @options.parse [opt, f]
238         @config[:formatter].should == UnitdiffFormatter
239       end
240     end
241   end
243   it "sets the SummaryFormatter with FORMAT 'm' or 'summary'" do
244     ["-f", "--format"].each do |opt|
245       ["m", "summary"].each do |f|
246         @config[:formatter] = nil
247         @options.parse [opt, f]
248         @config[:formatter].should == SummaryFormatter
249       end
250     end
251   end
253   it "sets the SpinnerFormatter with FORMAT 'a', '*', or 'spin'" do
254     ["-f", "--format"].each do |opt|
255       ["a", "*", "spin"].each do |f|
256         @config[:formatter] = nil
257         @options.parse [opt, f]
258         @config[:formatter].should == SpinnerFormatter
259       end
260     end
261   end
264 describe "The -o, --output FILE option" do
265   before :each do
266     @options, @config = new_option
267     @options.add_formatters
268   end
270   it "is enabled with #add_formatters" do
271     @options.stub!(:on)
272     @options.should_receive(:on).with("-o", "--output FILE",
273         String, an_instance_of(String))
274     @options.add_formatters
275   end
277   it "sets the output to FILE" do
278     ["-o", "--output"].each do |opt|
279       @config[:output] = nil
280       @options.parse [opt, "some/file"]
281       @config[:output].should == "some/file"
282     end
283   end
286 describe "The -e, --example STR" do
287   before :each do
288     @options, @config = new_option
289     @options.add_filters
290   end
292   it "is enabled with #add_filters" do
293     @options.stub!(:on)
294     @options.should_receive(:on).with("-e", "--example STR",
295         String, an_instance_of(String))
296     @options.add_filters
297   end
299   it "adds STR to the includes list" do
300     ["-e", "--example"].each do |opt|
301       @config[:includes] = []
302       @options.parse [opt, "this spec"]
303       @config[:includes].should include("this spec")
304     end
305   end
308 describe "The -E, --exclude STR" do
309   before :each do
310     @options, @config = new_option
311     @options.add_filters
312   end
314   it "is enabled with #add_filters" do
315     @options.stub!(:on)
316     @options.should_receive(:on).with("-E", "--exclude STR",
317         String, an_instance_of(String))
318     @options.add_filters
319   end
321   it "adds STR to the excludes list" do
322     ["-E", "--exclude"].each do |opt|
323       @config[:excludes] = []
324       @options.parse [opt, "this spec"]
325       @config[:excludes].should include("this spec")
326     end
327   end
330 describe "The -p, --pattern PATTERN" do
331   before :each do
332     @options, @config = new_option
333     @options.add_filters
334   end
336   it "is enabled with #add_filters" do
337     @options.stub!(:on)
338     @options.should_receive(:on).with("-p", "--pattern PATTERN",
339         Regexp, an_instance_of(String))
340     @options.add_filters
341   end
343   it "adds PATTERN to the included patterns list" do
344     ["-p", "--pattern"].each do |opt|
345       @config[:patterns] = []
346       @options.parse [opt, "this spec"]
347       @config[:patterns].should include(/this spec/)
348     end
349   end
352 describe "The -P, --excl-pattern PATTERN" do
353   before :each do
354     @options, @config = new_option
355     @options.add_filters
356   end
358   it "is enabled with #add_filters" do
359     @options.stub!(:on)
360     @options.should_receive(:on).with("-P", "--excl-pattern PATTERN",
361         Regexp, an_instance_of(String))
362     @options.add_filters
363   end
365   it "adds PATTERN to the excluded patterns list" do
366     ["-P", "--excl-pattern"].each do |opt|
367       @config[:xpatterns] = []
368       @options.parse [opt, "this spec"]
369       @config[:xpatterns].should include(/this spec/)
370     end
371   end
374 describe "The -g, --tag TAG" do
375   before :each do
376     @options, @config = new_option
377     @options.add_filters
378   end
380   it "is enabled with #add_filters" do
381     @options.stub!(:on)
382     @options.should_receive(:on).with("-g", "--tag TAG",
383         String, an_instance_of(String))
384     @options.add_filters
385   end
387   it "adds TAG to the included tags list" do
388     ["-g", "--tag"].each do |opt|
389       @config[:tags] = []
390       @options.parse [opt, "this spec"]
391       @config[:tags].should include("this spec")
392     end
393   end
396 describe "The -G, --excl-tag TAG" do
397   before :each do
398     @options, @config = new_option
399     @options.add_filters
400   end
402   it "is enabled with #add_filters" do
403     @options.stub!(:on)
404     @options.should_receive(:on).with("-G", "--excl-tag TAG",
405         String, an_instance_of(String))
406     @options.add_filters
407   end
409   it "adds TAG to the excluded tags list" do
410     ["-G", "--excl-tag"].each do |opt|
411       @config[:xtags] = []
412       @options.parse [opt, "this spec"]
413       @config[:xtags].should include("this spec")
414     end
415   end
418 describe "The -w, --profile FILE option" do
419   before :each do
420     @options, @config = new_option
421     @options.add_filters
422   end
424   it "is enabled with #add_filters" do
425     @options.stub!(:on)
426     @options.should_receive(:on).with("-w", "--profile FILE",
427         String, an_instance_of(String))
428     @options.add_filters
429   end
431   it "adds FILE to the included profiles list" do
432     ["-w", "--profile"].each do |opt|
433       @config[:profiles] = []
434       @options.parse [opt, "spec/profiles/rails.yaml"]
435       @config[:profiles].should include("spec/profiles/rails.yaml")
436     end
437   end
440 describe "The -W, --excl-profile FILE option" do
441   before :each do
442     @options, @config = new_option
443     @options.add_filters
444   end
446   it "is enabled with #add_filters" do
447     @options.stub!(:on)
448     @options.should_receive(:on).with("-W", "--excl-profile FILE",
449         String, an_instance_of(String))
450     @options.add_filters
451   end
453   it "adds FILE to the excluded profiles list" do
454     ["-W", "--excl-profile"].each do |opt|
455       @config[:xprofiles] = []
456       @options.parse [opt, "spec/profiles/rails.yaml"]
457       @config[:xprofiles].should include("spec/profiles/rails.yaml")
458     end
459   end
462 describe "The -Z", "--dry-run option" do
463   before :each do
464     @options, @config = new_option
465     @options.add_pretend
466   end
468   it "is enabled with #add_pretend" do
469     @options.should_receive(:on).with("-Z", "--dry-run", an_instance_of(String))
470     @options.add_pretend
471   end
473   it "registers the MSpec pretend mode" do
474     MSpec.should_receive(:register_mode).with(:pretend).twice
475     ["-Z", "--dry-run"].each do |opt|
476       @options.parse opt
477     end
478   end
481 describe "The -H, --random option" do
482   before :each do
483     @options, @config = new_option
484     @options.add_randomize
485   end
487   it "is enabled with #add_randomize" do
488     @options.should_receive(:on).with("-H", "--random", an_instance_of(String))
489     @options.add_randomize
490   end
492   it "registers the MSpec randomize mode" do
493     MSpec.should_receive(:randomize).twice
494     ["-H", "--random"].each do |opt|
495       @options.parse opt
496     end
497   end
500 describe "The -V, --verbose option" do
501   before :each do
502     @options, @config = new_option
503     @options.add_verbose
504   end
506   it "is enabled with #add_verbose" do
507     @options.stub!(:on)
508     @options.should_receive(:on).with("-V", "--verbose", an_instance_of(String))
509     @options.add_verbose
510   end
512   it "registers a verbose output object with MSpec" do
513     MSpec.should_receive(:register).with(:start, anything()).twice
514     MSpec.should_receive(:register).with(:load, anything()).twice
515     ["-V", "--verbose"].each do |opt|
516       @options.parse opt
517     end
518   end
521 describe "The -m, --marker MARKER option" do
522   before :each do
523     @options, @config = new_option
524     @options.add_verbose
525   end
527   it "is enabled with #add_verbose" do
528     @options.stub!(:on)
529     @options.should_receive(:on).with("-m", "--marker MARKER",
530         String, an_instance_of(String))
531     @options.add_verbose
532   end
534   it "registers a marker output object with MSpec" do
535     MSpec.should_receive(:register).with(:load, anything()).twice
536     ["-m", "--marker"].each do |opt|
537       @options.parse [opt, ","]
538     end
539   end
542 describe "The --int-spec option" do
543   before :each do
544     @options, @config = new_option
545     @options.add_interrupt
546   end
548   it "is enabled with #add_interrupt" do
549     @options.should_receive(:on).with("--int-spec", an_instance_of(String))
550     @options.add_interrupt
551   end
553   it "sets the abort config option to false to only abort the running spec with ^C" do
554     @config[:abort] = true
555     @options.parse "--int-spec"
556     @config[:abort].should == false
557   end
560 describe "The -Y, --verify option" do
561   before :each do
562     @options, @config = new_option
563     @options.add_verify
564   end
566   it "is enabled with #add_interrupt" do
567     @options.stub!(:on)
568     @options.should_receive(:on).with("-Y", "--verify", an_instance_of(String))
569     @options.add_verify
570   end
572   it "sets the MSpec mode to :verify" do
573     MSpec.should_receive(:set_mode).with(:verify).twice
574     ["-Y", "--verify"].each do |m|
575       @options.parse m
576     end
577   end
580 describe "The -O, --report option" do
581   before :each do
582     @options, @config = new_option
583     @options.add_verify
584   end
586   it "is enabled with #add_interrupt" do
587     @options.stub!(:on)
588     @options.should_receive(:on).with("-O", "--report", an_instance_of(String))
589     @options.add_verify
590   end
592   it "sets the MSpec mode to :report" do
593     MSpec.should_receive(:set_mode).with(:report).twice
594     ["-O", "--report"].each do |m|
595       @options.parse m
596     end
597   end
600 describe "The -N, --add TAG option" do
601   before :each do
602     @options, @config = new_option
603     @options.add_tagging
604   end
606   it "is enabled with #add_tagging" do
607     @options.stub!(:on)
608     @options.should_receive(:on).with("-N", "--add TAG",
609         String, an_instance_of(String))
610     @options.add_tagging
611   end
613   it "sets the mode to :add and sets the tag to TAG" do
614     ["-N", "--add"].each do |opt|
615       @config[:tagger] = nil
616       @config[:tag] = nil
617       @options.parse [opt, "taggit"]
618       @config[:tagger].should == :add
619       @config[:tag].should == "taggit:"
620     end
621   end
624 describe "The -R, --del TAG option" do
625   before :each do
626     @options, @config = new_option
627     @options.add_tagging
628   end
630   it "is enabled with #add_tagging" do
631     @options.stub!(:on)
632     @options.should_receive(:on).with("-R", "--del TAG",
633         String, an_instance_of(String))
634     @options.add_tagging
635   end
637   it "it sets the mode to :del, the tag to TAG, and the outcome to :pass" do
638     ["-R", "--del"].each do |opt|
639       @config[:tagger] = nil
640       @config[:tag] = nil
641       @config[:outcome] = nil
642       @options.parse [opt, "taggit"]
643       @config[:tagger].should == :del
644       @config[:tag].should == "taggit:"
645       @config[:outcome].should == :pass
646     end
647   end
650 describe "The -Q, --pass option" do
651   before :each do
652     @options, @config = new_option
653     @options.add_tagging
654   end
656   it "is enabled with #add_tagging" do
657     @options.stub!(:on)
658     @options.should_receive(:on).with("-Q", "--pass", an_instance_of(String))
659     @options.add_tagging
660   end
662   it "sets the outcome to :pass" do
663     ["-Q", "--pass"].each do |opt|
664       @config[:outcome] = nil
665       @options.parse opt
666       @config[:outcome].should == :pass
667     end
668   end
671 describe "The -F, --fail option" do
672   before :each do
673     @options, @config = new_option
674     @options.add_tagging
675   end
677   it "is enabled with #add_tagging" do
678     @options.stub!(:on)
679     @options.should_receive(:on).with("-F", "--fail", an_instance_of(String))
680     @options.add_tagging
681   end
683   it "sets the outcome to :fail" do
684     ["-F", "--fail"].each do |opt|
685       @config[:outcome] = nil
686       @options.parse opt
687       @config[:outcome].should == :fail
688     end
689   end
692 describe "The -L, --all option" do
693   before :each do
694     @options, @config = new_option
695     @options.add_tagging
696   end
698   it "is enabled with #add_tagging" do
699     @options.stub!(:on)
700     @options.should_receive(:on).with("-L", "--all", an_instance_of(String))
701     @options.add_tagging
702   end
704   it "sets the outcome to :all" do
705     ["-L", "--all"].each do |opt|
706       @config[:outcome] = nil
707       @options.parse opt
708       @config[:outcome].should == :all
709     end
710   end
713 describe "The -K, --action-tag TAG option" do
714   before :each do
715     @options, @config = new_option
716     @options.add_action_filters
717   end
719   it "is enabled with #add_action_filters" do
720     @options.stub!(:on)
721     @options.should_receive(:on).with("-K", "--action-tag TAG",
722         String, an_instance_of(String))
723     @options.add_action_filters
724   end
726   it "adds TAG to the list of tags that trigger actions" do
727     ["-K", "--action-tag"].each do |opt|
728       @config[:atags] = []
729       @options.parse [opt, "action-tag"]
730       @config[:atags].should include("action-tag")
731     end
732   end
735 describe "The -S, --action-string STR option" do
736   before :each do
737     @options, @config = new_option
738     @options.add_action_filters
739   end
741   it "is enabled with #add_action_filters" do
742     @options.stub!(:on)
743     @options.should_receive(:on).with("-S", "--action-string STR",
744         String, an_instance_of(String))
745     @options.add_action_filters
746   end
748   it "adds STR to the list of spec descriptions that trigger actions" do
749     ["-S", "--action-string"].each do |opt|
750       @config[:astrings] = []
751       @options.parse [opt, "action-str"]
752       @config[:astrings].should include("action-str")
753     end
754   end
757 describe "The --spec-debug option" do
758   before :each do
759     @options, @config = new_option
760     @options.add_actions
761   end
763   it "is enabled with #add_actions" do
764     @options.stub!(:on)
765     @options.should_receive(:on).with("--spec-debug", an_instance_of(String))
766     @options.add_actions
767   end
769   it "enables the triggering the ruby debugger" do
770     @options.add_action_filters
771     @options.parse ["-S", "some spec"]
773     @config[:debugger] = nil
774     @options.parse "--spec-debug"
775     @config[:debugger].should == true
776   end
779 describe "The --spec-gdb option" do
780   before :each do
781     @options, @config = new_option
782     @options.add_actions
783   end
785   it "is enabled with #add_actions" do
786     @options.stub!(:on)
787     @options.should_receive(:on).with("--spec-gdb", an_instance_of(String))
788     @options.add_actions
789   end
791   it "enables triggering the gdb debugger" do
792     @options.add_action_filters
793     @options.parse ["-S", "some spec"]
795     @config[:gdb] = nil
796     @options.parse "--spec-gdb"
797     @config[:gdb].should == true
798   end
801 describe "The -v, --version option" do
802   before :each do
803     @options, @config = new_option
804     @options.add_version
805   end
807   it "is enabled with #add_version" do
808     @options.stub!(:on)
809     @options.should_receive(:on).with("-v", "--version", an_instance_of(String))
810     @options.add_version
811   end
813   it "prints the version and exits" do
814     @options.should_receive(:puts).twice
815     @options.should_receive(:exit).twice
816     ["-v", "--version"].each do |opt|
817       @options.parse opt
818     end
819   end
822 describe "The -h, --help option" do
823   before :each do
824     @options, @config = new_option
825     @options.add_help
826   end
828   it "is enabled with #add_help" do
829     @options.stub!(:on)
830     @options.should_receive(:on).with("-h", "--help", an_instance_of(String))
831     @options.add_help
832   end
834   it "prints help and exits" do
835     @options.should_receive(:puts).twice
836     @options.should_receive(:exit).twice
837     ["-h", "--help"].each do |opt|
838       @options.parse opt
839     end
840   end