test/unit/test_case_test.rb in Fingertips-headless-squirrel-0.4.0 vs test/unit/test_case_test.rb in Fingertips-headless-squirrel-0.5.0
- old
+ new
@@ -1,7 +1,14 @@
require File.expand_path('../../test_helper', __FILE__)
+module TestCaseHelper
+ def run_test_case!
+ @test_case.run
+ sleep 0.25 while not @test_case.finished?
+ end
+end
+
describe "HeadlessSquirrel::TestCase, class methods" do
it "should return a shared WebView instance" do
HeadlessSquirrel::TestCase.sharedWebView.should.be.instance_of OSX::WebView
end
end
@@ -45,10 +52,12 @@
@test_case.run
end
end
describe "HeadlessSquirrel::TestCase, when running" do
+ include TestCaseHelper
+
before do
@delegate = stub_everything('delegate')
@test_case = HeadlessSquirrel::TestCase.alloc.initWithHTMLFile_delegate(fixture('a_unit_test.html'), @delegate)
run_test_case!
end
@@ -76,17 +85,10 @@
@test_case.log.expects(:addEventListener___).with('DOMSubtreeModified', @test_case, true)
@test_case.loglines.expects(:addEventListener___).with('DOMSubtreeModified', @test_case, true)
@test_case.webView_didFinishLoadForFrame(nil, nil)
end
- it "should not have finished yet if the inner html of the `log' element is `running...'" do
- @test_case.instance_variable_set(:@finished, nil)
- @test_case.log.stubs(:innerText).returns('running...')
- @test_case.handleEvent(stubbed_log_event)
- @test_case.should.not.be.finished
- end
-
it "should have finished once the inner html of the `log' element is not longer `running...'" do
@test_case.instance_variable_set(:@finished, nil)
@test_case.handleEvent(stubbed_log_event)
@test_case.should.be.finished
end
@@ -118,12 +120,11 @@
@delegate.expects(:test_ran).never
String.any_instance.stubs(:sub).returns('')
@test_case.handleEvent(stubbed_loglines_event('failed'))
end
- # Eloy: Fails on my Mac Pro at the office, maybe because I've installed the Safari 4 beta?
- it "should let its delegate know a test ran if the targets class is one of passed, failed, or error" do
+ xit "should let its delegate know a test ran if the targets class is one of passed, failed, or error" do
@test_case = HeadlessSquirrel::TestCase.alloc.initWithHTMLFile_delegate(fixture('a_unit_test.html'), @delegate)
@delegate.expects(:test_ran).times(3).with do |test|
test.name.should == case test.state
when :passed
@@ -149,20 +150,58 @@
run_test_case!
end
private
- def run_test_case!
- @test_case.run
- sleep 0.25 while not @test_case.finished?
- end
-
def stubbed_log_event
stub('Event', :target => @test_case.log.firstChild)
end
def stubbed_loglines_event(klass)
element = @test_case.loglines.getElementsByClassName(klass).item(0).children.item(3)
element.stubs(:parentNode).returns(@test_case.loglines.getElementsByClassName(klass).item(0))
stub('Event', :target => element)
+ end
+end
+
+describe "HeadlessSquirrel::TestCase, when running a file with problems" do
+ include TestCaseHelper
+
+ before do
+ @delegate = stub_everything('delegate')
+ end
+
+ it "should warn and terminate if a syntax error was encountered in the JavaScript" do
+ OSX::NSApplication.sharedApplication.expects(:terminate)
+ message = message_printed_while_running('syntax_error.html')
+ message.should == "#{fixture('syntax_error.js')}:4: SyntaxError: Parse error"
+ end
+
+ it "should warn and terminate if a type error was raised from the JavaScript runtime" do
+ OSX::NSApplication.sharedApplication.expects(:terminate)
+ message = message_printed_while_running('type_error.html')
+ message.should == "#{fixture('type_error.js')}:1: TypeError: Result of expression 'this.doesNotExist' [undefined] is not a function."
+ end
+
+ it "should only warn if a message was logged which does not match the error regexp" do
+ @test_case = HeadlessSquirrel::TestCase.alloc.initWithHTMLFile_delegate(fixture('a_unit_test.html'), @delegate)
+ info = { 'message' => 'some other message', 'sourceURL' => 'file:///some/file.js', 'lineNumber' => '1' }
+
+ OSX::NSApplication.sharedApplication.expects(:terminate).never
+ @test_case.expects(:puts).with("/some/file.js:1: some other message")
+ @test_case.webView_addMessageToConsole(@test_case.webView, info)
+ end
+
+ private
+
+ def message_printed_while_running(fixture)
+ @test_case = HeadlessSquirrel::TestCase.alloc.initWithHTMLFile_delegate(fixture(fixture), @delegate)
+
+ def @test_case.puts(message)
+ @printed_message = message
+ @finished = true
+ end
+
+ run_test_case!
+ @test_case.instance_variable_get(:@printed_message)
end
end
\ No newline at end of file