From 40a8bec85422b7d8c7f8ee2ce6a169150cc76e70 Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Wed, 14 Nov 2012 22:37:39 -0500 Subject: [PATCH] Escape multi-line console messages Fixes #411 --- lib/capybara/webkit/browser.rb | 2 +- spec/driver_spec.rb | 9 +++++++-- src/WebPage.cpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/capybara/webkit/browser.rb b/lib/capybara/webkit/browser.rb index 3adbef2..3d8a8bf 100644 --- a/lib/capybara/webkit/browser.rb +++ b/lib/capybara/webkit/browser.rb @@ -45,7 +45,7 @@ module Capybara::Webkit def console_messages command("ConsoleMessages").split("\n").map do |messages| parts = messages.split("|", 3) - { :source => parts.first, :line_number => Integer(parts[1]), :message => parts.last } + { :source => parts.first, :line_number => Integer(parts[1]), :message => parts.last.gsub("\\n", "\n") } end end diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index c6f2477..225bd59 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -425,6 +425,7 @@ describe Capybara::Webkit::Driver do @@ -440,18 +441,22 @@ describe Capybara::Webkit::Driver do message.should include :source => url, :message => "hello" # QtWebKit returns different line numbers depending on the version [5, 6].should include(message[:line_number]) - driver.console_messages.length.should eq 3 + driver.console_messages.length.should eq 4 end it "logs errors to the console" do driver.error_messages.length.should eq 1 end + it "supports multi-line console messages" do + message = driver.console_messages[2] + message[:message].should == "hello\nnewline" + end + it "empties the array when reset" do driver.reset! driver.console_messages.should be_empty end - end context "javascript dialog interaction" do diff --git a/src/WebPage.cpp b/src/WebPage.cpp index de15ff2..105189a 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -134,7 +134,7 @@ QVariant WebPage::invokeCapybaraFunction(QString &name, const QStringList &argum } void WebPage::javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID) { - QString fullMessage = QString::number(lineNumber) + "|" + message; + QString fullMessage = QString::number(lineNumber) + "|" + QString(message).replace("\n", "\\n");; if (!sourceID.isEmpty()) fullMessage = sourceID + "|" + fullMessage; m_consoleMessages.append(fullMessage);