jasmine-headless-webkit 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ require 'multi_json'
2
+ require 'erb'
3
+ require 'tempfile'
4
+
5
+ module Jasmine::Headless
6
+ class TemplateWriter
7
+ attr_reader :runner
8
+
9
+ def initialize(runner)
10
+ @runner = runner
11
+ end
12
+
13
+ def write!(files_list)
14
+ output = [
15
+ [ all_tests_filename, files_list.files_to_html ]
16
+ ]
17
+
18
+ output.unshift([filtered_tests_filename , files_list.filtered_files_to_html ]) if files_list.filtered?
19
+
20
+ output.each do |name, files|
21
+ File.open(name, 'w') { |fh| fh.print template_for(files, files_list.spec_file_line_numbers) }
22
+ end
23
+
24
+ output.collect(&:first)
25
+ end
26
+
27
+ def all_tests_filename
28
+ runner.runner_filename || "jhw.#{$$}.html"
29
+ end
30
+
31
+ def filtered_tests_filename
32
+ all_tests_filename.gsub(%r{\.html$}, '.filter.html')
33
+ end
34
+
35
+ private
36
+ def template_for(files, spec_lines)
37
+ ERB.new(Jasmine::Headless.root.join('skel/template.html.erb').read).result(binding)
38
+ end
39
+ end
40
+ end
41
+
@@ -1,5 +1,5 @@
1
1
  module Jasmine
2
2
  module Headless
3
- VERSION = "0.7.1"
3
+ VERSION = "0.7.2"
4
4
  end
5
5
  end
@@ -0,0 +1,24 @@
1
+ require 'pathname'
2
+
3
+ module Jasmine::Headless
4
+ autoload :CoffeeScriptCache, 'jasmine/headless/coffee_script_cache'
5
+ autoload :SpecFileAnalyzer, 'jasmine/headless/spec_file_analyzer'
6
+ autoload :CacheableAction, 'jasmine/headless/cacheable_action'
7
+ autoload :VERSION, 'jasmine/headless/version'
8
+ autoload :Runner, 'jasmine/headless/runner'
9
+ autoload :Options, 'jasmine/headless/options'
10
+ autoload :Task, 'jasmine/headless/task'
11
+
12
+ autoload :TemplateWriter, 'jasmine/headless/template_writer'
13
+
14
+ autoload :Report, 'jasmine/headless/report'
15
+ autoload :ReportMessage, 'jasmine/headless/report_message'
16
+
17
+ class << self
18
+ def root
19
+ @root ||= Pathname.new(File.expand_path('../../..', __FILE__))
20
+ end
21
+ end
22
+ end
23
+
24
+ require 'jasmine/headless/errors'
@@ -1,22 +1,7 @@
1
1
  module Jasmine
2
2
  autoload :FilesList, 'jasmine/files_list'
3
- autoload :TemplateWriter, 'jasmine/template_writer'
4
-
5
- module Headless
6
- autoload :CoffeeScriptCache, 'jasmine/headless/coffee_script_cache'
7
- autoload :SpecFileAnalyzer, 'jasmine/headless/spec_file_analyzer'
8
- autoload :CacheableAction, 'jasmine/headless/cacheable_action'
9
- autoload :VERSION, 'jasmine/headless/version'
10
- autoload :Runner, 'jasmine/headless/runner'
11
- autoload :Options, 'jasmine/headless/options'
12
- autoload :Task, 'jasmine/headless/task'
13
-
14
- autoload :Report, 'jasmine/headless/report'
15
- autoload :ReportMessage, 'jasmine/headless/report_message'
16
- end
17
3
  end
18
4
 
19
- require 'jasmine/headless/errors'
20
-
5
+ require 'jasmine/headless'
21
6
  require 'jasmine/headless/railtie' if defined?(Rails) && Rails::VERSION::MAJOR >= 3
22
7
 
@@ -0,0 +1,71 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <meta content="text/html;charset=UTF-8" http-equiv="Content-Type"/>
5
+ <title>Jasmine Test Runner - Generated by jasmine-headless-webkit</title>
6
+ <script type="text/javascript">
7
+ if (window.JHW) {
8
+ window.console = { log: function(data) {
9
+ if (typeof(jQuery) !== 'undefined' && data instanceof jQuery) {
10
+ JHW.log(style_html($("<div />").append(data).html(), { indent_size: 2 }));
11
+ } else {
12
+ var usejsDump = true;
13
+ try {
14
+ if (typeof data.toJSON == 'function') {
15
+ JHW.log("JSON: " + JSON.stringify(data, null, 2));
16
+ usejsDump = false;
17
+ }
18
+ } catch (e) {}
19
+
20
+ if (usejsDump) {
21
+ var dump = jsDump.doParse(data);
22
+ if (dump.indexOf("\\n") == -1) {
23
+ JHW.log(dump);
24
+ } else {
25
+ JHW.log("jsDump: " + dump);
26
+ }
27
+ }
28
+ }
29
+ }, pp: function(data) {
30
+ JHW.log(jasmine ? jasmine.pp(data) : JSON.stringify(data));
31
+ }, peek: function(data) {
32
+ console.log(data);
33
+ return data;
34
+ } };
35
+
36
+ window.onbeforeunload = function(e) {
37
+ JHW.leavePageAttempt('The code tried to leave the test page. Check for unhandled form submits and link clicks.');
38
+
39
+ if (e = e || window.event) {
40
+ e.returnValue = "leaving";
41
+ }
42
+
43
+ return "leaving";
44
+ };
45
+ }
46
+ </script>
47
+ <%= files.join("\n") %>
48
+ <script type="text/javascript">
49
+ if (window.JHW) { HeadlessReporterResult.specLineNumbers = <%= MultiJson.encode(spec_lines) %>; }
50
+ </script>
51
+ </head>
52
+ <body>
53
+ <script type="text/javascript">
54
+ window._onload = window.onload
55
+
56
+ window.onload = function() {
57
+ if (window._onload) { window._onload() }
58
+ if (window.JHW) {
59
+ jasmine.getEnv().addReporter(new jasmine.HeadlessReporter(function() {
60
+ window.onbeforeunload = null;
61
+ }));
62
+ } else {
63
+ jasmine.getEnv().addReporter(new jasmine.HtmlReporter());
64
+ }
65
+
66
+ jasmine.getEnv().execute();
67
+ }
68
+ </script>
69
+ </body>
70
+ </html>
71
+
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'tempfile'
2
3
 
3
4
  describe "jasmine-headless-webkit" do
4
5
  let(:report) { 'spec/report.txt' }
@@ -122,8 +123,19 @@ describe "jasmine-headless-webkit" do
122
123
  files = %x{bin/jasmine-headless-webkit -l -j spec/jasmine/success/success.yml}
123
124
  $?.exitstatus.should == 0
124
125
 
125
- files.lines.to_a.should include("./spec/jasmine/success/success.js\n")
126
- files.lines.to_a.should include("./spec/jasmine/success/success_spec.js\n")
126
+ files.lines.to_a.should include(File.expand_path("./spec/jasmine/success/success.js\n"))
127
+ files.lines.to_a.should include(File.expand_path("./spec/jasmine/success/success_spec.js\n"))
128
+ end
129
+ end
130
+
131
+ describe 'runner-out' do
132
+ it 'should write out the runner HTML to the specified path and not run the test' do
133
+ runner_path = Tempfile.new('jhw')
134
+ runner_path.close
135
+
136
+ system %{bin/jasmine-headless-webkit -j spec/jasmine/success/success.yml --runner-out #{runner_path.path}}
137
+
138
+ File.size(runner_path.path).should_not == 0
127
139
  end
128
140
  end
129
141
  end
@@ -94,3 +94,22 @@ describe 'jasmine.WaitsBlock and jasmine.WaitsForBlock', ->
94
94
  runs ->
95
95
  expect(true).toEqual(true)
96
96
 
97
+ describe 'jasmine.NestedResults.isValidSpecLine', ->
98
+ it 'should check the lines', ->
99
+ expect(jasmine.NestedResults.isValidSpecLine('yes')).toEqual(false)
100
+ expect(jasmine.NestedResults.isValidSpecLine('expect')).toEqual(true)
101
+ expect(jasmine.NestedResults.isValidSpecLine(' expect')).toEqual(true)
102
+ expect(jasmine.NestedResults.isValidSpecLine('return expect')).toEqual(true)
103
+ expect(jasmine.NestedResults.isValidSpecLine(' return expect')).toEqual(true)
104
+
105
+ describe 'jasmine.nestedResults.parseFunction', ->
106
+ it 'should parse the function', ->
107
+ expect(jasmine.NestedResults.parseFunction("""
108
+ test
109
+ expect("cat")
110
+ return expect("dog")
111
+ """)).toEqual([
112
+ [ 'expect("cat")', 1 ],
113
+ [ 'expect("dog")', 2 ]
114
+ ])
115
+
@@ -6,13 +6,14 @@ require 'fakefs/spec_helpers'
6
6
  require 'coffee-script'
7
7
 
8
8
  describe Jasmine::FilesList do
9
- let(:files_list) { Jasmine::FilesList.new }
9
+ let(:files_list) { described_class.new }
10
10
 
11
11
  describe '#initialize' do
12
12
  it "should have default files" do
13
13
  files_list.files.should == [
14
14
  File.join(Jasmine::Core.path, "jasmine.js"),
15
15
  File.join(Jasmine::Core.path, "jasmine-html.js"),
16
+ File.join(Jasmine::Core.path, "jasmine.css"),
16
17
  File.expand_path('jasmine/jasmine.headless-reporter.js'),
17
18
  File.expand_path('js-lib/jsDump.js'),
18
19
  File.expand_path('js-lib/beautify-html.js'),
@@ -21,7 +22,7 @@ describe Jasmine::FilesList do
21
22
  end
22
23
 
23
24
  describe '#use_config' do
24
- let(:files_list) { Jasmine::FilesList.new(:config => config) }
25
+ let(:files_list) { described_class.new(:config => config) }
25
26
 
26
27
  include FakeFS::SpecHelpers
27
28
 
@@ -80,6 +81,33 @@ describe Jasmine::FilesList do
80
81
 
81
82
  it_should_behave_like :reading_data
82
83
  end
84
+
85
+ context 'with vendored helpers' do
86
+ let(:config) { {
87
+ 'src_dir' => src_dir,
88
+ 'spec_dir' => spec_dir,
89
+ 'src_files' => [ 'js/first_file.js', 'js/*.js' ],
90
+ 'spec_files' => [ '*_spec.js' ],
91
+ 'helpers' => [],
92
+ 'stylesheets' => [ 'stylesheet/*.css' ],
93
+ 'vendored_helpers' => [ 'one', 'two' ]
94
+ } }
95
+
96
+ let(:helper_file) { "path/one.js" }
97
+ let(:other_helper_file) { "path/two.js" }
98
+
99
+ before do
100
+ described_class.expects(:find_vendored_asset_path).with('one').returns([ helper_file ])
101
+ described_class.expects(:find_vendored_asset_path).with('two').returns([ other_helper_file ])
102
+ end
103
+
104
+ it 'should find the vendored file' do
105
+ files_list.files.should include(helper_file)
106
+ files_list.files.should include(other_helper_file)
107
+
108
+ files_list.files.index(helper_file).should be < files_list.files.index(other_helper_file)
109
+ end
110
+ end
83
111
  end
84
112
 
85
113
  context 'with filtered specs' do
@@ -170,7 +198,8 @@ describe Jasmine::FilesList do
170
198
  'test.coffee'
171
199
  ])
172
200
 
173
- Jasmine::Headless::CoffeeScriptCache.stubs(:for).with('test.coffee').returns("i compiled")
201
+ File.stubs(:read)
202
+ Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:handle).returns("i compiled")
174
203
  end
175
204
 
176
205
  context '#files_to_html' do
@@ -19,9 +19,11 @@ describe Jasmine::Headless::CacheableAction do
19
19
 
20
20
  let(:cache_type) { 'action' }
21
21
  let(:cache_dir) { 'cache' }
22
- let(:cache_file) { File.join(cache_dir, cache_type, Digest::SHA1.hexdigest(file)) }
22
+ let(:cache_file) { File.join(cache_dir, cache_type, Digest::SHA1.hexdigest(file)) + '.js' }
23
23
  let(:cache_file_data) { YAML.load(File.read(cache_file)) }
24
24
 
25
+ let(:cache_object) { described_class.new(file) }
26
+
25
27
  describe '.for' do
26
28
  context 'cache disabled' do
27
29
  before do
@@ -32,6 +34,8 @@ describe Jasmine::Headless::CacheableAction do
32
34
  action_runs!
33
35
  described_class.for(file).should == compiled
34
36
  cache_file.should_not be_a_file
37
+
38
+ cache_object.should_not be_cached
35
39
  end
36
40
  end
37
41
 
@@ -52,6 +56,7 @@ describe Jasmine::Headless::CacheableAction do
52
56
  described_class.for(file).should == compiled
53
57
 
54
58
  cache_file_data.should == compiled
59
+ cache_object.should be_cached
55
60
  end
56
61
  end
57
62
 
@@ -69,6 +74,7 @@ describe Jasmine::Headless::CacheableAction do
69
74
  described_class.for(file).should == compiled
70
75
 
71
76
  cache_file_data.should == compiled
77
+ cache_object.should be_cached
72
78
  end
73
79
  end
74
80
 
@@ -81,6 +87,7 @@ describe Jasmine::Headless::CacheableAction do
81
87
  described_class.for(file).should == compiled
82
88
 
83
89
  cache_file_data.should == compiled
90
+ cache_object.should be_cached
84
91
  end
85
92
  end
86
93
  end
@@ -13,6 +13,11 @@ describe Jasmine::Headless::Runner do
13
13
  runner.options[:test].should == 'test'
14
14
  runner.options[:jasmine_config].should == 'spec/javascripts/support/jasmine.yml'
15
15
  end
16
+
17
+ it 'should have a template writer' do
18
+ runner.template_writer.should be_a_kind_of(Jasmine::Headless::TemplateWriter)
19
+ runner.template_writer.runner.should == runner
20
+ end
16
21
  end
17
22
 
18
23
  describe '#load_config' do
@@ -96,4 +101,58 @@ describe Jasmine::Headless::Runner do
96
101
  report.should contain_a_failing_spec(['failure', 'should fail with error code of 1'])
97
102
  end
98
103
  end
104
+
105
+ describe '#runner_filename' do
106
+ let(:runner_filename) { runner.runner_filename }
107
+ let(:yaml_output) { 'yaml output' }
108
+
109
+ context 'not in options' do
110
+ let(:opts) { { :runner_output_filename => false } }
111
+
112
+ context 'not in yaml file' do
113
+ before do
114
+ runner.stubs(:jasmine_config).returns('runner_output' => '')
115
+ end
116
+
117
+ it 'should reverse the remove_html_file option' do
118
+ runner_filename.should == false
119
+ end
120
+ end
121
+
122
+ context 'in yaml file' do
123
+ before do
124
+ runner.stubs(:jasmine_config).returns('runner_output' => yaml_output)
125
+ end
126
+
127
+ it 'should use the yaml file definition' do
128
+ runner_filename.should == yaml_output
129
+ end
130
+ end
131
+ end
132
+
133
+ context 'in options' do
134
+ let(:filename) { 'filename.html' }
135
+ let(:opts) { { :runner_output_filename => filename } }
136
+
137
+ context 'not in yaml file' do
138
+ before do
139
+ runner.stubs(:jasmine_config).returns('runner_output' => '')
140
+ end
141
+
142
+ it 'should reverse the remove_html_file option' do
143
+ runner.runner_filename.should == filename
144
+ end
145
+ end
146
+
147
+ context 'in yaml file' do
148
+ before do
149
+ runner.stubs(:jasmine_config).returns('runner_output' => yaml_output)
150
+ end
151
+
152
+ it 'shoulduse the command line filename' do
153
+ runner.runner_filename.should == filename
154
+ end
155
+ end
156
+ end
157
+ end
99
158
  end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+ require 'fakefs/spec_helpers'
3
+
4
+ describe Jasmine::Headless::TemplateWriter do
5
+ let(:runner) { stub }
6
+ let(:template_writer) { described_class.new(runner) }
7
+
8
+ describe '#all_tests_filename' do
9
+ let(:all_tests_filename) { template_writer.all_tests_filename }
10
+
11
+ context 'runner does not care about filename' do
12
+ before do
13
+ runner.stubs(:runner_filename).returns(false)
14
+ end
15
+
16
+ it 'should use a specrunner.html file' do
17
+ all_tests_filename.should_not include('tmp')
18
+ all_tests_filename.should include('jhw')
19
+ all_tests_filename.should include('.html')
20
+ end
21
+ end
22
+
23
+ context 'runner cares about filename' do
24
+ let(:filename) { 'filename.html' }
25
+
26
+ before do
27
+ runner.stubs(:runner_filename).returns(filename)
28
+ end
29
+
30
+ it 'should use a specrunner.html file' do
31
+ all_tests_filename.should == filename
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#filtered_tests_filename' do
37
+ before do
38
+ template_writer.stubs(:all_tests_filename).returns("test.html")
39
+ end
40
+
41
+ it 'should filter the filename for all tests' do
42
+ template_writer.filtered_tests_filename.should == 'test.filter.html'
43
+ end
44
+ end
45
+
46
+ describe '#write!' do
47
+ include FakeFS::SpecHelpers
48
+
49
+ before do
50
+ File.stubs(:read).returns(nil)
51
+
52
+ runner.stubs(:keep_runner).returns(true)
53
+ runner.stubs(:runner_filename).returns(false)
54
+ end
55
+
56
+ let(:files_list) { Jasmine::FilesList.new }
57
+
58
+ before do
59
+ files_list.files << 'file.js'
60
+ files_list.filtered_files << 'file.js'
61
+ end
62
+
63
+ context 'no filter' do
64
+ it 'should write one file' do
65
+ template_writer.write!(files_list).should == [
66
+ "jhw.#{$$}.html"
67
+ ]
68
+ end
69
+ end
70
+
71
+ context 'filtered files' do
72
+ before do
73
+ files_list.files << 'file2.js'
74
+ end
75
+
76
+ it 'should write two files' do
77
+ template_writer.write!(files_list).should == [
78
+ "jhw.#{$$}.filter.html", "jhw.#{$$}.html"
79
+ ]
80
+ end
81
+ end
82
+ end
83
+ end
84
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jasmine-headless-webkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-09-17 00:00:00.000000000Z
14
+ date: 2011-10-24 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: jasmine-core
18
- requirement: &2157008120 !ruby/object:Gem::Requirement
18
+ requirement: &2160034300 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 1.1.beta
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *2157008120
26
+ version_requirements: *2160034300
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: coffee-script
29
- requirement: &2157007540 !ruby/object:Gem::Requirement
29
+ requirement: &2160033760 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '2.2'
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *2157007540
37
+ version_requirements: *2160033760
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: rainbow
40
- requirement: &2157007160 !ruby/object:Gem::Requirement
40
+ requirement: &2160033360 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '0'
46
46
  type: :runtime
47
47
  prerelease: false
48
- version_requirements: *2157007160
48
+ version_requirements: *2160033360
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: multi_json
51
- requirement: &2157006680 !ruby/object:Gem::Requirement
51
+ requirement: &2160032900 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '0'
57
57
  type: :runtime
58
58
  prerelease: false
59
- version_requirements: *2157006680
59
+ version_requirements: *2160032900
60
60
  description: Run Jasmine specs headlessly
61
61
  email:
62
62
  - john@coswellproductions.com
@@ -113,6 +113,7 @@ files:
113
113
  - lib/autotest/jasmine_rspec2.rb
114
114
  - lib/jasmine-headless-webkit.rb
115
115
  - lib/jasmine/files_list.rb
116
+ - lib/jasmine/headless.rb
116
117
  - lib/jasmine/headless/cacheable_action.rb
117
118
  - lib/jasmine/headless/coffee_script_cache.rb
118
119
  - lib/jasmine/headless/errors.rb
@@ -129,13 +130,14 @@ files:
129
130
  - lib/jasmine/headless/runner.rb
130
131
  - lib/jasmine/headless/spec_file_analyzer.rb
131
132
  - lib/jasmine/headless/task.rb
133
+ - lib/jasmine/headless/template_writer.rb
132
134
  - lib/jasmine/headless/version.rb
133
- - lib/jasmine/template_writer.rb
134
135
  - lib/qt/qmake.rb
135
136
  - script/gemfile
136
137
  - script/hooks/pre-commit
137
138
  - script/initialize-environment
138
139
  - script/install-git-hooks
140
+ - skel/template.html.erb
139
141
  - spec/bin/jasmine-headless-webkit_spec.rb
140
142
  - spec/jasmine/click_button/click_button.js
141
143
  - spec/jasmine/click_button/click_button.yml
@@ -183,7 +185,7 @@ files:
183
185
  - spec/lib/jasmine/headless/runner_spec.rb
184
186
  - spec/lib/jasmine/headless/spec_file_analyzer_spec.rb
185
187
  - spec/lib/jasmine/headless/task_spec.rb
186
- - spec/lib/jasmine/template_writer_spec.rb
188
+ - spec/lib/jasmine/headless/template_writer_spec.rb
187
189
  - spec/lib/qt/qmake_spec.rb
188
190
  - spec/spec_helper.rb
189
191
  homepage: ''
@@ -206,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
208
  version: '0'
207
209
  requirements: []
208
210
  rubyforge_project: jasmine-headless-webkit
209
- rubygems_version: 1.8.9
211
+ rubygems_version: 1.8.11
210
212
  signing_key:
211
213
  specification_version: 3
212
214
  summary: Run Jasmine specs headlessly in a WebKit browser
@@ -258,6 +260,6 @@ test_files:
258
260
  - spec/lib/jasmine/headless/runner_spec.rb
259
261
  - spec/lib/jasmine/headless/spec_file_analyzer_spec.rb
260
262
  - spec/lib/jasmine/headless/task_spec.rb
261
- - spec/lib/jasmine/template_writer_spec.rb
263
+ - spec/lib/jasmine/headless/template_writer_spec.rb
262
264
  - spec/lib/qt/qmake_spec.rb
263
265
  - spec/spec_helper.rb