jasmine-headless-webkit 0.9.0.rc1 → 0.9.0.rc.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.
- data/.gitignore +1 -0
- data/Gemfile +0 -1
- data/Rakefile +1 -1
- data/ext/jasmine-webkit-specrunner/common.pri +0 -1
- data/jasmine-headless-webkit.gemspec +5 -3
- data/lib/jasmine/headless/cacheable_action.rb +5 -1
- data/lib/jasmine/headless/files_list.rb +53 -33
- data/lib/jasmine/headless/spec_file_analyzer.rb +2 -2
- data/lib/jasmine/headless/version.rb +1 -1
- data/skel/template.html.erb +7 -3
- data/spec/lib/jasmine/headless/cacheable_action_spec.rb +23 -0
- data/spec/lib/jasmine/headless/files_list_spec.rb +15 -44
- data/vendor/assets/javascripts/intense.coffee +3 -3
- metadata +60 -19
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -20,9 +20,11 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
|
-
s.add_runtime_dependency 'jasmine-core'
|
23
|
+
s.add_runtime_dependency 'jasmine-core'
|
24
24
|
s.add_runtime_dependency 'coffee-script'
|
25
25
|
s.add_runtime_dependency 'rainbow'
|
26
|
-
s.add_runtime_dependency 'multi_json'
|
27
|
-
s.add_runtime_dependency 'sprockets'
|
26
|
+
s.add_runtime_dependency 'multi_json', '>= 1.2.0'
|
27
|
+
s.add_runtime_dependency 'sprockets'
|
28
|
+
s.add_runtime_dependency 'sprockets-vendor_gems'
|
28
29
|
end
|
30
|
+
|
@@ -54,7 +54,11 @@ module Jasmine::Headless
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def cache_file
|
57
|
-
@cache_file ||= File.expand_path(
|
57
|
+
@cache_file ||= File.expand_path(relative_cache_file) + '.js'
|
58
|
+
end
|
59
|
+
|
60
|
+
def relative_cache_file
|
61
|
+
File.join(self.class.cache_dir, self.class.cache_type, file.gsub(Dir.pwd + '/', ''))
|
58
62
|
end
|
59
63
|
|
60
64
|
def fresh?
|
@@ -4,6 +4,7 @@ require 'multi_json'
|
|
4
4
|
require 'set'
|
5
5
|
require 'sprockets'
|
6
6
|
require 'sprockets/engines'
|
7
|
+
require 'sprockets-vendor_gems'
|
7
8
|
|
8
9
|
module Jasmine::Headless
|
9
10
|
class FilesList
|
@@ -11,33 +12,12 @@ module Jasmine::Headless
|
|
11
12
|
|
12
13
|
class << self
|
13
14
|
def asset_paths
|
14
|
-
|
15
|
-
|
16
|
-
require 'rubygems'
|
17
|
-
|
18
|
-
raise StandardError.new("A newer version of Rubygems is required to use vendored assets. Please upgrade.") if !Gem::Specification.respond_to?(:each)
|
19
|
-
|
20
|
-
@asset_paths = []
|
21
|
-
|
22
|
-
Gem::Specification.each { |gemspec| @asset_paths += get_paths_from_gemspec(gemspec) }
|
23
|
-
|
24
|
-
@asset_paths
|
25
|
-
end
|
26
|
-
|
27
|
-
def get_paths_from_gemspec(gemspec)
|
28
|
-
%w{vendor lib app}.collect do |dir|
|
29
|
-
path = File.join(gemspec.gem_dir, dir, "assets/javascripts")
|
30
|
-
|
31
|
-
if File.directory?(path) && !@asset_paths.include?(path)
|
32
|
-
path
|
33
|
-
else
|
34
|
-
nil
|
35
|
-
end
|
36
|
-
end.compact
|
15
|
+
@asset_paths ||= Sprockets.find_gem_vendor_paths(:for => 'javascripts')
|
37
16
|
end
|
38
17
|
|
39
18
|
def reset!
|
40
19
|
@asset_paths = nil
|
20
|
+
@registered_engines = {}
|
41
21
|
|
42
22
|
# register haml-sprockets and handlebars_assets if it's available...
|
43
23
|
%w{haml-sprockets handlebars_assets}.each do |library|
|
@@ -56,16 +36,20 @@ module Jasmine::Headless
|
|
56
36
|
end
|
57
37
|
end
|
58
38
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
39
|
+
@sprockets_environment = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def registered_engines
|
43
|
+
@registered_engines ||= {}
|
44
|
+
end
|
45
|
+
|
46
|
+
def register_engine(file_extension, template_class)
|
47
|
+
registered_engines[file_extension] = template_class
|
48
|
+
end
|
64
49
|
|
65
|
-
|
66
|
-
|
67
|
-
register_engine
|
68
|
-
register_engine '.jst', Jasmine::Headless::JSTTemplate
|
50
|
+
def register_engines!
|
51
|
+
registered_engines.each do |file_extension, template_class|
|
52
|
+
Sprockets.register_engine file_extension, template_class
|
69
53
|
end
|
70
54
|
end
|
71
55
|
|
@@ -95,11 +79,21 @@ module Jasmine::Headless
|
|
95
79
|
@required_files = UniqueAssetList.new
|
96
80
|
@potential_files_to_filter = []
|
97
81
|
|
82
|
+
register_engines!
|
83
|
+
|
98
84
|
load_initial_assets
|
99
85
|
|
100
86
|
use_config if config?
|
101
87
|
end
|
102
88
|
|
89
|
+
def register_engines!
|
90
|
+
begin
|
91
|
+
require spec_helper
|
92
|
+
rescue LoadError
|
93
|
+
end
|
94
|
+
self.class.register_engines!
|
95
|
+
end
|
96
|
+
|
103
97
|
def load_initial_assets
|
104
98
|
self.class.default_files.each do |file|
|
105
99
|
begin
|
@@ -148,6 +142,19 @@ module Jasmine::Headless
|
|
148
142
|
search_paths.each { |path| @sprockets_environment.append_path(path) }
|
149
143
|
|
150
144
|
@sprockets_environment.unregister_postprocessor('application/javascript', Sprockets::SafetyColons)
|
145
|
+
|
146
|
+
# ...and unregister ones we don't want/need
|
147
|
+
@sprockets_environment.instance_eval do
|
148
|
+
EXCLUDED_FORMATS.each do |extension|
|
149
|
+
register_engine ".#{extension}", Jasmine::Headless::NilTemplate
|
150
|
+
end
|
151
|
+
|
152
|
+
register_engine '.coffee', Jasmine::Headless::CoffeeTemplate
|
153
|
+
register_engine '.js', Jasmine::Headless::JSTemplate
|
154
|
+
register_engine '.css', Jasmine::Headless::CSSTemplate
|
155
|
+
register_engine '.jst', Jasmine::Headless::JSTTemplate
|
156
|
+
end
|
157
|
+
|
151
158
|
@sprockets_environment
|
152
159
|
end
|
153
160
|
|
@@ -248,7 +255,8 @@ module Jasmine::Headless
|
|
248
255
|
end
|
249
256
|
|
250
257
|
def expanded_dir(path)
|
251
|
-
Dir
|
258
|
+
file_list = Dir.glob(path).sort
|
259
|
+
file_list.find_all { |file|
|
252
260
|
file[extension_filter] && !alert_if_bad_format?(file)
|
253
261
|
}.collect {
|
254
262
|
|file| File.expand_path(file)
|
@@ -308,5 +316,17 @@ module Jasmine::Headless
|
|
308
316
|
end
|
309
317
|
end
|
310
318
|
end
|
319
|
+
|
320
|
+
def spec_helper
|
321
|
+
File.join(spec_dir, "helpers", "spec_helper")
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
module Jasmine::Headless
|
327
|
+
extend self
|
328
|
+
|
329
|
+
def register_engine(file_extension, template_class)
|
330
|
+
Jasmine::Headless::FilesList.register_engine(file_extension, template_class)
|
311
331
|
end
|
312
332
|
end
|
data/skel/template.html.erb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
<script type="text/javascript" src="<%= Jasmine::Headless.root.join('vendor/assets/javascripts/prolog.js') %>"></script>
|
7
7
|
<%= files.join("\n") %>
|
8
8
|
<script type="text/javascript">
|
9
|
-
if (window.JHW) { HeadlessReporterResult.specLineNumbers = <%= MultiJson.
|
9
|
+
if (window.JHW) { HeadlessReporterResult.specLineNumbers = <%= MultiJson.dump(spec_lines) %>; }
|
10
10
|
</script>
|
11
11
|
</head>
|
12
12
|
<body>
|
@@ -35,14 +35,18 @@
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
|
38
|
+
var location = window.location.href;
|
39
|
+
|
38
40
|
var getLastModified = function(callback) {
|
39
41
|
var http = new XMLHttpRequest();
|
40
42
|
var header;
|
41
43
|
|
42
|
-
http.open('HEAD',
|
44
|
+
http.open('HEAD', location, true);
|
43
45
|
|
44
46
|
http.onreadystatechange = function() {
|
45
|
-
|
47
|
+
if(http.readyState === http.DONE) {
|
48
|
+
callback(http.getResponseHeader('Last-Modified'));
|
49
|
+
}
|
46
50
|
};
|
47
51
|
http.send();
|
48
52
|
}
|
@@ -95,5 +95,28 @@ describe Jasmine::Headless::CacheableAction do
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
98
|
+
|
99
|
+
describe '#relative_cache_file' do
|
100
|
+
context 'file is an absolute windows file' do
|
101
|
+
let(:current_path) { 'C:/path' }
|
102
|
+
let(:filename) { "file.coffee" }
|
103
|
+
let(:windows_path) { File.join(current_path, filename) }
|
104
|
+
let(:cache_dir) { 'cache dir' }
|
105
|
+
let(:cache_type) { 'cache type' }
|
106
|
+
|
107
|
+
before do
|
108
|
+
cache_object.stubs(:file).returns(windows_path)
|
109
|
+
|
110
|
+
described_class.stubs(:cache_dir).returns(cache_dir)
|
111
|
+
described_class.stubs(:cache_type).returns(cache_type)
|
112
|
+
|
113
|
+
Dir.stubs(:pwd).returns(current_path)
|
114
|
+
end
|
115
|
+
|
116
|
+
subject { cache_object.relative_cache_file }
|
117
|
+
|
118
|
+
it { should == File.join(cache_dir, cache_type, filename) }
|
119
|
+
end
|
120
|
+
end
|
98
121
|
end
|
99
122
|
|
@@ -5,50 +5,6 @@ require 'coffee-script'
|
|
5
5
|
describe Jasmine::Headless::FilesList do
|
6
6
|
let(:files_list) { described_class.new }
|
7
7
|
|
8
|
-
describe '.get_paths_from_gemspec' do
|
9
|
-
include FakeFS::SpecHelpers
|
10
|
-
|
11
|
-
let(:gem_dir) { "dir" }
|
12
|
-
let(:gemspec) { stub(:gem_dir => gem_dir) }
|
13
|
-
|
14
|
-
let(:paths) do
|
15
|
-
%w{vendor lib app}.collect do |dir|
|
16
|
-
File.join(gem_dir, dir, 'assets/javascripts')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
before do
|
21
|
-
paths.each { |path| FileUtils.mkdir_p path }
|
22
|
-
|
23
|
-
described_class.instance_variable_set(:@asset_paths, [])
|
24
|
-
end
|
25
|
-
|
26
|
-
subject { described_class.get_paths_from_gemspec(gemspec) }
|
27
|
-
|
28
|
-
it { should =~ paths }
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '.asset_paths' do
|
32
|
-
include FakeFS::SpecHelpers
|
33
|
-
|
34
|
-
let(:dir_one) { 'dir_one' }
|
35
|
-
let(:dir_two) { 'dir_two' }
|
36
|
-
|
37
|
-
let(:gem_one) { stub(:gem_dir => dir_one) }
|
38
|
-
let(:gem_two) { stub(:gem_dir => dir_two) }
|
39
|
-
|
40
|
-
before do
|
41
|
-
described_class.instance_variable_set(:@asset_paths, nil)
|
42
|
-
FileUtils.mkdir_p File.join(dir_two, 'vendor/assets/javascripts')
|
43
|
-
|
44
|
-
Gem::Specification.stubs(:_all).returns([gem_one, gem_two])
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should return all matching gems with vendor/assets/javascripts directories' do
|
48
|
-
described_class.asset_paths.should == [ File.join(dir_two, 'vendor/assets/javascripts') ]
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
8
|
describe '#initialize' do
|
53
9
|
before do
|
54
10
|
described_class.any_instance.stubs(:load_initial_assets)
|
@@ -218,6 +174,21 @@ describe Jasmine::Headless::FilesList do
|
|
218
174
|
files_list.files.any? { |file| file['.erb'] }.should be_false
|
219
175
|
end
|
220
176
|
end
|
177
|
+
|
178
|
+
describe "#register_engine!" do
|
179
|
+
|
180
|
+
before(:each) do
|
181
|
+
Jasmine::Headless::FilesList.reset!
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should register code added via configure blocks" do
|
185
|
+
template_class = mock()
|
186
|
+
described_class.register_engine ".foo", template_class
|
187
|
+
Sprockets.expects(:register_engine).with(".foo", template_class)
|
188
|
+
described_class.new
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
221
192
|
end
|
222
193
|
end
|
223
194
|
|
@@ -11,16 +11,16 @@ window.Intense = {
|
|
11
11
|
methods:
|
12
12
|
foreground: (color) ->
|
13
13
|
if Intense.useColors
|
14
|
-
"
|
14
|
+
'\x1b' + "[3#{Intense.colors[color]}m#{this}" + '\x1b' + "[0m"
|
15
15
|
else
|
16
16
|
this
|
17
17
|
bright: ->
|
18
18
|
if Intense.useColors
|
19
|
-
"
|
19
|
+
'\x1b' + "[1m#{this}" + '\x1b' + "[0m"
|
20
20
|
else
|
21
21
|
this
|
22
22
|
useColors: true
|
23
|
-
moveBack: (count = 1) -> "
|
23
|
+
moveBack: (count = 1) -> '\x1b' + "[#{count}D"
|
24
24
|
}
|
25
25
|
|
26
26
|
for method, code of Intense.methods
|
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.9.0.
|
4
|
+
version: 0.9.0.rc.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,22 +11,27 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-04-23 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: jasmine-core
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ! '>='
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: coffee-script
|
29
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
30
35
|
none: false
|
31
36
|
requirements:
|
32
37
|
- - ! '>='
|
@@ -34,10 +39,15 @@ dependencies:
|
|
34
39
|
version: '0'
|
35
40
|
type: :runtime
|
36
41
|
prerelease: false
|
37
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
38
48
|
- !ruby/object:Gem::Dependency
|
39
49
|
name: rainbow
|
40
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
41
51
|
none: false
|
42
52
|
requirements:
|
43
53
|
- - ! '>='
|
@@ -45,29 +55,60 @@ dependencies:
|
|
45
55
|
version: '0'
|
46
56
|
type: :runtime
|
47
57
|
prerelease: false
|
48
|
-
version_requirements:
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
49
64
|
- !ruby/object:Gem::Dependency
|
50
65
|
name: multi_json
|
51
|
-
requirement:
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
52
67
|
none: false
|
53
68
|
requirements:
|
54
69
|
- - ! '>='
|
55
70
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
71
|
+
version: 1.2.0
|
57
72
|
type: :runtime
|
58
73
|
prerelease: false
|
59
|
-
version_requirements:
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.2.0
|
60
80
|
- !ruby/object:Gem::Dependency
|
61
81
|
name: sprockets
|
62
|
-
requirement:
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
63
83
|
none: false
|
64
84
|
requirements:
|
65
|
-
- -
|
85
|
+
- - ! '>='
|
66
86
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
87
|
+
version: '0'
|
68
88
|
type: :runtime
|
69
89
|
prerelease: false
|
70
|
-
version_requirements:
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: sprockets-vendor_gems
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
71
112
|
description: Run Jasmine specs headlessly
|
72
113
|
email:
|
73
114
|
- john@coswellproductions.com
|
@@ -305,7 +346,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
305
346
|
version: '0'
|
306
347
|
segments:
|
307
348
|
- 0
|
308
|
-
hash:
|
349
|
+
hash: 4192446100369998967
|
309
350
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
310
351
|
none: false
|
311
352
|
requirements:
|
@@ -314,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
314
355
|
version: 1.3.1
|
315
356
|
requirements: []
|
316
357
|
rubyforge_project: jasmine-headless-webkit
|
317
|
-
rubygems_version: 1.8.
|
358
|
+
rubygems_version: 1.8.23
|
318
359
|
signing_key:
|
319
360
|
specification_version: 3
|
320
361
|
summary: Run Jasmine specs headlessly in a WebKit browser
|