tconsole 1.1.0pre3 → 1.1.0pre4

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/lib/tconsole.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "tconsole/version"
2
+ require "tconsole/config"
2
3
  require "tconsole/server"
3
4
  require "tconsole/test_result"
4
5
  require "tconsole/util"
@@ -45,8 +46,10 @@ module TConsole
45
46
  console = Console.new
46
47
 
47
48
  # set up the config
48
- config = {:trace => false}
49
- config[:trace] = true if argv.include?("--trace")
49
+ config = Config.configure
50
+ config.trace = true if argv.include?("--trace")
51
+
52
+ socket_path = "/tmp/tconsole.#{Process.pid}"
50
53
 
51
54
  # Start the server
52
55
  while running
@@ -56,18 +59,24 @@ module TConsole
56
59
  begin
57
60
  server = Server.new(config)
58
61
 
59
- drb_server = DRb.start_service("drbunix:/tmp/tconsole.#{Process.pid}", server)
62
+ drb_server = DRb.start_service("drbunix:#{socket_path}", server)
60
63
  DRb.thread.join
61
64
  rescue Interrupt
62
65
  # do nothing here since the outer process will shut things down for us
63
66
  end
64
67
  end
65
68
 
69
+ # Wait for the server to be fully started
70
+ wait_until = Time.now + 10
71
+ until(File.exist?(socket_path) || Time.now > wait_until)
72
+ sleep(1)
73
+ end
74
+
66
75
  # Set up our client connection to the server
67
- server = DRbObject.new_with_uri("drbunix:/tmp/tconsole.#{server_pid}")
76
+ DRb.start_service
77
+ server = DRbObject.new_with_uri("drbunix:#{socket_path}")
68
78
 
69
79
  loaded = false
70
- wait_until = Time.now + 10
71
80
  until loaded || Time.now > wait_until
72
81
  # Give drb a second to get set up
73
82
  sleep(1)
@@ -0,0 +1,94 @@
1
+ module TConsole
2
+ class Config
3
+ # Lets us know if we should include trace output
4
+ attr_accessor :trace
5
+
6
+ # Test directory for the app we're testing
7
+ attr_accessor :test_dir
8
+
9
+ # Paths to add to the ruby include path
10
+ attr_accessor :include_paths
11
+
12
+ # Paths we want to preload
13
+ attr_accessor :preload_paths
14
+
15
+ def initialize
16
+ self.trace = false
17
+ self.test_dir = "./test"
18
+ self.include_paths = ["./test", "./lib"]
19
+ self.preload_paths = []
20
+
21
+ @after_load = nil
22
+ end
23
+
24
+ def trace?
25
+ self.trace
26
+ end
27
+
28
+ # Code to run before loading the environment
29
+ def before_load(&block)
30
+ @before_load = block
31
+ end
32
+
33
+ # Calls the before load callback
34
+ def before_load!
35
+ @before_load.call unless @before_load.nil?
36
+ end
37
+
38
+ # Code to run after loading the environment
39
+ def after_load(&block)
40
+ @after_load = block
41
+ end
42
+
43
+ # Calls the after load callback
44
+ def after_load!
45
+ @after_load.call unless @after_load.nil?
46
+ end
47
+
48
+ # Calls before each test execution
49
+ def before_test_run(&block)
50
+ @before_test_run = block
51
+ end
52
+
53
+ def before_test_run!
54
+ @before_test_run.call unless @before_test_run.nil?
55
+ end
56
+
57
+ # Returns an appropriate tconsole config based on the environment
58
+ def self.configure
59
+ if is_rails?
60
+ config = Config.new
61
+ config.preload_paths = ["./config/application"]
62
+ config.include_paths = ["./test"]
63
+
64
+ config.before_load do
65
+ ENV["RAILS_ENV"] ||= "test"
66
+ end
67
+
68
+ config.after_load do
69
+ ::Rails.application
70
+ ::Rails::Engine.class_eval do
71
+ def eager_load!
72
+ # turn off eager_loading
73
+ end
74
+ end
75
+ end
76
+
77
+ config.before_test_run do
78
+ if defined? ::ActiveRecord
79
+ ::ActiveRecord::Base.clear_active_connections!
80
+ ::ActiveRecord::Base.establish_connection
81
+ end
82
+ end
83
+
84
+ config
85
+ else
86
+ Config.new
87
+ end
88
+ end
89
+
90
+ def self.is_rails?
91
+ @rails ||= !!File.exist?("./config/application.rb")
92
+ end
93
+ end
94
+ end
@@ -15,16 +15,28 @@ module TConsole
15
15
  result = false
16
16
 
17
17
  time = Benchmark.realtime do
18
+ puts
19
+ puts "Loading environment..."
18
20
 
19
21
  begin
20
- if is_rails?
21
- result = load_rails_environment
22
- else
23
- result = load_non_rails_environment
22
+ # Append our include paths
23
+ config.include_paths.each do |include_path|
24
+ $:.unshift(include_path)
24
25
  end
26
+
27
+ config.before_load!
28
+
29
+ # Load our preload files
30
+ config.preload_paths.each do |preload_path|
31
+ require preload_path
32
+ end
33
+
34
+ config.after_load!
35
+
36
+ result = true
25
37
  rescue Exception => e
26
38
  puts "Error - Loading your environment failed: #{e.message}"
27
- if config[:trace] == true
39
+ if config.trace?
28
40
  puts
29
41
  puts " #{e.backtrace.join("\n ")}"
30
42
  end
@@ -39,42 +51,6 @@ module TConsole
39
51
  result
40
52
  end
41
53
 
42
- def is_rails?
43
- @rails ||= !!File.exist?("./config/application.rb")
44
- end
45
-
46
- def load_rails_environment
47
- puts
48
- puts "Loading Rails environment..."
49
-
50
- # Ruby environment loading is shamelessly borrowed from spork
51
- ENV["RAILS_ENV"] ||= "test"
52
- $:.unshift("./test")
53
-
54
- # This is definitely based on Sporks rails startup code. I tried initially to use Rake to get things done
55
- # and match the test environment a bit better, but it didn't work out well at all
56
- # TODO: Figure out how ot get rake db:test:load and rake test:prepare working in this context
57
- require "./config/application"
58
- ::Rails.application
59
- ::Rails::Engine.class_eval do
60
- def eager_load!
61
- # turn off eager_loading
62
- end
63
- end
64
-
65
- true
66
- end
67
-
68
- def load_non_rails_environment
69
- $:.unshift("./lib")
70
- $:.unshift("./test")
71
-
72
- puts
73
- puts "Loading environment..."
74
-
75
- true
76
- end
77
-
78
54
  def run_tests(globs, name_pattern, message = "Running tests...")
79
55
  time = Benchmark.realtime do
80
56
  # Pipe for communicating with child so we can get its results back
@@ -90,16 +66,12 @@ module TConsole
90
66
  globs.each do |glob|
91
67
  paths.concat(Dir.glob(glob))
92
68
  end
93
- puts "Paths: #{paths.join(", ")}"
94
69
 
95
70
  paths.each do |path|
96
71
  require File.expand_path(path)
97
72
  end
98
73
 
99
- if defined? ::ActiveRecord
100
- ::ActiveRecord::Base.clear_active_connections!
101
- ::ActiveRecord::Base.establish_connection
102
- end
74
+ config.before_test_run!
103
75
 
104
76
  if defined?(::MiniTest)
105
77
  require File.join(File.dirname(__FILE__), "minitest_handler")
@@ -150,7 +122,6 @@ module TConsole
150
122
  end
151
123
 
152
124
  def run_failed
153
- # TODO: We probably shouldn't use built in Rails methods here if we can help it
154
125
  file_names = last_result.failure_details.map { |detail| filenameify(detail[:class]) }
155
126
  files_to_rerun = []
156
127
 
@@ -251,5 +222,15 @@ module TConsole
251
222
 
252
223
  result
253
224
  end
225
+
226
+ # Totally yanked from the Rails test tasks
227
+ def silence_stderr
228
+ old_stderr = STDERR.dup
229
+ STDERR.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
230
+ STDERR.sync = true
231
+ yield
232
+ ensure
233
+ STDERR.reopen(old_stderr)
234
+ end
254
235
  end
255
236
  end
@@ -1,3 +1,3 @@
1
1
  module TConsole
2
- VERSION = "1.1.0pre3"
2
+ VERSION = "1.1.0pre4"
3
3
  end
@@ -0,0 +1,3 @@
1
+ class ConfigTest < MiniTest::Unit::TestCase
2
+
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tconsole
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0pre3
4
+ version: 1.1.0pre4
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70275488249920 !ruby/object:Gem::Requirement
16
+ requirement: &70233285449540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 1.0.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70275488249920
24
+ version_requirements: *70233285449540
25
25
  description: ! " tconsole allows Rails developers to easily and quickly run their
26
26
  tests as a whole or in subsets. It forks the testing processes from\n a preloaded
27
27
  test environment to ensure that developers don't have to reload their entire Rails
@@ -40,12 +40,14 @@ files:
40
40
  - Rakefile
41
41
  - bin/tconsole
42
42
  - lib/tconsole.rb
43
+ - lib/tconsole/config.rb
43
44
  - lib/tconsole/minitest_handler.rb
44
45
  - lib/tconsole/server.rb
45
46
  - lib/tconsole/test_result.rb
46
47
  - lib/tconsole/util.rb
47
48
  - lib/tconsole/version.rb
48
49
  - tconsole.gemspec
50
+ - test/config_test.rb
49
51
  homepage: ''
50
52
  licenses: []
51
53
  post_install_message:
@@ -70,4 +72,5 @@ rubygems_version: 1.8.11
70
72
  signing_key:
71
73
  specification_version: 3
72
74
  summary: tconsole is a helpful console for running Rails tests
73
- test_files: []
75
+ test_files:
76
+ - test/config_test.rb