tconsole 1.1.0pre11 → 1.1.0pre12

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,4 +3,5 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in tconsole.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rake'
6
+ gem "rake"
7
+ gem "nutrasuite"
data/Rakefile CHANGED
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/**/*_test.rb']
7
+ t.verbose = true
8
+ end
data/lib/tconsole.rb CHANGED
@@ -28,9 +28,18 @@ module TConsole
28
28
  puts "Welcome to tconsole (v#{TConsole::VERSION}). Type 'help' for help or 'exit' to quit."
29
29
 
30
30
  # set up the config
31
+ Config.load_config(File.join(Dir.home, ".tconsole"))
32
+ Config.load_config(File.join(Dir.pwd, ".tconsole"))
31
33
  config = Config.configure
32
34
  config.trace_execution = true if argv.include?("--trace")
33
35
 
36
+ config_errors = config.validation_errors
37
+ if config_errors.length > 0
38
+ puts
39
+ puts config_errors.first
40
+ exit(1)
41
+ end
42
+
34
43
  # Set up our console input handling and history
35
44
  console = Console.new(config)
36
45
 
@@ -49,7 +58,17 @@ module TConsole
49
58
 
50
59
  while message = pipe_server.read
51
60
  config.trace("Server Received Message: #{message[:action]}")
52
- pipe_server.write(server.handle(message))
61
+ begin
62
+ result = server.handle(message)
63
+ pipe_server.write(result)
64
+ rescue => e
65
+ puts
66
+ puts "An error occured: #{e.message}"
67
+ config.trace("===========")
68
+ config.trace(e.backtrace.join("\n"))
69
+ config.trace("===========")
70
+ pipe_server.write(nil)
71
+ end
53
72
  end
54
73
 
55
74
  rescue Interrupt
@@ -91,10 +91,44 @@ module TConsole
91
91
  self.cached_elements = result.elements
92
92
  end
93
93
 
94
+ # Returns true if this config is valid or false otherwise
95
+ def validation_errors
96
+ errors = []
97
+
98
+ unless Dir.exists?(test_dir)
99
+ errors << "Couldn't find test directory `#{test_dir}`. Exiting."
100
+ end
101
+
102
+ unless file_sets.is_a?(Hash) && !file_sets["all"].nil?
103
+ errors << "No `all` file set is defined in your configuration. Exiting."
104
+ end
105
+
106
+ errors
107
+ end
108
+
109
+ # Loads up a config file
110
+ def self.load_config(path)
111
+ if File.exist?(path)
112
+ load path
113
+ end
114
+ end
115
+
116
+ # Saves a configuration block that we can apply to the configuration once it's
117
+ # loaded
118
+ def self.run(&block)
119
+ @loaded_configs ||= []
120
+ @loaded_configs << block
121
+ end
122
+
123
+ def self.clear_loaded_configs
124
+ @loaded_configs = nil
125
+ end
126
+
94
127
  # Returns an appropriate tconsole config based on the environment
95
128
  def self.configure
129
+ config = Config.new
130
+
96
131
  if is_rails?
97
- config = Config.new
98
132
  config.preload_paths = ["./config/application"]
99
133
  config.include_paths = ["./test"]
100
134
  config.file_sets = {
@@ -127,11 +161,14 @@ module TConsole
127
161
  ::ActiveRecord::Base.establish_connection
128
162
  end
129
163
  end
164
+ end
130
165
 
131
- config
132
- else
133
- Config.new
166
+ @loaded_configs ||= []
167
+ @loaded_configs.each do |block|
168
+ block.call(config)
134
169
  end
170
+
171
+ config
135
172
  end
136
173
 
137
174
  def self.is_rails?
@@ -21,7 +21,7 @@ module TConsole
21
21
 
22
22
  known_elements = []
23
23
  unless pipe_server.nil?
24
- known_elements = send_message_to_server({:action => "autocomplete", :text => str})
24
+ known_elements = send_message(:autocomplete, str)
25
25
  end
26
26
 
27
27
  known_commands.concat(known_elements)
@@ -47,34 +47,34 @@ module TConsole
47
47
  if line == ""
48
48
  # do nothing
49
49
  elsif args[0] == "exit"
50
- send_message_to_server({:action => "exit"})
50
+ send_message(:stop)
51
51
  self.pipe_server = nil
52
52
  return false
53
53
  elsif args[0] == "reload"
54
- send_message_to_server({:action => "exit"})
54
+ send_message(:stop)
55
55
  return true
56
56
  elsif args[0] == "help"
57
57
  print_help
58
58
  elsif args[0] == "!failed"
59
- send_message_to_server({:action => "run_failed"})
59
+ send_message(:run_failed)
60
60
  elsif args[0] == "!timings"
61
- send_message_to_server({:action => "show_performance", :limit => args[1]})
61
+ send_message(:show_performance, args[1])
62
62
  elsif args[0] == "info"
63
- send_message_to_server({:action => "run_info"}, pipe_server)
63
+ send_message(:run_info)
64
64
  elsif args[0] == "set"
65
- send_message_to_server({:action => "set", :var => args[1], :value => args[2]})
65
+ send_message(:set, args[1], args[2])
66
66
  elsif @config.file_sets.has_key?(args[0])
67
- send_message_to_server({:action => "run_file_set", :set => args[0]})
67
+ send_message(:run_file_set, args[0])
68
68
  else
69
- send_message_to_server({:action => "run_all_tests", :args => args})
69
+ send_message(:run_all_tests, args)
70
70
  end
71
71
  end
72
72
 
73
73
  true
74
74
  end
75
75
 
76
- def send_message_to_server(message)
77
- pipe_server.write(message)
76
+ def send_message(message, *args)
77
+ pipe_server.write({:action => message.to_sym, :args => args})
78
78
  pipe_server.read
79
79
  end
80
80
 
@@ -9,7 +9,7 @@ module TConsole
9
9
  end
10
10
 
11
11
  # Run it
12
- runner = MiniTest::Unit.runner
12
+ runner = ::MiniTest::Unit.runner
13
13
  runner.run
14
14
 
15
15
  # Make sure that minitest doesn't run automatically when the process exits
@@ -60,7 +60,7 @@ module TConsole
60
60
  "P" => ::Term::ANSIColor.green
61
61
  }
62
62
 
63
- attr_accessor :match_patterns, :config, :results
63
+ attr_accessor :match_patterns, :config, :results, :passes
64
64
 
65
65
  def initialize(match_patterns, config)
66
66
  self.match_patterns = match_patterns
@@ -69,10 +69,15 @@ module TConsole
69
69
  self.config = config
70
70
  self.results = TConsole::TestResult.new
71
71
 
72
+ self.passes = 0
73
+
72
74
  results.suite_counts = config.cached_suite_counts
73
75
  results.elements = config.cached_elements
74
76
 
75
77
  super()
78
+
79
+ # We do this since plugins like turn may have tweaked it
80
+ @@out = $stdout
76
81
  end
77
82
 
78
83
  def _run_anything(type)
@@ -109,8 +114,25 @@ module TConsole
109
114
  end
110
115
 
111
116
  def status(io = self.output)
112
- format = "%d tests, %d assertions, %d failures, %d errors, %d skips"
113
- io.puts format % [test_count, assertion_count, failures, errors, skips]
117
+ format = "%d tests, %d assertions, "
118
+
119
+ format << COLOR_MAP["P"] if passes > 0
120
+ format << "%d passes, "
121
+ format << ::Term::ANSIColor.reset if passes > 0
122
+
123
+ format << COLOR_MAP["F"] if failures > 0
124
+ format << "%d failures, "
125
+ format << ::Term::ANSIColor.reset if failures > 0
126
+
127
+ format << COLOR_MAP["E"] if errors > 0
128
+ format << "%d errors, "
129
+ format << ::Term::ANSIColor.reset if errors > 0
130
+
131
+ format << COLOR_MAP["S"] if skips > 0
132
+ format << "%d skips"
133
+ format << ::Term::ANSIColor.reset if skips > 0
134
+
135
+ io.puts format % [test_count, assertion_count, passes, failures, errors, skips]
114
136
  end
115
137
 
116
138
  def _run_suite(suite, type)
@@ -154,7 +176,10 @@ module TConsole
154
176
  time = Time.now - @start_time
155
177
  results.add_timing(suite, method, time)
156
178
 
157
- result = "P" if result == "."
179
+ if result == "."
180
+ result = "P"
181
+ self.passes += 1
182
+ end
158
183
 
159
184
  results.failures << id unless result == "P"
160
185
 
@@ -184,19 +209,19 @@ module TConsole
184
209
  @skips += 1
185
210
  results.skip_count += 1
186
211
  return "S" unless @verbose
187
- "Skipped:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
212
+ ["S", COLOR_MAP["S"] + "Skipped:\n#{meth}(#{klass})" + ::Term::ANSIColor.reset + " [#{location e}]:\n#{e.message}\n"]
188
213
  when MiniTest::Assertion then
189
214
  @failures += 1
190
215
  results.failure_count += 1
191
- "Failure:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
216
+ ["F", COLOR_MAP["F"] + "Failure:\n#{meth}(#{klass})" + ::Term::ANSIColor.reset + " [#{location e}]:\n#{e.message}\n"]
192
217
  else
193
218
  @errors += 1
194
219
  results.error_count += 1
195
220
  bt = MiniTest::filter_backtrace(e.backtrace).join "\n "
196
- "Error:\n#{meth}(#{klass}):\n#{e.class}: #{e.message}\n #{bt}\n"
221
+ ["E", COLOR_MAP["E"] + "Error:\n#{meth}(#{klass}):\n" + ::Term::ANSIColor.reset + "#{e.class}: #{e.message}\n #{bt}\n"]
197
222
  end
198
- @report << e
199
- e[0, 1]
223
+ @report << e[1]
224
+ e[0]
200
225
  end
201
226
  end
202
227
  end
@@ -10,25 +10,32 @@ module TConsole
10
10
  # Processes the message sent from the console
11
11
  def handle(message)
12
12
  action = message[:action]
13
- if action == "load_environment"
14
- load_environment
15
- elsif action == "run_failed"
16
- run_failed
17
- elsif action == "show_performance"
18
- show_performance(message[:limit])
19
- elsif action == "run_info"
20
- run_info
21
- elsif action == "set"
22
- set(message[:var], message[:value])
23
- elsif action == "run_file_set"
24
- run_file_set(message[:set])
25
- elsif action == "run_all_tests"
26
- run_all_tests(message[:args])
27
- elsif action == "autocomplete"
28
- autocomplete(message[:text])
29
- elsif action == "exit"
30
- exit(0)
31
- end
13
+ args = message[:args]
14
+
15
+ send(action, *args)
16
+ # if action == "load_environment"
17
+ # load_environment
18
+ # elsif action == "run_failed"
19
+ # run_failed
20
+ # elsif action == "show_performance"
21
+ # show_performance(message[:limit])
22
+ # elsif action == "run_info"
23
+ # run_info
24
+ # elsif action == "set"
25
+ # set(message[:var], message[:value])
26
+ # elsif action == "run_file_set"
27
+ # run_file_set(message[:set])
28
+ # elsif action == "run_all_tests"
29
+ # run_all_tests(message[:args])
30
+ # elsif action == "autocomplete"
31
+ # autocomplete(message[:text])
32
+ # elsif action == "exit"
33
+ # exit(0)
34
+ # end
35
+ end
36
+
37
+ def stop
38
+ Kernel.exit(0)
32
39
  end
33
40
 
34
41
  def load_environment
@@ -228,48 +235,24 @@ module TConsole
228
235
 
229
236
  def set(key, value)
230
237
  if key == "fast"
231
- value.downcase!
232
- if value == "on" || value == "true" || value == "yes"
233
- config.fail_fast = true
238
+ if !value.nil?
239
+ value.downcase!
240
+ if ["on", "true", "yes"].include?(value)
241
+ config.fail_fast = true
242
+ else
243
+ config.fail_fast = false
244
+ end
245
+
246
+ puts ::Term::ANSIColor.green + "Fail Fast is now #{config.fail_fast ? "on" : "off"}" + ::Term::ANSIColor.reset
247
+ puts
234
248
  else
235
- config.fail_fast = false
249
+ puts ::Term::ANSIColor.green + "Fail fast is currently #{config.fail_fast ? "on" : "off"}" + ::Term::ANSIColor.reset
250
+ puts
236
251
  end
237
-
238
- puts "Fail Fast is now #{config.fail_fast ? "on" : "off"}"
239
- puts
240
252
  else
241
- puts "#{key} isn't an available runtime setting."
253
+ puts ::Term::ANSIColor.yellow + "I don't know how to set `#{key}`." + ::Term::ANSIColor.reset + " Usage: set {key} {value}"
242
254
  puts
243
255
  end
244
256
  end
245
-
246
- def filenameify(klass_name)
247
- result = ""
248
- first = true
249
- klass_name.chars do |char|
250
- new = char.downcase!
251
- if new.nil?
252
- result << char
253
- elsif first
254
- result << new
255
- else
256
- result << "_#{new}"
257
- end
258
-
259
- first = false
260
- end
261
-
262
- result
263
- end
264
-
265
- # Totally yanked from the Rails test tasks
266
- def silence_stderr
267
- old_stderr = STDERR.dup
268
- STDERR.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
269
- STDERR.sync = true
270
- yield
271
- ensure
272
- STDERR.reopen(old_stderr)
273
- end
274
257
  end
275
258
  end
@@ -1,3 +1,3 @@
1
1
  module TConsole
2
- VERSION = "1.1.0pre11"
2
+ VERSION = "1.1.0pre12"
3
3
  end
data/tconsole.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  # specify any dependencies here; for example:
25
25
  # s.add_development_dependency "rspec"
26
26
  s.add_runtime_dependency "term-ansicolor", "~> 1.0.7"
27
+ s.add_runtime_dependency "minitest", "~> 2.11.0"
27
28
  end
data/test/config_test.rb CHANGED
@@ -1,3 +1,71 @@
1
- class ConfigTest < MiniTest::Unit::TestCase
1
+ require 'test_helper'
2
2
 
3
+ module TConsole
4
+ class ConfigTest < MiniTest::Unit::TestCase
5
+
6
+ a "Config" do
7
+ setup do
8
+ @config = TConsole::Config.new
9
+ end
10
+
11
+ it "should have appropriate defaults" do
12
+ assert_equal false, @config.trace_execution
13
+ assert_equal "./test", @config.test_dir
14
+ assert_equal ["./test", "./lib"], @config.include_paths
15
+ assert_equal [], @config.preload_paths
16
+ assert_equal false, @config.fail_fast
17
+ assert_equal({ "all" => ["./test/**/*_test.rb"] }, @config.file_sets)
18
+ end
19
+
20
+ it "should have a validation error if the configured test directory doesn't exist" do
21
+ @config.test_dir = "./monkey_business"
22
+
23
+ errors = @config.validation_errors
24
+ refute_nil errors
25
+ assert_equal "Couldn't find test directory `./monkey_business`. Exiting.", errors[0]
26
+ end
27
+
28
+ it "should have a validation error if the configuration doesn't include an all file set" do
29
+ @config.file_sets = {}
30
+
31
+ errors = @config.validation_errors
32
+ refute_nil errors
33
+ assert_equal "No `all` file set is defined in your configuration. Exiting.", errors[0]
34
+ end
35
+ end
36
+
37
+ the "Config class" do
38
+ setup do
39
+ TConsole::Config.clear_loaded_configs
40
+ end
41
+
42
+ it "should save the proc passed to run when it's called" do
43
+ TConsole::Config.run do |config|
44
+ config.test_dir = "./awesome_sauce"
45
+ end
46
+
47
+ assert_equal 1, TConsole::Config.instance_variable_get(:@loaded_configs).length
48
+ end
49
+
50
+ it "should apply the loaded configs from first to last when configure is called" do
51
+ TConsole::Config.run do |config|
52
+ config.test_dir = "./awesome_sauce"
53
+ end
54
+
55
+ TConsole::Config.run do |config|
56
+ config.test_dir = "./awesomer_sauce"
57
+ end
58
+
59
+ config = TConsole::Config.configure
60
+
61
+ assert_equal "./awesomer_sauce", config.test_dir
62
+ end
63
+
64
+ it "should load a config file when load_config is called" do
65
+ TConsole::Config.load_config(File.join(File.dirname(__FILE__), "sample_config"))
66
+
67
+ assert_equal 1, TConsole::Config.instance_variable_get(:@loaded_configs).length
68
+ end
69
+ end
70
+ end
3
71
  end
@@ -0,0 +1,3 @@
1
+ TConsole::Config.run do |config|
2
+ config.test_dir = "./awesome_sauce"
3
+ end
@@ -0,0 +1,7 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'test/unit'
5
+ require 'nutrasuite'
6
+
7
+ require 'tconsole'
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.0pre11
4
+ version: 1.1.0pre12
5
5
  prerelease: 5
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000 Z
12
+ date: 2012-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70281579497440 !ruby/object:Gem::Requirement
16
+ requirement: &70138167691280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,18 @@ dependencies:
21
21
  version: 1.0.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70281579497440
24
+ version_requirements: *70138167691280
25
+ - !ruby/object:Gem::Dependency
26
+ name: minitest
27
+ requirement: &70138167690780 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.11.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70138167690780
25
36
  description: ! " tconsole allows Rails developers to easily and quickly run their
26
37
  tests as a whole or in subsets. It forks the testing processes from\n a preloaded
27
38
  test environment to ensure that developers don't have to reload their entire Rails
@@ -50,6 +61,8 @@ files:
50
61
  - lib/tconsole/version.rb
51
62
  - tconsole.gemspec
52
63
  - test/config_test.rb
64
+ - test/sample_config
65
+ - test/test_helper.rb
53
66
  homepage: ''
54
67
  licenses: []
55
68
  post_install_message:
@@ -76,3 +89,5 @@ specification_version: 3
76
89
  summary: tconsole is a helpful console for running Rails tests
77
90
  test_files:
78
91
  - test/config_test.rb
92
+ - test/sample_config
93
+ - test/test_helper.rb