Narnach-minitest 0.3.0 → 0.3.1

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.rdoc CHANGED
@@ -1,10 +1,17 @@
1
1
  == Minitest
2
- Minitest is a simple autotester intended to be used with rSpec and rCov.
3
- It can be used with 'plain' ruby projects and Ruby on Rails.
2
+ Minitest is a simple autotester intended to be used with rSpec, Test::Unit and rCov.
3
+ It can be used with 'plain' Ruby projects and Ruby on Rails.
4
4
 
5
5
  == Recent changes
6
- Version 0.3.0 switched to a new file monitoring backend, DirMonitor.
7
- The 'recent' feature was removed.
6
+
7
+ === Version 0.3.1
8
+ Minitest gained support to test Test::Unit tests and RSpec specs at the same time.
9
+
10
+ === Version 0.3.0
11
+ Minitest switched to a new file monitoring backend: DirMonitor.
12
+ This makes it possible to track new files as they are created, without needing to restart minitest.
13
+ The 'recent' feature was removed because DirMonitor does not (yet?) have a way to only yield files
14
+ newer than some timestamp. This feature is likely to re-appear in a nearby future.
8
15
 
9
16
  == Installation
10
17
  === From gem
@@ -28,7 +35,12 @@ When you start working on a codebase, it makes sense to run all specs:
28
35
  When you want to see which specs are slow and could use optimizing:
29
36
  minitest profile
30
37
  You can also combine options:
31
- minitest recent profile
38
+ minitest drb profile
39
+
40
+ == Todo / ideas / plans
41
+ * Figure out how to get RCov to run specs and tests at the same time and implement it.
42
+ * Add 'recent' option (was removed in 0.3.0).
43
+ * Write tests for Minitest class.
32
44
 
33
45
  == About
34
46
  Author:: Wes 'Narnach' Oldenbeuving (narnach@gmail.com)
data/Rakefile CHANGED
@@ -2,7 +2,6 @@ require "rake"
2
2
  require "rake/clean"
3
3
  require "rake/gempackagetask"
4
4
  require 'rubygems'
5
- require 'lib/minitest'
6
5
 
7
6
  ################################################################################
8
7
  ### Gem
@@ -10,7 +9,8 @@ require 'lib/minitest'
10
9
 
11
10
  begin
12
11
  # Parse gemspec using the github safety level.
13
- data = File.read('minitest.gemspec')
12
+ file = Dir['*.gemspec'].first
13
+ data = File.read(file)
14
14
  spec = nil
15
15
  Thread.new { spec = eval("$SAFE = 3\n%s" % data)}.join
16
16
 
@@ -19,10 +19,10 @@ begin
19
19
  package.gem_spec = spec
20
20
  end
21
21
  rescue Exception => e
22
- printf "WARNING: Error caught (%s): %s\n", e.class.name, e.message
22
+ printf "WARNING: Error caught (%s): %s\n%s", e.class.name, e.message, e.backtrace[0...5].map {|l| ' %s' % l}.join("\n")
23
23
  end
24
24
 
25
25
  desc 'Package and install the gem for the current version'
26
26
  task :install => :gem do
27
- system "sudo gem install -l pkg/minitest-%s.gem" % spec.version
27
+ system "sudo gem install -l pkg/%s-%s.gem" % [spec.name, spec.version]
28
28
  end
data/bin/minitest CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
3
2
  require 'minitest'
4
3
 
5
4
  minitest = Minitest.new
data/lib/dir_monitor.rb CHANGED
@@ -1,13 +1,17 @@
1
1
  # Dirmonitor's purpose is to serve as a file monitoring helper for Minitest.
2
+ #
2
3
  # Its intended functionality is:
3
4
  # - Keep track of new files in monitored directories.
4
5
  # - Keep track of changed files in monitored directories.
5
- # - Link these files to their specs, so Minitest can run the specs.
6
+ # - Link these files to their specs or tests, so Minitest can run them.
6
7
  class DirMonitor
7
8
  attr_reader :known_files, :dirs, :last_mtime
8
9
 
9
10
  # Setup a new DirMonitor.
10
- # Directories can be provided in a number of ways:
11
+ #
12
+ # The input parameter(s) are flattened and forced to a string.
13
+ #
14
+ # This means that directories can be provided in a number of ways:
11
15
  # DirMonitor.new 'lib', 'app'
12
16
  # DirMonitor.new :lib, :app
13
17
  # DirMonitor.new %w[lib app]
@@ -42,16 +46,6 @@ class DirMonitor
42
46
  end
43
47
  end
44
48
 
45
- # Scans for changed known files, using #scan_changed. Yields the name of both the file and its associated spec.
46
- # spec_for is used to determine what the name of the file's spec _should_ be.
47
- # Does not yield a file/spec name when the spec does not exist.
48
- def scan_changed_with_spec(&block) # :yields: file, spec
49
- scan_changed do |file|
50
- spec = spec_for(file)
51
- block.call(file, spec) if File.exists?(spec)
52
- end
53
- end
54
-
55
49
  # Scan for new files.
56
50
  # All new file names are yielded.
57
51
  def scan_new(&block) # :yields: file
@@ -64,32 +58,40 @@ class DirMonitor
64
58
  end
65
59
 
66
60
  # Scan for new files and check for changed known files.
67
- # Only yields a file once per call.
61
+ # The same file is not yielded twice.
68
62
  def scan_new_or_changed_with_spec(&block) # :yields: file, spec
69
63
  yielded_files = {}
70
- yield_once_block = Proc.new do |file, spec|
71
- next if yielded_files.has_key? file
72
- block.call(file, spec)
73
- yielded_files[file]=nil
64
+ yield_once_block = Proc.new do |file|
65
+ spec_file = spec_for(file)
66
+ next if yielded_files.has_key? spec_file
67
+ next unless File.exist?(spec_file)
68
+ block.call(file, spec_file)
69
+ yielded_files[spec_file]=file
74
70
  end
75
- scan_new_with_spec(&yield_once_block)
76
- scan_changed_with_spec(&yield_once_block)
71
+ scan_new(&yield_once_block)
72
+ scan_changed(&yield_once_block)
77
73
  end
78
74
 
79
- # Scans for new files, like scan_new does, but yields the name of both the file and spec.
80
- # spec_for is used to determine what the name of the file's spec _should_ be.
81
- # Does not yield a file/spec name when the spec does not exist.
82
- def scan_new_with_spec(&block) # :yields: file, spec
83
- scan_new do |file|
84
- spec = spec_for(file)
85
- block.call(file, spec) if File.exists?(spec)
75
+ # Scan for new files and check for changed known files.
76
+ # The same file is not yielded twice.
77
+ def scan_new_or_changed_with_test(&block) # :yields: file, test
78
+ yielded_files = {}
79
+ yield_once_block = Proc.new do |file|
80
+ test_file = test_for(file)
81
+ next if yielded_files.has_key? test_file
82
+ next unless File.exist?(test_file)
83
+ block.call(file, test_file)
84
+ yielded_files[test_file]=file
86
85
  end
86
+ scan_new(&yield_once_block)
87
+ scan_changed(&yield_once_block)
87
88
  end
88
89
 
89
90
  # Find the (theoretical) spec file name for a given file.
90
91
  # The assumptions are:
91
92
  # - All specs reside in the 'spec' directory.
92
- # - All specs file names have the suffix '_spec.rb', instead of only the '.rb' extension.
93
+ # - The directory structure is the same; lib/a/b/c maps to spec/a/b/c.
94
+ # - All specs file names have the suffix '_spec.rb'; Ruby code has the '.rb' extension.
93
95
  # - The file name for a non-ruby file spec simply has '_spec.rb' suffixed to the entire file name.
94
96
  # The returned file name does not necessarily have to exist.
95
97
  def spec_for(file)
@@ -111,6 +113,41 @@ class DirMonitor
111
113
  return File.join(spec_dir, spec_file)
112
114
  end
113
115
 
116
+ # Find the (theoretical) test file name for a given file.
117
+ # The assumptions are:
118
+ # - All tests reside in the 'test' directory.
119
+ # - The directory structure is the same; lib/a/b/c maps to test/a/b/c.
120
+ # - Rails is the exception to this rule:
121
+ # - Controllers are tested in test/functional
122
+ # - Models are tested in test/unit
123
+ # - All test file names have the suffix '_test.rb'. Ruby code has the '.rb' extension.
124
+ # - The file name for a non-ruby file test simply has '_test.rb' suffixed to the entire file name.
125
+ # The returned file name does not necessarily have to exist.
126
+ def test_for(file)
127
+ base = File.basename(file)
128
+ extension = File.extname(base)
129
+ dir = File.dirname(file)
130
+ dir_array = dir.split('/')
131
+ if extension == '.rb' and dir_array.first=='test'
132
+ return file
133
+ end
134
+ if extension == '.rb'
135
+ base_without_extension = base[0, base.size - extension.size]
136
+ test_file = base_without_extension + '_test' + extension
137
+ else
138
+ test_file = base + '_test.rb'
139
+ end
140
+ dir_array[0]='test'
141
+ case dir_array[1]
142
+ when 'controllers'
143
+ dir_array[1] = 'functional'
144
+ when 'models'
145
+ dir_array[1] = 'unit'
146
+ end
147
+ test_dir = dir_array.join('/')
148
+ return File.join(test_dir, test_file)
149
+ end
150
+
114
151
  private
115
152
 
116
153
  # Get the modification time for a file.
data/lib/minitest.rb CHANGED
@@ -1,20 +1,13 @@
1
- require 'set'
1
+ require 'set_ext'
2
2
  require 'dir_monitor'
3
3
 
4
- class Set
5
- def join(*args,&block)
6
- map.join(*args,&block)
7
- end
8
- end
9
-
10
4
  # = Minitest
11
5
  # The default usage of Minitest is this:
12
6
  # minitest = Minitest.new
13
7
  # minitest.start
14
8
  # This will do the following:
15
9
  # - Initialize a DirMonitor
16
- # - Map all files in source dirs to specs
17
- # - Frequently check for new or changed files; run rspec on their associated specs
10
+ # - Frequently check for new or changed files; run rspec or test/unit on their associated specs or tests
18
11
  # - Run rcov (code coverage tester) on all specs when exiting (Press ctrl-C on send SIGINT to the process)
19
12
  class Minitest
20
13
  attr_accessor :source_dirs
@@ -42,40 +35,22 @@ class Minitest
42
35
  ignores.join(",")
43
36
  end
44
37
 
45
- # Command line string to run rcov for all monitored specs.
46
- def rcov
47
- "#{rcov_cmd} -T --exclude \"#{rcov_ignores}\" -Ilib #{spec_cmd} -- " + known_specs.join(" ")
48
- end
49
-
50
- # Command line string to run rspec for an array of specs. Defaults to all specs.
51
- def rspec(specs=known_specs)
52
- "#{spec_cmd} #{specs.join(" ")} #{spec_opts}"
53
- end
54
-
55
38
  def source_dirs
56
39
  @source_dirs || DEFAULT_SOURCE_DIRS
57
40
  end
58
41
 
59
- def rcov_cmd
60
- @rcov_cmd ||= find_rcov_cmd
61
- end
62
-
63
- # The command to use to run specs.
64
- def spec_cmd
65
- @spec_cmd ||= ( File.exist?('script/spec') ? 'script/spec' : find_spec_cmd )
66
- end
67
-
68
42
  def spec_opts
69
43
  @spec_opts ||= ( File.exist?('spec/spec.opts') ? '-O spec/spec.opts' : '' )
70
44
  end
71
45
 
72
46
  def start
73
47
  @active = true
74
- @dir_monitor = DirMonitor.new(source_dirs)
48
+ @spec_monitor = DirMonitor.new(source_dirs)
49
+ @test_monitor = DirMonitor.new(source_dirs)
75
50
  trap_int_for_rcov
76
51
  while active? do
77
52
  reset_need_testing
78
- @dir_monitor.scan_new_or_changed_with_spec do |file, spec|
53
+ @spec_monitor.scan_new_or_changed_with_spec do |file, spec|
79
54
  known_specs << spec
80
55
  need_testing << spec
81
56
  end
@@ -83,19 +58,18 @@ class Minitest
83
58
  print "\nTesting files: #{need_testing.join(" ")}\n"
84
59
  system rspec(need_testing)
85
60
  end
61
+ tests_to_run = Set.new
62
+ @test_monitor.scan_new_or_changed_with_test do |file, test|
63
+ tests_to_run << test
64
+ end
65
+ if tests_to_run.size > 0
66
+ print "\nTesting files: #{tests_to_run.join(" ")}\n"
67
+ system 'ruby -e "" -rtest/unit %s' % tests_to_run.map{|test| '-r%s' % test}.join(" ")
68
+ end
86
69
  sleep 1
87
70
  end
88
71
  end
89
72
 
90
- def trap_int_for_rcov
91
- Signal.trap("INT") do
92
- print "\nNow we run rcov and we're done.\n\n"
93
- puts rcov
94
- system rcov
95
- @active = false
96
- end
97
- end
98
-
99
73
  private
100
74
 
101
75
  def find_rcov_cmd
@@ -106,7 +80,35 @@ class Minitest
106
80
  `which spec`.strip
107
81
  end
108
82
 
83
+ # Command line string to run rcov for all monitored specs.
84
+ def rcov
85
+ "#{rcov_cmd} -T --exclude \"#{rcov_ignores}\" -Ilib #{spec_cmd} -- " + known_specs.join(" ")
86
+ end
87
+
88
+ def rcov_cmd
89
+ @rcov_cmd ||= find_rcov_cmd
90
+ end
91
+
109
92
  def reset_need_testing
110
93
  @need_testing = Set.new
111
94
  end
95
+
96
+ # Command line string to run rspec for an array of specs. Defaults to all specs.
97
+ def rspec(specs=known_specs)
98
+ "#{spec_cmd} #{specs.join(" ")} #{spec_opts}"
99
+ end
100
+
101
+ # The command to use to run specs.
102
+ def spec_cmd
103
+ @spec_cmd ||= ( File.exist?('script/spec') ? 'script/spec' : find_spec_cmd )
104
+ end
105
+
106
+ def trap_int_for_rcov
107
+ Signal.trap("INT") do
108
+ print "\nNow we run rcov and we're done.\n\n"
109
+ puts rcov
110
+ system rcov
111
+ @active = false
112
+ end
113
+ end
112
114
  end
data/lib/set_ext.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'set'
2
+
3
+ module SetExt
4
+ def join(*args,&block)
5
+ map.join(*args,&block)
6
+ end
7
+ end
8
+
9
+ class Set
10
+ include SetExt
11
+ end
12
+
data/minitest.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ Gem::Specification.new do |s|
2
+ # Project
3
+ s.name = 'minitest'
4
+ s.summary = "Minitest is a simple autotester tool."
5
+ s.description = "Minitest is a simple autotester tool, which uses rSpec and rCov to test ruby and rails projects."
6
+ s.version = '0.3.1'
7
+ s.date = '2008-08-14'
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Wes Oldenbeuving"]
10
+ s.email = "narnach@gmail.com"
11
+ s.homepage = "http://www.github.com/Narnach/minitest"
12
+
13
+ # Files
14
+ root_files = %w[MIT-LICENSE README.rdoc Rakefile minitest.gemspec]
15
+ bin_files = %w[minitest]
16
+ lib_files = %w[minitest dir_monitor set_ext]
17
+ test_files = %w[]
18
+ spec_files = %w[minitest dir_monitor set_ext]
19
+ other_files = %w[spec/spec.opts spec/spec_helper.rb]
20
+ s.bindir = "bin"
21
+ s.require_path = "lib"
22
+ s.executables = bin_files
23
+ s.test_files = test_files.map {|f| 'test/%s_test.rb' % f} + spec_files.map {|f| 'spec/%s_spec.rb' % f}
24
+ s.files = root_files + s.test_files + other_files + bin_files.map {|f| 'bin/%s' % f} + lib_files.map {|f| 'lib/%s.rb' % f}
25
+
26
+ # rdoc
27
+ s.has_rdoc = true
28
+ s.extra_rdoc_files = %w[ README.rdoc MIT-LICENSE]
29
+ s.rdoc_options << '--inline-source' << '--line-numbers' << '--main' << 'README.rdoc'
30
+
31
+ # Dependencies
32
+ s.add_dependency 'rspec', "> 0.0.0"
33
+ s.add_dependency 'rcov', "> 0.0.0"
34
+
35
+ # Requirements
36
+ s.required_ruby_version = ">= 1.8.0"
37
+ end
@@ -1,7 +1,9 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
2
  require 'dir_monitor'
3
3
 
4
- describe DirMonitor, ".new" do
4
+ describe DirMonitor do
5
+
6
+ describe ".new" do
5
7
  it "should accept multiple directories" do
6
8
  dm = DirMonitor.new('lib','app')
7
9
  dm.dirs.should == ['lib','app']
@@ -18,7 +20,7 @@ describe DirMonitor, ".new" do
18
20
  end
19
21
  end
20
22
 
21
- describe DirMonitor, "#scan" do
23
+ describe "#scan" do
22
24
  it "should find all files in the directories" do
23
25
  known_files1 = %w[lib/minitest.rb lib/dir_monitor.rb]
24
26
  known_files2 = %w[app/another.rb app/files.rb app/more/things.txt]
@@ -30,7 +32,7 @@ describe DirMonitor, "#scan" do
30
32
  end
31
33
  end
32
34
 
33
- describe DirMonitor, "#scan_new" do
35
+ describe "#scan_new" do
34
36
  before(:each) do
35
37
  @known_files = %w[lib/minitest.rb lib/dir_monitor.rb]
36
38
  Dir.stub!(:glob).with('lib/**/*').and_return(@known_files)
@@ -57,34 +59,7 @@ describe DirMonitor, "#scan_new" do
57
59
  end
58
60
  end
59
61
 
60
- describe DirMonitor, "#scan_new_with_spec" do
61
- before :each do
62
- @file = 'lib/dir_monitor.rb'
63
- @spec = 'spec/dir_monitor_spec.rb'
64
- Dir.stub!(:glob).with('lib/**/*').and_return([@file])
65
- @dm = DirMonitor.new 'lib'
66
- end
67
-
68
- it "should yield new files and their specs" do
69
- File.should_receive(:exists?).with(@spec).and_return(true)
70
- results = []
71
- @dm.scan_new_with_spec do |new_file, new_spec|
72
- results << {new_file => new_spec}
73
- end
74
- results.should == [{@file=>@spec}]
75
- end
76
-
77
- it "should not yield files with non-existent specs" do
78
- File.should_receive(:exists?).with(@spec).and_return(false)
79
- results = []
80
- @dm.scan_new_with_spec do |new_file, new_spec|
81
- results << {new_file => new_spec}
82
- end
83
- results.should == []
84
- end
85
- end
86
-
87
- describe DirMonitor, "#scan_changed" do
62
+ describe "#scan_changed" do
88
63
  before(:each) do
89
64
  @file = 'lib/dir_monitor.rb'
90
65
  @time = Time.now
@@ -124,7 +99,7 @@ describe DirMonitor, "#scan_changed" do
124
99
  end
125
100
  end
126
101
 
127
- describe DirMonitor, "scan_changed_with_spec" do
102
+ describe "#scan_new_or_changed_with_spec" do
128
103
  before(:each) do
129
104
  @file = 'lib/dir_monitor.rb'
130
105
  @spec = 'spec/dir_monitor_spec.rb'
@@ -132,69 +107,94 @@ describe DirMonitor, "scan_changed_with_spec" do
132
107
  Dir.stub!(:glob).with('lib/**/*').and_return([@file])
133
108
  File.stub!(:mtime).with(@file).and_return(@time)
134
109
  @dm = DirMonitor.new 'lib'
135
- @dm.scan
136
110
  end
137
111
 
138
- it "should yield the file name and spec name of changed files with an existing spec" do
139
- File.should_receive(:exists?).with(@spec).and_return(true)
140
- changes = []
141
- @dm.scan_changed_with_spec do |changed_file, spec_file|
142
- changes << { changed_file => spec_file }
112
+ it "should yield a file and spec when a file is new" do
113
+ results = []
114
+ @dm.scan_new_or_changed_with_spec do |file, spec|
115
+ results << {file => spec}
143
116
  end
144
- changes.should == [{@file=>@spec}]
117
+ results.should == [{@file=>@spec}]
145
118
  end
146
119
 
147
- it "should not yield the file name and spec name of changed files without an existing spec" do
148
- File.should_receive(:exists?).with(@spec).and_return(false)
149
- changes = []
150
- @dm.scan_changed_with_spec do |changed_file, spec_file|
151
- changes << { changed_file => spec_file }
120
+ it "should yield a file and spec when a file is not new but has changed" do
121
+ @dm.scan
122
+ @dm.scan_changed {|f|}
123
+ File.should_receive(:mtime).with(@file).and_return(@time+1)
124
+ results = []
125
+ @dm.scan_new_or_changed_with_spec do |file, spec|
126
+ results << {file => spec}
152
127
  end
153
- changes.should == []
128
+ results.should == [{@file=>@spec}]
129
+ end
130
+
131
+ it "should not yield a file and spec when a file is not new and has not changed" do
132
+ @dm.scan
133
+ @dm.scan_changed {|f|}
134
+ results = []
135
+ @dm.scan_new_or_changed_with_spec do |file, spec|
136
+ results << {file => spec}
137
+ end
138
+ results.should == []
154
139
  end
155
140
  end
156
141
 
157
- describe DirMonitor, "scan_new_or_changed_with_spec" do
142
+ describe "#scan_new_or_changed_with_test" do
158
143
  before(:each) do
159
144
  @file = 'lib/dir_monitor.rb'
160
- @spec = 'spec/dir_monitor_spec.rb'
145
+ @test = 'test/dir_monitor_test.rb'
161
146
  @time = Time.now
162
147
  Dir.stub!(:glob).with('lib/**/*').and_return([@file])
163
148
  File.stub!(:mtime).with(@file).and_return(@time)
149
+ File.stub!(:exist?).with(@test).and_return(true)
164
150
  @dm = DirMonitor.new 'lib'
165
151
  end
166
152
 
167
- it "should yield a file and spec when a file is new" do
153
+ it "should yield a file and test when a file is new" do
168
154
  results = []
169
- @dm.scan_new_or_changed_with_spec do |file, spec|
170
- results << {file => spec}
155
+ @dm.scan_new_or_changed_with_test do |file, test|
156
+ results << {file => test}
171
157
  end
172
- results.should == [{@file=>@spec}]
158
+ results.should == [{@file=>@test}]
173
159
  end
174
160
 
175
- it "should yield a file and spec when a file is not new but has changed" do
161
+ it "should yield a file and test when a file is not new but has changed" do
176
162
  @dm.scan
177
163
  @dm.scan_changed {|f|}
178
164
  File.should_receive(:mtime).with(@file).and_return(@time+1)
179
165
  results = []
180
- @dm.scan_new_or_changed_with_spec do |file, spec|
181
- results << {file => spec}
166
+ @dm.scan_new_or_changed_with_test do |file, test|
167
+ results << {file => test}
182
168
  end
183
- results.should == [{@file=>@spec}]
169
+ results.should == [{@file=>@test}]
184
170
  end
185
171
 
186
- it "should not yield a file and spec when a file is not new and has not changed" do
172
+ it "should not yield a file and test when a file is not new and has not changed" do
187
173
  @dm.scan
188
174
  @dm.scan_changed {|f|}
189
175
  results = []
190
- @dm.scan_new_or_changed_with_spec do |file, spec|
191
- results << {file => spec}
176
+ @dm.scan_new_or_changed_with_test do |file, test|
177
+ results << {file => test}
178
+ end
179
+ results.should == []
180
+ end
181
+
182
+ it "should skip files with non-existent tests" do
183
+ @dm.scan
184
+ @dm.scan_changed {|f|}
185
+
186
+ @test = @dm.test_for(@file)
187
+ File.should_receive(:mtime).with(@file).and_return(@time+1)
188
+ File.should_receive(:exist?).with(@test).and_return(false)
189
+ results = []
190
+ @dm.scan_new_or_changed_with_test do |file, test|
191
+ results << {file => test}
192
192
  end
193
193
  results.should == []
194
194
  end
195
195
  end
196
196
 
197
- describe DirMonitor, "#spec_for" do
197
+ describe "#spec_for" do
198
198
  before(:each) do
199
199
  @dm = DirMonitor.new
200
200
  end
@@ -215,4 +215,41 @@ describe DirMonitor, "#spec_for" do
215
215
  spec = 'spec/dir_monitor_spec.rb'
216
216
  @dm.spec_for(spec).should == spec
217
217
  end
218
- end
218
+ end
219
+
220
+ describe "#test_for" do
221
+ before(:each) do
222
+ @dm = DirMonitor.new
223
+ end
224
+
225
+ it "should find the test for a given file" do
226
+ file = 'lib/dir_monitor.rb'
227
+ test = 'test/dir_monitor_test.rb'
228
+ @dm.test_for(file).should == test
229
+ end
230
+
231
+ it "should find the test for non-ruby files" do
232
+ file = 'app/views/posts/post.html.haml'
233
+ test = 'test/views/posts/post.html.haml_test.rb'
234
+ @dm.test_for(file).should == test
235
+ end
236
+
237
+ it "should map tests to themselves" do
238
+ test = 'test/dir_monitor_test.rb'
239
+ @dm.test_for(test).should == test
240
+ end
241
+
242
+ it "should recognize Rails controllers" do
243
+ file = 'app/controllers/posts_controller.rb'
244
+ test = 'test/functional/posts_controller_test.rb'
245
+ @dm.test_for(file).should == test
246
+ end
247
+
248
+ it "should recognize Rails models" do
249
+ file = 'app/models/post.rb'
250
+ test = 'test/unit/post_test.rb'
251
+ @dm.test_for(file).should == test
252
+ end
253
+ end
254
+
255
+ end # describe DirMonitor
@@ -1,4 +1,4 @@
1
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
2
  require 'minitest'
3
3
 
4
4
  describe Minitest do
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
+ require 'set_ext'
3
+
4
+ describe Set do
5
+ describe "#join" do
6
+ it 'should join the elements in its collection' do
7
+ s = Set.new([1,2,3])
8
+ s.join(" ").should == '1 2 3'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Narnach-minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wes Oldenbeuving
@@ -43,12 +43,16 @@ files:
43
43
  - MIT-LICENSE
44
44
  - README.rdoc
45
45
  - Rakefile
46
- - bin/minitest
47
- - lib/dir_monitor.rb
48
- - lib/minitest.rb
49
- - spec/dir_monitor_spec.rb
46
+ - minitest.gemspec
50
47
  - spec/minitest_spec.rb
48
+ - spec/dir_monitor_spec.rb
49
+ - spec/set_ext_spec.rb
51
50
  - spec/spec.opts
51
+ - spec/spec_helper.rb
52
+ - bin/minitest
53
+ - lib/minitest.rb
54
+ - lib/dir_monitor.rb
55
+ - lib/set_ext.rb
52
56
  has_rdoc: true
53
57
  homepage: http://www.github.com/Narnach/minitest
54
58
  post_install_message:
@@ -79,6 +83,6 @@ signing_key:
79
83
  specification_version: 2
80
84
  summary: Minitest is a simple autotester tool.
81
85
  test_files:
82
- - spec/dir_monitor_spec.rb
83
86
  - spec/minitest_spec.rb
84
- - spec/spec.opts
87
+ - spec/dir_monitor_spec.rb
88
+ - spec/set_ext_spec.rb