rip out the big js parser and put in a tiny one to guess spec line numbers on failures
This commit is contained in:
parent
d8d04b8638
commit
243fe526ac
@ -82,8 +82,15 @@ void ConsoleOutput::logSpecFilename(const QString &name) {
|
||||
}
|
||||
|
||||
void ConsoleOutput::logSpecResult(const QString &result) {
|
||||
QStringList lines = result.split("\n");
|
||||
QStringListIterator linesIterator(lines);
|
||||
|
||||
red();
|
||||
*outputIO << " " << qPrintable(result) << std::endl;
|
||||
while (linesIterator.hasNext()) {
|
||||
*outputIO << " " << qPrintable(linesIterator.next()) << std::endl;
|
||||
yellow();
|
||||
}
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <QObject>
|
||||
#include <iostream>
|
||||
#include <QStack>
|
||||
#include <QStringList>
|
||||
|
||||
class ConsoleOutput : public QObject {
|
||||
public:
|
||||
|
@ -7,6 +7,8 @@ system %{make clean}
|
||||
$: << File.expand_path("../../../lib", __FILE__)
|
||||
require 'qt/qmake'
|
||||
|
||||
result = 0
|
||||
|
||||
Dir['*_test.pro'].each do |test|
|
||||
FileUtils.rm_f('jhw-test')
|
||||
|
||||
@ -15,10 +17,15 @@ Dir['*_test.pro'].each do |test|
|
||||
if File.file?('jhw-test')
|
||||
system %{./jhw-test}
|
||||
if $?.exitstatus != 0
|
||||
exit 1
|
||||
result = 1
|
||||
break
|
||||
end
|
||||
else
|
||||
exit 1
|
||||
result = 1
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
Qt::Qmake.make!('jasmine-headless-webkit', 'specrunner.pro')
|
||||
|
||||
exit result
|
||||
|
@ -24,6 +24,23 @@ jasmine.Spec.prototype.getJHWSpecInformation = ->
|
||||
parts.push('')
|
||||
parts.join("||")
|
||||
|
||||
jasmine.Spec.prototype.fail = (e) ->
|
||||
if e and window.CoffeeScriptToFilename
|
||||
filename = e.sourceURL.split('/').pop()
|
||||
if realFilename = window.CoffeeScriptToFilename[filename]
|
||||
e = {
|
||||
name: e.name,
|
||||
message: e.message,
|
||||
lineNumber: "~" + String(e.line),
|
||||
sourceURL: realFilename
|
||||
|
||||
expectationResult = new jasmine.ExpectationResult({
|
||||
passed: false,
|
||||
message: if e then jasmine.util.formatException(e) else 'Exception',
|
||||
trace: { stack: e.stack }
|
||||
})
|
||||
@results_.addResult(expectationResult)
|
||||
|
||||
if !jasmine.WaitsBlock.prototype._execute
|
||||
jasmine.WaitsBlock.prototype._execute = jasmine.WaitsBlock.prototype.execute
|
||||
jasmine.WaitsForBlock.prototype._execute = jasmine.WaitsForBlock.prototype.execute
|
||||
@ -37,6 +54,24 @@ if !jasmine.WaitsBlock.prototype._execute
|
||||
jasmine.WaitsBlock.prototype.execute = pauseAndRun
|
||||
jasmine.WaitsForBlock.prototype.execute = pauseAndRun
|
||||
|
||||
jasmine.NestedResults.prototype.addResult_ = jasmine.NestedResults.prototype.addResult
|
||||
|
||||
jasmine.NestedResults.prototype.addResult = (result) ->
|
||||
result.expectations = []
|
||||
# always three up?
|
||||
lineCount = 0
|
||||
for line in arguments.callee.caller.caller.caller.toString().split("\n")
|
||||
line = line.replace(/^\s*/, '').replace(/\s*$/, '')
|
||||
if line.match(/^\s*expect/)
|
||||
result.expectations.push(line)
|
||||
lineCount += 1
|
||||
|
||||
this.addResult_(result)
|
||||
}
|
||||
|
||||
jasmine.ExpectationResult.prototype.line = ->
|
||||
if @expectations && @lineNumber then @expectations[@lineNumber] else ''
|
||||
|
||||
# Try to get the line number of a failed spec
|
||||
class window.HeadlessReporterResult
|
||||
constructor: (@name, @splitName) ->
|
||||
@ -50,7 +85,10 @@ class window.HeadlessReporterResult
|
||||
|
||||
JHW.printName(output)
|
||||
for result in @results
|
||||
JHW.printResult(result)
|
||||
output = result.message
|
||||
if result.lineNumber
|
||||
output += " (line ~#{bestChoice.lineNumber + result.lineNumber})\n #{result.line()}"
|
||||
JHW.printResult(output)
|
||||
@findSpecLine: (splitName) ->
|
||||
bestChoice = { accuracy: 0, file: null, lineNumber: null }
|
||||
|
||||
@ -104,9 +142,13 @@ class jasmine.HeadlessReporter
|
||||
JHW.specFailed(spec.getJHWSpecInformation())
|
||||
@failedCount++
|
||||
failureResult = new HeadlessReporterResult(spec.getFullName(), spec.getSpecSplitName())
|
||||
testCount = 1
|
||||
for result in results.getItems()
|
||||
if result.type == 'expect' and !result.passed_
|
||||
failureResult.addResult(result.message)
|
||||
if foundLine = result.expectations[testCount - 1]
|
||||
result.lineNumber = testCount - 1
|
||||
failureResult.addResult(result)
|
||||
testCount += 1
|
||||
@results.push(failureResult)
|
||||
|
||||
reportSpecStarting: (spec) ->
|
||||
|
@ -26,6 +26,28 @@
|
||||
}
|
||||
return parts.join("||");
|
||||
};
|
||||
jasmine.Spec.prototype.fail = function(e) {
|
||||
var expectationResult, filename, realFilename;
|
||||
if (e && window.CoffeeScriptToFilename) {
|
||||
filename = e.sourceURL.split('/').pop();
|
||||
if (realFilename = window.CoffeeScriptToFilename[filename]) {
|
||||
e = {
|
||||
name: e.name,
|
||||
message: e.message,
|
||||
lineNumber: "~" + String(e.line),
|
||||
sourceURL: realFilename
|
||||
};
|
||||
}
|
||||
}
|
||||
expectationResult = new jasmine.ExpectationResult({
|
||||
passed: false,
|
||||
message: e ? jasmine.util.formatException(e) : 'Exception',
|
||||
trace: {
|
||||
stack: e.stack
|
||||
}
|
||||
});
|
||||
return this.results_.addResult(expectationResult);
|
||||
};
|
||||
if (!jasmine.WaitsBlock.prototype._execute) {
|
||||
jasmine.WaitsBlock.prototype._execute = jasmine.WaitsBlock.prototype.execute;
|
||||
jasmine.WaitsForBlock.prototype._execute = jasmine.WaitsForBlock.prototype.execute;
|
||||
@ -38,6 +60,29 @@
|
||||
};
|
||||
jasmine.WaitsBlock.prototype.execute = pauseAndRun;
|
||||
jasmine.WaitsForBlock.prototype.execute = pauseAndRun;
|
||||
jasmine.NestedResults.prototype.addResult_ = jasmine.NestedResults.prototype.addResult;
|
||||
jasmine.NestedResults.prototype.addResult = function(result) {
|
||||
var line, lineCount, _i, _len, _ref;
|
||||
result.expectations = [];
|
||||
lineCount = 0;
|
||||
_ref = arguments.callee.caller.caller.caller.toString().split("\n");
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
line = _ref[_i];
|
||||
line = line.replace(/^\s*/, '').replace(/\s*$/, '');
|
||||
if (line.match(/^\s*expect/)) {
|
||||
result.expectations.push(line);
|
||||
}
|
||||
lineCount += 1;
|
||||
}
|
||||
return this.addResult_(result);
|
||||
};
|
||||
jasmine.ExpectationResult.prototype.line = function() {
|
||||
if (this.expectations && this.lineNumber) {
|
||||
return this.expectations[this.lineNumber];
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
}
|
||||
window.HeadlessReporterResult = (function() {
|
||||
function HeadlessReporterResult(name, splitName) {
|
||||
@ -60,7 +105,11 @@
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
result = _ref[_i];
|
||||
_results.push(JHW.printResult(result));
|
||||
output = result.message;
|
||||
if (result.lineNumber) {
|
||||
output += " (line ~" + (bestChoice.lineNumber + result.lineNumber) + ")\n " + (result.line());
|
||||
}
|
||||
_results.push(JHW.printResult(output));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
@ -130,7 +179,7 @@
|
||||
return this.startTime = new Date();
|
||||
};
|
||||
HeadlessReporter.prototype.reportSpecResults = function(spec) {
|
||||
var failureResult, result, results, _i, _len, _ref;
|
||||
var failureResult, foundLine, result, results, testCount, _i, _len, _ref;
|
||||
if (this.hasError()) {
|
||||
return;
|
||||
}
|
||||
@ -142,12 +191,17 @@
|
||||
JHW.specFailed(spec.getJHWSpecInformation());
|
||||
this.failedCount++;
|
||||
failureResult = new HeadlessReporterResult(spec.getFullName(), spec.getSpecSplitName());
|
||||
testCount = 1;
|
||||
_ref = results.getItems();
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
result = _ref[_i];
|
||||
if (result.type === 'expect' && !result.passed_) {
|
||||
failureResult.addResult(result.message);
|
||||
if (foundLine = result.expectations[testCount - 1]) {
|
||||
result.lineNumber = testCount - 1;
|
||||
}
|
||||
failureResult.addResult(result);
|
||||
}
|
||||
testCount += 1;
|
||||
}
|
||||
return this.results.push(failureResult);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
require 'jasmine-core'
|
||||
require 'iconv'
|
||||
require 'time'
|
||||
require 'multi_json'
|
||||
|
||||
module Jasmine
|
||||
class FilesList
|
||||
@ -63,10 +64,25 @@ module Jasmine
|
||||
alert_time = nil
|
||||
end
|
||||
|
||||
case File.extname(file)
|
||||
function_locations = {}
|
||||
source = nil
|
||||
|
||||
result = case File.extname(file)
|
||||
when '.coffee'
|
||||
begin
|
||||
%{<script type="text/javascript">#{Jasmine::Headless::CoffeeScriptCache.for(file)}</script>}
|
||||
cache = Jasmine::Headless::CoffeeScriptCache.new(file)
|
||||
source = cache.handle
|
||||
if cache.cached?
|
||||
%{
|
||||
<script type="text/javascript" src="#{cache.cache_file}"></script>S
|
||||
<script type="text/javascript">
|
||||
window.CoffeeScriptToFilename = window.CoffeeScriptToFilename || {};
|
||||
window.CoffeeScriptToFilename['#{File.split(cache.cache_file).last}'] = '#{file}';
|
||||
</script>
|
||||
}
|
||||
else
|
||||
%{<script type="text/javascript">#{source}</script>}
|
||||
end
|
||||
rescue CoffeeScript::CompilationError => ne
|
||||
puts "[%s] %s: %s" % [ 'coffeescript'.color(:red), file.color(:yellow), ne.message.to_s.color(:white) ]
|
||||
raise ne
|
||||
@ -79,6 +95,8 @@ module Jasmine
|
||||
when '.css'
|
||||
%{<link rel="stylesheet" href="#{file}" type="text/css" />}
|
||||
end
|
||||
|
||||
result
|
||||
}.flatten.compact.reject(&:empty?)
|
||||
end
|
||||
|
||||
|
@ -58,7 +58,11 @@ module Jasmine::Headless
|
||||
end
|
||||
|
||||
def fresh?
|
||||
File.exist?(cache_file) && (File.mtime(file) < File.mtime(cache_file))
|
||||
cached? && (File.mtime(file) < File.mtime(cache_file))
|
||||
end
|
||||
|
||||
def cached?
|
||||
File.exist?(cache_file)
|
||||
end
|
||||
|
||||
def action
|
||||
|
@ -14,7 +14,8 @@ module Jasmine
|
||||
'spec_dir' => 'spec/javascripts',
|
||||
'src_dir' => nil,
|
||||
'stylesheets' => [],
|
||||
'src_files' => []
|
||||
'src_files' => [],
|
||||
'backtrace' => []
|
||||
}
|
||||
|
||||
RUNNER_DIR = File.expand_path('../../../../ext/jasmine-webkit-specrunner', __FILE__)
|
||||
|
@ -170,7 +170,8 @@ describe Jasmine::FilesList do
|
||||
'test.coffee'
|
||||
])
|
||||
|
||||
Jasmine::Headless::CoffeeScriptCache.stubs(:for).with('test.coffee').returns("i compiled")
|
||||
File.stubs(:read)
|
||||
Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:handle).returns("i compiled")
|
||||
end
|
||||
|
||||
context '#files_to_html' do
|
||||
|
@ -22,6 +22,8 @@ describe Jasmine::Headless::CacheableAction do
|
||||
let(:cache_file) { File.join(cache_dir, cache_type, Digest::SHA1.hexdigest(file)) }
|
||||
let(:cache_file_data) { YAML.load(File.read(cache_file)) }
|
||||
|
||||
let(:cache_object) { described_class.new(file) }
|
||||
|
||||
describe '.for' do
|
||||
context 'cache disabled' do
|
||||
before do
|
||||
@ -32,6 +34,8 @@ describe Jasmine::Headless::CacheableAction do
|
||||
action_runs!
|
||||
described_class.for(file).should == compiled
|
||||
cache_file.should_not be_a_file
|
||||
|
||||
cache_object.should_not be_cached
|
||||
end
|
||||
end
|
||||
|
||||
@ -52,6 +56,7 @@ describe Jasmine::Headless::CacheableAction do
|
||||
described_class.for(file).should == compiled
|
||||
|
||||
cache_file_data.should == compiled
|
||||
cache_object.should be_cached
|
||||
end
|
||||
end
|
||||
|
||||
@ -69,6 +74,7 @@ describe Jasmine::Headless::CacheableAction do
|
||||
described_class.for(file).should == compiled
|
||||
|
||||
cache_file_data.should == compiled
|
||||
cache_object.should be_cached
|
||||
end
|
||||
end
|
||||
|
||||
@ -81,6 +87,7 @@ describe Jasmine::Headless::CacheableAction do
|
||||
described_class.for(file).should == compiled
|
||||
|
||||
cache_file_data.should == compiled
|
||||
cache_object.should be_cached
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -6,6 +6,10 @@ describe Jasmine::TemplateWriter do
|
||||
describe '.write!' do
|
||||
include FakeFS::SpecHelpers
|
||||
|
||||
before do
|
||||
File.stubs(:read).returns(nil)
|
||||
end
|
||||
|
||||
let(:files_list) { Jasmine::FilesList.new }
|
||||
|
||||
before do
|
||||
|
Loading…
Reference in New Issue
Block a user