Updated MSpec source to 1c3ee1c8.
[rbx.git] / mspec / lib / mspec / commands / mspec-ci.rb
blob051d347d79565b8f22ba47bda3061c8c72e2d127
1 #!/usr/bin/env ruby
3 $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
5 require 'optparse'
6 require 'mspec/utils/options'
7 require 'mspec/utils/script'
10 class MSpecCI < MSpecScript
11   def options(argv=ARGV)
12     options = MSpecOptions.new config, "ci", "", 28, "   "
14     options.separator " Ask yourself:"
15     options.separator "  1. How to run the specs?"
16     options.separator "  2. How to display the output?"
17     options.separator "  3. What action to perform?"
18     options.separator "  4. When to perform it?"
20     options.separator "\n How to run the specs"
21     options.add_config { |f| load f }
22     options.add_name
23     options.add_pretend
24     options.add_interrupt
26     options.separator "\n How to display their output"
27     options.add_formatters
28     options.add_verbose
30     options.separator "\n What action to perform"
31     options.add_actions
33     options.separator "\n When to perform it"
34     options.add_action_filters
36     options.separator "\n Help!"
37     options.add_version
38     options.add_help
40     options.separator "\n How might this work in the real world?"
41     options.separator "\n   1. To simply run the known good specs"
42     options.separator "\n     $ mspec ci"
43     options.separator "\n   2. To run a subset of the known good specs"
44     options.separator "\n     $ mspec ci path/to/specs"
45     options.separator "\n   3. To start the debugger before the spec matching 'this crashes'"
46     options.separator "\n     $ mspec ci --spec-debug -S 'this crashes'"
47     options.separator ""
49     @patterns = options.parse argv
50     @patterns = config[:ci_files] if @patterns.empty?
51   end
53   def run
54     files = []
55     @patterns.each do |item|
56       stat = File.stat(File.expand_path(item))
57       files << item if stat.file?
58       files.concat(Dir[item+"/**/*_spec.rb"].sort) if stat.directory?
59     end
61     MSpec.register_tags_patterns config[:tags_patterns]
62     MSpec.register_files files
63     TagFilter.new(:exclude, "fails").register
64     TagFilter.new(:exclude, "critical").register
65     TagFilter.new(:exclude, "unstable").register
66     TagFilter.new(:exclude, "incomplete").register
67     TagFilter.new(:exclude, "unsupported").register
69     MSpec.process
70     exit MSpec.exit_code
71   end
72 end