jspec-steventux 3.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +763 -0
- data/Manifest +73 -0
- data/README.md +974 -0
- data/Rakefile +44 -0
- data/bin/jspec +178 -0
- data/jspec-steventux.gemspec +44 -0
- data/lib/images/bg.png +0 -0
- data/lib/images/hr.png +0 -0
- data/lib/images/loading.gif +0 -0
- data/lib/images/sprites.bg.png +0 -0
- data/lib/images/sprites.png +0 -0
- data/lib/images/vr.png +0 -0
- data/lib/jspec.css +149 -0
- data/lib/jspec.growl.js +115 -0
- data/lib/jspec.jquery.js +72 -0
- data/lib/jspec.js +1756 -0
- data/lib/jspec.shell.js +39 -0
- data/lib/jspec.timers.js +90 -0
- data/lib/jspec.xhr.js +195 -0
- data/spec/commands/example_command.rb +19 -0
- data/spec/dom.html +33 -0
- data/spec/fixtures/test.html +1 -0
- data/spec/fixtures/test.json +1 -0
- data/spec/fixtures/test.xml +5 -0
- data/spec/node.js +17 -0
- data/spec/rhino.js +23 -0
- data/spec/ruby/bin/init_spec.rb +101 -0
- data/spec/ruby/bin/install_spec.rb +142 -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 +8 -0
- data/spec/ruby/bin/update_spec.rb +72 -0
- data/spec/server.html +29 -0
- data/spec/server.rb +2 -0
- data/spec/support/env.js +10118 -0
- data/spec/support/jquery.js +4376 -0
- data/spec/unit/helpers.js +64 -0
- data/spec/unit/spec.fixtures.js +17 -0
- data/spec/unit/spec.grammar-less.js +34 -0
- data/spec/unit/spec.grammar.js +241 -0
- data/spec/unit/spec.jquery.js +178 -0
- data/spec/unit/spec.jquery.xhr.js +84 -0
- data/spec/unit/spec.js +187 -0
- data/spec/unit/spec.matchers.js +577 -0
- data/spec/unit/spec.modules.js +51 -0
- data/spec/unit/spec.shared-behaviors.js +80 -0
- data/spec/unit/spec.utils.js +346 -0
- data/spec/unit/spec.xhr.js +157 -0
- data/src/browsers.rb +294 -0
- data/src/helpers.rb +67 -0
- data/src/installables.rb +229 -0
- data/src/project.rb +341 -0
- data/src/routes.rb +57 -0
- data/src/server.rb +99 -0
- data/support/js.jar +0 -0
- data/templates/default/History.md +5 -0
- data/templates/default/Readme.md +29 -0
- data/templates/default/lib/yourlib.js +2 -0
- data/templates/default/spec/commands/example_command.rb +19 -0
- data/templates/default/spec/dom.html +22 -0
- data/templates/default/spec/node.js +10 -0
- data/templates/default/spec/rhino.js +10 -0
- data/templates/default/spec/server.html +18 -0
- data/templates/default/spec/server.rb +4 -0
- data/templates/default/spec/unit/spec.helper.js +0 -0
- data/templates/default/spec/unit/spec.js +8 -0
- data/templates/rails/commands/example_commands.rb +19 -0
- data/templates/rails/dom.html +22 -0
- data/templates/rails/rhino.js +10 -0
- data/templates/rails/server.html +18 -0
- data/templates/rails/server.rb +4 -0
- data/templates/rails/unit/spec.helper.js +0 -0
- data/templates/rails/unit/spec.js +8 -0
- metadata +185 -0
data/Rakefile
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
require 'echoe'
|
5
|
+
|
6
|
+
def version
|
7
|
+
$1 if File.read('lib/jspec.js').match /version *: *'(.*?)'/
|
8
|
+
end
|
9
|
+
|
10
|
+
Echoe.new "jspec", version do |p|
|
11
|
+
p.author = "S Laing (original JSpec by TJ Holowaychuk)"
|
12
|
+
p.email = "info@laingsolutions.com"
|
13
|
+
p.summary = "JavaScript BDD Testing Framework"
|
14
|
+
p.url = "http://github.com/steventux/jspec"
|
15
|
+
p.runtime_dependencies << "sinatra"
|
16
|
+
p.runtime_dependencies << "json_pure"
|
17
|
+
p.runtime_dependencies << "commander >=4.0.1"
|
18
|
+
p.runtime_dependencies << "bind >=0.2.8"
|
19
|
+
end
|
20
|
+
|
21
|
+
namespace :spec do
|
22
|
+
desc 'Run jspec executable specs'
|
23
|
+
task :bin do
|
24
|
+
sh 'spec --color --require spec/ruby/bin/spec_helper.rb spec/ruby/bin/*_spec.rb'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :jspec do
|
29
|
+
desc 'CI compatible jspec task'
|
30
|
+
task :ci_report do
|
31
|
+
# Run the Jspec command and read back the output.
|
32
|
+
output = IO.popen %{cd jspec && jspec run --server}
|
33
|
+
output.readlines.each { |line|
|
34
|
+
if matches = /^.*?Passes.*?\d+m(\d+).*?Failures.*?\d+m(\d+).*?$/.match(line)
|
35
|
+
puts "Jspec Test Passes: #{matches[1]}, Failures: #{matches[2]}."
|
36
|
+
end
|
37
|
+
|
38
|
+
} unless output.nil?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
task :gemspec => :build_gemspec
|
data/bin/jspec
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
JSPEC_ROOT = File.expand_path File.join(File.dirname(__FILE__), '..')
|
4
|
+
$:.unshift JSPEC_ROOT
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'commander/import'
|
8
|
+
require 'bind'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'src/project'
|
11
|
+
require 'src/installables'
|
12
|
+
require 'src/server'
|
13
|
+
|
14
|
+
program :name, 'JSpec'
|
15
|
+
program :version, '3.3.2'
|
16
|
+
program :description, 'JavaScript BDD Testing Framework'
|
17
|
+
default_command :bind
|
18
|
+
|
19
|
+
JSpec::Project.load_commands_at '~/.jspec/commands'
|
20
|
+
JSpec::Project.load_commands_at 'spec/commands'
|
21
|
+
JSpec::Project.load_commands_at 'jspec/commands'
|
22
|
+
|
23
|
+
command :stats do |c|
|
24
|
+
c.syntax = 'jspec stats [path ...]'
|
25
|
+
c.summary = 'View javascript source statistics'
|
26
|
+
c.description = 'View statistics for the given [paths], defaulting to /lib/**/*.js'
|
27
|
+
c.example 'View stats for all /lib javascript', 'jspec stats'
|
28
|
+
c.example 'View stats for all /public/javascript files', 'jspec stats public/javascript/*.js'
|
29
|
+
c.when_called do |paths, options|
|
30
|
+
paths = Dir['lib/**/*.js'] if paths.empty?
|
31
|
+
paths.each do |path|
|
32
|
+
contents = File.read path
|
33
|
+
say "%33s : \n" % $terminal.color(path, :bold)
|
34
|
+
say "%25s : %0.2f KiB\n" % ['size', File.size(path).to_f / 1024]
|
35
|
+
say "%25s : %d\n" % ['lines', contents.to_a.length]
|
36
|
+
say "%25s : %d\n" % ['comments', contents.scan(/\/\*.*?\*\/|\/\/.*?$/m).length]
|
37
|
+
say "%25s : %d\n" % ['functions', contents.scan(/function/i).length]
|
38
|
+
say "%25s : %d\n" % ['vars', contents.scan(/\bvar\b/).length]
|
39
|
+
say "\n"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
command :install do |c|
|
45
|
+
c.syntax = 'jspec install <project> [dest]'
|
46
|
+
c.summary = 'Install a project such as jQuery, Prototype, Rhino, etc.'
|
47
|
+
c.description = 'Install the given <project> to [dest] or spec/support/<project>.
|
48
|
+
When --release is not specified, the latest stable release will be used.
|
49
|
+
Currently the following projects are supported:
|
50
|
+
|
51
|
+
- jquery
|
52
|
+
- jqueryui
|
53
|
+
- prototype
|
54
|
+
- mootools
|
55
|
+
- dojo
|
56
|
+
- envjs (--release not yet supported)
|
57
|
+
- rhino (--release not yet supported)'
|
58
|
+
c.option '-r', '--release STRING', 'Release version to install'
|
59
|
+
c.example 'Install jQuery to spec/support/jquery.js', 'jspec install jquery'
|
60
|
+
c.example 'Install jQuery 1.3.0 to spec/support/jquery.js', 'jspec install jquery --release 1.3.0'
|
61
|
+
c.example 'Install Prototype to spec/prototype.js', 'jspec install prototype spec'
|
62
|
+
c.example 'Install Prototype to spec/vendor/prototype.js', 'jspec install prototype spec/vendor'
|
63
|
+
c.when_called do |args, options|
|
64
|
+
name = args.shift or raise 'Project name required'
|
65
|
+
project = JSpec::Project.for '.'
|
66
|
+
if dest = args.shift
|
67
|
+
project.install name, :to => dest, :release => options.release
|
68
|
+
else
|
69
|
+
Dir.mkdir project.normalize('support') unless File.directory? project.normalize('support')
|
70
|
+
project.install name, :to => project.normalize('support'), :release => options.release
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
command :init do |c|
|
76
|
+
c.syntax = 'jspec init [dest]'
|
77
|
+
c.summary = 'Initialize a JSpec project template'
|
78
|
+
c.description = 'Initialize a JSpec project template. Defaults to the current directory
|
79
|
+
when [dest] is not specified. The template includes several files for
|
80
|
+
running via Rhino, DOM, and the JSpec Rack server.
|
81
|
+
|
82
|
+
Additional switches --freeze, and --symlink are available in order
|
83
|
+
to preserve the version of JSpec at the time of initialization. Otherwise
|
84
|
+
incompatibilities from later versions may prevent your suite from
|
85
|
+
running properly.
|
86
|
+
|
87
|
+
To update a project to the recent version of JSpec use
|
88
|
+
`jspec help udpate` for more information.'
|
89
|
+
c.option '-R', '--rails', 'Initialize rails template from rails root directory'
|
90
|
+
c.option '-f', '--freeze', 'Copy the JSpec library'
|
91
|
+
c.option '-s', '--symlink', 'Symlink the JSpec library instead of copying it'
|
92
|
+
c.example 'Create a project in the current directory', 'jspec init'
|
93
|
+
c.example 'Create a directory foo, initialized with a jspec template', 'jspec init foo'
|
94
|
+
c.example 'Rails application support', 'jspec init --rails'
|
95
|
+
c.example 'Rails application support, --rails is no longer required', 'jspec init'
|
96
|
+
c.example 'Freeze JSpec\'s library at spec/lib', 'jspec init --freeze'
|
97
|
+
c.when_called do |args, options|
|
98
|
+
JSpec::Project.for(dest = args.shift || '.').init! options.__hash__
|
99
|
+
say "Template initialized at `#{dest}'"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
command :shell do |c|
|
104
|
+
c.syntax = 'jspec shell [path ...]'
|
105
|
+
c.summary = 'JSpec interactive shell'
|
106
|
+
c.description = 'Launch interactive Rhino shell with jspec.js, jspec.shell.js,
|
107
|
+
and any [path]s given. Simply type "quit" or "exit" to
|
108
|
+
terminate the shell.'
|
109
|
+
c.example 'Run shell', 'jspec shell'
|
110
|
+
c.example 'Run shell with glob of files', 'jspec shell lib/*.js'
|
111
|
+
c.example 'Run shell with list of files', 'jspec shell lib/foo.js lib/bar.js'
|
112
|
+
c.when_called do |args, options|
|
113
|
+
paths = ['jspec.js', 'jspec.shell.js'] | args
|
114
|
+
paths.map! do |path|
|
115
|
+
if path.include? 'jspec.'
|
116
|
+
"-f #{JSPEC_ROOT}/lib/#{path}"
|
117
|
+
else
|
118
|
+
"-f #{path}"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
say "JSpec #{program(:version)}"
|
122
|
+
`#{JSpec::Project::RHINO} #{paths.join(' ')} -f -`
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
command :update do |c|
|
127
|
+
c.syntax = 'jspec update [dest]'
|
128
|
+
c.summary = 'Update JSpec releases'
|
129
|
+
c.description = 'Update JSpec release relative to [dest], this will allow you
|
130
|
+
to utilize the latest JSpec features. Execute from JSpec project
|
131
|
+
root without [dest] to update the default template spec files.
|
132
|
+
|
133
|
+
This command supports regular projects, as well as those initialized
|
134
|
+
with --symlink and --freeze.'
|
135
|
+
c.example 'Update project in the current directory', 'jspec update'
|
136
|
+
c.example 'Update project in the directory specified', 'jspec update path/to/project'
|
137
|
+
c.when_called do |args, options|
|
138
|
+
JSpec::Project.for(dest = args.shift || '.').update!
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
command :run do |c|
|
143
|
+
c.syntax = 'jspec run [path] [options]'
|
144
|
+
c.summary = 'Run specifications'
|
145
|
+
c.description = 'Run specifications, defaulting [path] to spec/dom.html.
|
146
|
+
You will need to supply [path] if your specs do not reside
|
147
|
+
in this location. `run --bind` is the default sub-command of
|
148
|
+
jspec so you may simply execute `jspec` in order to bind execution
|
149
|
+
of your specs when a file is altered.
|
150
|
+
|
151
|
+
Rhino:
|
152
|
+
The [path] is assumed to be spec/rhino.js unless specified.
|
153
|
+
|
154
|
+
Node.js:
|
155
|
+
The [path] is assumed to be spec/node.js unless specified.
|
156
|
+
|
157
|
+
JSpec\'s server is also available via --server, which defaults
|
158
|
+
the [path] to spec/server.html'
|
159
|
+
c.example 'Run once in default browser', 'jspec run'
|
160
|
+
c.example 'Run once in Safari and Firefox', 'jspec run --browsers Safari,Firefox'
|
161
|
+
c.example 'Run once in Opera, Firefox, Chrome, and WebKit', 'jspec run --browsers opera,ff,chrome,webkit'
|
162
|
+
c.example 'Run custom spec file', 'jspec run foo.html'
|
163
|
+
c.example 'Auto-run browsers when a file is altered', 'jspec run --bind --browsers Safari,Firefox'
|
164
|
+
c.example 'Shortcut for the previous example', 'jspec --browsers Safari,Firefox'
|
165
|
+
c.example 'Run Rhino specs', 'jspec run --rhino'
|
166
|
+
c.example 'Auto-run rhino when a file is altered', 'jspec --rhino'
|
167
|
+
c.option '-b', '--browsers BROWSERS', Array, 'Specify browsers to test'
|
168
|
+
c.option '-p', '--paths PATHS', Array, 'Specify paths when binding, defaults to javascript within ./lib and ./spec'
|
169
|
+
c.option '-B', '--bind', 'Auto-run specs when source files or specs are altered'
|
170
|
+
c.option '-R', '--rhino', 'Run specs using Rhino'
|
171
|
+
c.option '-N', '--node', 'Run specs using Node.js'
|
172
|
+
c.option '-S', '--server', 'Run specs using the JSpec server'
|
173
|
+
c.option '-P', '--port NUMBER', Integer, 'Start JSpec server using the given port number'
|
174
|
+
c.when_called do |args, options|
|
175
|
+
JSpec::Project.for('.').run! args.first, options.__hash__
|
176
|
+
end
|
177
|
+
end
|
178
|
+
alias_command :bind, :run, '--bind'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{jspec-steventux}
|
5
|
+
s.version = "3.3.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["TJ Holowaychuk, S Laing"]
|
9
|
+
s.date = %q{2010-02-25}
|
10
|
+
s.default_executable = %q{jspec}
|
11
|
+
s.description = %q{JavaScript BDD Testing Framework}
|
12
|
+
s.email = %q{info@laingsolutions.com}
|
13
|
+
s.executables = ["jspec"]
|
14
|
+
s.extra_rdoc_files = ["README.md", "bin/jspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/loading.gif", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.growl.js", "lib/jspec.jquery.js", "lib/jspec.js", "lib/jspec.shell.js", "lib/jspec.timers.js", "lib/jspec.xhr.js"]
|
15
|
+
s.files = ["History.md", "Manifest", "README.md", "Rakefile", "bin/jspec", "jspec-steventux.gemspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/loading.gif", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.growl.js", "lib/jspec.jquery.js", "lib/jspec.js", "lib/jspec.shell.js", "lib/jspec.timers.js", "lib/jspec.xhr.js", "spec/commands/example_command.rb", "spec/dom.html", "spec/fixtures/test.html", "spec/fixtures/test.json", "spec/fixtures/test.xml", "spec/node.js", "spec/rhino.js", "spec/ruby/bin/init_spec.rb", "spec/ruby/bin/install_spec.rb", "spec/ruby/bin/run_spec.rb", "spec/ruby/bin/shell_spec.rb", "spec/ruby/bin/spec_helper.rb", "spec/ruby/bin/update_spec.rb", "spec/server.html", "spec/server.rb", "spec/support/env.js", "spec/support/jquery.js", "spec/unit/helpers.js", "spec/unit/spec.fixtures.js", "spec/unit/spec.grammar-less.js", "spec/unit/spec.grammar.js", "spec/unit/spec.jquery.js", "spec/unit/spec.jquery.xhr.js", "spec/unit/spec.js", "spec/unit/spec.matchers.js", "spec/unit/spec.modules.js", "spec/unit/spec.shared-behaviors.js", "spec/unit/spec.utils.js", "spec/unit/spec.xhr.js", "src/browsers.rb", "src/helpers.rb", "src/installables.rb", "src/project.rb", "src/routes.rb", "src/server.rb", "support/js.jar", "templates/default/History.md", "templates/default/Readme.md", "templates/default/lib/yourlib.js", "templates/default/spec/commands/example_command.rb", "templates/default/spec/dom.html", "templates/default/spec/node.js", "templates/default/spec/rhino.js", "templates/default/spec/server.html", "templates/default/spec/server.rb", "templates/default/spec/unit/spec.helper.js", "templates/default/spec/unit/spec.js", "templates/rails/commands/example_commands.rb", "templates/rails/dom.html", "templates/rails/rhino.js", "templates/rails/server.html", "templates/rails/server.rb", "templates/rails/unit/spec.helper.js", "templates/rails/unit/spec.js"]
|
16
|
+
s.homepage = %q{http://github.com/steventux/jspec}
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Jspec", "--main", "README.md"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{jspec}
|
20
|
+
s.rubygems_version = %q{1.3.6}
|
21
|
+
s.summary = %q{JavaScript BDD Testing Framework}
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
29
|
+
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
30
|
+
s.add_runtime_dependency(%q<commander>, [">= 4.0.1"])
|
31
|
+
s.add_runtime_dependency(%q<bind>, [">= 0.2.8"])
|
32
|
+
else
|
33
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
34
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
35
|
+
s.add_dependency(%q<commander>, [">= 4.0.1"])
|
36
|
+
s.add_dependency(%q<bind>, [">= 0.2.8"])
|
37
|
+
end
|
38
|
+
else
|
39
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
40
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
41
|
+
s.add_dependency(%q<commander>, [">= 4.0.1"])
|
42
|
+
s.add_dependency(%q<bind>, [">= 0.2.8"])
|
43
|
+
end
|
44
|
+
end
|
data/lib/images/bg.png
ADDED
Binary file
|
data/lib/images/hr.png
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/images/vr.png
ADDED
Binary file
|
data/lib/jspec.css
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
body.jspec {
|
2
|
+
margin: 45px 0;
|
3
|
+
font: 12px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
4
|
+
background: #efefef url(images/bg.png) top left repeat-x;
|
5
|
+
text-align: center;
|
6
|
+
}
|
7
|
+
#jspec {
|
8
|
+
margin: 0 auto;
|
9
|
+
padding-top: 30px;
|
10
|
+
width: 1008px;
|
11
|
+
background: url(images/vr.png) top left repeat-y;
|
12
|
+
text-align: left;
|
13
|
+
}
|
14
|
+
#jspec-top {
|
15
|
+
position: relative;
|
16
|
+
margin: 0 auto;
|
17
|
+
width: 1008px;
|
18
|
+
height: 40px;
|
19
|
+
background: url(images/sprites.bg.png) top left no-repeat;
|
20
|
+
}
|
21
|
+
#jspec-bottom {
|
22
|
+
margin: 0 auto;
|
23
|
+
width: 1008px;
|
24
|
+
height: 15px;
|
25
|
+
background: url(images/sprites.bg.png) bottom left no-repeat;
|
26
|
+
}
|
27
|
+
#jspec .loading {
|
28
|
+
margin-top: -45px;
|
29
|
+
width: 1008px;
|
30
|
+
height: 80px;
|
31
|
+
background: url(images/loading.gif) 50% 50% no-repeat;
|
32
|
+
}
|
33
|
+
#jspec-title {
|
34
|
+
position: absolute;
|
35
|
+
top: 15px;
|
36
|
+
left: 20px;
|
37
|
+
width: 160px;
|
38
|
+
font-size: 22px;
|
39
|
+
font-weight: normal;
|
40
|
+
background: url(images/sprites.png) 0 -126px no-repeat;
|
41
|
+
text-align: center;
|
42
|
+
}
|
43
|
+
#jspec-title em {
|
44
|
+
font-size: 10px;
|
45
|
+
font-style: normal;
|
46
|
+
color: #BCC8D1;
|
47
|
+
}
|
48
|
+
#jspec-report * {
|
49
|
+
margin: 0;
|
50
|
+
padding: 0;
|
51
|
+
background: none;
|
52
|
+
border: none;
|
53
|
+
}
|
54
|
+
#jspec-report {
|
55
|
+
padding: 15px 40px;
|
56
|
+
font: 11px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
57
|
+
color: #7B8D9B;
|
58
|
+
}
|
59
|
+
#jspec-report.has-failures {
|
60
|
+
padding-bottom: 30px;
|
61
|
+
}
|
62
|
+
#jspec-report .hidden {
|
63
|
+
display: none;
|
64
|
+
}
|
65
|
+
#jspec-report .heading {
|
66
|
+
margin-bottom: 15px;
|
67
|
+
}
|
68
|
+
#jspec-report .heading span {
|
69
|
+
padding-right: 10px;
|
70
|
+
}
|
71
|
+
#jspec-report .heading .passes em {
|
72
|
+
color: #0ea0eb;
|
73
|
+
}
|
74
|
+
#jspec-report .heading .failures em {
|
75
|
+
color: #FA1616;
|
76
|
+
}
|
77
|
+
#jspec-report table {
|
78
|
+
font-size: 11px;
|
79
|
+
border-collapse: collapse;
|
80
|
+
}
|
81
|
+
#jspec-report td {
|
82
|
+
padding: 8px;
|
83
|
+
text-indent: 30px;
|
84
|
+
color: #7B8D9B;
|
85
|
+
}
|
86
|
+
#jspec-report tr.body {
|
87
|
+
display: none;
|
88
|
+
}
|
89
|
+
#jspec-report tr.body pre {
|
90
|
+
margin: 0;
|
91
|
+
padding: 0 0 5px 25px;
|
92
|
+
}
|
93
|
+
#jspec-report tr.even:hover + tr.body,
|
94
|
+
#jspec-report tr.odd:hover + tr.body {
|
95
|
+
display: block;
|
96
|
+
}
|
97
|
+
#jspec-report tr td:first-child em {
|
98
|
+
display: block;
|
99
|
+
clear: both;
|
100
|
+
font-style: normal;
|
101
|
+
font-weight: normal;
|
102
|
+
color: #7B8D9B;
|
103
|
+
}
|
104
|
+
#jspec-report tr.even:hover,
|
105
|
+
#jspec-report tr.odd:hover {
|
106
|
+
text-shadow: 1px 1px 1px #fff;
|
107
|
+
background: #F2F5F7;
|
108
|
+
}
|
109
|
+
#jspec-report td + td {
|
110
|
+
padding-right: 0;
|
111
|
+
width: 15px;
|
112
|
+
}
|
113
|
+
#jspec-report td.pass {
|
114
|
+
background: url(images/sprites.png) 3px -7px no-repeat;
|
115
|
+
}
|
116
|
+
#jspec-report td.fail {
|
117
|
+
background: url(images/sprites.png) 3px -158px no-repeat;
|
118
|
+
font-weight: bold;
|
119
|
+
color: #FC0D0D;
|
120
|
+
}
|
121
|
+
#jspec-report td.requires-implementation {
|
122
|
+
background: url(images/sprites.png) 3px -333px no-repeat;
|
123
|
+
}
|
124
|
+
#jspec-report tr.description td {
|
125
|
+
margin-top: 25px;
|
126
|
+
padding-top: 25px;
|
127
|
+
font-size: 12px;
|
128
|
+
font-weight: bold;
|
129
|
+
text-indent: 0;
|
130
|
+
color: #1a1a1a;
|
131
|
+
}
|
132
|
+
#jspec-report tr.description:first-child td {
|
133
|
+
border-top: none;
|
134
|
+
}
|
135
|
+
#jspec-report .assertion {
|
136
|
+
display: block;
|
137
|
+
float: left;
|
138
|
+
margin: 0 0 0 1px;
|
139
|
+
padding: 0;
|
140
|
+
width: 1px;
|
141
|
+
height: 5px;
|
142
|
+
background: #7B8D9B;
|
143
|
+
}
|
144
|
+
#jspec-report .assertion.failed {
|
145
|
+
background: red;
|
146
|
+
}
|
147
|
+
.jspec-sandbox {
|
148
|
+
display: none;
|
149
|
+
}
|
data/lib/jspec.growl.js
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
|
2
|
+
// JSpec - Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
3
|
+
|
4
|
+
;(function(){
|
5
|
+
|
6
|
+
Growl = {
|
7
|
+
|
8
|
+
// --- Version
|
9
|
+
|
10
|
+
version: '1.0.0',
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Execute the given _cmd_, returning an array of lines from stdout.
|
14
|
+
*
|
15
|
+
* Examples:
|
16
|
+
*
|
17
|
+
* Growl.exec('growlnotify', '-m', msg)
|
18
|
+
*
|
19
|
+
* @param {string ...} cmd
|
20
|
+
* @return {array}
|
21
|
+
* @api public
|
22
|
+
*/
|
23
|
+
|
24
|
+
exec: function(cmd) {
|
25
|
+
var lines = [], line
|
26
|
+
with (JavaImporter(java.lang, java.io)) {
|
27
|
+
var proccess = Runtime.getRuntime().exec(Array.prototype.slice.call(arguments))
|
28
|
+
var stream = new DataInputStream(proccess.getInputStream())
|
29
|
+
while (line = stream.readLine())
|
30
|
+
lines.push(line + '')
|
31
|
+
stream.close()
|
32
|
+
}
|
33
|
+
return lines
|
34
|
+
},
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Return the extension of the given _path_ or null.
|
38
|
+
*
|
39
|
+
* @param {string} path
|
40
|
+
* @return {string}
|
41
|
+
* @api private
|
42
|
+
*/
|
43
|
+
|
44
|
+
extname: function(path) {
|
45
|
+
return path.lastIndexOf('.') != -1 ?
|
46
|
+
path.slice(path.lastIndexOf('.') + 1, path.length) :
|
47
|
+
null
|
48
|
+
},
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Version of the 'growlnotify' binary.
|
52
|
+
*
|
53
|
+
* @return {string}
|
54
|
+
* @api private
|
55
|
+
*/
|
56
|
+
|
57
|
+
binVersion: function() {
|
58
|
+
try { return this.exec('growlnotify', '-v')[0].split(' ')[1] } catch (e) {}
|
59
|
+
},
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Send growl notification _msg_ with _options_.
|
63
|
+
*
|
64
|
+
* Options:
|
65
|
+
*
|
66
|
+
* - title Notification title
|
67
|
+
* - sticky Make the notification stick (defaults to false)
|
68
|
+
* - name Application name (defaults to growlnotify)
|
69
|
+
* - image
|
70
|
+
* - path to an icon sets --iconpath
|
71
|
+
* - path to an image sets --image
|
72
|
+
* - capitalized word sets --appIcon
|
73
|
+
* - filename uses extname as --icon
|
74
|
+
* - otherwise treated as --icon
|
75
|
+
*
|
76
|
+
* Examples:
|
77
|
+
*
|
78
|
+
* Growl.notify('New email')
|
79
|
+
* Growl.notify('5 new emails', { title: 'Thunderbird' })
|
80
|
+
*
|
81
|
+
* @param {string} msg
|
82
|
+
* @param {options} hash
|
83
|
+
* @api public
|
84
|
+
*/
|
85
|
+
|
86
|
+
notify: function(msg, options) {
|
87
|
+
options = options || {}
|
88
|
+
var args = ['growlnotify', '-m', msg]
|
89
|
+
if (!this.binVersion()) throw new Error('growlnotify executable is required')
|
90
|
+
if (image = options.image) {
|
91
|
+
var flag, ext = this.extname(image)
|
92
|
+
flag = flag || ext == 'icns' && 'iconpath'
|
93
|
+
flag = flag || /^[A-Z]/.test(image) && 'appIcon'
|
94
|
+
flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image'
|
95
|
+
flag = flag || ext && (image = ext) && 'icon'
|
96
|
+
flag = flag || 'icon'
|
97
|
+
args.push('--' + flag, image)
|
98
|
+
}
|
99
|
+
if (options.sticky) args.push('--sticky')
|
100
|
+
if (options.name) args.push('--name', options.name)
|
101
|
+
if (options.title) args.push(options.title)
|
102
|
+
this.exec.apply(this, args)
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
JSpec.include({
|
107
|
+
name: 'Growl',
|
108
|
+
reporting: function(options){
|
109
|
+
var stats = JSpec.stats
|
110
|
+
if (stats.failures) Growl.notify('failed ' + stats.failures + ' assertions', { title: 'JSpec'})
|
111
|
+
else Growl.notify('passed ' + stats.passes + ' assertions', { title: 'JSpec' })
|
112
|
+
}
|
113
|
+
})
|
114
|
+
|
115
|
+
})()
|