From ea2f785ba868c5c4dc871e5aff6a4b222731b380 Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Sun, 18 Nov 2012 02:48:24 -0500 Subject: [PATCH] Implement HTML5 multiple file upload --- lib/capybara/webkit/node.rb | 2 +- src/WebPage.cpp | 9 ++++----- src/WebPage.h | 2 +- src/capybara.js | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/capybara/webkit/node.rb b/lib/capybara/webkit/node.rb index ce895c4..acbd8c1 100644 --- a/lib/capybara/webkit/node.rb +++ b/lib/capybara/webkit/node.rb @@ -33,7 +33,7 @@ module Capybara::Webkit end def set(value) - invoke "set", value + invoke "set", *[value].flatten end def select_option diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 27eb1c3..05c3f7d 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -221,13 +221,12 @@ QString WebPage::chooseFile(QWebFrame *parentFrame, const QString &suggestedFile Q_UNUSED(parentFrame); Q_UNUSED(suggestedFile); - return getLastAttachedFileName(); + return getAttachedFileNames().first(); } bool WebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) { if (extension == ChooseMultipleFilesExtension) { - QStringList names = QStringList() << getLastAttachedFileName(); - static_cast(output)->fileNames = names; + static_cast(output)->fileNames = getAttachedFileNames(); return true; } else if (extension == QWebPage::ErrorPageExtension) { @@ -239,8 +238,8 @@ bool WebPage::extension(Extension extension, const ExtensionOption *option, Exte return false; } -QString WebPage::getLastAttachedFileName() { - return currentFrame()->evaluateJavaScript(QString("Capybara.lastAttachedFile")).toString(); +QStringList WebPage::getAttachedFileNames() { + return currentFrame()->evaluateJavaScript(QString("Capybara.attachedFiles")).toStringList(); } void WebPage::handleSslErrorsForReply(QNetworkReply *reply, const QList &errors) { diff --git a/src/WebPage.h b/src/WebPage.h index 194f75e..839a051 100644 --- a/src/WebPage.h +++ b/src/WebPage.h @@ -66,7 +66,7 @@ class WebPage : public QWebPage { QString m_userAgent; bool m_loading; bool m_failed; - QString getLastAttachedFileName(); + QStringList getAttachedFileNames(); void loadJavascript(); void setUserStylesheet(); bool m_confirm; diff --git a/src/capybara.js b/src/capybara.js index 8402961..6462399 100644 --- a/src/capybara.js +++ b/src/capybara.js @@ -1,7 +1,7 @@ Capybara = { nextIndex: 0, nodes: {}, - lastAttachedFile: "", + attachedFiles: [], invoke: function () { return this[CapybaraInvocation.functionName].apply(this, CapybaraInvocation.arguments); @@ -260,7 +260,7 @@ Capybara = { } } else if (type === "file") { - this.lastAttachedFile = value; + this.attachedFiles = Array.prototype.slice.call(arguments, 1); this.click(index); } else {