polyamory 0.6.0 → 0.6.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/README.md +13 -1
- data/lib/polyamory.rb +1 -1
- data/lib/polyamory/bats.rb +107 -0
- data/lib/polyamory/cucumber.rb +1 -1
- data/lib/polyamory/rspec.rb +1 -1
- data/lib/polyamory/runner.rb +4 -3
- data/lib/polyamory/test_unit.rb +6 -2
- data/test/test_runner.rb +1 -1
- metadata +3 -2
    
        data/README.md
    CHANGED
    
    | @@ -10,8 +10,20 @@ Frameworks supported: | |
| 10 10 | 
             
            * Cucumber in `features/**/*.feature`
         | 
| 11 11 | 
             
            * RSpec + Shoulda in `spec/**/*_spec.rb`
         | 
| 12 12 | 
             
            * test/unit, Shoulda, or anything else in `test/**/*_test.rb` or `test/**/test*.rb`
         | 
| 13 | 
            +
            * Bats in `test/*.bats`
         | 
| 13 14 |  | 
| 14 | 
            -
             | 
| 15 | 
            +
            ## Installation
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # Mac OS X
         | 
| 18 | 
            +
                brew install https://github.com/mislav/polyamory/raw/master/brew/polyamory.rb
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                # other
         | 
| 21 | 
            +
                gem i polyamory
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                # alias for brevity
         | 
| 24 | 
            +
                alias pam=polyamory
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ## Features
         | 
| 15 27 |  | 
| 16 28 | 
             
            *   `polyamory` - Runs the full test suite for any project. For example, it will
         | 
| 17 29 | 
             
                run all of the following:
         | 
    
        data/lib/polyamory.rb
    CHANGED
    
    
| @@ -0,0 +1,107 @@ | |
| 1 | 
            +
            require 'polyamory/rooted_pathname'
         | 
| 2 | 
            +
            require 'polyamory/command'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Polyamory
         | 
| 5 | 
            +
              # Internal: Deals with finding Bats files to test
         | 
| 6 | 
            +
              # https://github.com/sstephenson/bats#readme
         | 
| 7 | 
            +
              class Bats
         | 
| 8 | 
            +
                attr_reader :context
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def initialize context
         | 
| 11 | 
            +
                  @context = context
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def test_dir
         | 
| 15 | 
            +
                  @test_dir ||= context.root + 'test'
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def file_pattern dir
         | 
| 19 | 
            +
                  "#{dir}/*.bats"
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def handle? path
         | 
| 23 | 
            +
                  path.extname == '.bats' || !find_files(path).empty?
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def find_files dir = test_dir
         | 
| 27 | 
            +
                  glob file_pattern(dir)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                # Internal: Memoized find_files in primary dir
         | 
| 31 | 
            +
                def all_matching_files
         | 
| 32 | 
            +
                  @all_matching_files ||= find_files
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                # Public: Resolve a set of files, directories, and patterns to a list of
         | 
| 36 | 
            +
                # paths to test.
         | 
| 37 | 
            +
                def resolve_paths names
         | 
| 38 | 
            +
                  if context.tag_filters.any?
         | 
| 39 | 
            +
                    # Bats doesn't support tags
         | 
| 40 | 
            +
                    []
         | 
| 41 | 
            +
                  elsif names.any?
         | 
| 42 | 
            +
                    paths = []
         | 
| 43 | 
            +
                    for name in names
         | 
| 44 | 
            +
                      paths.concat Array(resolve_name name)
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                    paths
         | 
| 47 | 
            +
                  else
         | 
| 48 | 
            +
                    [test_dir]
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def resolve_name name
         | 
| 53 | 
            +
                  resolve_as_directory(name) or
         | 
| 54 | 
            +
                    resolve_as_filename(name) or
         | 
| 55 | 
            +
                    resolve_as_file_pattern(name) or
         | 
| 56 | 
            +
                    raise "nothing resolved from #{name}"
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                # "functional" => "test/functional/**"
         | 
| 60 | 
            +
                # "test/functional" => "test/functional/**"
         | 
| 61 | 
            +
                def resolve_as_directory name
         | 
| 62 | 
            +
                  [test_dir + name, context.root + name].detect { |dir| handle?(dir) }
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                # "test/unit/hello.bats"
         | 
| 66 | 
            +
                def resolve_as_filename name
         | 
| 67 | 
            +
                  file = context.root + name
         | 
| 68 | 
            +
                  file if file.file? and handle?(file)
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                # "word" => "test/**" that match "word"
         | 
| 72 | 
            +
                def resolve_as_file_pattern name
         | 
| 73 | 
            +
                  pattern = /(?:\b|_)#{Regexp.escape name}(?:\b|_)/
         | 
| 74 | 
            +
                  all_matching_files.select {|p| p =~ pattern }
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                # Public: From a list of paths, yank the ones that this knows how to handle,
         | 
| 78 | 
            +
                # and build test jobs from it.
         | 
| 79 | 
            +
                def pick_jobs paths
         | 
| 80 | 
            +
                  to_test = []
         | 
| 81 | 
            +
                  paths.reject! do |path|
         | 
| 82 | 
            +
                    if handle? path
         | 
| 83 | 
            +
                      to_test << path
         | 
| 84 | 
            +
                      true
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  unless to_test.empty?
         | 
| 89 | 
            +
                    excess = to_test.slice!(1..-1)
         | 
| 90 | 
            +
                    warn "warning: bats can only accept one filename; skipping #{excess.map {|p| p.relative }.join(' ')}" unless excess.empty?
         | 
| 91 | 
            +
                    [test_command(to_test)]
         | 
| 92 | 
            +
                  else
         | 
| 93 | 
            +
                    []
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def test_command paths
         | 
| 98 | 
            +
                  Command.new ['bats'] do |test_job|
         | 
| 99 | 
            +
                    test_job.concat paths.map {|p| p.relative }
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                def glob pattern
         | 
| 104 | 
            +
                  RootedPathname.glob pattern, context.root
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
            end
         | 
    
        data/lib/polyamory/cucumber.rb
    CHANGED
    
    
    
        data/lib/polyamory/rspec.rb
    CHANGED
    
    
    
        data/lib/polyamory/runner.rb
    CHANGED
    
    | @@ -2,6 +2,7 @@ require 'polyamory/rooted_pathname' | |
| 2 2 | 
             
            require 'polyamory/test_unit'
         | 
| 3 3 | 
             
            require 'polyamory/rspec'
         | 
| 4 4 | 
             
            require 'polyamory/cucumber'
         | 
| 5 | 
            +
            require 'polyamory/bats'
         | 
| 5 6 |  | 
| 6 7 | 
             
            module Polyamory
         | 
| 7 8 | 
             
              # Public: Collects test jobs in the root directory and runs them.
         | 
| @@ -45,8 +46,8 @@ module Polyamory | |
| 45 46 | 
             
                def bundle_exec?
         | 
| 46 47 | 
             
                  return @bundle_exec if defined? @bundle_exec
         | 
| 47 48 | 
             
                  if (setting = options.fetch(:bundler)).nil?
         | 
| 48 | 
            -
                    setting =  | 
| 49 | 
            -
             | 
| 49 | 
            +
                    setting = ENV['RUBYOPT'] !~ /\br?bundler\/setup\b/ &&
         | 
| 50 | 
            +
                      ( !ENV['BUNDLE_GEMFILE'].to_s.empty? || (root + 'Gemfile').exist? )
         | 
| 50 51 | 
             
                  end
         | 
| 51 52 | 
             
                  @bundle_exec = setting
         | 
| 52 53 | 
             
                end
         | 
| @@ -71,7 +72,7 @@ module Polyamory | |
| 71 72 | 
             
                end
         | 
| 72 73 |  | 
| 73 74 | 
             
                def collect_jobs
         | 
| 74 | 
            -
                  [TestUnit, RSpec, Cucumber].inject([]) do |jobs, klass|
         | 
| 75 | 
            +
                  [TestUnit, RSpec, Cucumber, Bats].inject([]) do |jobs, klass|
         | 
| 75 76 | 
             
                    framework = klass.new self
         | 
| 76 77 | 
             
                    paths = framework.resolve_paths @names
         | 
| 77 78 | 
             
                    jobs.concat framework.pick_jobs(paths)
         | 
    
        data/lib/polyamory/test_unit.rb
    CHANGED
    
    | @@ -126,15 +126,19 @@ module Polyamory | |
| 126 126 | 
             
                  RootedPathname.glob pattern, context.root
         | 
| 127 127 | 
             
                end
         | 
| 128 128 |  | 
| 129 | 
            +
                def rails?
         | 
| 130 | 
            +
                  (context.root + 'config/environment.rb').exist?
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
             | 
| 129 133 | 
             
                def add_ruby_options cmd
         | 
| 130 134 | 
             
                  opts = []
         | 
| 131 135 | 
             
                  opts << '-w' if context.warnings?
         | 
| 132 | 
            -
                  opts <<  | 
| 136 | 
            +
                  opts << "-Ilib:#{test_dir.basename}" unless rails?
         | 
| 133 137 | 
             
                  for path in context.load_paths
         | 
| 134 138 | 
             
                    opts << "-I#{path}"
         | 
| 135 139 | 
             
                  end
         | 
| 136 140 | 
             
                  opts << '%'
         | 
| 137 | 
            -
                  cmd.env['RUBYOPT'] = opts.join(' ')
         | 
| 141 | 
            +
                  cmd.env['RUBYOPT'] = opts.join(' ') if opts.size > 1
         | 
| 138 142 | 
             
                end
         | 
| 139 143 |  | 
| 140 144 | 
             
                def testunit_options
         | 
    
        data/test/test_runner.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -2,14 +2,14 @@ | |
| 2 2 | 
             
            name: polyamory
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.6. | 
| 5 | 
            +
              version: 0.6.2
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Mislav Marohnić
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-03- | 
| 12 | 
            +
            date: 2013-03-09 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: A cli runner for all tests regardless of framework
         | 
| 15 15 | 
             
            email: mislav.marohnic@gmail.com
         | 
| @@ -19,6 +19,7 @@ extensions: [] | |
| 19 19 | 
             
            extra_rdoc_files: []
         | 
| 20 20 | 
             
            files:
         | 
| 21 21 | 
             
            - bin/polyamory
         | 
| 22 | 
            +
            - lib/polyamory/bats.rb
         | 
| 22 23 | 
             
            - lib/polyamory/command.rb
         | 
| 23 24 | 
             
            - lib/polyamory/cucumber.rb
         | 
| 24 25 | 
             
            - lib/polyamory/rooted_pathname.rb
         |