From cc74875e4baee2879dbb6d13e018925dc34f1b0d Mon Sep 17 00:00:00 2001 From: Joe Ferris Date: Thu, 5 May 2011 17:45:44 -0400 Subject: [PATCH] Created a Response object for the success/message pair --- Rakefile | 6 +++--- lib/capybara_webkit_builder.rb | 6 +++--- src/Command.h | 3 ++- src/Connection.cpp | 28 +++++++++++++++------------- src/Connection.h | 5 +++-- src/Evaluate.cpp | 2 +- src/Execute.cpp | 6 ++---- src/Find.cpp | 9 ++++----- src/FrameFocus.cpp | 9 +++------ src/Node.cpp | 2 +- src/Reset.cpp | 3 +-- src/Response.cpp | 19 +++++++++++++++++++ src/Response.h | 13 +++++++++++++ src/Source.cpp | 5 ++--- src/Url.cpp | 5 ++--- src/Visit.cpp | 6 +++--- src/webkit_server.pro | 4 ++-- 17 files changed, 79 insertions(+), 52 deletions(-) create mode 100644 src/Response.cpp create mode 100644 src/Response.h diff --git a/Rakefile b/Rakefile index 540b9b0..3a41c5f 100644 --- a/Rakefile +++ b/Rakefile @@ -6,17 +6,17 @@ require 'capybara_webkit_builder' desc "Generate a Makefile using qmake" file 'Makefile' do - CapybaraWebkitBuilder.makefile + CapybaraWebkitBuilder.makefile or exit(1) end desc "Regenerate dependencies using qmake" task :qmake => 'Makefile' do - CapybaraWebkitBuilder.qmake + CapybaraWebkitBuilder.qmake or exit(1) end desc "Build the webkit server" task :build => :qmake do - CapybaraWebkitBuilder.build + CapybaraWebkitBuilder.build or exit(1) end file 'bin/webkit_server' => :build diff --git a/lib/capybara_webkit_builder.rb b/lib/capybara_webkit_builder.rb index 4247fe1..301e825 100644 --- a/lib/capybara_webkit_builder.rb +++ b/lib/capybara_webkit_builder.rb @@ -12,7 +12,7 @@ module CapybaraWebkitBuilder end def build - system("make") + system("make") or return false FileUtils.mkdir("bin") unless File.directory?("bin") @@ -24,8 +24,8 @@ module CapybaraWebkitBuilder end def build_all - makefile - qmake + makefile && + qmake && build end end diff --git a/src/Command.h b/src/Command.h index da166c5..3db21f6 100644 --- a/src/Command.h +++ b/src/Command.h @@ -3,6 +3,7 @@ #include #include +#include "Response.h" class WebPage; @@ -14,7 +15,7 @@ class Command : public QObject { virtual void start(QStringList &arguments); signals: - void finished(bool success, QString &response); + void finished(Response *response); protected: WebPage *page(); diff --git a/src/Connection.cpp b/src/Connection.cpp index a770069..a729a8d 100644 --- a/src/Connection.cpp +++ b/src/Connection.cpp @@ -85,13 +85,13 @@ void Connection::startCommand() { m_command = createCommand(m_commandName.toAscii().constData()); if (m_command) { connect(m_command, - SIGNAL(finished(bool, QString &)), + SIGNAL(finished(Response *)), this, - SLOT(finishCommand(bool, QString &))); + SLOT(finishCommand(Response *))); m_command->start(m_arguments); } else { QString failure = QString("Unknown command: ") + m_commandName + "\n"; - writeResponse(false, failure); + writeResponse(new Response(false, failure)); } m_commandName = QString(); } @@ -106,27 +106,29 @@ void Connection::pendingLoadFinished(bool success) { if (success) { startCommand(); } else { - QString response = m_page->failureString(); - writeResponse(false, response); + QString message = m_page->failureString(); + writeResponse(new Response(false, message)); } } -void Connection::finishCommand(bool success, QString &response) { +void Connection::finishCommand(Response *response) { m_command->deleteLater(); m_command = NULL; - writeResponse(success, response); + writeResponse(response); } -void Connection::writeResponse(bool success, QString &response) { - if (success) +void Connection::writeResponse(Response *response) { + if (response->isSuccess()) m_socket->write("ok\n"); else m_socket->write("failure\n"); - QByteArray response_utf8 = response.toUtf8(); - QString responseLength = QString::number(response_utf8.size()) + "\n"; - m_socket->write(responseLength.toAscii()); - m_socket->write(response_utf8); + QByteArray messageUtf8 = response->message().toUtf8(); + QString messageLength = QString::number(messageUtf8.size()) + "\n"; + m_socket->write(messageLength.toAscii()); + m_socket->write(messageUtf8); + delete response; + m_arguments.clear(); m_commandName = QString(); m_argumentsExpected = -1; diff --git a/src/Connection.h b/src/Connection.h index e0a1da5..ceebeea 100644 --- a/src/Connection.h +++ b/src/Connection.h @@ -4,6 +4,7 @@ class QTcpSocket; class WebPage; class Command; +class Response; class Connection : public QObject { Q_OBJECT @@ -13,7 +14,7 @@ class Connection : public QObject { public slots: void checkNext(); - void finishCommand(bool success, QString &response); + void finishCommand(Response *response); void pendingLoadFinished(bool success); private: @@ -23,7 +24,7 @@ class Connection : public QObject { Command *createCommand(const char *name); void processArgument(const char *line); void startCommand(); - void writeResponse(bool success, QString &response); + void writeResponse(Response *response); QTcpSocket *m_socket; QString m_commandName; diff --git a/src/Evaluate.cpp b/src/Evaluate.cpp index 695dabc..a8cb751 100644 --- a/src/Evaluate.cpp +++ b/src/Evaluate.cpp @@ -9,7 +9,7 @@ Evaluate::Evaluate(WebPage *page, QObject *parent) : Command(page, parent) { void Evaluate::start(QStringList &arguments) { QVariant result = page()->currentFrame()->evaluateJavaScript(arguments[0]); addVariant(result); - emit finished(true, m_buffer); + emit finished(new Response(true, m_buffer)); } void Evaluate::addVariant(QVariant &object) { diff --git a/src/Execute.cpp b/src/Execute.cpp index 3a5410e..f21f7c2 100644 --- a/src/Execute.cpp +++ b/src/Execute.cpp @@ -7,12 +7,10 @@ Execute::Execute(WebPage *page, QObject *parent) : Command(page, parent) { void Execute::start(QStringList &arguments) { QString script = arguments[0] + QString("; 'success'"); QVariant result = page()->currentFrame()->evaluateJavaScript(script); - QString response; if (result.isValid()) { - emit finished(true, response); + emit finished(new Response(true)); } else { - response = "Javascript failed to execute"; - emit finished(false, response); + emit finished(new Response(false, "Javascript failed to execute")); } } diff --git a/src/Find.cpp b/src/Find.cpp index da55f75..1ed7f2a 100644 --- a/src/Find.cpp +++ b/src/Find.cpp @@ -6,15 +6,14 @@ Find::Find(WebPage *page, QObject *parent) : Command(page, parent) { } void Find::start(QStringList &arguments) { - QString response; + QString message; QVariant result = page()->invokeCapybaraFunction("find", arguments); if (result.isValid()) { - response = result.toString(); - emit finished(true, response); + message = result.toString(); + emit finished(new Response(true, message)); } else { - response = "Invalid XPath expression"; - emit finished(false, response); + emit finished(new Response(false, "Invalid XPath expression")); } } diff --git a/src/FrameFocus.cpp b/src/FrameFocus.cpp index af8bf30..f120520 100644 --- a/src/FrameFocus.cpp +++ b/src/FrameFocus.cpp @@ -50,8 +50,7 @@ void FrameFocus::focusId(QString name) { void FrameFocus::focusParent() { if (page()->currentFrame()->parentFrame() == 0) { - QString response = "Already at parent frame."; - emit finished(false, response); + emit finished(new Response(false, "Already at parent frame.")); } else { page()->currentFrame()->parentFrame()->setFocus(); success(); @@ -59,11 +58,9 @@ void FrameFocus::focusParent() { } void FrameFocus::frameNotFound() { - QString response = "Unable to locate frame. "; - emit finished(false, response); + emit finished(new Response(false, "Unable to locate frame. ")); } void FrameFocus::success() { - QString response; - emit finished(true, response); + emit finished(new Response(true)); } diff --git a/src/Node.cpp b/src/Node.cpp index e327655..54bad1c 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -9,6 +9,6 @@ void Node::start(QStringList &arguments) { QString functionName = functionArguments.takeFirst(); QVariant result = page()->invokeCapybaraFunction(functionName, functionArguments); QString attributeValue = result.toString(); - emit finished(true, attributeValue); + emit finished(new Response(true, attributeValue)); } diff --git a/src/Reset.cpp b/src/Reset.cpp index 5759074..f1b4f97 100644 --- a/src/Reset.cpp +++ b/src/Reset.cpp @@ -10,7 +10,6 @@ void Reset::start(QStringList &arguments) { page()->triggerAction(QWebPage::Stop); page()->currentFrame()->setHtml(""); page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar()); - QString response = ""; - emit finished(true, response); + emit finished(new Response(true)); } diff --git a/src/Response.cpp b/src/Response.cpp new file mode 100644 index 0000000..39c0956 --- /dev/null +++ b/src/Response.cpp @@ -0,0 +1,19 @@ +#include "Response.h" +#include + +Response::Response(bool success, QString message) { + m_success = success; + m_message = message; +} + +Response::Response(bool success) { + Response(success, QString()); +} + +bool Response::isSuccess() const { + return m_success; +} + +QString Response::message() const { + return m_message; +} diff --git a/src/Response.h b/src/Response.h new file mode 100644 index 0000000..0b636c7 --- /dev/null +++ b/src/Response.h @@ -0,0 +1,13 @@ +#include + +class Response { + public: + Response(bool success, QString message); + Response(bool success); + bool isSuccess() const; + QString message() const; + + private: + bool m_success; + QString m_message; +}; diff --git a/src/Source.cpp b/src/Source.cpp index c548923..0fe8c0b 100644 --- a/src/Source.cpp +++ b/src/Source.cpp @@ -7,8 +7,7 @@ Source::Source(WebPage *page, QObject *parent) : Command(page, parent) { void Source::start(QStringList &arguments) { Q_UNUSED(arguments) - QString response = page()->currentFrame()->toHtml(); - - emit finished(true, response); + QString result = page()->currentFrame()->toHtml(); + emit finished(new Response(true, result)); } diff --git a/src/Url.cpp b/src/Url.cpp index 0a5b451..d326568 100644 --- a/src/Url.cpp +++ b/src/Url.cpp @@ -9,8 +9,7 @@ void Url::start(QStringList &argments) { QUrl humanUrl = page()->currentFrame()->url(); QByteArray encodedBytes = humanUrl.toEncoded(); - QString response = QString(encodedBytes); - - emit finished(true, response); + QString urlString = QString(encodedBytes); + emit finished(new Response(true, urlString)); } diff --git a/src/Visit.cpp b/src/Visit.cpp index 9214211..e592e9e 100644 --- a/src/Visit.cpp +++ b/src/Visit.cpp @@ -11,10 +11,10 @@ void Visit::start(QStringList &arguments) { } void Visit::loadFinished(bool success) { - QString response; + QString message; if (!success) - response = page()->failureString(); + message = page()->failureString(); - emit finished(success, response); + emit finished(new Response(success, message)); } diff --git a/src/webkit_server.pro b/src/webkit_server.pro index 1a72cae..26467dc 100644 --- a/src/webkit_server.pro +++ b/src/webkit_server.pro @@ -1,8 +1,8 @@ TEMPLATE = app TARGET = webkit_server DESTDIR = . -HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h -SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp +HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h Response.h +SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp Response.cpp RESOURCES = webkit_server.qrc QT += network webkit CONFIG += console