shenandoah 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.markdown +9 -0
- data/README.markdown +2 -2
- data/Rakefile +22 -4
- data/VERSION.yml +1 -1
- data/lib/shenandoah/locator.rb +5 -3
- data/lib/shenandoah/runner.rb +1 -1
- data/lib/shenandoah/tasks.rb +47 -3
- data/rails_generators/shen_spec/shen_spec_generator.rb +1 -1
- data/shenandoah.gemspec +26 -2
- data/spec/shenandoah/buildr/locator_spec.rb +2 -2
- data/spec/shenandoah/locator_spec.rb +18 -8
- data/spec/shenandoah/rails/tasks_spec.rb +2 -2
- data/spec/shenandoah/runner_spec.rb +4 -10
- data/spec/shenandoah/tasks_spec.rb +220 -5
- data/spec/spec_helper.rb +21 -4
- metadata +82 -2
data/ChangeLog.markdown
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
0.1.1
|
2
|
+
=====
|
3
|
+
|
4
|
+
* Correct bug in Shenandoah::Tasks which made plain-Rakefile use not work
|
5
|
+
* Add task descriptions for all the tasks -- visible with rake -T
|
6
|
+
* Automatically absolutize locator paths for plain-Rakefile use
|
7
|
+
* Allow specs to be constrained using rake task arguments instead of an env var
|
8
|
+
* Allow spec generator to be invoked from any project (not just rails projects) via `rake shen:generate[spec_name]`
|
9
|
+
|
1
10
|
0.1.0
|
2
11
|
=====
|
3
12
|
|
data/README.markdown
CHANGED
@@ -78,7 +78,7 @@ To run the specs from the command line:
|
|
78
78
|
|
79
79
|
To run an individual spec file called "application_spec.js":
|
80
80
|
|
81
|
-
$ rake shen:spec
|
81
|
+
$ rake shen:spec[application]
|
82
82
|
|
83
83
|
To start the server:
|
84
84
|
|
@@ -103,7 +103,7 @@ To run all the specs from the command_line:
|
|
103
103
|
|
104
104
|
To run an individual spec file called "application_spec.js":
|
105
105
|
|
106
|
-
$ rake shen:spec
|
106
|
+
$ rake shen:spec[application]
|
107
107
|
|
108
108
|
To start the server:
|
109
109
|
|
data/Rakefile
CHANGED
@@ -22,6 +22,7 @@ begin
|
|
22
22
|
# Have to use rspec 1.2.4 for buildr compat
|
23
23
|
gem.add_development_dependency('rspec', '= 1.2.4')
|
24
24
|
gem.add_development_dependency('rack-test', '>= 0.3.0')
|
25
|
+
gem.add_development_dependency('hpricot', '>= 0.8.1')
|
25
26
|
gem.add_development_dependency('rspec_hpricot_matchers', '>= 1.0.0')
|
26
27
|
gem.add_development_dependency('braid', '>= 0.5.0')
|
27
28
|
|
@@ -31,6 +32,13 @@ begin
|
|
31
32
|
gem.add_development_dependency('net-sftp', '= 2.0.2')
|
32
33
|
gem.add_development_dependency('highline', '= 1.5.0')
|
33
34
|
gem.add_development_dependency('hoe', '= 1.12.2')
|
35
|
+
gem.add_development_dependency('rubyzip', '= 0.9.1')
|
36
|
+
gem.add_development_dependency('builder', '= 2.1.2')
|
37
|
+
gem.add_development_dependency('rubyforge', '= 1.0.3')
|
38
|
+
gem.add_development_dependency('rjb', '= 1.1.6')
|
39
|
+
gem.add_development_dependency('Antwrap', '= 0.7.0')
|
40
|
+
gem.add_development_dependency('xml-simple', '= 1.0.12')
|
41
|
+
gem.add_development_dependency('archive-tar-minitar', '= 0.5.2')
|
34
42
|
end
|
35
43
|
|
36
44
|
Jeweler::RubyforgeTasks.new
|
@@ -41,6 +49,7 @@ end
|
|
41
49
|
require 'spec/rake/spectask'
|
42
50
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
43
51
|
spec.libs << 'lib' << 'spec'
|
52
|
+
spec.verbose = true
|
44
53
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
45
54
|
end
|
46
55
|
|
@@ -54,18 +63,27 @@ end
|
|
54
63
|
|
55
64
|
task :default => :spec
|
56
65
|
|
57
|
-
|
58
|
-
Rake::RDocTask.new do |rdoc|
|
66
|
+
def version
|
59
67
|
if File.exist?('VERSION.yml')
|
60
68
|
config = YAML.load(File.read('VERSION.yml'))
|
61
|
-
|
69
|
+
"#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
62
70
|
else
|
63
|
-
|
71
|
+
""
|
64
72
|
end
|
73
|
+
end
|
65
74
|
|
75
|
+
require 'rake/rdoctask'
|
76
|
+
Rake::RDocTask.new do |rdoc|
|
66
77
|
rdoc.rdoc_dir = 'rdoc'
|
67
78
|
rdoc.title = "shenandoah #{version}"
|
68
79
|
rdoc.rdoc_files.include('README*')
|
69
80
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
70
81
|
end
|
71
82
|
|
83
|
+
desc "Uninstall the current (development) version of the gem"
|
84
|
+
task :uninstall do |t|
|
85
|
+
system("sudo gem uninstall shenandoah -v #{version}")
|
86
|
+
end
|
87
|
+
|
88
|
+
task :build => [:gemspec]
|
89
|
+
task :install => [:uninstall]
|
data/VERSION.yml
CHANGED
data/lib/shenandoah/locator.rb
CHANGED
@@ -5,13 +5,15 @@ module Shenandoah
|
|
5
5
|
attr_accessor :main_path, :spec_path, :tmp_path
|
6
6
|
|
7
7
|
def initialize(options = {})
|
8
|
-
@main_path = options[:main_path] || "lib"
|
9
|
-
@spec_path = options[:spec_path] || "spec"
|
10
|
-
@tmp_path = options[:tmp_path] || ENV['TMPDIR'] || "tmp"
|
8
|
+
@main_path = File.expand_path(options[:main_path] || "lib")
|
9
|
+
@spec_path = File.expand_path(options[:spec_path] || "spec")
|
10
|
+
@tmp_path = File.expand_path(options[:tmp_path] || ENV['TMPDIR'] || "tmp")
|
11
11
|
end
|
12
12
|
|
13
13
|
def spec_files
|
14
14
|
FileList["#{spec_path}/**/*_spec.js"]
|
15
15
|
end
|
16
|
+
|
17
|
+
private
|
16
18
|
end
|
17
19
|
end
|
data/lib/shenandoah/runner.rb
CHANGED
@@ -28,7 +28,7 @@ module Shenandoah
|
|
28
28
|
create_shell_html
|
29
29
|
create_shell_js
|
30
30
|
|
31
|
-
rlwrap = `which rlwrap`.chomp
|
31
|
+
rlwrap = `which rlwrap`.chomp.sub(/^no.*/, '') # some versions of which report errors on stdout
|
32
32
|
cmd = "#{rlwrap} #{rhino_command('-f', shell_js_path, '-f', '-')}"
|
33
33
|
$stderr.puts "Starting shell with #{cmd}"
|
34
34
|
system(cmd)
|
data/lib/shenandoah/tasks.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'rake'
|
2
|
+
require 'shenandoah/locator'
|
2
3
|
require 'shenandoah/runner'
|
3
4
|
require 'shenandoah/server'
|
5
|
+
require 'rails_generator'
|
6
|
+
require 'rails_generator/scripts/generate'
|
4
7
|
|
5
8
|
module Shenandoah
|
6
9
|
class Tasks
|
@@ -18,26 +21,58 @@ module Shenandoah
|
|
18
21
|
create_serve_task
|
19
22
|
create_shell_task
|
20
23
|
create_run_task
|
24
|
+
create_gen_task
|
21
25
|
end
|
22
26
|
|
23
|
-
def run_specs
|
27
|
+
def run_specs(pattern=nil)
|
24
28
|
files = @locator.spec_files
|
25
29
|
if ENV['SHEN_SPEC']
|
30
|
+
trace "limiting shenandoah specs based on #{ENV['SHEN_SPEC'].inspect}"
|
26
31
|
files = files.select { |f| f =~ /#{ENV['SHEN_SPEC']}/ }
|
27
32
|
end
|
33
|
+
if pattern
|
34
|
+
trace "limiting shenandoah specs based on #{pattern.inspect}"
|
35
|
+
files = files.select { |f| f =~ /#{pattern}/ }
|
36
|
+
end
|
37
|
+
trace "running shenandoah specs\n - #{files.join("\n - ")}"
|
28
38
|
successes = @runner.run_console(files)
|
29
39
|
if (successes.size != files.size)
|
30
40
|
raise "Shenandoah specs failed!"
|
31
41
|
end
|
32
42
|
end
|
33
43
|
|
44
|
+
def generate_spec(name)
|
45
|
+
raise "Please specify a spec name. E.g., shen:generate[foo]." unless name
|
46
|
+
::Rails::Generator::Base::prepend_sources(
|
47
|
+
::Rails::Generator::PathSource.new(
|
48
|
+
:shenandoah, File.join(File.dirname(__FILE__), '../../rails_generators'))
|
49
|
+
)
|
50
|
+
# These branches are functionally equivalent. They change the logging
|
51
|
+
# that rails_generator emits to omit the WD when the target is under
|
52
|
+
# the WD.
|
53
|
+
ENV['SHEN_SPEC_PATH'], dest =
|
54
|
+
if @locator.spec_path =~ /^#{FileUtils.pwd}\/?/
|
55
|
+
[@locator.spec_path.sub(/^#{FileUtils.pwd}\/?/, ''), FileUtils.pwd]
|
56
|
+
else
|
57
|
+
[@locator.spec_path, '']
|
58
|
+
end
|
59
|
+
::Rails::Generator::Scripts::Generate.new.run(
|
60
|
+
['shen_spec', '-t', name], :destination => dest,
|
61
|
+
:quiet => Rake.application.options.quiet)
|
62
|
+
end
|
63
|
+
|
34
64
|
protected
|
35
65
|
|
66
|
+
def trace(msg)
|
67
|
+
$stderr.puts msg if Rake.application.options.trace
|
68
|
+
end
|
69
|
+
|
36
70
|
def default_locator_type
|
37
71
|
DefaultLocator
|
38
72
|
end
|
39
73
|
|
40
74
|
def create_serve_task
|
75
|
+
desc "Start the in-browser JavaScript spec runner on http://localhost:4410/"
|
41
76
|
task('shen:serve') do |t|
|
42
77
|
Shenandoah::Server.set :locator, @locator
|
43
78
|
if @options[:project_name]
|
@@ -48,14 +83,23 @@ module Shenandoah
|
|
48
83
|
end
|
49
84
|
|
50
85
|
def create_shell_task
|
86
|
+
desc "Start the Shenandoah interactive JavaScript shell"
|
51
87
|
task('shen:shell') do |t|
|
52
88
|
@runner.run_shell
|
53
89
|
end
|
54
90
|
end
|
55
91
|
|
56
92
|
def create_run_task
|
57
|
-
|
58
|
-
|
93
|
+
desc "Run the JavaScript specs"
|
94
|
+
task('shen:spec', :pattern) do |t, args|
|
95
|
+
run_specs args.pattern
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_gen_task
|
100
|
+
desc "Generate a skeleton spec. Give the spec name as a task arg -- i.e. shen:generate[commands]."
|
101
|
+
task('shen:generate', :basename) do |t, args|
|
102
|
+
generate_spec args.basename
|
59
103
|
end
|
60
104
|
end
|
61
105
|
end
|
@@ -5,7 +5,7 @@ module Shenandoah
|
|
5
5
|
module Generators
|
6
6
|
class ShenSpecGenerator < ::Rails::Generator::NamedBase
|
7
7
|
def manifest
|
8
|
-
spec_path = Shenandoah::Rails::Locator.new.spec_path.sub
|
8
|
+
spec_path = ENV['SHEN_SPEC_PATH'] || Shenandoah::Rails::Locator.new.spec_path.sub(%r{^#{RAILS_ROOT}/}, '')
|
9
9
|
record do |m|
|
10
10
|
m.directory "#{spec_path}/#{File.dirname(file_path)}"
|
11
11
|
m.template 'javascript_spec.js.erb', "#{spec_path}/#{file_path}_spec.js"
|
data/shenandoah.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{shenandoah}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Rhett Sutphin"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-07-14}
|
10
10
|
s.email = %q{rhett@detailedbalance.net}
|
11
11
|
s.extra_rdoc_files = [
|
12
12
|
"ChangeLog.markdown",
|
@@ -115,6 +115,7 @@ Gem::Specification.new do |s|
|
|
115
115
|
s.add_runtime_dependency(%q<rails>, [">= 2.1.0"])
|
116
116
|
s.add_development_dependency(%q<rspec>, ["= 1.2.4"])
|
117
117
|
s.add_development_dependency(%q<rack-test>, [">= 0.3.0"])
|
118
|
+
s.add_development_dependency(%q<hpricot>, [">= 0.8.1"])
|
118
119
|
s.add_development_dependency(%q<rspec_hpricot_matchers>, [">= 1.0.0"])
|
119
120
|
s.add_development_dependency(%q<braid>, [">= 0.5.0"])
|
120
121
|
s.add_development_dependency(%q<rake>, ["= 0.8.4"])
|
@@ -122,6 +123,13 @@ Gem::Specification.new do |s|
|
|
122
123
|
s.add_development_dependency(%q<net-sftp>, ["= 2.0.2"])
|
123
124
|
s.add_development_dependency(%q<highline>, ["= 1.5.0"])
|
124
125
|
s.add_development_dependency(%q<hoe>, ["= 1.12.2"])
|
126
|
+
s.add_development_dependency(%q<rubyzip>, ["= 0.9.1"])
|
127
|
+
s.add_development_dependency(%q<builder>, ["= 2.1.2"])
|
128
|
+
s.add_development_dependency(%q<rubyforge>, ["= 1.0.3"])
|
129
|
+
s.add_development_dependency(%q<rjb>, ["= 1.1.6"])
|
130
|
+
s.add_development_dependency(%q<Antwrap>, ["= 0.7.0"])
|
131
|
+
s.add_development_dependency(%q<xml-simple>, ["= 1.0.12"])
|
132
|
+
s.add_development_dependency(%q<archive-tar-minitar>, ["= 0.5.2"])
|
125
133
|
else
|
126
134
|
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
127
135
|
s.add_dependency(%q<haml>, [">= 2.0.9"])
|
@@ -129,6 +137,7 @@ Gem::Specification.new do |s|
|
|
129
137
|
s.add_dependency(%q<rails>, [">= 2.1.0"])
|
130
138
|
s.add_dependency(%q<rspec>, ["= 1.2.4"])
|
131
139
|
s.add_dependency(%q<rack-test>, [">= 0.3.0"])
|
140
|
+
s.add_dependency(%q<hpricot>, [">= 0.8.1"])
|
132
141
|
s.add_dependency(%q<rspec_hpricot_matchers>, [">= 1.0.0"])
|
133
142
|
s.add_dependency(%q<braid>, [">= 0.5.0"])
|
134
143
|
s.add_dependency(%q<rake>, ["= 0.8.4"])
|
@@ -136,6 +145,13 @@ Gem::Specification.new do |s|
|
|
136
145
|
s.add_dependency(%q<net-sftp>, ["= 2.0.2"])
|
137
146
|
s.add_dependency(%q<highline>, ["= 1.5.0"])
|
138
147
|
s.add_dependency(%q<hoe>, ["= 1.12.2"])
|
148
|
+
s.add_dependency(%q<rubyzip>, ["= 0.9.1"])
|
149
|
+
s.add_dependency(%q<builder>, ["= 2.1.2"])
|
150
|
+
s.add_dependency(%q<rubyforge>, ["= 1.0.3"])
|
151
|
+
s.add_dependency(%q<rjb>, ["= 1.1.6"])
|
152
|
+
s.add_dependency(%q<Antwrap>, ["= 0.7.0"])
|
153
|
+
s.add_dependency(%q<xml-simple>, ["= 1.0.12"])
|
154
|
+
s.add_dependency(%q<archive-tar-minitar>, ["= 0.5.2"])
|
139
155
|
end
|
140
156
|
else
|
141
157
|
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
@@ -144,6 +160,7 @@ Gem::Specification.new do |s|
|
|
144
160
|
s.add_dependency(%q<rails>, [">= 2.1.0"])
|
145
161
|
s.add_dependency(%q<rspec>, ["= 1.2.4"])
|
146
162
|
s.add_dependency(%q<rack-test>, [">= 0.3.0"])
|
163
|
+
s.add_dependency(%q<hpricot>, [">= 0.8.1"])
|
147
164
|
s.add_dependency(%q<rspec_hpricot_matchers>, [">= 1.0.0"])
|
148
165
|
s.add_dependency(%q<braid>, [">= 0.5.0"])
|
149
166
|
s.add_dependency(%q<rake>, ["= 0.8.4"])
|
@@ -151,5 +168,12 @@ Gem::Specification.new do |s|
|
|
151
168
|
s.add_dependency(%q<net-sftp>, ["= 2.0.2"])
|
152
169
|
s.add_dependency(%q<highline>, ["= 1.5.0"])
|
153
170
|
s.add_dependency(%q<hoe>, ["= 1.12.2"])
|
171
|
+
s.add_dependency(%q<rubyzip>, ["= 0.9.1"])
|
172
|
+
s.add_dependency(%q<builder>, ["= 2.1.2"])
|
173
|
+
s.add_dependency(%q<rubyforge>, ["= 1.0.3"])
|
174
|
+
s.add_dependency(%q<rjb>, ["= 1.1.6"])
|
175
|
+
s.add_dependency(%q<Antwrap>, ["= 0.7.0"])
|
176
|
+
s.add_dependency(%q<xml-simple>, ["= 1.0.12"])
|
177
|
+
s.add_dependency(%q<archive-tar-minitar>, ["= 0.5.2"])
|
154
178
|
end
|
155
179
|
end
|
@@ -25,9 +25,9 @@ describe Shenandoah::Buildr::Locator do
|
|
25
25
|
|
26
26
|
it "allows main to be overriden with test.using" do |variable|
|
27
27
|
p = define('another', :base_dir => tmpdir) do
|
28
|
-
test.using :main_path => "foo"
|
28
|
+
test.using :main_path => "/foo"
|
29
29
|
end
|
30
30
|
|
31
|
-
Shenandoah::Buildr::Locator.new(p).main_path.should == "foo"
|
31
|
+
Shenandoah::Buildr::Locator.new(p).main_path.should == "/foo"
|
32
32
|
end
|
33
33
|
end
|
@@ -11,12 +11,12 @@ describe Shenandoah::DefaultLocator do
|
|
11
11
|
@loc = Shenandoah::DefaultLocator.new
|
12
12
|
end
|
13
13
|
|
14
|
-
it "has main_path = lib" do
|
15
|
-
@loc.main_path.should == "lib"
|
14
|
+
it "has main_path = `pwd`/lib" do
|
15
|
+
@loc.main_path.should == File.join(FileUtils.pwd, "lib")
|
16
16
|
end
|
17
17
|
|
18
|
-
it "has spec_path = spec" do
|
19
|
-
@loc.spec_path.should == "spec"
|
18
|
+
it "has spec_path = `pwd`/spec" do
|
19
|
+
@loc.spec_path.should == File.join(FileUtils.pwd, "spec")
|
20
20
|
end
|
21
21
|
|
22
22
|
it "uses the TMPDIR env var for tmp" do
|
@@ -25,21 +25,31 @@ describe Shenandoah::DefaultLocator do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "has tmp_path = tmp" do
|
28
|
-
@loc.tmp_path.should == "tmp"
|
28
|
+
@loc.tmp_path.should == File.join(FileUtils.pwd, "tmp")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "initializing from options" do
|
33
33
|
it "uses an explicit main path" do
|
34
|
-
Shenandoah::DefaultLocator.new(:main_path => 'main').main_path.should == 'main'
|
34
|
+
Shenandoah::DefaultLocator.new(:main_path => '/main').main_path.should == '/main'
|
35
35
|
end
|
36
36
|
|
37
37
|
it "uses an explicit spec path" do
|
38
|
-
Shenandoah::DefaultLocator.new(:spec_path => 'foo').spec_path.should == 'foo'
|
38
|
+
Shenandoah::DefaultLocator.new(:spec_path => '/foo').spec_path.should == '/foo'
|
39
39
|
end
|
40
40
|
|
41
41
|
it "uses an explicit tmp path" do
|
42
|
-
Shenandoah::DefaultLocator.new(:tmp_path => 'foo').tmp_path.should == 'foo'
|
42
|
+
Shenandoah::DefaultLocator.new(:tmp_path => '/foo/tmp').tmp_path.should == '/foo/tmp'
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "with relative paths" do
|
46
|
+
%w(main_path spec_path tmp_path).each do |kind|
|
47
|
+
k = kind.to_sym
|
48
|
+
it "absolutizes #{kind} against the working directory" do
|
49
|
+
Shenandoah::DefaultLocator.new(k => 'bar').send(k).should ==
|
50
|
+
File.join(FileUtils.pwd, 'bar')
|
51
|
+
end
|
52
|
+
end
|
43
53
|
end
|
44
54
|
end
|
45
55
|
|
@@ -26,7 +26,7 @@ describe Shenandoah::Rails::Tasks do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "uses the explicitly provided locator over all others" do
|
29
|
-
loc = Shenandoah::DefaultLocator.new(:main_path => 'foo')
|
30
|
-
Shenandoah::Rails::Tasks.new(:locator => loc).locator.main_path.should == 'foo'
|
29
|
+
loc = Shenandoah::DefaultLocator.new(:main_path => '/foo')
|
30
|
+
Shenandoah::Rails::Tasks.new(:locator => loc).locator.main_path.should == '/foo'
|
31
31
|
end
|
32
32
|
end
|
@@ -68,25 +68,19 @@ describe Shenandoah::Runner do
|
|
68
68
|
|
69
69
|
describe "#run_shell" do
|
70
70
|
before do
|
71
|
-
|
72
|
-
# This is a small script to invoke Runner#run_shell so that it's
|
73
|
-
# input and output can be controlled for testing
|
74
|
-
<% $LOAD_PATH.select { |p| p =~ /shenandoah/ }.each do |p| %>
|
75
|
-
$LOAD_PATH.unshift(<%= p.inspect %>)
|
76
|
-
<% end %>
|
71
|
+
tmpscript "spec_shell.rb", <<-RUBY
|
77
72
|
require 'rubygems'
|
78
73
|
require 'shenandoah/runner'
|
79
74
|
require 'shenandoah/locator'
|
80
75
|
|
81
76
|
loc = Shenandoah::DefaultLocator.new(
|
82
|
-
:main_path =>
|
83
|
-
:spec_path =>
|
84
|
-
:tmp_path =>
|
77
|
+
:main_path => #{@locator.main_path.inspect},
|
78
|
+
:spec_path => #{@locator.spec_path.inspect},
|
79
|
+
:tmp_path => #{@locator.tmp_path.inspect}
|
85
80
|
)
|
86
81
|
|
87
82
|
Shenandoah::Runner.new(loc).run_shell
|
88
83
|
RUBY
|
89
|
-
tmpfile "spec_shell.rb", script_contents
|
90
84
|
end
|
91
85
|
|
92
86
|
def run_shell(jslines)
|
@@ -3,23 +3,24 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
require 'shenandoah/tasks'
|
4
4
|
require 'shenandoah/locator'
|
5
5
|
require 'shenandoah/rails/locator'
|
6
|
+
require 'open3'
|
6
7
|
|
7
8
|
describe Shenandoah::Tasks do
|
8
9
|
describe "init" do
|
9
10
|
include Shenandoah::Spec::Tmpfile
|
10
|
-
|
11
|
+
|
11
12
|
it "uses a DefaultLocator by default" do
|
12
13
|
Shenandoah::Tasks.new.locator.class.should == Shenandoah::DefaultLocator
|
13
14
|
end
|
14
15
|
|
15
16
|
it "configures the default locator with the provided options" do
|
16
|
-
Shenandoah::Tasks.new(:main_path => 'foo').locator.main_path.should == 'foo'
|
17
|
+
Shenandoah::Tasks.new(:main_path => '/foo').locator.main_path.should == '/foo'
|
17
18
|
end
|
18
|
-
|
19
|
+
|
19
20
|
it "uses an explictly provided locator, ignoring other options" do
|
20
|
-
loc = Shenandoah::DefaultLocator.new(:main_path => 'bar')
|
21
|
+
loc = Shenandoah::DefaultLocator.new(:main_path => '/bar')
|
21
22
|
tasks = Shenandoah::Tasks.new(:locator => loc, :main_path => 'foo')
|
22
|
-
tasks.locator.main_path.should == 'bar'
|
23
|
+
tasks.locator.main_path.should == '/bar'
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
@@ -36,13 +37,37 @@ describe Shenandoah::Tasks do
|
|
36
37
|
Rake::Task::task_defined?('shen:serve').should be_true
|
37
38
|
end
|
38
39
|
|
40
|
+
it "gives the shen:serve task a description" do
|
41
|
+
Rake::Task['shen:serve'].full_comment.should ==
|
42
|
+
"Start the in-browser JavaScript spec runner on http://localhost:4410/"
|
43
|
+
end
|
44
|
+
|
39
45
|
it "adds a shen:shell task" do
|
40
46
|
Rake::Task::task_defined?('shen:shell').should be_true
|
41
47
|
end
|
42
48
|
|
49
|
+
it "gives the shen:shell task a description" do
|
50
|
+
Rake::Task['shen:shell'].full_comment.should ==
|
51
|
+
"Start the Shenandoah interactive JavaScript shell"
|
52
|
+
end
|
53
|
+
|
43
54
|
it "adds a shen:spec task" do
|
44
55
|
Rake::Task::task_defined?('shen:spec').should be_true
|
45
56
|
end
|
57
|
+
|
58
|
+
it "gives the shen:spec task a description" do
|
59
|
+
Rake::Task['shen:spec'].full_comment.should ==
|
60
|
+
"Run the JavaScript specs"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "adds a shen:generate task" do
|
64
|
+
Rake::Task::task_defined?('shen:generate').should be_true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "gives the shen:generate task a description" do
|
68
|
+
Rake::Task['shen:generate'].full_comment.should ==
|
69
|
+
"Generate a skeleton spec. Give the spec name as a task arg -- i.e. shen:generate[commands]."
|
70
|
+
end
|
46
71
|
end
|
47
72
|
|
48
73
|
describe "running" do
|
@@ -75,6 +100,13 @@ describe Shenandoah::Tasks do
|
|
75
100
|
@tasks.run_specs
|
76
101
|
end
|
77
102
|
|
103
|
+
it "only runs the specs matching the pattern argument" do
|
104
|
+
@locator.should_receive(:spec_files).and_return(%w(ab bc cd))
|
105
|
+
@runner.should_receive(:run_console).with(%w(bc cd)).and_return(%w(bc cd))
|
106
|
+
|
107
|
+
@tasks.run_specs 'c'
|
108
|
+
end
|
109
|
+
|
78
110
|
it "throws an exception on failure" do
|
79
111
|
@locator.should_receive(:spec_files).and_return(%w(a b c))
|
80
112
|
@runner.should_receive(:run_console).with(%w(a b c)).and_return(%w(a b))
|
@@ -82,4 +114,187 @@ describe Shenandoah::Tasks do
|
|
82
114
|
lambda { @tasks.run_specs }.should raise_error(/Shenandoah specs failed!/)
|
83
115
|
end
|
84
116
|
end
|
117
|
+
|
118
|
+
describe "running for real" do
|
119
|
+
include Shenandoah::Spec::Tmpfile
|
120
|
+
|
121
|
+
before do
|
122
|
+
tmpscript "Rakefile", <<-RUBY
|
123
|
+
require 'shenandoah/tasks'
|
124
|
+
Shenandoah::Tasks.new
|
125
|
+
RUBY
|
126
|
+
end
|
127
|
+
|
128
|
+
def run_specs(task='shen:spec')
|
129
|
+
FileUtils.cd @tmpdir do
|
130
|
+
Open3.popen3("rake _#{SHEN_RAKE_VERSION}_ #{task}") do |stdin, stdout, stderr|
|
131
|
+
stdin.close
|
132
|
+
return stdout.read, stderr.read
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def create_passing_spec(name='good')
|
138
|
+
tmpfile "spec/#{name}_spec.js", <<-JS
|
139
|
+
Screw.Unit(function () {
|
140
|
+
describe("good", function () {
|
141
|
+
it("passes", function () {
|
142
|
+
expect("good").to(equal, "good");
|
143
|
+
});
|
144
|
+
});
|
145
|
+
});
|
146
|
+
JS
|
147
|
+
tmpfile "spec/#{name}.html", <<-HTML
|
148
|
+
<html>
|
149
|
+
<head></head>
|
150
|
+
<body></body>
|
151
|
+
</html>
|
152
|
+
HTML
|
153
|
+
end
|
154
|
+
|
155
|
+
def create_failing_spec(name='bad')
|
156
|
+
tmpfile "spec/#{name}_spec.js", <<-JS
|
157
|
+
Screw.Unit(function () {
|
158
|
+
describe("bad", function () {
|
159
|
+
it("fails", function () {
|
160
|
+
expect("bad").to(equal, "good");
|
161
|
+
});
|
162
|
+
});
|
163
|
+
});
|
164
|
+
JS
|
165
|
+
tmpfile "spec/#{name}.html", <<-HTML
|
166
|
+
<html>
|
167
|
+
<head></head>
|
168
|
+
<body></body>
|
169
|
+
</html>
|
170
|
+
HTML
|
171
|
+
end
|
172
|
+
|
173
|
+
it "passes for a good spec" do
|
174
|
+
create_passing_spec
|
175
|
+
|
176
|
+
out, err = run_specs
|
177
|
+
|
178
|
+
err.should == ""
|
179
|
+
out.should =~ %r{1 test\(s\), 0 failure\(s\)}
|
180
|
+
end
|
181
|
+
|
182
|
+
it "reports all results together" do
|
183
|
+
pending
|
184
|
+
create_passing_spec('a')
|
185
|
+
create_passing_spec('b')
|
186
|
+
create_passing_spec('c')
|
187
|
+
|
188
|
+
out, err = run_specs
|
189
|
+
|
190
|
+
err.should == ""
|
191
|
+
out.should =~ %r{3 test\(s\), 0 failure\(s\)}
|
192
|
+
end
|
193
|
+
|
194
|
+
it "fails for a bad spec" do
|
195
|
+
create_failing_spec
|
196
|
+
|
197
|
+
out, err = run_specs
|
198
|
+
|
199
|
+
err.should =~ /Shenandoah specs failed/
|
200
|
+
out.should =~ %r{1 test\(s\), 1 failure\(s\)}
|
201
|
+
end
|
202
|
+
|
203
|
+
it "reports all failures" do
|
204
|
+
pending
|
205
|
+
create_failing_spec('a')
|
206
|
+
create_passing_spec('b')
|
207
|
+
create_failing_spec('c')
|
208
|
+
|
209
|
+
out, err = run_specs
|
210
|
+
|
211
|
+
err.should =~ /Shenandoah specs failed/
|
212
|
+
out.should =~ %r{3 test\(s\), 2 failure\(s\)}
|
213
|
+
end
|
214
|
+
|
215
|
+
it "only runs the specs matching the arg" do
|
216
|
+
create_passing_spec('foo')
|
217
|
+
create_passing_spec('bar')
|
218
|
+
create_passing_spec('baz')
|
219
|
+
|
220
|
+
out, err = run_specs('shen:spec[ba]')
|
221
|
+
|
222
|
+
err.should == ""
|
223
|
+
out.should_not =~ %r{Running foo_spec}
|
224
|
+
out.should =~ %r{Running bar_spec}
|
225
|
+
out.should =~ %r{Running baz_spec}
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe "generation" do
|
230
|
+
include Shenandoah::Spec::Tmpfile
|
231
|
+
|
232
|
+
before do
|
233
|
+
@quiet = Rake.application.options.quiet
|
234
|
+
Rake.application.options.quiet = true
|
235
|
+
end
|
236
|
+
|
237
|
+
after do
|
238
|
+
Rake.application.options.quiet = @quiet
|
239
|
+
end
|
240
|
+
|
241
|
+
describe "when spec path is under the working directory" do
|
242
|
+
before do
|
243
|
+
@specdir = tmpdir('specs')
|
244
|
+
@tasks = Shenandoah::Tasks.new(:spec_path => @specdir)
|
245
|
+
end
|
246
|
+
|
247
|
+
it "fails without a name" do
|
248
|
+
lambda { @tasks.generate_spec(nil) }.
|
249
|
+
should raise_error(/Please specify a spec name. E.g., shen:generate\[foo\]./)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "generates the spec file" do
|
253
|
+
@tasks.generate_spec('arb')
|
254
|
+
File.exist?("#{@specdir}/arb_spec.js").should be_true
|
255
|
+
end
|
256
|
+
|
257
|
+
it "generates the HTML fixture" do
|
258
|
+
@tasks.generate_spec('zamm')
|
259
|
+
File.exist?("#{@specdir}/zamm.html").should be_true
|
260
|
+
end
|
261
|
+
|
262
|
+
describe "with nested paths" do
|
263
|
+
before do
|
264
|
+
@tasks.generate_spec("frob/zazz")
|
265
|
+
end
|
266
|
+
|
267
|
+
it "generates the spec file" do
|
268
|
+
File.exist?("#{@specdir}/frob/zazz_spec.js").should be_true
|
269
|
+
end
|
270
|
+
|
271
|
+
it "generates the HTML fixture" do
|
272
|
+
File.exist?("#{@specdir}/frob/zazz.html").should be_true
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
describe "when spec_path is not a child of working directory" do
|
278
|
+
before do
|
279
|
+
@original_wd = FileUtils.pwd
|
280
|
+
@specdir = tmpdir('specs')
|
281
|
+
@tasks = Shenandoah::Tasks.new(:spec_path => @specdir)
|
282
|
+
FileUtils.cd tmpdir('other')
|
283
|
+
|
284
|
+
@tasks.generate_spec("zip/zoom")
|
285
|
+
end
|
286
|
+
|
287
|
+
after do
|
288
|
+
FileUtils.cd @original_wd
|
289
|
+
end
|
290
|
+
|
291
|
+
it "generates the spec file" do
|
292
|
+
File.exist?("#{@specdir}/zip/zoom_spec.js").should be_true
|
293
|
+
end
|
294
|
+
|
295
|
+
it "generates the HTML fixture" do
|
296
|
+
File.exist?("#{@specdir}/zip/zoom.html").should be_true
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
85
300
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'spec'
|
2
2
|
require 'rubygems'
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
# Rake needs to be locked to the version that buildr expects before
|
4
|
+
# anything else loads and gets the most recent installed version
|
5
|
+
SHEN_RAKE_VERSION = '0.8.4'
|
6
|
+
gem 'rake', "= #{SHEN_RAKE_VERSION}"
|
6
7
|
|
7
8
|
Spec::Runner.configure do |config|
|
8
9
|
|
@@ -10,6 +11,13 @@ end
|
|
10
11
|
|
11
12
|
module Shenandoah
|
12
13
|
module Spec
|
14
|
+
def self.load_path_additions
|
15
|
+
[
|
16
|
+
File.dirname(__FILE__),
|
17
|
+
File.join(File.dirname(__FILE__), '..', 'lib')
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
13
21
|
module Tmpfile
|
14
22
|
attr_writer :tmpdir
|
15
23
|
|
@@ -20,6 +28,13 @@ module Shenandoah
|
|
20
28
|
n
|
21
29
|
end
|
22
30
|
|
31
|
+
def tmpscript(name, contents)
|
32
|
+
tmpfile name,
|
33
|
+
Shenandoah::Spec.load_path_additions.
|
34
|
+
map { |a| "$LOAD_PATH.unshift(#{a.inspect})" }.
|
35
|
+
join("\n") + "\n" + contents
|
36
|
+
end
|
37
|
+
|
23
38
|
def tmpdir(name=nil)
|
24
39
|
n = @tmpdir
|
25
40
|
if (name)
|
@@ -58,4 +73,6 @@ module Shenandoah
|
|
58
73
|
end
|
59
74
|
end
|
60
75
|
end
|
61
|
-
end
|
76
|
+
end
|
77
|
+
|
78
|
+
Shenandoah::Spec.load_path_additions.each { |p| $LOAD_PATH.unshift(p) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shenandoah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rhett Sutphin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-07-14 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -72,6 +72,16 @@ dependencies:
|
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 0.3.0
|
74
74
|
version:
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: hpricot
|
77
|
+
type: :development
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.8.1
|
84
|
+
version:
|
75
85
|
- !ruby/object:Gem::Dependency
|
76
86
|
name: rspec_hpricot_matchers
|
77
87
|
type: :development
|
@@ -142,6 +152,76 @@ dependencies:
|
|
142
152
|
- !ruby/object:Gem::Version
|
143
153
|
version: 1.12.2
|
144
154
|
version:
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: rubyzip
|
157
|
+
type: :development
|
158
|
+
version_requirement:
|
159
|
+
version_requirements: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: 0.9.1
|
164
|
+
version:
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: builder
|
167
|
+
type: :development
|
168
|
+
version_requirement:
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 2.1.2
|
174
|
+
version:
|
175
|
+
- !ruby/object:Gem::Dependency
|
176
|
+
name: rubyforge
|
177
|
+
type: :development
|
178
|
+
version_requirement:
|
179
|
+
version_requirements: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - "="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: 1.0.3
|
184
|
+
version:
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: rjb
|
187
|
+
type: :development
|
188
|
+
version_requirement:
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: 1.1.6
|
194
|
+
version:
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: Antwrap
|
197
|
+
type: :development
|
198
|
+
version_requirement:
|
199
|
+
version_requirements: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - "="
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: 0.7.0
|
204
|
+
version:
|
205
|
+
- !ruby/object:Gem::Dependency
|
206
|
+
name: xml-simple
|
207
|
+
type: :development
|
208
|
+
version_requirement:
|
209
|
+
version_requirements: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - "="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: 1.0.12
|
214
|
+
version:
|
215
|
+
- !ruby/object:Gem::Dependency
|
216
|
+
name: archive-tar-minitar
|
217
|
+
type: :development
|
218
|
+
version_requirement:
|
219
|
+
version_requirements: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - "="
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: 0.5.2
|
224
|
+
version:
|
145
225
|
description:
|
146
226
|
email: rhett@detailedbalance.net
|
147
227
|
executables: []
|