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