jasmine-headless-webkit 0.0.3 → 0.1.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/Gemfile +1 -1
- data/README.md +18 -0
- data/bin/jasmine-headless-webkit +39 -45
- data/ext/jasmine-webkit-specrunner/specrunner.cpp +3 -1
- data/jasmine-headless-webkit.gemspec +2 -0
- data/lib/autotest/jasmine_mixin.rb +22 -4
- data/lib/jasmine-headless-webkit/version.rb +1 -1
- data/lib/jasmine/cli.rb +51 -0
- data/spec/lib/jasmine/cli_spec.rb +62 -0
- metadata +27 -7
- data/.gitmodules +0 -3
- data/jasmine/lib/jasmine-html.js +0 -190
- data/jasmine/lib/jasmine.css +0 -166
- data/jasmine/lib/jasmine.js +0 -2435
- data/jasmine/lib/json2.js +0 -478
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -39,9 +39,27 @@ Current supported options:
|
|
39
39
|
|
40
40
|
* `-c`/`--colors` enables color output
|
41
41
|
* `--no-colors` disables color output
|
42
|
+
* `--keep` preserves the temporary HTML document if an error occurs in testing
|
42
43
|
|
43
44
|
These options can also be placed into a `.jasmine-headless-webkit` file in your project root.
|
44
45
|
|
46
|
+
### CoffeeScript Support
|
47
|
+
|
48
|
+
`jasmine-headless-webkit` brings in the `coffee-script` gem and compiles & injects all CoffeeScript into the
|
49
|
+
generated HTML page. All you need to do is configure your `jasmine.yml` file to look for .coffee files:
|
50
|
+
|
51
|
+
src_files:
|
52
|
+
- app/assets/javascripts/**/*.coffee
|
53
|
+
spec_files:
|
54
|
+
- **/*[sS]pec.coffee
|
55
|
+
|
56
|
+
*(This will probably make it difficult to test your code in an official Jasmine server for now. You can try
|
57
|
+
[a technique like this](https://github.com/jbaudanza/rack-asset-compiler/blob/master/examples/jasmine_config.rb) for compiling CoffeeScript when it's requested from the server
|
58
|
+
or use [this fork of jasmine-gem](https://github.com/johnbintz/jasmine-gem/tree/coffeescript-inline-support) which
|
59
|
+
is thoroughly untested.)*
|
60
|
+
|
61
|
+
You will get line numbers on compile errors, but not logic errors. This is a CoffeeScript thing, and they're working on it. :)
|
62
|
+
|
45
63
|
### JavaScript Dialogs
|
46
64
|
|
47
65
|
You can call `alert()` and `confirm()` in your code. `alert()` will print the message to the console, and
|
data/bin/jasmine-headless-webkit
CHANGED
@@ -1,53 +1,58 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
gem_dir = File.expand_path('../..', __FILE__)
|
6
|
+
$:.unshift(File.join(gem_dir, 'lib'))
|
7
|
+
|
3
8
|
require 'yaml'
|
4
9
|
require 'fileutils'
|
5
10
|
require 'getoptlong'
|
6
11
|
|
12
|
+
gem 'jasmine'
|
13
|
+
gem 'coffee-script'
|
14
|
+
gem 'rainbow'
|
15
|
+
|
16
|
+
require 'jasmine'
|
17
|
+
require 'coffee-script'
|
18
|
+
require 'rainbow'
|
19
|
+
|
20
|
+
require 'jasmine/cli'
|
21
|
+
include Jasmine::CLI
|
22
|
+
|
7
23
|
opts = GetoptLong.new(
|
8
24
|
[ '--colors', '-c', GetoptLong::NO_ARGUMENT ],
|
9
|
-
[ '--no-colors', GetoptLong::NO_ARGUMENT ]
|
25
|
+
[ '--no-colors', GetoptLong::NO_ARGUMENT ],
|
26
|
+
[ '--keep', GetoptLong::NO_ARGUMENT ]
|
10
27
|
)
|
11
28
|
|
12
|
-
options = { :colors => false }
|
29
|
+
options = { :colors => false, :remove_html_file => true }
|
13
30
|
|
14
|
-
process_options = lambda { |*args|
|
15
|
-
opt = args.shift
|
31
|
+
@process_options = lambda { |*args|
|
32
|
+
opt = args.flatten.shift
|
16
33
|
case opt
|
17
34
|
when '--colors', '-c'
|
18
35
|
options[:colors] = true
|
19
36
|
when '--no-colors', '-nc'
|
20
37
|
options[:colors] = false
|
38
|
+
when '--keep', '-k'
|
39
|
+
options[:remove_html_file] = false
|
21
40
|
end
|
22
41
|
}
|
23
42
|
|
24
|
-
if
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.each(&process_options)
|
43
|
+
read_defaults_file if defaults_file?
|
44
|
+
opts.each(&@process_options)
|
29
45
|
|
30
46
|
data = YAML.load_file(ARGV.shift || 'spec/javascripts/support/jasmine.yml')
|
31
|
-
gem_dir = File.expand_path('../..', __FILE__)
|
32
47
|
|
33
|
-
if !File.file?(File.join(gem_dir,
|
48
|
+
if !File.file?(File.join(gem_dir, RUNNER))
|
34
49
|
puts "The Qt WebKit widget is not compiled! Try re-installing this gem."
|
35
50
|
exit 1
|
36
51
|
end
|
37
52
|
|
38
53
|
puts "Running Jasmine specs..."
|
39
54
|
|
40
|
-
files =
|
41
|
-
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine.js'),
|
42
|
-
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine-html.js'),
|
43
|
-
'file://' + File.join(gem_dir, 'jasmine/lib/jasmine.css')
|
44
|
-
]
|
45
|
-
|
46
|
-
DEFAULTS = {
|
47
|
-
'spec_files' => [ '**/*[sS]pec.js' ],
|
48
|
-
'helpers' => [ 'helpers/**/*.js' ],
|
49
|
-
'spec_dir' => 'spec/javascripts'
|
50
|
-
}
|
55
|
+
files = %w{jasmine jasmine-html}.collect { |name| File.join(Jasmine.root, "lib/#{name}.js") }
|
51
56
|
|
52
57
|
files += [ [ 'src_files', 'src_dir' ], [ 'stylesheets', 'src_dir' ], [ 'helpers', 'spec_dir' ], [ 'spec_files', 'spec_dir' ] ].collect do |searches, root|
|
53
58
|
data[searches] ||= DEFAULTS[searches]
|
@@ -66,37 +71,26 @@ files = files.flatten.compact.collect { |file|
|
|
66
71
|
case File.extname(file)
|
67
72
|
when '.js'
|
68
73
|
%{<script type="text/javascript" src="#{file}"></script>}
|
74
|
+
when '.coffee'
|
75
|
+
begin
|
76
|
+
%{<script type="text/javascript">#{CoffeeScript.compile(fh = File.open(file))}</script>}
|
77
|
+
rescue CoffeeScript::CompilationError => e
|
78
|
+
puts "[%s] %s: %s" % [ 'coffeescript'.color(:red), file.color(:yellow), e.message.color(:white) ]
|
79
|
+
exit 1
|
80
|
+
ensure
|
81
|
+
fh.close
|
82
|
+
end
|
69
83
|
when '.css'
|
70
84
|
%{<link rel="stylesheet" href="#{file}" type="text/css" />}
|
71
85
|
end
|
72
86
|
}
|
73
87
|
|
74
|
-
output =
|
75
|
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
76
|
-
"http://www.w3.org/TR/html4/loose.dtd">
|
77
|
-
<html>
|
78
|
-
<head>
|
79
|
-
<title>Jasmine Test Runner</title>
|
80
|
-
<script type="text/javascript">
|
81
|
-
window.console = { log: function(data) { debug.log(JSON.stringify(data)); } };
|
82
|
-
</script>
|
83
|
-
#{files.join("\n")}
|
84
|
-
</head>
|
85
|
-
<body>
|
86
|
-
|
87
|
-
<script type="text/javascript">
|
88
|
-
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
|
89
|
-
jasmine.getEnv().execute();
|
90
|
-
</script>
|
91
|
-
|
92
|
-
</body>
|
93
|
-
</html>
|
94
|
-
HTML
|
88
|
+
output = jasmine_html_template(files)
|
95
89
|
|
96
90
|
File.open(target = "specrunner.#{$$}.html", 'w') { |fh| fh.print output }
|
97
|
-
system %{#{File.join(gem_dir,
|
91
|
+
system %{#{File.join(gem_dir, RUNNER)} #{options[:colors] ? '-c' : ''} #{target}}
|
98
92
|
status = $?.exitstatus
|
99
|
-
FileUtils.rm_f target
|
93
|
+
FileUtils.rm_f target if options[:remove_html_file] || (status == 0)
|
100
94
|
|
101
95
|
exit status
|
102
96
|
|
@@ -112,7 +112,9 @@ void HeadlessSpecRunner::load(const QString &spec)
|
|
112
112
|
void HeadlessSpecRunner::watch(bool ok)
|
113
113
|
{
|
114
114
|
if (!ok) {
|
115
|
-
std::cerr << "Can't load
|
115
|
+
std::cerr << "Can't load " << qPrintable(m_page.mainFrame()->url().toString()) << ", the file may be broken." << std::endl;
|
116
|
+
std::cerr << "Out of curiosity, did your tests try to submit a form and you haven't prevented that?" << std::endl;
|
117
|
+
std::cerr << "Try running your tests in your browser with the Jasmine server and see what happens." << std::endl;
|
116
118
|
QApplication::instance()->exit(1);
|
117
119
|
return;
|
118
120
|
}
|
@@ -1,17 +1,18 @@
|
|
1
1
|
module JasmineMixin
|
2
2
|
JASMINE_PROGRAM = File.expand_path('../../../bin/jasmine-headless-webkit', __FILE__)
|
3
3
|
|
4
|
-
JAVASCRIPT_EXTENSIONS = %w{js}
|
4
|
+
JAVASCRIPT_EXTENSIONS = %w{js coffee}
|
5
5
|
|
6
6
|
def self.included(klass)
|
7
7
|
klass::ALL_HOOKS << [ :run_jasmine, :ran_jasmine ]
|
8
8
|
end
|
9
9
|
|
10
|
-
attr_accessor :is_jasmine_running, :jasmine_to_run
|
10
|
+
attr_accessor :is_jasmine_running, :jasmine_to_run, :jasmine_ran_once
|
11
11
|
|
12
12
|
def initialize
|
13
13
|
super()
|
14
14
|
setup_jasmine_project_mappings
|
15
|
+
jasmine_ran_once = false
|
15
16
|
end
|
16
17
|
|
17
18
|
def get_to_green
|
@@ -20,6 +21,7 @@ module JasmineMixin
|
|
20
21
|
super if find_files_to_test
|
21
22
|
|
22
23
|
reset_jasmine(:yes)
|
24
|
+
self.last_mtime = Time.at(0) if !options[:no_full_after_start] && !jasmine_ran_once
|
23
25
|
run_jasmine if find_files_to_test
|
24
26
|
|
25
27
|
self.is_jasmine_running = :all
|
@@ -29,6 +31,16 @@ module JasmineMixin
|
|
29
31
|
reset_jasmine(:all)
|
30
32
|
end
|
31
33
|
|
34
|
+
def rerun_all_tests
|
35
|
+
reset_jasmine(:no)
|
36
|
+
super
|
37
|
+
|
38
|
+
reset_jasmine(:yes)
|
39
|
+
run_jasmine
|
40
|
+
|
41
|
+
reset_jasmine(:all)
|
42
|
+
end
|
43
|
+
|
32
44
|
def reset_jasmine(method)
|
33
45
|
self.files_to_test = new_hash_of_arrays
|
34
46
|
self.is_jasmine_running = method
|
@@ -50,6 +62,8 @@ module JasmineMixin
|
|
50
62
|
end
|
51
63
|
|
52
64
|
hook :ran_jasmine
|
65
|
+
|
66
|
+
jasmine_ran_once = true
|
53
67
|
end
|
54
68
|
|
55
69
|
def all_jasmine_good
|
@@ -77,12 +91,16 @@ module JasmineMixin
|
|
77
91
|
end
|
78
92
|
|
79
93
|
def setup_jasmine_project_mappings
|
80
|
-
add_mapping(%r{spec/javascripts/.*_spec\.js}) { |filename, _|
|
94
|
+
add_mapping(%r{spec/javascripts/.*_spec\.(js|coffee)}) { |filename, _|
|
81
95
|
filename
|
82
96
|
}
|
83
97
|
|
84
98
|
add_mapping(%r{public/javascripts/(.*)\.js}) { |_, m|
|
85
|
-
|
99
|
+
files_matching(%r{spec/javascripts/#{m[1]}_spec\..*$})
|
100
|
+
}
|
101
|
+
|
102
|
+
add_mapping(%r{app/coffeescripts/(.*)\.coffee}) { |_, m|
|
103
|
+
files_matching(%r{spec/javascripts/#{m[1]}_spec\..*$})
|
86
104
|
}
|
87
105
|
end
|
88
106
|
|
data/lib/jasmine/cli.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Jasmine
|
2
|
+
module CLI
|
3
|
+
DEFAULTS = {
|
4
|
+
'spec_files' => [ '**/*[sS]pec.js' ],
|
5
|
+
'helpers' => [ 'helpers/**/*.js' ],
|
6
|
+
'spec_dir' => 'spec/javascripts',
|
7
|
+
'src_dir' => nil,
|
8
|
+
'stylesheets' => [],
|
9
|
+
'src_files' => []
|
10
|
+
}
|
11
|
+
|
12
|
+
RUNNER = 'ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner'
|
13
|
+
DEFAULTS_FILE = '.jasmine-headless-webkit'
|
14
|
+
|
15
|
+
def process_jasmine_config(overrides = {})
|
16
|
+
DEFAULTS.merge(overrides)
|
17
|
+
end
|
18
|
+
|
19
|
+
def read_defaults_file
|
20
|
+
File.readlines(DEFAULTS_FILE).collect { |line| line.strip.split(' ', 2) }.each(&@process_options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def defaults_file?
|
24
|
+
File.file?(DEFAULTS_FILE)
|
25
|
+
end
|
26
|
+
|
27
|
+
def jasmine_html_template(files)
|
28
|
+
<<-HTML
|
29
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
30
|
+
<html>
|
31
|
+
<head>
|
32
|
+
<title>Jasmine Test Runner</title>
|
33
|
+
<script type="text/javascript">
|
34
|
+
window.console = { log: function(data) { debug.log(JSON.stringify(data)); } };
|
35
|
+
</script>
|
36
|
+
#{files.join("\n")}
|
37
|
+
</head>
|
38
|
+
<body>
|
39
|
+
|
40
|
+
<script type="text/javascript">
|
41
|
+
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
|
42
|
+
jasmine.getEnv().execute();
|
43
|
+
</script>
|
44
|
+
|
45
|
+
</body>
|
46
|
+
</html>
|
47
|
+
HTML
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'jasmine/cli'
|
3
|
+
require 'fakefs/spec_helpers'
|
4
|
+
|
5
|
+
describe Jasmine::CLI do
|
6
|
+
include Jasmine::CLI
|
7
|
+
include FakeFS::SpecHelpers
|
8
|
+
|
9
|
+
describe '#process_jasmine_config' do
|
10
|
+
context 'without overrides' do
|
11
|
+
let(:config) { {} }
|
12
|
+
|
13
|
+
it "should just return the defaults" do
|
14
|
+
process_jasmine_config(config).should == {
|
15
|
+
'src_files' => [],
|
16
|
+
'stylesheets' => [],
|
17
|
+
'helpers' => [ 'helpers/**/*.js' ],
|
18
|
+
'spec_files' => [ '**/*[sS]pec.js' ],
|
19
|
+
'src_dir' => nil,
|
20
|
+
'spec_dir' => 'spec/javascripts'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with overrides' do
|
26
|
+
let(:config) {
|
27
|
+
{
|
28
|
+
'src_files' => [ 'one', 'two' ],
|
29
|
+
'src_dir' => 'this-dir',
|
30
|
+
'stylesheets' => [ 'three', 'four' ],
|
31
|
+
'helpers' => [ 'five', 'six' ],
|
32
|
+
'spec_files' => [ 'seven', 'eight' ],
|
33
|
+
'spec_dir' => 'that-dir'
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
it "should return the merged data" do
|
38
|
+
process_jasmine_config(config).should == config
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#read_defaults_file' do
|
44
|
+
let(:test_data) { %w{first second} }
|
45
|
+
|
46
|
+
before do
|
47
|
+
File.open(DEFAULTS_FILE, 'w') { |fh| fh.puts test_data.join(' ') }
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should read the options" do
|
51
|
+
found = false
|
52
|
+
|
53
|
+
@process_options = lambda { |*args|
|
54
|
+
found = true if args.flatten == test_data
|
55
|
+
}
|
56
|
+
|
57
|
+
read_defaults_file
|
58
|
+
|
59
|
+
found.should be_true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jasmine-headless-webkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John Bintz
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2011-05-
|
15
|
+
date: 2011-05-10 00:00:00 -04:00
|
16
16
|
default_executable:
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
@@ -26,6 +26,28 @@ dependencies:
|
|
26
26
|
version: "0"
|
27
27
|
type: :runtime
|
28
28
|
version_requirements: *id001
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: coffee-script
|
31
|
+
prerelease: false
|
32
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: "0"
|
38
|
+
type: :runtime
|
39
|
+
version_requirements: *id002
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rainbow
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: "0"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id003
|
29
51
|
description: Run Jasmine specs headlessly
|
30
52
|
email:
|
31
53
|
- john@coswellproductions.com
|
@@ -38,7 +60,6 @@ extra_rdoc_files: []
|
|
38
60
|
files:
|
39
61
|
- .autotest
|
40
62
|
- .gitignore
|
41
|
-
- .gitmodules
|
42
63
|
- .rspec
|
43
64
|
- Gemfile
|
44
65
|
- README.md
|
@@ -55,6 +76,7 @@ files:
|
|
55
76
|
- lib/autotest/jasmine_rspec2.rb
|
56
77
|
- lib/jasmine-headless-webkit.rb
|
57
78
|
- lib/jasmine-headless-webkit/version.rb
|
79
|
+
- lib/jasmine/cli.rb
|
58
80
|
- spec/bin/jasmine-headless-webkit_spec.rb
|
59
81
|
- spec/jasmine/console_log/console_log.js
|
60
82
|
- spec/jasmine/console_log/console_log.yml
|
@@ -65,11 +87,8 @@ files:
|
|
65
87
|
- spec/jasmine/success/success.js
|
66
88
|
- spec/jasmine/success/success.yml
|
67
89
|
- spec/jasmine/success/success_spec.js
|
90
|
+
- spec/lib/jasmine/cli_spec.rb
|
68
91
|
- spec/spec_helper.rb
|
69
|
-
- jasmine/lib/jasmine-html.js
|
70
|
-
- jasmine/lib/jasmine.css
|
71
|
-
- jasmine/lib/jasmine.js
|
72
|
-
- jasmine/lib/json2.js
|
73
92
|
has_rdoc: true
|
74
93
|
homepage: ""
|
75
94
|
licenses: []
|
@@ -109,4 +128,5 @@ test_files:
|
|
109
128
|
- spec/jasmine/success/success.js
|
110
129
|
- spec/jasmine/success/success.yml
|
111
130
|
- spec/jasmine/success/success_spec.js
|
131
|
+
- spec/lib/jasmine/cli_spec.rb
|
112
132
|
- spec/spec_helper.rb
|