visionmedia-jspec 1.1.3 → 1.1.4
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.rdoc +33 -0
- data/Manifest +14 -0
- data/README.rdoc +95 -51
- data/bin/jspec +68 -14
- data/jspec.gemspec +3 -3
- data/lib/jspec.jquery.js +30 -24
- data/lib/jspec.js +428 -251
- data/server/browsers.rb +24 -0
- data/server/server.rb +114 -0
- data/spec/server.html +20 -0
- data/spec/spec.core.js +48 -1
- data/spec/spec.grammar.js +5 -0
- data/spec/spec.jquery.js +13 -7
- data/spec/spec.rhino.js +8 -0
- data/templates/default/lib/yourlib.core.js +1 -34
- data/templates/rhino/History.rdoc +4 -0
- data/templates/rhino/README.rdoc +29 -0
- data/templates/rhino/lib/yourlib.core.js +2 -0
- data/templates/rhino/spec/spec.core.js +8 -0
- data/templates/rhino/spec/spec.js +7 -0
- data/templates/server/History.rdoc +4 -0
- data/templates/server/README.rdoc +29 -0
- data/templates/server/lib/yourlib.core.js +2 -0
- data/templates/server/spec/spec.core.js +8 -0
- data/templates/server/spec/spec.html +15 -0
- metadata +16 -2
data/History.rdoc
CHANGED
@@ -1,4 +1,37 @@
|
|
1
1
|
|
2
|
+
=== 1.1.4 / 2009-04-17
|
3
|
+
|
4
|
+
* Added rhino and server template files
|
5
|
+
* Added JSpec.hasXhr()
|
6
|
+
* Added JSpec.xhr()
|
7
|
+
* Added Ruby javascript testing server
|
8
|
+
* Added support for options passed to run()
|
9
|
+
* Added failuresOnly for Terminal formatter
|
10
|
+
* Added terminal assertion graphs
|
11
|
+
* Addec color() utility
|
12
|
+
* Added main.puts() since we use print() as a utility
|
13
|
+
* Added rhino support
|
14
|
+
* Added fail() utility function
|
15
|
+
* Added JSpec.Assertion
|
16
|
+
* Added normalizeMatcherMessage()
|
17
|
+
* Added normalizeMatcherBody()
|
18
|
+
* Added have_classes [#19]
|
19
|
+
* Added extend() utility
|
20
|
+
* Added be_an_instance_of matcher
|
21
|
+
* Added constructor checking support for throw_error matcher [#72]
|
22
|
+
* Added file support for exception messages, making them much easier to debug
|
23
|
+
* Added catching of exceptions throw within specs [#46]
|
24
|
+
* Changed; executable aborts when template does not exist
|
25
|
+
* Changed; matchers now normalized upon creation, accepts function, hash, or string.
|
26
|
+
* Changed be() matcher to be strict [#57]
|
27
|
+
* Changed error() to conditionally show line number when available
|
28
|
+
* Renamed Jspec.addSuite to JSpec.describe and Suite#addSpec to Suite#it
|
29
|
+
* Refactored be_a_TYPE_input matchers so that the deprication warning is logged only when calling the method
|
30
|
+
* Fixed JSpec.requires() now works with latest version of JSpec.error()
|
31
|
+
* Fixed error() now displays exceptions throw that do not respond to .message
|
32
|
+
* Fixed commenting bug [#37]
|
33
|
+
* Removed JSpec.main, now just using local main
|
34
|
+
|
2
35
|
=== 1.1.3 / 2009-04-14
|
3
36
|
|
4
37
|
* Removed /test used for the executable, causing gem to fail building
|
data/Manifest
CHANGED
@@ -12,15 +12,29 @@ lib/jspec.js
|
|
12
12
|
Manifest
|
13
13
|
Rakefile
|
14
14
|
README.rdoc
|
15
|
+
server/browsers.rb
|
16
|
+
server/server.rb
|
15
17
|
spec/async
|
16
18
|
spec/jquery-1.3.1.js
|
19
|
+
spec/server.html
|
17
20
|
spec/spec.core.dom.js
|
18
21
|
spec/spec.core.js
|
19
22
|
spec/spec.grammar.js
|
20
23
|
spec/spec.html
|
21
24
|
spec/spec.jquery.js
|
25
|
+
spec/spec.rhino.js
|
22
26
|
templates/default/History.rdoc
|
23
27
|
templates/default/lib/yourlib.core.js
|
24
28
|
templates/default/README.rdoc
|
25
29
|
templates/default/spec/spec.core.js
|
26
30
|
templates/default/spec/spec.html
|
31
|
+
templates/rhino/History.rdoc
|
32
|
+
templates/rhino/lib/yourlib.core.js
|
33
|
+
templates/rhino/README.rdoc
|
34
|
+
templates/rhino/spec/spec.core.js
|
35
|
+
templates/rhino/spec/spec.js
|
36
|
+
templates/server/History.rdoc
|
37
|
+
templates/server/lib/yourlib.core.js
|
38
|
+
templates/server/README.rdoc
|
39
|
+
templates/server/spec/spec.core.js
|
40
|
+
templates/server/spec/spec.html
|
data/README.rdoc
CHANGED
@@ -8,15 +8,17 @@ and much more.
|
|
8
8
|
|
9
9
|
== Features
|
10
10
|
|
11
|
-
*
|
11
|
+
* Highly readable
|
12
12
|
* Framework / DOM independent
|
13
|
+
* Rhino support
|
14
|
+
* Async support
|
15
|
+
* Ruby JavaScript testing server
|
13
16
|
* Nested describes
|
14
17
|
* Does not pollute core object prototypes
|
15
|
-
* Async support
|
16
18
|
* Extremely simple and intuitive matcher declaration
|
17
19
|
* Over 45 core matchers
|
18
20
|
* Allows parens to be optional when using matchers to increase readability
|
19
|
-
* Several helpful formatters (
|
21
|
+
* Several helpful formatters (DOM, Console, Terminal, ...)
|
20
22
|
* Assertion graphs displaying how many, and which assertions pass or failed
|
21
23
|
* Default / customizable evaluation contexts
|
22
24
|
* DOM sandbox support
|
@@ -25,6 +27,13 @@ and much more.
|
|
25
27
|
* Profiling
|
26
28
|
* Tiny (15 kb compressed, 1000-ish LOC)
|
27
29
|
|
30
|
+
== Features Coming Soon
|
31
|
+
|
32
|
+
* 'Spy' or 'Proxy' assertions. person.should.receive('addPet').with('suki').and_return(['suki'])
|
33
|
+
* Grammar-less option. Dislike JSpec's grammar? well we will soon have grammar-less support,
|
34
|
+
which in turn will make your specs look much like traditional JavaScript BDD frameworks:
|
35
|
+
expect(this).to('be_coming', 'soon')
|
36
|
+
|
28
37
|
== Example
|
29
38
|
|
30
39
|
describe 'ShoppingCart'
|
@@ -54,8 +63,8 @@ and much more.
|
|
54
63
|
Simply download JSpec and include JSpec.css and JSpec.js in your markup.
|
55
64
|
Head over to the downloads section on Github, clone this public repo, or
|
56
65
|
add JSpec as a git submodule with in your project. Alternatively JSpec is
|
57
|
-
also available as a Ruby Gem
|
58
|
-
install as a gem simply:
|
66
|
+
also available as a Ruby Gem (though this is not required), which also
|
67
|
+
provides the `jspec` executable. To install as a gem simply:
|
59
68
|
$ sudo gem install visionmedia-jspec
|
60
69
|
|
61
70
|
At which point you may:
|
@@ -70,7 +79,7 @@ loaded using the exec method. Below is an example:
|
|
70
79
|
JSpec
|
71
80
|
.exec('spec.core.js')
|
72
81
|
.exec('spec.jquery.js')
|
73
|
-
.run()
|
82
|
+
.run({ failuresOnly : true })
|
74
83
|
.report()
|
75
84
|
}
|
76
85
|
</script>
|
@@ -84,44 +93,45 @@ each release.
|
|
84
93
|
== Options
|
85
94
|
|
86
95
|
You may alter the way JSpec operates by assigning options via the
|
87
|
-
JSpec.options hash,
|
88
|
-
query string
|
89
|
-
will both work.
|
96
|
+
JSpec.options hash, by passing string-based option values via the
|
97
|
+
query string, or passing a hash to run(). For example
|
98
|
+
JSpec.options.failuresOnly = true, and ?failuresOnly=1 will both work.
|
90
99
|
|
91
|
-
* profile {bool} when enabled, uses console.time() in order to display performance information in your console log as specs are completed.
|
92
|
-
* failuresOnly {bool} displays only failing specs, making them quick to discover and fix
|
93
|
-
* reportToId {string} an element id to report to when using the DOM formatter
|
100
|
+
* profile {bool} when enabled, uses console.time() in order to display performance information in your console log as specs are completed. (DOM, Console)
|
101
|
+
* failuresOnly {bool} displays only failing specs, making them quick to discover and fix (DOM, Terminal)
|
102
|
+
* reportToId {string} an element id to report to when using the DOM formatter (DOM)
|
94
103
|
|
95
104
|
== Matchers
|
96
105
|
|
97
106
|
* Core
|
98
107
|
|
99
|
-
- equal
|
100
|
-
- be_a, be_an
|
101
|
-
-
|
102
|
-
-
|
103
|
-
-
|
104
|
-
-
|
105
|
-
-
|
106
|
-
-
|
107
|
-
-
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
-
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
|
124
|
-
|
108
|
+
- equal, be ===
|
109
|
+
- be_a, be_an have constructor of x
|
110
|
+
- be_an_instance_of instanceof x
|
111
|
+
- be_at_least >=
|
112
|
+
- be_at_most <=
|
113
|
+
- be_null == null
|
114
|
+
- be_empty length of 0
|
115
|
+
- be_true == true
|
116
|
+
- be_false == false
|
117
|
+
- be_type be type of x
|
118
|
+
- be_greater_than >
|
119
|
+
- be_less_than <
|
120
|
+
- throw_error should throw an error, optionally supply the error string for comparison
|
121
|
+
- have object should have n of property (person.should.have(2, 'pets'))
|
122
|
+
- have_at_least object should have at least n of property
|
123
|
+
- have_at_most object should have a maximum n of property
|
124
|
+
- have_within object should have within n..n of property (person.should.have_within(1..3, 'pets')
|
125
|
+
- have_length length of n
|
126
|
+
- have_prop object should have property x, optionally supplying an expected value
|
127
|
+
- have_property strict version of have_prop
|
128
|
+
- be_within checks if n is within the range passed
|
129
|
+
- include include substring, array element, or hash key
|
130
|
+
- match string should match regexp x
|
131
|
+
- respond_to property x should be a function
|
132
|
+
- eql matches simple literals (strings, numbers) with ==
|
133
|
+
However composites like arrays or 'hashes' are recursively matched,
|
134
|
+
meaning that [1, 2, [3]].should_eql([1, 2, [3]]) will be true.
|
125
135
|
|
126
136
|
* jQuery
|
127
137
|
|
@@ -294,21 +304,16 @@ Another option is to declare a variable outside of the spec closures:
|
|
294
304
|
== Formatters
|
295
305
|
|
296
306
|
To change a formatter simply alter the options hash like below, assigning
|
297
|
-
a new constructor:
|
307
|
+
a new constructor, or pass it within the hash to run():
|
298
308
|
|
299
309
|
JSpec.options.formatter = JSpec.formatters.Console
|
300
310
|
|
301
|
-
|
302
|
-
|
303
|
-
Clean attractive HTML reporting
|
304
|
-
|
305
|
-
=== Console
|
311
|
+
OR
|
306
312
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
Coming soon
|
313
|
+
JSpec
|
314
|
+
.exec('...')
|
315
|
+
.run({ formatter : JSpec.formatters.Terminal })
|
316
|
+
.report()
|
312
317
|
|
313
318
|
== Custom Matchers
|
314
319
|
|
@@ -376,14 +381,53 @@ For additional usage execute:
|
|
376
381
|
Or for specific usage:
|
377
382
|
$ jspec help run
|
378
383
|
|
384
|
+
== Rhino
|
385
|
+
|
386
|
+
JSpec provides transparent support for Rhino, while using the Terminal formatter.
|
387
|
+
Simply create a JavaScript file with contents similar to below, and then execute
|
388
|
+
the command following it:
|
389
|
+
|
390
|
+
load('lib/jspec.js')
|
391
|
+
|
392
|
+
JSpec
|
393
|
+
.exec('spec/spec.grammar.js')
|
394
|
+
.exec('spec/spec.core.js')
|
395
|
+
.run({ formatter : JSpec.formatters.Terminal, failuresOnly : true })
|
396
|
+
.report()
|
397
|
+
|
398
|
+
Initialize project with:
|
399
|
+
$ jspec init myproject --template rhino
|
400
|
+
|
401
|
+
Run with:
|
402
|
+
$ jspec run --rhino
|
403
|
+
|
404
|
+
Or bind (automated testing):
|
405
|
+
$ jspec --rhino
|
406
|
+
|
407
|
+
== Server
|
408
|
+
|
409
|
+
The Ruby JavaScript testing server included with JSpec simply runs
|
410
|
+
the spec suites within each browser you specify, while reporting result
|
411
|
+
back to the terminal. It is essentially the same as using the DOM formatter
|
412
|
+
and auto-testing each browser, however results are centralized to the terminal,
|
413
|
+
removing the need to manually view each browser's output.
|
414
|
+
|
415
|
+
Initialize project with:
|
416
|
+
$ jspec init myproject --template server
|
417
|
+
|
418
|
+
Run with:
|
419
|
+
$ jspec run --server
|
420
|
+
|
379
421
|
== More Information
|
380
422
|
|
381
423
|
* Syntax comparison with other frameworks http://gist.github.com/92283
|
382
|
-
|
383
424
|
* Get the TextMate bundle at https://github.com/visionmedia/jspec.tmbundle/tree
|
384
|
-
|
385
425
|
* For more information consult the JSpec source code documentation or visit http://visionmedia.github.com/jspec
|
386
426
|
|
427
|
+
== Known Issues
|
428
|
+
|
429
|
+
* Opera likes to break for various reasons ... we are working on fixing these compat issues
|
430
|
+
|
387
431
|
== License
|
388
432
|
|
389
433
|
(The MIT License)
|
data/bin/jspec
CHANGED
@@ -1,32 +1,53 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
JSPEC_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
$:.unshift JSPEC_ROOT
|
5
|
+
|
3
6
|
require 'rubygems'
|
4
7
|
require 'commander'
|
5
8
|
require 'fileutils'
|
6
9
|
|
7
|
-
|
10
|
+
RHINO = 'java org.mozilla.javascript.tools.shell.Main'
|
8
11
|
|
9
12
|
program :name, 'JSpec'
|
10
|
-
program :version, '1.1.
|
13
|
+
program :version, '1.1.4'
|
11
14
|
program :description, 'JavaScript BDD Testing Framework'
|
12
15
|
default_command :bind
|
13
16
|
|
14
17
|
command :init do |c|
|
15
18
|
c.syntax = 'jspec init [dest]'
|
16
19
|
c.summary = 'Initialize a JSpec project template'
|
17
|
-
c.description = 'Initialize a JSpec project template. Defaults to the current directory
|
18
|
-
|
20
|
+
c.description = 'Initialize a JSpec project template. Defaults to the current directory
|
21
|
+
when [dest] is not specified. Currently three templates are available:
|
22
|
+
|
23
|
+
"default" : runs specs in browser(s) using the DOM formatter.
|
24
|
+
"rhino" : runs specs with Rhino using the Terminal formatter.
|
25
|
+
"server" : runs specs using a Ruby server/client solution which
|
26
|
+
starts each browser and reports back to the terminal.'
|
19
27
|
c.example 'Create a directory foo, initialized with a jspec template', 'jspec init foo'
|
28
|
+
c.example 'Initialize a rhino based project in the current directory', 'jspec init --template rhino'
|
29
|
+
c.example 'Initialize a server based project in foo', 'jspec init foo --template server'
|
30
|
+
c.option '-T', '--template name', 'Template to use. Valid choices are default, rhino, and server.'
|
20
31
|
c.when_called do |args, options|
|
21
32
|
dest = args.shift || '.'
|
33
|
+
options.default :template => 'default'
|
22
34
|
unless Dir[dest + '/*'].empty?
|
23
35
|
abort unless agree "'#{dest}' is not empty; continue? "
|
24
36
|
end
|
37
|
+
template = File.join JSPEC_ROOT, 'templates', options.template, '.'
|
38
|
+
abort "template #{options.template} does not exist" unless File.exists? template
|
25
39
|
FileUtils.mkdir_p dest
|
26
|
-
FileUtils.cp_r
|
27
|
-
|
28
|
-
|
29
|
-
|
40
|
+
FileUtils.cp_r template, dest
|
41
|
+
path = case options.template
|
42
|
+
when 'default' ; 'spec.html'
|
43
|
+
when 'rhino' ; 'spec.js'
|
44
|
+
else
|
45
|
+
end
|
46
|
+
if path
|
47
|
+
spec = File.join dest, 'spec', path
|
48
|
+
contents = File.read(spec).gsub 'JSPEC_ROOT', JSPEC_ROOT
|
49
|
+
File.open(spec, 'w') { |file| file.write contents }
|
50
|
+
end
|
30
51
|
say "Template initialized at '#{dest}'"
|
31
52
|
end
|
32
53
|
end
|
@@ -36,7 +57,9 @@ command :update do |c|
|
|
36
57
|
c.summary = 'Update JSpec releases'
|
37
58
|
c.description = 'Update JSpec release in [paths], this will allow you to utilize the latest
|
38
59
|
JSpec features. If you have suites running at a path other than the regular
|
39
|
-
spec/spec.html simply pass them as arguments to this sub-command.
|
60
|
+
spec/spec.html simply pass them as arguments to this sub-command.
|
61
|
+
|
62
|
+
This is only needed when using the default, or rhino project templates.'
|
40
63
|
c.when_called do |args, options|
|
41
64
|
args = %w( spec/spec.html ) if args.empty?
|
42
65
|
args.each do |path|
|
@@ -54,30 +77,61 @@ command :run do |c|
|
|
54
77
|
c.description = 'Run specifications, defaulting [path] to spec/spec.html. You will need
|
55
78
|
supply [path] if your specs do not reside in this location. `run --bind` is
|
56
79
|
the default sub-command of jspec so you may simply execute `jspec` in order
|
57
|
-
to bind execution of your specs when a file is altered.
|
80
|
+
to bind execution of your specs when a file is altered.
|
81
|
+
|
82
|
+
JSpec supports Rhino execution when installed. The [path] is assumed to be
|
83
|
+
spec/spec.js unless specified. See examples below for using the --rhino switch.'
|
58
84
|
c.example 'Run once in Safari', 'jspec run'
|
59
85
|
c.example 'Run once in Safari and Firefox', 'jspec run --browsers Safari,Firefox'
|
60
86
|
c.example 'Run custom spec file', 'jspec run foo.html'
|
61
|
-
c.example 'Auto-
|
87
|
+
c.example 'Auto-run browsers when a file is altered', 'jspec run --bind --browsers Safari,Firefox'
|
62
88
|
c.example 'Shortcut for the previous example', 'jspec --browsers Safari,Firefox'
|
89
|
+
c.example 'Auto-run rhino when a file is altered', 'jspec --rhino'
|
90
|
+
c.example 'Run Rhino specs once', 'jspec run --rhino'
|
63
91
|
c.option '-b', '--browsers BROWSERS', Array, 'Specify browsers to test, defaults to Safari'
|
64
92
|
c.option '-p', '--paths PATHS', Array, 'Specify paths when binding, defaults to javascript within ./lib and ./spec'
|
65
93
|
c.option '-B', '--bind', 'Auto-run specs when source files or specs are altered'
|
94
|
+
c.option '-R', '--rhino', 'Run specs using Rhino'
|
95
|
+
c.option '-S', '--server', 'Run specs using the JSpec server'
|
96
|
+
c.option '-s', '--server-only', 'Start JSpec server without running browsers'
|
66
97
|
c.when_called do |args, options|
|
67
98
|
begin
|
68
99
|
require 'bind'
|
69
|
-
spec = args.shift || 'spec/spec.html'
|
70
100
|
options.default :browsers => %w( Safari ), :paths => ['lib/**/*.js', 'spec/**/*.js']
|
71
|
-
|
101
|
+
|
102
|
+
# Actions
|
103
|
+
if options.rhino
|
104
|
+
spec = args.shift || 'spec/spec.js'
|
105
|
+
action = lambda { rhino spec }
|
106
|
+
elsif options.server
|
107
|
+
spec = args.shift || 'spec/spec.html'
|
108
|
+
action = lambda { start_server options, spec }
|
109
|
+
else
|
110
|
+
spec = args.shift || 'spec/spec.html'
|
111
|
+
action = Bind::Actions::RefreshBrowsers.new spec, *options.browsers
|
112
|
+
end
|
113
|
+
|
114
|
+
# Binding
|
72
115
|
if options.bind
|
73
116
|
listener = Bind::Listener.new :paths => options.paths, :interval => 1, :actions => [action], :debug => $stdout
|
74
117
|
listener.run!
|
75
118
|
else
|
76
|
-
action.call spec
|
119
|
+
action.call File.new(spec)
|
77
120
|
end
|
121
|
+
|
78
122
|
rescue LoadError
|
79
123
|
abort "jspec run requires the visionmedia-bind gem; http://visionmedia.github.com/bind/"
|
80
124
|
end
|
81
125
|
end
|
82
126
|
end
|
83
127
|
alias_command :bind, :run, '--bind'
|
128
|
+
|
129
|
+
def rhino file
|
130
|
+
abort "#{file} not found" unless File.exists? file
|
131
|
+
system "#{RHINO} #{file}"
|
132
|
+
end
|
133
|
+
|
134
|
+
def start_server options, spec
|
135
|
+
require 'server/server'
|
136
|
+
JSpec::Server.start options, spec
|
137
|
+
end
|
data/jspec.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{jspec}
|
5
|
-
s.version = "1.1.
|
5
|
+
s.version = "1.1.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["TJ Holowaychuk"]
|
9
|
-
s.date = %q{2009-04-
|
9
|
+
s.date = %q{2009-04-17}
|
10
10
|
s.default_executable = %q{jspec}
|
11
11
|
s.description = %q{JavaScript BDD Testing Framework}
|
12
12
|
s.email = %q{tj@vision-media.ca}
|
13
13
|
s.executables = ["jspec"]
|
14
14
|
s.extra_rdoc_files = ["bin/jspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.jquery.js", "lib/jspec.js", "README.rdoc"]
|
15
|
-
s.files = ["bin/jspec", "History.rdoc", "jspec.gemspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.jquery.js", "lib/jspec.js", "Manifest", "Rakefile", "README.rdoc", "spec/async", "spec/jquery-1.3.1.js", "spec/spec.core.dom.js", "spec/spec.core.js", "spec/spec.grammar.js", "spec/spec.html", "spec/spec.jquery.js", "templates/default/History.rdoc", "templates/default/lib/yourlib.core.js", "templates/default/README.rdoc", "templates/default/spec/spec.core.js", "templates/default/spec/spec.html"]
|
15
|
+
s.files = ["bin/jspec", "History.rdoc", "jspec.gemspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.jquery.js", "lib/jspec.js", "Manifest", "Rakefile", "README.rdoc", "server/browsers.rb", "server/server.rb", "spec/async", "spec/jquery-1.3.1.js", "spec/server.html", "spec/spec.core.dom.js", "spec/spec.core.js", "spec/spec.grammar.js", "spec/spec.html", "spec/spec.jquery.js", "spec/spec.rhino.js", "templates/default/History.rdoc", "templates/default/lib/yourlib.core.js", "templates/default/README.rdoc", "templates/default/spec/spec.core.js", "templates/default/spec/spec.html", "templates/rhino/History.rdoc", "templates/rhino/lib/yourlib.core.js", "templates/rhino/README.rdoc", "templates/rhino/spec/spec.core.js", "templates/rhino/spec/spec.js", "templates/server/History.rdoc", "templates/server/lib/yourlib.core.js", "templates/server/README.rdoc", "templates/server/spec/spec.core.js", "templates/server/spec/spec.html"]
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.homepage = %q{http://visionmedia.github.com/jspec}
|
18
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Jspec", "--main", "README.rdoc"]
|
data/lib/jspec.jquery.js
CHANGED
@@ -1,68 +1,74 @@
|
|
1
1
|
|
2
2
|
// JSpec - jQuery - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
3
3
|
|
4
|
-
(function(
|
4
|
+
(function(){
|
5
5
|
|
6
6
|
// --- Dependencies
|
7
7
|
|
8
|
-
|
8
|
+
JSpec.requires('jQuery', 'when using jspec.jquery.js')
|
9
9
|
|
10
10
|
// --- Async Support
|
11
11
|
|
12
|
-
|
12
|
+
jQuery.ajaxSetup({ async : false })
|
13
13
|
|
14
14
|
// --- Helpers
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
JSpec.defaultContext.element = jQuery
|
17
|
+
JSpec.defaultContext.elements = jQuery
|
18
|
+
JSpec.defaultContext.defaultSandbox = JSpec.defaultContext.sandbox
|
19
|
+
JSpec.defaultContext.sandbox = function() { return jQuery(JSpec.defaultContext.defaultSandbox()) }
|
20
20
|
|
21
21
|
// --- Matchers
|
22
22
|
|
23
|
-
|
23
|
+
JSpec.addMatchers({
|
24
24
|
have_tag : "jQuery(expected, actual).length == 1",
|
25
25
|
have_one : "alias have_tag",
|
26
26
|
have_tags : "jQuery(expected, actual).length > 1",
|
27
27
|
have_many : "alias have_tags",
|
28
28
|
have_child : "jQuery(actual).children(expected).length == 1",
|
29
29
|
have_children : "jQuery(actual).children(expected).length > 1",
|
30
|
-
have_class : "jQuery(actual).hasClass(expected)",
|
31
30
|
have_text : "jQuery(actual).text() == expected",
|
32
31
|
have_value : "jQuery(actual).val() == expected",
|
33
32
|
be_visible : "!jQuery(actual).is(':hidden')",
|
34
33
|
be_hidden : "jQuery(actual).is(':hidden')",
|
35
34
|
be_enabled : "!jQuery(actual).attr('disabled')",
|
35
|
+
have_class : "jQuery(actual).hasClass(expected)",
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
have_classes : function(actual) {
|
38
|
+
for (i = 1; i < arguments.length; i++)
|
39
|
+
if (!jQuery(actual).hasClass(arguments[i])) return false
|
40
|
+
return true
|
41
|
+
},
|
42
|
+
|
43
|
+
have_attr : function(actual, attr, value) {
|
44
|
+
return value ? jQuery(actual).attr(attr) == value:
|
45
|
+
jQuery(actual).attr(attr)
|
41
46
|
}
|
42
47
|
})
|
43
48
|
|
44
49
|
// --- be_BOOLATTR
|
45
50
|
|
46
|
-
|
47
|
-
|
51
|
+
JSpec.each('disabled selected checked', function(attr){
|
52
|
+
JSpec.addMatcher('be_' + attr, "jQuery(actual).attr('" + attr + "')")
|
48
53
|
})
|
49
54
|
|
50
55
|
// --- have_ATTR
|
51
56
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
}
|
57
|
+
JSpec.each('type id title alt href src rel rev name target', function(attr){
|
58
|
+
JSpec.addMatcher('have_' + attr, function(actual, value) {
|
59
|
+
return JSpec.matchers.have_attr.match(actual, attr, value)
|
60
|
+
})
|
57
61
|
})
|
58
62
|
|
59
63
|
// --- be_a_TYPE_input (deprecated)
|
60
64
|
|
61
|
-
|
62
|
-
|
63
|
-
|
65
|
+
JSpec.each('checkbox radio file password submit image text reset button', function(type){
|
66
|
+
JSpec.addMatcher('be_a_' + type + '_input', function(actual, expected) {
|
67
|
+
console.warn("be_a_" + type + "_input is deprected; use have_type('" + type + "')");
|
68
|
+
return jQuery(actual).get(0).type == type
|
69
|
+
})
|
64
70
|
})
|
65
71
|
|
66
|
-
})(
|
72
|
+
})()
|
67
73
|
|
68
74
|
|