Escape multi-line console messages

Fixes #411
This commit is contained in:
Matthew Horan 2012-11-14 22:37:39 -05:00
parent c155b37adb
commit 40a8bec854
3 changed files with 9 additions and 4 deletions

View File

@ -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

View File

@ -425,6 +425,7 @@ describe Capybara::Webkit::Driver do
<script type="text/javascript">
console.log("hello");
console.log("hello again");
console.log("hello\\nnewline");
oops
</script>
</body>
@ -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

View File

@ -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);