jspec 2.11.13 → 3.0.0
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/History.md +714 -0
- data/Manifest +51 -36
- data/README.md +968 -0
- data/Rakefile +4 -53
- data/bin/jspec +93 -224
- data/jspec.gemspec +5 -5
- data/lib/images/sprites.png +0 -0
- data/lib/jspec.css +2 -2
- data/lib/jspec.growl.js +115 -0
- data/lib/jspec.jquery.js +1 -1
- data/lib/jspec.js +98 -101
- data/lib/jspec.shell.js +5 -2
- data/lib/jspec.timers.js +1 -1
- data/lib/jspec.xhr.js +12 -2
- data/spec/commands/example_command.rb +19 -0
- data/spec/dom.html +33 -0
- data/spec/node.js +32 -0
- data/spec/rhino.js +24 -0
- data/spec/ruby/bin/init_spec.rb +101 -0
- data/spec/ruby/bin/install_spec.rb +141 -0
- data/spec/ruby/bin/run_spec.rb +0 -0
- data/spec/ruby/bin/shell_spec.rb +13 -0
- data/spec/ruby/bin/spec_helper.rb +25 -0
- data/spec/ruby/bin/update_spec.rb +72 -0
- data/spec/server.html +29 -0
- data/spec/server.rb +1 -1
- data/spec/{env.js → support/env.js} +554 -664
- data/spec/support/jquery.js +4376 -0
- data/spec/{helpers.js → unit/helpers.js} +2 -0
- data/spec/{spec.fixtures.js → unit/spec.fixtures.js} +0 -1
- data/spec/{spec.grammar-less.js → unit/spec.grammar-less.js} +0 -0
- data/spec/{spec.grammar.js → unit/spec.grammar.js} +1 -11
- data/spec/{spec.jquery.js → unit/spec.jquery.js} +0 -17
- data/spec/{spec.jquery.xhr.js → unit/spec.jquery.xhr.js} +13 -2
- data/spec/unit/spec.js +187 -0
- data/spec/{spec.matchers.js → unit/spec.matchers.js} +141 -66
- data/spec/{spec.modules.js → unit/spec.modules.js} +0 -0
- data/spec/{spec.shared-behaviors.js → unit/spec.shared-behaviors.js} +0 -0
- data/spec/{spec.utils.js → unit/spec.utils.js} +123 -22
- data/spec/{spec.xhr.js → unit/spec.xhr.js} +11 -10
- data/{server → src}/browsers.rb +23 -0
- data/{server → src}/helpers.rb +2 -17
- data/src/installables.rb +229 -0
- data/src/project.rb +340 -0
- data/{server → src}/routes.rb +1 -1
- data/{server → src}/server.rb +0 -0
- data/support/js.jar +0 -0
- data/templates/default/History.md +5 -0
- data/templates/default/{README.rdoc → Readme.md} +3 -3
- data/templates/default/lib/{yourlib.core.js → yourlib.js} +0 -0
- data/templates/default/spec/commands/example_command.rb +19 -0
- data/templates/default/spec/{spec.dom.html → dom.html} +5 -3
- data/templates/default/spec/rhino.js +10 -0
- data/templates/default/spec/server.html +18 -0
- data/templates/default/spec/unit/spec.helper.js +0 -0
- data/templates/default/spec/{spec.core.js → unit/spec.js} +0 -0
- data/templates/rails/commands/example_commands.rb +19 -0
- data/templates/rails/{spec.dom.html → dom.html} +4 -2
- data/templates/rails/rhino.js +10 -0
- data/templates/rails/server.html +18 -0
- data/templates/rails/unit/spec.helper.js +0 -0
- data/templates/rails/{spec.application.js → unit/spec.js} +0 -0
- metadata +56 -41
- data/History.rdoc +0 -590
- data/README.rdoc +0 -842
- data/spec/async +0 -1
- data/spec/jquery.js +0 -19
- data/spec/spec.dom.html +0 -34
- data/spec/spec.js +0 -166
- data/spec/spec.node.js +0 -46
- data/spec/spec.rhino.js +0 -23
- data/spec/spec.server.html +0 -29
- data/templates/default/History.rdoc +0 -4
- data/templates/default/spec/spec.rhino.js +0 -8
- data/templates/default/spec/spec.server.html +0 -16
- data/templates/rails/spec.rhino.js +0 -8
- data/templates/rails/spec.server.html +0 -16
data/src/project.rb
ADDED
@@ -0,0 +1,340 @@
|
|
1
|
+
|
2
|
+
module JSpec
|
3
|
+
|
4
|
+
#--
|
5
|
+
# Base project
|
6
|
+
#++
|
7
|
+
|
8
|
+
class Project
|
9
|
+
|
10
|
+
#--
|
11
|
+
# Constants
|
12
|
+
#++
|
13
|
+
|
14
|
+
BIND_PATHS = 'lib/**/*.js', 'spec/**/*.js'
|
15
|
+
RHINO = JSPEC_ROOT + '/support/js.jar'
|
16
|
+
|
17
|
+
##
|
18
|
+
# Destination directory.
|
19
|
+
|
20
|
+
attr_reader :dest
|
21
|
+
|
22
|
+
##
|
23
|
+
# Initialize project with _dest_.
|
24
|
+
|
25
|
+
def initialize dest
|
26
|
+
@dest = dest || '.'
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Execute _file_ with Node.js
|
31
|
+
|
32
|
+
def node file
|
33
|
+
system "node #{file}"
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Execute _file_ with Rhino.
|
38
|
+
|
39
|
+
def rhino file
|
40
|
+
system "java -jar #{rhino_jar} #{file}"
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Locate Rhino jar.
|
45
|
+
#
|
46
|
+
# * checks spec/support/js.jar
|
47
|
+
# * defaults to JSpec's support/js.jar
|
48
|
+
#
|
49
|
+
|
50
|
+
def rhino_jar
|
51
|
+
if File.exists? normalize('support/js.jar')
|
52
|
+
normalize 'support/js.jar'
|
53
|
+
else
|
54
|
+
RHINO
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Install project _name_ with _options_.
|
60
|
+
|
61
|
+
def install name, options = {}
|
62
|
+
raise ArgumentError, ':to option required' unless options.include? :to
|
63
|
+
project = JSpec::Installable.const_get(name.downcase.capitalize).new options
|
64
|
+
if project.use_progress_bar?
|
65
|
+
progress [:before, :install, :after],
|
66
|
+
:complete_message => project.install_message,
|
67
|
+
:format => "Installing #{name} (:progress_bar) %:percent_complete" do |method|
|
68
|
+
project.send method
|
69
|
+
end
|
70
|
+
else
|
71
|
+
project.before
|
72
|
+
project.install
|
73
|
+
project.after
|
74
|
+
say project.install_message
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
##
|
79
|
+
# Initialize the project with _options_
|
80
|
+
|
81
|
+
def init! options = {}
|
82
|
+
verify_empty!
|
83
|
+
copy_template :default
|
84
|
+
vendorize_with_symlink if options.include? :symlink
|
85
|
+
vendorize_with_copy if options.include? :freeze
|
86
|
+
replace_root
|
87
|
+
end
|
88
|
+
|
89
|
+
##
|
90
|
+
# Vendorize JSpec with symlink.
|
91
|
+
|
92
|
+
def vendorize_with_symlink
|
93
|
+
FileUtils.symlink "#{JSPEC_ROOT}/lib", normalize('lib'), :force => true
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# Vendorize JSpec with copy.
|
98
|
+
|
99
|
+
def vendorize_with_copy
|
100
|
+
FileUtils.cp_r "#{JSPEC_ROOT}/lib", normalize('lib')
|
101
|
+
end
|
102
|
+
|
103
|
+
##
|
104
|
+
# Copy template _name_ to the destination.
|
105
|
+
|
106
|
+
def copy_template name, options = {}
|
107
|
+
FileUtils.mkdir_p dest
|
108
|
+
FileUtils.cp_r path_to_template(name), options[:to] ?
|
109
|
+
"#{dest}/#{options[:to]}" :
|
110
|
+
dest
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Normalize _path_.
|
115
|
+
|
116
|
+
def normalize path
|
117
|
+
"#{dest}/spec/#{path}"
|
118
|
+
end
|
119
|
+
|
120
|
+
##
|
121
|
+
# Check if we are working with vendorized JSpec.
|
122
|
+
|
123
|
+
def vendorized?
|
124
|
+
File.directory?(normalize(:lib)) && normalize(:lib)
|
125
|
+
end
|
126
|
+
|
127
|
+
##
|
128
|
+
# Replace absolute JSPEC_ROOT paths.
|
129
|
+
|
130
|
+
def replace_root
|
131
|
+
replace_root_in 'dom.html', 'rhino.js', 'node.js'
|
132
|
+
end
|
133
|
+
|
134
|
+
##
|
135
|
+
# Root JSpec directory.
|
136
|
+
|
137
|
+
def root
|
138
|
+
vendorized? ? './spec' : JSPEC_ROOT
|
139
|
+
end
|
140
|
+
|
141
|
+
##
|
142
|
+
# Replace absolute JSPEC_ROOT _paths_.
|
143
|
+
|
144
|
+
def replace_root_in *paths
|
145
|
+
paths.each do |path|
|
146
|
+
jspec_root = root
|
147
|
+
jspec_root = '.' if vendorized? and path.include? '.html'
|
148
|
+
contents = File.read(normalize(path)).gsub 'JSPEC_ROOT', jspec_root
|
149
|
+
File.open(normalize(path), 'w') { |file| file.write contents }
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
##
|
154
|
+
# Path to template _name_.
|
155
|
+
|
156
|
+
def path_to_template name
|
157
|
+
"#{JSPEC_ROOT}/templates/#{name}/."
|
158
|
+
end
|
159
|
+
|
160
|
+
##
|
161
|
+
# Verify that the current directory is empty, otherwise
|
162
|
+
# prompt for continuation.
|
163
|
+
|
164
|
+
def verify_empty!
|
165
|
+
unless Dir[dest + '/*'].empty?
|
166
|
+
abort unless agree "`#{dest}' is not empty; continue? "
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
##
|
171
|
+
# Update absolute paths and/or vendorized libraries.
|
172
|
+
|
173
|
+
def update!
|
174
|
+
if path = vendorized?
|
175
|
+
type = File.symlink?(path) ? :symlink : :copy
|
176
|
+
FileUtils.rm_rf normalize(:lib)
|
177
|
+
send "vendorize_with_#{type}"
|
178
|
+
say "updated #{type} #{path} -> #{program(:version)}"
|
179
|
+
else
|
180
|
+
['dom.html', 'rhino.js', 'node.js'].each do |path|
|
181
|
+
path = normalize path
|
182
|
+
next unless File.exists? path
|
183
|
+
contents = File.read(path).gsub /jspec-(\d+\.\d+\.\d+)/, "jspec-#{program(:version)}"
|
184
|
+
if program(:version) == $1
|
185
|
+
say "skipping #{path}; already #{$1}"
|
186
|
+
next
|
187
|
+
end
|
188
|
+
File.open(path, 'r+'){ |file| file.write contents }
|
189
|
+
say "updated #{path}; #{$1} -> #{program(:version)}"
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
##
|
195
|
+
# Start server with _path_ html and _options_.
|
196
|
+
|
197
|
+
def start_server path, options = {}
|
198
|
+
options[:port] ||= 4444
|
199
|
+
set :port, options[:port]
|
200
|
+
set :server, 'Mongrel'
|
201
|
+
enable :sessions
|
202
|
+
disable :logging
|
203
|
+
hook = File.expand_path normalize('server.rb')
|
204
|
+
load hook if File.exists? hook
|
205
|
+
browsers = browsers_for(options[:browsers]) if options.include? :browsers
|
206
|
+
JSpec::Server.new(path, options[:port]).start(browsers)
|
207
|
+
end
|
208
|
+
|
209
|
+
##
|
210
|
+
# Return array of browser instances for the given _names_.
|
211
|
+
|
212
|
+
def browsers_for names
|
213
|
+
names.map do |name|
|
214
|
+
begin
|
215
|
+
Browser.subclasses.find do |browser|
|
216
|
+
browser.matches_name? name
|
217
|
+
end.new
|
218
|
+
rescue
|
219
|
+
raise "Unsupported browser `#{name}'"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
# Run _path_ with _options_.
|
226
|
+
|
227
|
+
def run! path = nil, options = {}
|
228
|
+
paths = options[:paths] || self.class::BIND_PATHS
|
229
|
+
|
230
|
+
# Action
|
231
|
+
|
232
|
+
case
|
233
|
+
when options.include?(:node)
|
234
|
+
path ||= normalize('node.js')
|
235
|
+
action = lambda { node(path) }
|
236
|
+
when options.include?(:rhino)
|
237
|
+
path ||= normalize('rhino.js')
|
238
|
+
action = lambda { rhino(path) }
|
239
|
+
when options.include?(:server)
|
240
|
+
raise 'Cannot use --bind with --server' if options.include? :bind
|
241
|
+
path ||= normalize('server.html')
|
242
|
+
action = lambda { start_server path, options }
|
243
|
+
else
|
244
|
+
path ||= normalize('dom.html')
|
245
|
+
browsers = browsers_for options[:browsers] || ['default']
|
246
|
+
action = lambda do
|
247
|
+
browsers.each do |browser|
|
248
|
+
browser.visit File.expand_path(path)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
# Bind action
|
254
|
+
|
255
|
+
if options.include? :bind
|
256
|
+
Bind::Listener.new(
|
257
|
+
:paths => paths,
|
258
|
+
:interval => 1,
|
259
|
+
:actions => [action],
|
260
|
+
:debug => $stdout).run!
|
261
|
+
else
|
262
|
+
exit !! action.call
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
##
|
267
|
+
# Return the Project instance which should be used for _dest_.
|
268
|
+
|
269
|
+
def self.for dest
|
270
|
+
(File.directory?("#{dest}/vendor") ?
|
271
|
+
JSpec::Project::Rails :
|
272
|
+
JSpec::Project).new(dest)
|
273
|
+
end
|
274
|
+
|
275
|
+
##
|
276
|
+
# Load all commands at the given _dir_.
|
277
|
+
|
278
|
+
def self.load_commands_at dir
|
279
|
+
Dir["#{dir}/**/*_command.rb"].each { |file| load file }
|
280
|
+
end
|
281
|
+
|
282
|
+
#--
|
283
|
+
# Rails project
|
284
|
+
#++
|
285
|
+
|
286
|
+
class Rails < self
|
287
|
+
|
288
|
+
#--
|
289
|
+
# Constants
|
290
|
+
#++
|
291
|
+
|
292
|
+
BIND_PATHS = 'public/javascripts/**/*.js', 'jspec/**/*.js'
|
293
|
+
|
294
|
+
##
|
295
|
+
# Initialize the project with _options_
|
296
|
+
|
297
|
+
def init! options = {}
|
298
|
+
verify_rails!
|
299
|
+
copy_template :rails, :to => :jspec
|
300
|
+
vendorize_with_symlink if options.include? :symlink
|
301
|
+
vendorize_with_copy if options.include? :freeze
|
302
|
+
replace_root
|
303
|
+
end
|
304
|
+
|
305
|
+
##
|
306
|
+
# Root JSpec directory.
|
307
|
+
|
308
|
+
def root
|
309
|
+
vendorized? ? './jspec' : JSPEC_ROOT
|
310
|
+
end
|
311
|
+
|
312
|
+
##
|
313
|
+
# Normalize _path_.
|
314
|
+
|
315
|
+
def normalize path
|
316
|
+
"#{dest}/jspec/#{path}"
|
317
|
+
end
|
318
|
+
|
319
|
+
##
|
320
|
+
# Verify that the current directory is rails, otherwise
|
321
|
+
# prompt for continuation.
|
322
|
+
|
323
|
+
def verify_rails!
|
324
|
+
unless rails?
|
325
|
+
abort unless agree "`#{dest}' does not appear to be a rails app; continue? "
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
##
|
330
|
+
# Check if the destination is the root of
|
331
|
+
# a rails application.
|
332
|
+
|
333
|
+
def rails?
|
334
|
+
File.directory? dest + '/vendor'
|
335
|
+
end
|
336
|
+
|
337
|
+
end
|
338
|
+
|
339
|
+
end
|
340
|
+
end
|
data/{server → src}/routes.rb
RENAMED
data/{server → src}/server.rb
RENAMED
File without changes
|
data/support/js.jar
ADDED
Binary file
|
@@ -1,13 +1,13 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
# YourLib
|
3
3
|
|
4
4
|
Description
|
5
5
|
|
6
|
-
|
6
|
+
## License
|
7
7
|
|
8
8
|
(The MIT License)
|
9
9
|
|
10
|
-
Copyright (c) 2009 Your Name
|
10
|
+
Copyright (c) 2009 Your Name <Your Email>
|
11
11
|
|
12
12
|
Permission is hereby granted, free of charge, to any person obtaining
|
13
13
|
a copy of this software and associated documentation files (the
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
# uncomment and call with `$ jspec example `
|
3
|
+
|
4
|
+
# command :example do |c|
|
5
|
+
# c.syntax = 'jspec example [options]'
|
6
|
+
# c.description = 'Just an example command'
|
7
|
+
# c.option '-f', '--foo string', 'Does some foo with <string>'
|
8
|
+
# c.option '-b', '--bar [string]', 'Does some bar with [string]'
|
9
|
+
# c.example 'Do some foo', 'jspec example --foo bar'
|
10
|
+
# c.example 'Do some bar', 'jspec example --bar'
|
11
|
+
# c.when_called do |args, options|
|
12
|
+
# p args
|
13
|
+
# p options.__hash__
|
14
|
+
# # options.foo
|
15
|
+
# # options.bar
|
16
|
+
# # options.__hash__[:foo]
|
17
|
+
# # options.__hash__[:bar]
|
18
|
+
# end
|
19
|
+
# end
|
@@ -2,13 +2,15 @@
|
|
2
2
|
<head>
|
3
3
|
<link type="text/css" rel="stylesheet" href="JSPEC_ROOT/lib/jspec.css" />
|
4
4
|
<script src="JSPEC_ROOT/lib/jspec.js"></script>
|
5
|
-
<script src="
|
5
|
+
<script src="JSPEC_ROOT/lib/jspec.xhr.js"></script>
|
6
|
+
<script src="../lib/yourlib.js"></script>
|
7
|
+
<script src="unit/spec.helper.js"></script>
|
6
8
|
<script>
|
7
9
|
function runSuites() {
|
8
10
|
JSpec
|
9
|
-
.exec('spec.
|
11
|
+
.exec('unit/spec.js')
|
10
12
|
.run()
|
11
|
-
.report()
|
13
|
+
.report({ fixturePath: 'fixtures' })
|
12
14
|
}
|
13
15
|
</script>
|
14
16
|
</head>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<script src="/jspec/jspec.js"></script>
|
4
|
+
<script src="/jspec/jspec.xhr.js"></script>
|
5
|
+
<script src="/lib/yourlib.js"></script>
|
6
|
+
<script src="/spec/unit/spec.helper.js"></script>
|
7
|
+
<script>
|
8
|
+
function runSuites() {
|
9
|
+
JSpec
|
10
|
+
.exec('unit/spec.js')
|
11
|
+
.run({ reporter: JSpec.reporters.Server, verbose: true, failuresOnly: true, fixturePath: '/spec/fixtures' })
|
12
|
+
.report()
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
</head>
|
16
|
+
<body class="jspec" onLoad="runSuites();">
|
17
|
+
</body>
|
18
|
+
</html>
|