jasmine-headless-webkit 0.7.3.1 → 0.7.3.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/Guardfile +3 -2
- data/bin/jasmine-headless-webkit +1 -1
- data/ext/jasmine-webkit-specrunner/Page.cpp +8 -21
- data/ext/jasmine-webkit-specrunner/Page.h +11 -15
- data/ext/jasmine-webkit-specrunner/Runner.cpp +86 -110
- data/ext/jasmine-webkit-specrunner/Runner.h +23 -26
- data/ext/jasmine-webkit-specrunner/common.pri +2 -2
- data/ext/jasmine-webkit-specrunner/specrunner.cpp +0 -1
- data/ext/jasmine-webkit-specrunner/specrunner.pro +1 -0
- data/lib/jasmine/files_list.rb +24 -24
- data/lib/jasmine/headless.rb +1 -1
- data/lib/jasmine/headless/spec_file_analyzer.rb +1 -1
- data/lib/jasmine/headless/version.rb +1 -1
- data/lib/qt/qmake.rb +1 -5
- data/skel/template.html.erb +8 -45
- data/spec/files/UTF-8-test.txt +0 -0
- data/spec/javascripts/headless_reporter_result_spec.coffee +14 -0
- data/spec/javascripts/{jasmine.headless-reporter_spec.coffee → jasmine.HeadlessConsoleReporter_spec.coffee} +2 -2
- data/spec/javascripts/support/jasmine.yml +1 -1
- data/spec/lib/jasmine/files_list_spec.rb +6 -3
- data/spec/lib/jasmine/headless/spec_file_analyzer_spec.rb +41 -30
- data/spec/lib/qt/qmake_spec.rb +0 -6
- data/vendor/assets/coffeescripts/headless_reporter_result.coffee +46 -0
- data/vendor/assets/coffeescripts/intense.coffee +27 -0
- data/{jasmine/jasmine.headless-reporter.coffee → vendor/assets/coffeescripts/jasmine-extensions.coffee} +5 -90
- data/vendor/assets/coffeescripts/jasmine.HeadlessConsoleReporter.coffee +86 -0
- data/vendor/assets/coffeescripts/prolog.coffee +73 -0
- data/{js-lib → vendor/assets/javascripts}/beautify-html.js +0 -0
- data/vendor/assets/javascripts/headless_reporter_result.js +72 -0
- data/vendor/assets/javascripts/intense.js +37 -0
- data/vendor/assets/javascripts/jasmine-extensions.js +101 -0
- data/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js +96 -0
- data/{js-lib → vendor/assets/javascripts}/jsDump.js +0 -0
- data/vendor/assets/javascripts/prolog.js +89 -0
- metadata +28 -33
- data/dev-bin/hooks/pre-commit +0 -5
- data/dev-bin/install-hooks +0 -6
- data/ext/jasmine-webkit-specrunner/ConsoleOutput.cpp +0 -149
- data/ext/jasmine-webkit-specrunner/ConsoleOutput.h +0 -39
- data/ext/jasmine-webkit-specrunner/ConsoleOutput_test.cpp +0 -129
- data/ext/jasmine-webkit-specrunner/ConsoleOutput_test.h +0 -32
- data/ext/jasmine-webkit-specrunner/ConsoleOutput_test.pro +0 -7
- data/ext/jasmine-webkit-specrunner/Page_test.cpp +0 -43
- data/ext/jasmine-webkit-specrunner/Page_test.h +0 -27
- data/ext/jasmine-webkit-specrunner/Page_test.pro +0 -6
- data/ext/jasmine-webkit-specrunner/ReportFileOutput.cpp +0 -54
- data/ext/jasmine-webkit-specrunner/ReportFileOutput.h +0 -37
- data/ext/jasmine-webkit-specrunner/ReportFileOutput_test.cpp +0 -88
- data/ext/jasmine-webkit-specrunner/ReportFileOutput_test.h +0 -26
- data/ext/jasmine-webkit-specrunner/ReportFileOutput_test.pro +0 -7
- data/ext/jasmine-webkit-specrunner/test.pri +0 -3
- data/ext/jasmine-webkit-specrunner/test.rb +0 -31
- data/jasmine/jasmine.headless-reporter.js +0 -231
@@ -4,6 +4,6 @@ QMAKE_INFO_PLIST = Info.plist
|
|
4
4
|
QMAKESPEC = macx-g++
|
5
5
|
QT += network webkit
|
6
6
|
|
7
|
-
SOURCES = Page.cpp Runner.cpp
|
8
|
-
HEADERS = Page.h Runner.h
|
7
|
+
SOURCES = Page.cpp Runner.cpp
|
8
|
+
HEADERS = Page.h Runner.h
|
9
9
|
|
data/lib/jasmine/files_list.rb
CHANGED
@@ -6,14 +6,30 @@ module Jasmine
|
|
6
6
|
class FilesList
|
7
7
|
attr_reader :files, :spec_files, :filtered_files, :spec_outside_scope
|
8
8
|
|
9
|
+
class << self
|
10
|
+
def find_vendored_asset_paths(*names)
|
11
|
+
require 'rubygems'
|
12
|
+
|
13
|
+
raise StandardError.new("A newer version of Rubygems is required to use vendored assets. Please upgrade.") if !Gem::Specification.respond_to?(:map)
|
14
|
+
all_spec_files.find_all do |file|
|
15
|
+
names.any? { |name| file["/#{name}.js"] }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def all_spec_files
|
20
|
+
@all_spec_files ||= Gem::Specification.map { |spec| spec.files.find_all { |file|
|
21
|
+
file["vendor/assets/javascripts"]
|
22
|
+
}.compact.collect { |file| File.join(spec.gem_dir, file) } }.flatten
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
9
26
|
DEFAULT_FILES = [
|
10
27
|
File.join(Jasmine::Core.path, "jasmine.js"),
|
11
28
|
File.join(Jasmine::Core.path, "jasmine-html.js"),
|
12
|
-
File.join(Jasmine::Core.path, "jasmine.css")
|
13
|
-
|
14
|
-
Jasmine::Headless.root.join(
|
15
|
-
|
16
|
-
]
|
29
|
+
File.join(Jasmine::Core.path, "jasmine.css")
|
30
|
+
] + %w{jasmine-extensions intense headless_reporter_result jasmine.HeadlessConsoleReporter jsDump beautify-html}.collect { |name|
|
31
|
+
Jasmine::Headless.root.join("vendor/assets/javascripts/#{name}.js").to_s
|
32
|
+
}
|
17
33
|
|
18
34
|
PLEASE_WAIT_IM_WORKING_TIME = 2
|
19
35
|
|
@@ -72,13 +88,10 @@ module Jasmine
|
|
72
88
|
cache = Jasmine::Headless::CoffeeScriptCache.new(file)
|
73
89
|
source = cache.handle
|
74
90
|
if cache.cached?
|
75
|
-
%{
|
76
|
-
<script type="text/javascript" src="#{cache.cache_file}"></script>S
|
91
|
+
%{<script type="text/javascript" src="#{cache.cache_file}"></script>
|
77
92
|
<script type="text/javascript">
|
78
|
-
window.
|
79
|
-
|
80
|
-
</script>
|
81
|
-
}
|
93
|
+
window.CSTF['#{File.split(cache.cache_file).last}'] = '#{file}';
|
94
|
+
</script>}
|
82
95
|
else
|
83
96
|
%{<script type="text/javascript">#{source}</script>}
|
84
97
|
end
|
@@ -158,19 +171,6 @@ module Jasmine
|
|
158
171
|
def expanded_dir(path)
|
159
172
|
Dir[path].collect { |file| File.expand_path(file) }
|
160
173
|
end
|
161
|
-
|
162
|
-
def self.find_vendored_asset_path(name)
|
163
|
-
require 'rubygems'
|
164
|
-
|
165
|
-
raise StandardError.new("A newer version of Rubygems is required to use vendored assets. Please upgrade.") if !Gem::Specification.respond_to?(:map)
|
166
|
-
all_spec_files.find_all { |file| file["vendor/assets/javascripts/#{name}.js"] }
|
167
|
-
end
|
168
|
-
|
169
|
-
def self.all_spec_files
|
170
|
-
@all_spec_files ||= Gem::Specification.map { |spec| spec.files.find_all { |file|
|
171
|
-
file["vendor/assets/javascripts"]
|
172
|
-
}.compact.collect { |file| File.join(spec.gem_dir, file) } }.flatten
|
173
|
-
end
|
174
174
|
end
|
175
175
|
end
|
176
176
|
|
data/lib/jasmine/headless.rb
CHANGED
@@ -14,7 +14,7 @@ module Jasmine::Headless
|
|
14
14
|
data = File.read(file)
|
15
15
|
|
16
16
|
if data.respond_to?(:encode)
|
17
|
-
data.encode!('US-ASCII', 'UTF-8', :invalid => :replace)
|
17
|
+
data.encode!('US-ASCII', 'UTF-8', :invalid => :replace, :undef => :replace)
|
18
18
|
else
|
19
19
|
require 'iconv'
|
20
20
|
ic = Iconv.new('UTF-8//IGNORE', 'US-ASCII')
|
data/lib/qt/qmake.rb
CHANGED
data/skel/template.html.erb
CHANGED
@@ -3,47 +3,7 @@
|
|
3
3
|
<head>
|
4
4
|
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type"/>
|
5
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>
|
6
|
+
<script type="text/javascript" src="<%= Jasmine::Headless.root.join('vendor/assets/javascripts/prolog.js') %>"></script>
|
47
7
|
<%= files.join("\n") %>
|
48
8
|
<script type="text/javascript">
|
49
9
|
if (window.JHW) { HeadlessReporterResult.specLineNumbers = <%= MultiJson.encode(spec_lines) %>; }
|
@@ -51,18 +11,21 @@
|
|
51
11
|
</head>
|
52
12
|
<body>
|
53
13
|
<script type="text/javascript">
|
14
|
+
jasmine.getEnv().console = {
|
15
|
+
log: function(msg) { JHW.stdout.puts(msg) }
|
16
|
+
}
|
17
|
+
|
54
18
|
window._onload = window.onload
|
55
19
|
|
56
20
|
window.onload = function() {
|
57
21
|
if (window._onload) { window._onload() }
|
22
|
+
|
58
23
|
if (window.JHW) {
|
59
|
-
jasmine.getEnv().addReporter(new jasmine.
|
60
|
-
window.onbeforeunload = null;
|
61
|
-
}));
|
24
|
+
jasmine.getEnv().addReporter(new jasmine.HeadlessConsoleReporter());
|
62
25
|
} else {
|
63
26
|
jasmine.getEnv().addReporter(new jasmine.HtmlReporter());
|
64
27
|
}
|
65
|
-
|
28
|
+
|
66
29
|
jasmine.getEnv().execute();
|
67
30
|
}
|
68
31
|
</script>
|
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe 'HeadlessReporterResult', ->
|
2
|
+
result = null
|
3
|
+
name = "name"
|
4
|
+
splitName = "splitName"
|
5
|
+
message = 'message'
|
6
|
+
|
7
|
+
beforeEach ->
|
8
|
+
result = new HeadlessReporterResult(name, splitName)
|
9
|
+
|
10
|
+
describe '#addResult', ->
|
11
|
+
it 'should add a message', ->
|
12
|
+
result.addResult(message)
|
13
|
+
|
14
|
+
expect(result.results).toEqual([ message ])
|
@@ -12,11 +12,11 @@ describe 'HeadlessReporterResult', ->
|
|
12
12
|
expect(HeadlessReporterResult.findSpecLine([ 'name', 'of', 'test' ]).lineNumber).toEqual(3)
|
13
13
|
expect(HeadlessReporterResult.findSpecLine([ 'other', 'of', 'test' ]).lineNumber).toEqual(10)
|
14
14
|
|
15
|
-
describe 'jasmine.
|
15
|
+
describe 'jasmine.HeadlessConsoleReporter', ->
|
16
16
|
reporter = null
|
17
17
|
|
18
18
|
beforeEach ->
|
19
|
-
reporter = new jasmine.
|
19
|
+
reporter = new jasmine.HeadlessConsoleReporter()
|
20
20
|
|
21
21
|
it 'should stop running specs if there are errors reported', ->
|
22
22
|
# otherwise it gets really confusing!
|
@@ -14,9 +14,12 @@ describe Jasmine::FilesList do
|
|
14
14
|
File.join(Jasmine::Core.path, "jasmine.js"),
|
15
15
|
File.join(Jasmine::Core.path, "jasmine-html.js"),
|
16
16
|
File.join(Jasmine::Core.path, "jasmine.css"),
|
17
|
-
File.expand_path('
|
18
|
-
File.expand_path('
|
19
|
-
File.expand_path('
|
17
|
+
File.expand_path('vendor/assets/javascripts/jasmine-extensions.js'),
|
18
|
+
File.expand_path('vendor/assets/javascripts/intense.js'),
|
19
|
+
File.expand_path('vendor/assets/javascripts/headless_reporter_result.js'),
|
20
|
+
File.expand_path('vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js'),
|
21
|
+
File.expand_path('vendor/assets/javascripts/jsDump.js'),
|
22
|
+
File.expand_path('vendor/assets/javascripts/beautify-html.js'),
|
20
23
|
]
|
21
24
|
end
|
22
25
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Jasmine::Headless::SpecFileAnalyzer do
|
4
|
-
include FakeFS::SpecHelpers
|
5
4
|
|
6
5
|
let(:file) { 'file' }
|
7
6
|
let(:analyzer) { described_class.new(file) }
|
@@ -11,45 +10,57 @@ describe Jasmine::Headless::SpecFileAnalyzer do
|
|
11
10
|
analyzer.action
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
context 'fake files' do
|
14
|
+
include FakeFS::SpecHelpers
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
<<-SPEC
|
21
|
-
describe 'test', ->
|
22
|
-
context 'yes', ->
|
23
|
-
it 'should do something', ->
|
24
|
-
"yes"
|
25
|
-
"PR.registerLangHandler(PR.createSimpleLexer([[\"com\",/^#[^\\n\\r]*/,null,\"#\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \xC2\\xa0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"']],[[\"kwd\",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\\s/,\n"
|
26
|
-
SPEC
|
16
|
+
before do
|
17
|
+
File.open(file, 'wb') { |fh| fh.print file_data }
|
27
18
|
end
|
28
19
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
context 'coffeescript' do
|
21
|
+
let(:file_data) do
|
22
|
+
<<-SPEC
|
23
|
+
describe 'test', ->
|
24
|
+
context 'yes', ->
|
25
|
+
it 'should do something', ->
|
26
|
+
"yes"
|
27
|
+
SPEC
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should get the line numbers' do
|
31
|
+
line_numbers['test'].should == [ 1 ]
|
32
|
+
line_numbers['yes'].should == [ 2 ]
|
33
|
+
line_numbers['should do something'].should == [ 3 ]
|
34
|
+
end
|
33
35
|
end
|
34
|
-
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
describe('test', function() {
|
40
|
-
|
41
|
-
|
37
|
+
context 'javascript' do
|
38
|
+
let(:file_data) do
|
39
|
+
<<-SPEC
|
40
|
+
describe('test', function() {
|
41
|
+
context('yes', function() {
|
42
|
+
it('should do something', function() {
|
42
43
|
|
44
|
+
});
|
43
45
|
});
|
44
46
|
});
|
45
|
-
|
46
|
-
|
47
|
+
SPEC
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should get the line numbers' do
|
51
|
+
line_numbers['test'].should == [ 1 ]
|
52
|
+
line_numbers['yes'].should == [ 2 ]
|
53
|
+
line_numbers['should do something'].should == [ 3 ]
|
54
|
+
end
|
47
55
|
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'utf 8' do
|
59
|
+
let(:analyzer) { described_class.new('spec/files/UTF-8-test.txt') }
|
60
|
+
let(:file_data) { '' }
|
48
61
|
|
49
|
-
it 'should
|
50
|
-
line_numbers
|
51
|
-
line_numbers['yes'].should == [ 2 ]
|
52
|
-
line_numbers['should do something'].should == [ 3 ]
|
62
|
+
it 'should not explode' do
|
63
|
+
line_numbers
|
53
64
|
end
|
54
65
|
end
|
55
66
|
end
|
data/spec/lib/qt/qmake_spec.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Try to get the line number of a failed spec
|
2
|
+
class window.HeadlessReporterResult
|
3
|
+
constructor: (@name, @splitName) ->
|
4
|
+
@results = []
|
5
|
+
|
6
|
+
addResult: (message) ->
|
7
|
+
@results.push(message)
|
8
|
+
|
9
|
+
print: ->
|
10
|
+
output = @name.foreground('red')
|
11
|
+
bestChoice = HeadlessReporterResult.findSpecLine(@splitName)
|
12
|
+
output += " (#{bestChoice.file}:#{bestChoice.lineNumber})".foreground('blue') if bestChoice.file
|
13
|
+
|
14
|
+
JHW.stdout.puts "\n\n#{output}"
|
15
|
+
for result in @results
|
16
|
+
output = result.message.foreground('red')
|
17
|
+
if result.lineNumber
|
18
|
+
output += " (line ~#{bestChoice.lineNumber + result.lineNumber})".foreground('red').bright()
|
19
|
+
JHW.stdout.puts(" " + output)
|
20
|
+
|
21
|
+
if result.line?
|
22
|
+
JHW.stdout.puts(" #{result.line}".foreground('yellow'))
|
23
|
+
|
24
|
+
@findSpecLine: (splitName) ->
|
25
|
+
bestChoice = { accuracy: 0, file: null, lineNumber: null }
|
26
|
+
|
27
|
+
for file, lines of HeadlessReporterResult.specLineNumbers
|
28
|
+
index = 0
|
29
|
+
lineNumber = 0
|
30
|
+
while newLineNumberInfo = lines[splitName[index]]
|
31
|
+
if newLineNumberInfo.length == 0
|
32
|
+
lineNumber = newLineNumberInfo[0]
|
33
|
+
else
|
34
|
+
lastLine = null
|
35
|
+
for line in newLineNumberInfo
|
36
|
+
lastLine = line
|
37
|
+
break if line > lineNumber
|
38
|
+
|
39
|
+
lineNumber = lastLine
|
40
|
+
|
41
|
+
index++
|
42
|
+
|
43
|
+
if index > bestChoice.accuracy
|
44
|
+
bestChoice = { accuracy: index, file: file, lineNumber: lineNumber }
|
45
|
+
|
46
|
+
bestChoice
|
@@ -0,0 +1,27 @@
|
|
1
|
+
window.Intense = {
|
2
|
+
colors:
|
3
|
+
black: 0
|
4
|
+
red: 1
|
5
|
+
green: 2
|
6
|
+
yellow: 3
|
7
|
+
blue: 4
|
8
|
+
magenta: 5
|
9
|
+
cyan: 6
|
10
|
+
white: 7
|
11
|
+
methods:
|
12
|
+
foreground: (color) ->
|
13
|
+
if Intense.useColors
|
14
|
+
"\033[3#{Intense.colors[color]}m#{this}\033[0m"
|
15
|
+
else
|
16
|
+
this
|
17
|
+
bright: ->
|
18
|
+
if Intense.useColors
|
19
|
+
"\033[1m#{this}\033[0m"
|
20
|
+
else
|
21
|
+
this
|
22
|
+
useColors: true
|
23
|
+
}
|
24
|
+
|
25
|
+
for method, code of Intense.methods
|
26
|
+
String.prototype[method] = code
|
27
|
+
|