wrong 0.4.0 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +97 -49
- data/lib/wrong/adapters/minitest.rb +5 -2
- data/lib/wrong/adapters/rspec.rb +36 -15
- data/lib/wrong/assert.rb +1 -33
- data/lib/wrong/chunk.rb +34 -24
- data/lib/wrong/config.rb +42 -7
- data/lib/wrong/failure_message.rb +59 -0
- data/lib/wrong/helpers.rb +13 -12
- data/lib/wrong/message/array_diff.rb +1 -1
- data/lib/wrong/rainbow.rb +9 -4
- data/lib/wrong/sexp_ext.rb +6 -6
- data/lib/wrong/version.rb +1 -1
- data/lib/wrong.rb +14 -3
- data/test/adapters/minitest_test.rb +2 -3
- data/test/adapters/railsapp/app/controllers/application_controller.rb +3 -0
- data/test/adapters/railsapp/app/helpers/application_helper.rb +2 -0
- data/test/adapters/railsapp/autotest/discover.rb +2 -0
- data/test/adapters/railsapp/config/application.rb +42 -0
- data/test/adapters/railsapp/config/boot.rb +13 -0
- data/test/adapters/railsapp/config/environment.rb +5 -0
- data/test/adapters/railsapp/config/environments/development.rb +26 -0
- data/test/adapters/railsapp/config/environments/production.rb +49 -0
- data/test/adapters/railsapp/config/environments/test.rb +35 -0
- data/test/adapters/railsapp/config/initializers/backtrace_silencers.rb +7 -0
- data/test/adapters/railsapp/config/initializers/inflections.rb +10 -0
- data/test/adapters/railsapp/config/initializers/mime_types.rb +5 -0
- data/test/adapters/railsapp/config/initializers/secret_token.rb +7 -0
- data/test/adapters/railsapp/config/initializers/session_store.rb +8 -0
- data/test/adapters/railsapp/config/routes.rb +58 -0
- data/test/adapters/railsapp/db/seeds.rb +7 -0
- data/test/adapters/railsapp/spec/spec_helper.rb +28 -0
- data/test/adapters/railsapp/spec/wrong_spec.rb +8 -0
- data/test/adapters/rspec_rails_test.rb +58 -0
- data/test/adapters/rspec_test.rb +0 -61
- data/test/adapters/test_unit_test.rb +2 -2
- data/test/assert_advanced_test.rb +4 -4
- data/test/chunk_test.rb +14 -0
- data/test/config_test.rb +98 -51
- data/test/failure_message_test.rb +66 -16
- data/test/failures_test.rb +40 -86
- data/test/message/array_diff_test.rb +6 -2
- data/test/string_comparison_test.rb +3 -1
- data/test/test_helper.rb +26 -3
- metadata +190 -215
data/lib/wrong/helpers.rb
CHANGED
@@ -27,12 +27,7 @@ module Wrong
|
|
27
27
|
streams.each do |stream|
|
28
28
|
original[stream] = (stream == :stdout ? $stdout : $stderr)
|
29
29
|
captured[stream] = StringIO.new
|
30
|
-
|
31
|
-
when :stdout
|
32
|
-
$stdout = captured[stream]
|
33
|
-
when :stderr
|
34
|
-
$stderr = captured[stream]
|
35
|
-
end
|
30
|
+
reassign_stream(stream, captured)
|
36
31
|
end
|
37
32
|
|
38
33
|
yield
|
@@ -53,14 +48,20 @@ module Wrong
|
|
53
48
|
end
|
54
49
|
# support nested calls to capturing
|
55
50
|
original[stream] << captured[stream].string if original[stream].is_a? StringIO
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
51
|
+
reassign_stream(stream, original)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def reassign_stream(which, streams)
|
57
|
+
case which
|
58
|
+
when :stdout
|
59
|
+
$stdout = streams[which]
|
60
|
+
when :stderr
|
61
|
+
$stderr = streams[which]
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
64
65
|
end
|
65
66
|
|
66
67
|
end
|
data/lib/wrong/rainbow.rb
CHANGED
@@ -27,18 +27,23 @@ module Sickill
|
|
27
27
|
:hide => 8,
|
28
28
|
}
|
29
29
|
|
30
|
+
private
|
31
|
+
def set_color(color, ground = :foreground)
|
32
|
+
color = color.first if color.size == 1
|
33
|
+
wrap_with_code(get_color_code(color, ground))
|
34
|
+
end
|
35
|
+
|
36
|
+
public
|
30
37
|
# Sets foreground color of this text.
|
31
38
|
def foreground(*color)
|
32
|
-
color
|
33
|
-
wrap_with_code(get_color_code(color, :foreground))
|
39
|
+
set_color(color, :foreground)
|
34
40
|
end
|
35
41
|
alias_method :color, :foreground
|
36
42
|
alias_method :colour, :foreground
|
37
43
|
|
38
44
|
# Sets background color of this text.
|
39
45
|
def background(*color)
|
40
|
-
color
|
41
|
-
wrap_with_code(get_color_code(color, :background))
|
46
|
+
set_color(color, :background)
|
42
47
|
end
|
43
48
|
|
44
49
|
# Resets terminal to default colors/backgrounds.
|
data/lib/wrong/sexp_ext.rb
CHANGED
@@ -5,15 +5,15 @@ require 'wrong/config'
|
|
5
5
|
class Sexp < Array
|
6
6
|
|
7
7
|
def to_ruby
|
8
|
-
|
9
|
-
ruby = Ruby2Ruby.new.process(
|
8
|
+
sexp = self.deep_clone
|
9
|
+
ruby = Ruby2Ruby.new.process(sexp)
|
10
10
|
ruby
|
11
11
|
end
|
12
12
|
|
13
13
|
# visit every node in the tree, including the root, that is an Sexp
|
14
14
|
# todo: test
|
15
|
-
def each_subexp(&block)
|
16
|
-
yield self
|
15
|
+
def each_subexp(include_root = true, &block)
|
16
|
+
yield self if include_root
|
17
17
|
each do |child|
|
18
18
|
if child.is_a?(Sexp)
|
19
19
|
child.each_subexp(&block)
|
@@ -26,7 +26,7 @@ class Sexp < Array
|
|
26
26
|
self[0] == :iter and
|
27
27
|
self[1].is_a? Sexp and
|
28
28
|
self[1][0] == :call and
|
29
|
-
Wrong.config.assert_methods.include? self[1][2]
|
29
|
+
Wrong.config.assert_methods.include? self[1][2]
|
30
30
|
end
|
31
31
|
|
32
32
|
def assertion
|
@@ -42,7 +42,7 @@ class Sexp < Array
|
|
42
42
|
private
|
43
43
|
def nested_assertions
|
44
44
|
assertions = []
|
45
|
-
self.
|
45
|
+
self.each_subexp(false) { |sexp| assertions << sexp if sexp.assertion? }
|
46
46
|
assertions
|
47
47
|
end
|
48
48
|
|
data/lib/wrong/version.rb
CHANGED
data/lib/wrong.rb
CHANGED
@@ -20,8 +20,19 @@ module Wrong
|
|
20
20
|
extend Wrong::Helpers
|
21
21
|
end
|
22
22
|
|
23
|
-
# this does some magic; if you don't like it
|
23
|
+
# this does some magic; if you don't like it...
|
24
|
+
|
25
|
+
# ...`require 'wrong/assert'` et al. individually and don't `require 'wrong/close_to'` or `require 'wrong'`
|
24
26
|
require "wrong/close_to"
|
25
27
|
|
26
|
-
#
|
27
|
-
Object
|
28
|
+
# ...don't `require 'wrong'`, and `include Wrong::D` only in the modules you want to call `d` from
|
29
|
+
class Object
|
30
|
+
include Wrong::D
|
31
|
+
end
|
32
|
+
|
33
|
+
# ...don't `require 'wrong'`
|
34
|
+
# this part isn't working yet -- it's supposed to make 'assert' available at the top level but it breaks the minitest adapter
|
35
|
+
# include Wrong
|
36
|
+
# class Object
|
37
|
+
# include Wrong
|
38
|
+
# end
|
@@ -61,11 +61,10 @@ describe "basic assert features" do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
msg = rescuing { MyFailingAssertTest.new.test_fail }.message
|
64
|
-
|
65
|
-
assert { msg.include?("1 is not equal to 2") }
|
64
|
+
assert { msg.include?("Expected (1 == 2)") }
|
66
65
|
|
67
66
|
msg = rescuing { MyFailingDenyTest.new.test_fail }.message
|
68
|
-
assert { msg.include?("
|
67
|
+
assert { msg.include?("Didn't expect (1 == 1)") }
|
69
68
|
end
|
70
69
|
end
|
71
70
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
# If you have a Gemfile, require the gems listed there, including any gems
|
6
|
+
# you've limited to :test, :development, or :production.
|
7
|
+
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
8
|
+
|
9
|
+
module Railsapp
|
10
|
+
class Application < Rails::Application
|
11
|
+
# Settings in config/environments/* take precedence over those specified here.
|
12
|
+
# Application configuration should go into files in config/initializers
|
13
|
+
# -- all .rb files in that directory are automatically loaded.
|
14
|
+
|
15
|
+
# Custom directories with classes and modules you want to be autoloadable.
|
16
|
+
# config.autoload_paths += %W(#{config.root}/extras)
|
17
|
+
|
18
|
+
# Only load the plugins named here, in the order given (default is alphabetical).
|
19
|
+
# :all can be used as a placeholder for all plugins not explicitly named.
|
20
|
+
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
21
|
+
|
22
|
+
# Activate observers that should always be running.
|
23
|
+
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
24
|
+
|
25
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
26
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
27
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
28
|
+
|
29
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
30
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
31
|
+
# config.i18n.default_locale = :de
|
32
|
+
|
33
|
+
# JavaScript files you want as :defaults (application.js is always included).
|
34
|
+
config.action_view.javascript_expansions[:defaults] = %w()
|
35
|
+
|
36
|
+
# Configure the default encoding used in templates for Ruby 1.9.
|
37
|
+
config.encoding = "utf-8"
|
38
|
+
|
39
|
+
# Configure sensitive parameters which will be filtered from the log file.
|
40
|
+
config.filter_parameters += [:password]
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
# Set up gems listed in the Gemfile.
|
4
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
5
|
+
begin
|
6
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
7
|
+
require 'bundler'
|
8
|
+
Bundler.setup
|
9
|
+
rescue Bundler::GemNotFound => e
|
10
|
+
STDERR.puts e.message
|
11
|
+
STDERR.puts "Try running `bundle install`."
|
12
|
+
exit!
|
13
|
+
end if File.exist?(gemfile)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Railsapp::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
3
|
+
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
6
|
+
# since you don't have to restart the webserver when you make code changes.
|
7
|
+
config.cache_classes = false
|
8
|
+
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
10
|
+
config.whiny_nils = true
|
11
|
+
|
12
|
+
# Show full error reports and disable caching
|
13
|
+
config.consider_all_requests_local = true
|
14
|
+
config.action_view.debug_rjs = true
|
15
|
+
config.action_controller.perform_caching = false
|
16
|
+
|
17
|
+
# Don't care if the mailer can't send
|
18
|
+
config.action_mailer.raise_delivery_errors = false
|
19
|
+
|
20
|
+
# Print deprecation notices to the Rails logger
|
21
|
+
config.active_support.deprecation = :log
|
22
|
+
|
23
|
+
# Only use best-standards-support built into browsers
|
24
|
+
config.action_dispatch.best_standards_support = :builtin
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
Railsapp::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
3
|
+
|
4
|
+
# The production environment is meant for finished, "live" apps.
|
5
|
+
# Code is not reloaded between requests
|
6
|
+
config.cache_classes = true
|
7
|
+
|
8
|
+
# Full error reports are disabled and caching is turned on
|
9
|
+
config.consider_all_requests_local = false
|
10
|
+
config.action_controller.perform_caching = true
|
11
|
+
|
12
|
+
# Specifies the header that your server uses for sending files
|
13
|
+
config.action_dispatch.x_sendfile_header = "X-Sendfile"
|
14
|
+
|
15
|
+
# For nginx:
|
16
|
+
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
|
17
|
+
|
18
|
+
# If you have no front-end server that supports something like X-Sendfile,
|
19
|
+
# just comment this out and Rails will serve the files
|
20
|
+
|
21
|
+
# See everything in the log (default is :info)
|
22
|
+
# config.log_level = :debug
|
23
|
+
|
24
|
+
# Use a different logger for distributed setups
|
25
|
+
# config.logger = SyslogLogger.new
|
26
|
+
|
27
|
+
# Use a different cache store in production
|
28
|
+
# config.cache_store = :mem_cache_store
|
29
|
+
|
30
|
+
# Disable Rails's static asset server
|
31
|
+
# In production, Apache or nginx will already do this
|
32
|
+
config.serve_static_assets = false
|
33
|
+
|
34
|
+
# Enable serving of images, stylesheets, and javascripts from an asset server
|
35
|
+
# config.action_controller.asset_host = "http://assets.example.com"
|
36
|
+
|
37
|
+
# Disable delivery errors, bad email addresses will be ignored
|
38
|
+
# config.action_mailer.raise_delivery_errors = false
|
39
|
+
|
40
|
+
# Enable threaded mode
|
41
|
+
# config.threadsafe!
|
42
|
+
|
43
|
+
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
44
|
+
# the I18n.default_locale when a translation can not be found)
|
45
|
+
config.i18n.fallbacks = true
|
46
|
+
|
47
|
+
# Send deprecation notices to registered listeners
|
48
|
+
config.active_support.deprecation = :notify
|
49
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Railsapp::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Log error messages when you accidentally call methods on nil.
|
11
|
+
config.whiny_nils = true
|
12
|
+
|
13
|
+
# Show full error reports and disable caching
|
14
|
+
config.consider_all_requests_local = true
|
15
|
+
config.action_controller.perform_caching = false
|
16
|
+
|
17
|
+
# Raise exceptions instead of rendering exception templates
|
18
|
+
config.action_dispatch.show_exceptions = false
|
19
|
+
|
20
|
+
# Disable request forgery protection in test environment
|
21
|
+
config.action_controller.allow_forgery_protection = false
|
22
|
+
|
23
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
24
|
+
# The :test delivery method accumulates sent emails in the
|
25
|
+
# ActionMailer::Base.deliveries array.
|
26
|
+
config.action_mailer.delivery_method = :test
|
27
|
+
|
28
|
+
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
29
|
+
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
30
|
+
# like if you have constraints or database-specific column types
|
31
|
+
# config.active_record.schema_format = :sql
|
32
|
+
|
33
|
+
# Print deprecation notices to the stderr
|
34
|
+
config.active_support.deprecation = :stderr
|
35
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format
|
4
|
+
# (all these examples are active by default):
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
8
|
+
# inflect.irregular 'person', 'people'
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
10
|
+
# end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
# Make sure the secret is at least 30 characters and all random,
|
6
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
+
Railsapp::Application.config.secret_token = '60ef44ef55c7289c9013546cef8ef9aa67efd47177d7b4dbd85535f25de545a448e97eb62b9ce64df8aad9ec765d6c08d3725b738b9cbb503b978a61d765224b'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
Railsapp::Application.config.session_store :cookie_store, :key => '_railsapp_session'
|
4
|
+
|
5
|
+
# Use the database for sessions instead of the cookie-based default,
|
6
|
+
# which shouldn't be used to store highly confidential information
|
7
|
+
# (create the session table with "rake db:sessions:create")
|
8
|
+
# Railsapp::Application.config.session_store :active_record_store
|
@@ -0,0 +1,58 @@
|
|
1
|
+
Railsapp::Application.routes.draw do
|
2
|
+
# The priority is based upon order of creation:
|
3
|
+
# first created -> highest priority.
|
4
|
+
|
5
|
+
# Sample of regular route:
|
6
|
+
# match 'products/:id' => 'catalog#view'
|
7
|
+
# Keep in mind you can assign values other than :controller and :action
|
8
|
+
|
9
|
+
# Sample of named route:
|
10
|
+
# match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
|
11
|
+
# This route can be invoked with purchase_url(:id => product.id)
|
12
|
+
|
13
|
+
# Sample resource route (maps HTTP verbs to controller actions automatically):
|
14
|
+
# resources :products
|
15
|
+
|
16
|
+
# Sample resource route with options:
|
17
|
+
# resources :products do
|
18
|
+
# member do
|
19
|
+
# get 'short'
|
20
|
+
# post 'toggle'
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# collection do
|
24
|
+
# get 'sold'
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
|
28
|
+
# Sample resource route with sub-resources:
|
29
|
+
# resources :products do
|
30
|
+
# resources :comments, :sales
|
31
|
+
# resource :seller
|
32
|
+
# end
|
33
|
+
|
34
|
+
# Sample resource route with more complex sub-resources
|
35
|
+
# resources :products do
|
36
|
+
# resources :comments
|
37
|
+
# resources :sales do
|
38
|
+
# get 'recent', :on => :collection
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
|
42
|
+
# Sample resource route within a namespace:
|
43
|
+
# namespace :admin do
|
44
|
+
# # Directs /admin/products/* to Admin::ProductsController
|
45
|
+
# # (app/controllers/admin/products_controller.rb)
|
46
|
+
# resources :products
|
47
|
+
# end
|
48
|
+
|
49
|
+
# You can have the root of your site routed with "root"
|
50
|
+
# just remember to delete public/index.html.
|
51
|
+
# root :to => "welcome#index"
|
52
|
+
|
53
|
+
# See how all your routes lay out with "rake routes"
|
54
|
+
|
55
|
+
# This is a legacy wild controller route that's not recommended for RESTful applications.
|
56
|
+
# Note: This route will make all actions in every controller accessible via GET requests.
|
57
|
+
# match ':controller(/:action(/:id(.:format)))'
|
58
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
2
|
+
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
|
+
#
|
4
|
+
# Examples:
|
5
|
+
#
|
6
|
+
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
|
7
|
+
# Mayor.create(:name => 'Daley', :city => cities.first)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
+
ENV["RAILS_ENV"] ||= 'test'
|
3
|
+
require File.expand_path("../../config/environment", __FILE__)
|
4
|
+
require 'rspec/rails'
|
5
|
+
require "wrong/adapters/rspec"
|
6
|
+
|
7
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
8
|
+
# in spec/support/ and its subdirectories.
|
9
|
+
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
# == Mock Framework
|
13
|
+
#
|
14
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
15
|
+
#
|
16
|
+
# config.mock_with :mocha
|
17
|
+
# config.mock_with :flexmock
|
18
|
+
# config.mock_with :rr
|
19
|
+
config.mock_with :rspec
|
20
|
+
|
21
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
22
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
23
|
+
|
24
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
25
|
+
# examples within a transaction, remove the following line or assign false
|
26
|
+
# instead of true.
|
27
|
+
config.use_transactional_fixtures = true
|
28
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
here = File.expand_path(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "open3"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
require "./test/test_helper"
|
7
|
+
require "wrong/adapters/minitest"
|
8
|
+
|
9
|
+
include Wrong
|
10
|
+
|
11
|
+
# If a new version of Rails comes along, alter and then run the script in this directory
|
12
|
+
# called rspec-rails-generate.sh -- if you dare
|
13
|
+
|
14
|
+
|
15
|
+
if RUBY_VERSION == "1.9.2" # too many issues with other versions
|
16
|
+
describe "testing rspec-rails" do
|
17
|
+
|
18
|
+
[2].each do |rspec_version|
|
19
|
+
it "in version #{rspec_version}" do
|
20
|
+
railsapp_dir = "#{here}/railsapp"
|
21
|
+
|
22
|
+
unless File.exist?(railsapp_dir)
|
23
|
+
Dir.chdir(here) do
|
24
|
+
clear_bundler_env
|
25
|
+
sys "sh ./railsapp-gen.sh"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
spec_output = nil
|
30
|
+
Dir.chdir(railsapp_dir) do
|
31
|
+
clear_bundler_env
|
32
|
+
FileUtils.rm "#{railsapp_dir}/Gemfile.lock", :force => true
|
33
|
+
|
34
|
+
# todo: extract into common function
|
35
|
+
sys "bundle check" do |output|
|
36
|
+
unless output == "The Gemfile's dependencies are satisfied\n"
|
37
|
+
sys "bundle install --gemfile=#{railsapp_dir}/Gemfile"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# todo: extract into common function
|
42
|
+
sys "bundle list" do |output|
|
43
|
+
lines = output.split("\n")
|
44
|
+
lines.grep(/rspec/) do |line|
|
45
|
+
assert { line =~ /rspec[-\w]* \(#{rspec_version}\.[\w.]*\)/ }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
spec_output = sys "rspec spec/wrong_spec.rb",
|
50
|
+
(rspec_version == 1 || RUBY_VERSION =~ /^1\.8\./ || RUBY_VERSION == '1.9.1' ? nil : 1) # RSpec v1 exits with 0 on failure :-(
|
51
|
+
end
|
52
|
+
|
53
|
+
assert { spec_output.include? "1 example, 1 failure" }
|
54
|
+
assert { spec_output.include? "Expected ((1 + 1) == 3), but" }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/test/adapters/rspec_test.rb
CHANGED
@@ -11,28 +11,6 @@ include Wrong
|
|
11
11
|
# Okay, this looks like RSpec but it's actually minitest
|
12
12
|
describe "testing rspec" do
|
13
13
|
|
14
|
-
def sys(cmd, expected_status = 0)
|
15
|
-
start_time = Time.now
|
16
|
-
$stderr.print cmd
|
17
|
-
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thread|
|
18
|
-
# in Ruby 1.8, wait_thread is nil :-( so just pretend the process was successful (status 0)
|
19
|
-
exit_status = (wait_thread.value.exitstatus if wait_thread) || 0
|
20
|
-
output = stdout.read + stderr.read
|
21
|
-
unless expected_status.nil?
|
22
|
-
assert { output and exit_status == expected_status }
|
23
|
-
end
|
24
|
-
yield output if block_given?
|
25
|
-
output
|
26
|
-
end
|
27
|
-
ensure
|
28
|
-
$stderr.puts " (#{"%.2f" % (Time.now - start_time)} sec)"
|
29
|
-
end
|
30
|
-
|
31
|
-
def clear_bundler_env
|
32
|
-
# Bundler inherits its environment by default, so clear it here
|
33
|
-
%w{BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE}.each { |var| ENV.delete(var) }
|
34
|
-
end
|
35
|
-
|
36
14
|
[1, 2].each do |rspec_version|
|
37
15
|
it "version #{rspec_version}" do
|
38
16
|
dir = "#{here}/rspec#{rspec_version}"
|
@@ -63,42 +41,3 @@ describe "testing rspec" do
|
|
63
41
|
end
|
64
42
|
end
|
65
43
|
end
|
66
|
-
|
67
|
-
=begin
|
68
|
-
# I would use
|
69
|
-
# out, err = capturing(:stdout, :stderr) do
|
70
|
-
# but minitest does its own arcane stream munging and it's not working
|
71
|
-
|
72
|
-
out = StringIO.new
|
73
|
-
err = StringIO.new
|
74
|
-
Spec::Runner.use(Spec::Runner::Options.new(out, err))
|
75
|
-
|
76
|
-
module RSpecWrapper
|
77
|
-
include Spec::DSL::Main
|
78
|
-
describe "inside rspec land" do
|
79
|
-
it "works" do
|
80
|
-
sky = "blue"
|
81
|
-
assert { sky == "green" }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
Spec::Runner.options.parse_format("nested")
|
87
|
-
Spec::Runner.options.run_examples
|
88
|
-
|
89
|
-
assert(err.string.index(<<-RSPEC) == 0, "make sure the rspec formatter was used")
|
90
|
-
inside rspec land
|
91
|
-
works (FAILED - 1)
|
92
|
-
|
93
|
-
1)
|
94
|
-
'inside rspec land works' FAILED
|
95
|
-
RSPEC
|
96
|
-
|
97
|
-
failures = Spec::Runner.options.reporter.instance_variable_get(:@failures) # todo: use my own reporter?
|
98
|
-
assert !failures.empty?
|
99
|
-
exception = failures.first.exception
|
100
|
-
assert(exception.is_a?(Spec::Expectations::ExpectationNotMetError))
|
101
|
-
assert(exception.message =~ /^Expected \(sky == \"green\"\), but/, "message is #{exception.message.inspect}")
|
102
|
-
end
|
103
|
-
end
|
104
|
-
=end
|
@@ -32,13 +32,13 @@ class MyFailingAssertTest < Test::Unit::TestCase
|
|
32
32
|
#I can do without all the TU Listener business, thank you
|
33
33
|
failures = result.instance_variable_get("@failures".to_sym)
|
34
34
|
assert{ failures.length==1 }
|
35
|
-
assert{ failures.first.long_display.include?("1
|
35
|
+
assert{ failures.first.long_display.include?("Expected (1 == 2)") }
|
36
36
|
|
37
37
|
result = Test::Unit::TestResult.new
|
38
38
|
failures = result.instance_variable_get("@failures".to_sym)
|
39
39
|
my_failing_deny_test.new("test_fail").run(result) {|started, name| }
|
40
40
|
assert{ failures.length==1 }
|
41
|
-
assert{ failures.first.long_display.include?("
|
41
|
+
assert{ failures.first.long_display.include?("Didn't expect (1 == 1)") }
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_passes_asserts_with_no_block_up_to_the_frameworks_assert_method
|