Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: chrome/renderer/extensions/extension_api_client_unittest.cc

Issue 1527015: Support PNG and quality control in chrome.tabs.captureVisibleTab(). (Closed)
Patch Set: Rebase for checkin. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/docs/tabs.html ('k') | chrome/renderer/resources/extension_process_bindings.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/extension_api_client_unittest.cc
diff --git a/chrome/renderer/extensions/extension_api_client_unittest.cc b/chrome/renderer/extensions/extension_api_client_unittest.cc
index 111c9910b706a3a09260a5d1b5d765226f6d2921..87c2505c418f12a6d9bef765d5c3ced02fd1897a 100644
--- a/chrome/renderer/extensions/extension_api_client_unittest.cc
+++ b/chrome/renderer/extensions/extension_api_client_unittest.cc
@@ -1,9 +1,10 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/file_util.h"
#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
#include "base/path_service.h"
#include "base/string_util.h"
#include "chrome/common/chrome_paths.h"
@@ -13,6 +14,19 @@
#include "chrome/test/render_view_test.h"
#include "testing/gtest/include/gtest/gtest.h"
+// Make failures easier to locate by using SCOPED_TRACE() to print out the line
+// number of a failing call to ExtensionAPIClientTest::ExpectJs(Pass|Fail) .
+// Sadly, a #define is the only reasonable way to get the line number.
+#define ExpectJsFail(js, expected_failure_message) { \
+ SCOPED_TRACE(js); \
+ ExpectJsFailInternal(js, expected_failure_message); \
+}
+
+#define ExpectJsPass(js, function, arg1) { \
+ SCOPED_TRACE(js); \
+ ExpectJsPassInternal(js, function, arg1); \
+}
+
class ExtensionAPIClientTest : public RenderViewTest {
protected:
virtual void SetUp() {
@@ -36,15 +50,17 @@ class ExtensionAPIClientTest : public RenderViewTest {
}
}
- void ExpectJsFail(const std::string& js, const std::string& message) {
+ // Don't call this directly. Use the macro ExpectJsFail.
+ void ExpectJsFailInternal(const std::string& js, const std::string& message) {
ExecuteJavaScript(js.c_str());
EXPECT_EQ(message, GetConsoleMessage());
render_thread_.sink().ClearMessages();
}
- void ExpectJsPass(const std::string& js,
- const std::string& function,
- const std::string& arg1) {
+ // Don't call this directly. Use the macro ExpectJsPass.
+ void ExpectJsPassInternal(const std::string& js,
+ const std::string& function,
+ const std::string& arg1) {
ExecuteJavaScript(js.c_str());
const IPC::Message* request_msg =
render_thread_.sink().GetUniqueMessageMatching(
@@ -61,7 +77,16 @@ class ExtensionAPIClientTest : public RenderViewTest {
base::JSONReader reader;
scoped_ptr<Value> arg1_value(reader.JsonToValue(arg1, false, false));
- ASSERT_TRUE(args->Equals(arg1_value.get())) << js;
+ ASSERT_TRUE(arg1_value.get())
+ << "Failed to parse expected result as JSON: " << arg1;
+
+ std::string args_as_string;
+ base::JSONWriter::Write(args, false, &args_as_string);
+
+ ASSERT_TRUE(args->Equals(arg1_value.get()))
+ << js
+ << "\n Expected "<< arg1
+ << "\n Actual: "<< args_as_string;
render_thread_.sink().ClearMessages();
}
};
@@ -437,14 +462,67 @@ TEST_F(ExtensionAPIClientTest, RemoveTab) {
TEST_F(ExtensionAPIClientTest, CaptureVisibleTab) {
ExpectJsFail("chrome.tabs.captureVisibleTab(0);",
- "Uncaught Error: Parameter 1 is required.");
+ "Uncaught Error: Parameter 2 is required.");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab(0, null);",
+ "Uncaught Error: Parameter 2 is required.");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab(null, {});",
+ "Uncaught Error: Parameter 2 is required.");
ExpectJsFail("chrome.tabs.captureVisibleTab(function(){}, 0)",
"Uncaught Error: Invalid value for argument 0. "
"Expected 'integer' but got 'function'.");
- ExpectJsPass("chrome.tabs.captureVisibleTab(null, function(img){});",
- "tabs.captureVisibleTab", "null");
+ // Use old signiture. Check that a null value of the options paramenter
+ // is added.
+ ExpectJsPass("chrome.tabs.captureVisibleTab(null, function(img){});",
+ "tabs.captureVisibleTab", "[null, null]");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab(1, function(img){});",
+ "tabs.captureVisibleTab", "[1, null]");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab(null, null, function(img){});",
+ "tabs.captureVisibleTab", "[null, null]");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab("
+ "null, undefined, function(img){});",
+ "tabs.captureVisibleTab", "[null, null]");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab(null, {}, function(img){});",
+ "tabs.captureVisibleTab", "[null, {}]");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab(null, 42, function(img){});",
+ "Uncaught Error: Invalid value for argument 1. "
+ "Expected 'object' but got 'integer'.");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab("
+ "null, {\"format\": \"jpeg\"}, function(img){});",
+ "tabs.captureVisibleTab", "[null, {\"format\": \"jpeg\"}]");
+
+ ExpectJsPass("chrome.tabs.captureVisibleTab("
+ "null, {\"quality\": 100}, function(img){});",
+ "tabs.captureVisibleTab", "[null, {\"quality\": 100}]");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab("
+ "null, {\"quality\": 101}, function(img){});",
+ "Uncaught Error: Invalid value for argument 1. "
+ "Property 'quality': Value must not be greater than 100.");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab("
+ "null, {'not_a_param': 'jpeg'}, function(img){});",
+ "Uncaught Error: Invalid value for argument 1. "
+ "Property 'not_a_param': Unexpected property.");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab("
+ "null, {'format': 'invalid'}, function(img){});",
+ "Uncaught Error: Invalid value for argument 1. "
+ "Property 'format': Value must be one of: [jpeg, png].");
+
+ ExpectJsFail("chrome.tabs.captureVisibleTab("
+ "null, {'format': 42}, function(img){});",
+ "Uncaught Error: Invalid value for argument 1. "
+ "Property 'format': Value must be one of: [jpeg, png].");
}
// Bookmark API tests
« no previous file with comments | « chrome/common/extensions/docs/tabs.html ('k') | chrome/renderer/resources/extension_process_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698