jasmine-headless-webkit 0.7.1 → 0.7.2

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.
@@ -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