Index: content/renderer/cpp_bound_class_unittest.cc |
diff --git a/content/renderer/cpp_bound_class_unittest.cc b/content/renderer/cpp_bound_class_unittest.cc |
deleted file mode 100644 |
index 9504c6551c6eaf69df7ed7aa2ba7084544c4bf05..0000000000000000000000000000000000000000 |
--- a/content/renderer/cpp_bound_class_unittest.cc |
+++ /dev/null |
@@ -1,241 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-// Tests for CppBoundClass, in conjunction with CppBindingExample. Binds |
-// a CppBindingExample class into JavaScript in a custom test shell and tests |
-// the binding from the outside by loading JS into the shell. |
- |
-#include "base/strings/utf_string_conversions.h" |
-#include "content/public/common/url_constants.h" |
-#include "content/public/renderer/render_view_observer.h" |
-#include "content/public/test/render_view_test.h" |
-#include "content/test/cpp_binding_example.h" |
-#include "third_party/WebKit/public/platform/WebURLRequest.h" |
-#include "third_party/WebKit/public/web/WebDocument.h" |
-#include "third_party/WebKit/public/web/WebElement.h" |
- |
-using webkit_glue::CppArgumentList; |
-using webkit_glue::CppVariant; |
- |
-namespace content { |
- |
-namespace { |
- |
-class CppBindingExampleSubObject : public CppBindingExample { |
- public: |
- CppBindingExampleSubObject() { |
- sub_value_.Set("sub!"); |
- BindProperty("sub_value", &sub_value_); |
- } |
- private: |
- CppVariant sub_value_; |
-}; |
- |
- |
-class CppBindingExampleWithOptionalFallback : public CppBindingExample { |
- public: |
- CppBindingExampleWithOptionalFallback() { |
- BindProperty("sub_object", sub_object_.GetAsCppVariant()); |
- } |
- |
- void set_fallback_method_enabled(bool state) { |
- BindFallbackCallback(state ? |
- base::Bind(&CppBindingExampleWithOptionalFallback::fallbackMethod, |
- base::Unretained(this)) |
- : CppBoundClass::Callback()); |
- } |
- |
- // The fallback method does nothing, but because of it the JavaScript keeps |
- // running when a nonexistent method is called on an object. |
- void fallbackMethod(const CppArgumentList& args, CppVariant* result) { |
- } |
- |
- private: |
- CppBindingExampleSubObject sub_object_; |
-}; |
- |
-class TestObserver : public RenderViewObserver { |
- public: |
- explicit TestObserver(RenderView* render_view) |
- : RenderViewObserver(render_view) {} |
- virtual void DidClearWindowObject(blink::WebFrame* frame) OVERRIDE { |
- example_bound_class_.BindToJavascript(frame, "example"); |
- } |
- void set_fallback_method_enabled(bool use_fallback) { |
- example_bound_class_.set_fallback_method_enabled(use_fallback); |
- } |
- private: |
- CppBindingExampleWithOptionalFallback example_bound_class_; |
-}; |
- |
-} // namespace |
- |
-class CppBoundClassTest : public RenderViewTest { |
- public: |
- CppBoundClassTest() {} |
- |
- virtual void SetUp() OVERRIDE { |
- RenderViewTest::SetUp(); |
- observer_.reset(new TestObserver(view_)); |
- observer_->set_fallback_method_enabled(useFallback()); |
- |
- blink::WebURLRequest url_request; |
- url_request.initialize(); |
- url_request.setURL(GURL(kAboutBlankURL)); |
- |
- GetMainFrame()->loadRequest(url_request); |
- ProcessPendingMessages(); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- observer_.reset(); |
- RenderViewTest::TearDown(); |
- } |
- |
- // Executes the specified JavaScript and checks that the resulting document |
- // text is empty. |
- void CheckJavaScriptFailure(const std::string& javascript) { |
- ExecuteJavaScript(javascript.c_str()); |
- EXPECT_EQ( |
- "", |
- UTF16ToASCII(GetMainFrame()->document().documentElement().innerText())); |
- } |
- |
- void CheckTrue(const std::string& expression) { |
- int was_page_a = -1; |
- base::string16 check_page_a = |
- base::ASCIIToUTF16(std::string("Number(") + expression + ")"); |
- EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_a, &was_page_a)); |
- EXPECT_EQ(1, was_page_a); |
- } |
- |
- protected: |
- virtual bool useFallback() { |
- return false; |
- } |
- |
- private: |
- scoped_ptr<TestObserver> observer_; |
-}; |
- |
-class CppBoundClassWithFallbackMethodTest : public CppBoundClassTest { |
- protected: |
- virtual bool useFallback() OVERRIDE { |
- return true; |
- } |
-}; |
- |
-// Ensures that the example object has been bound to JS. |
-TEST_F(CppBoundClassTest, ObjectExists) { |
- CheckTrue("typeof window.example == 'object'"); |
- |
- // An additional check to test our test. |
- CheckTrue("typeof window.invalid_object == 'undefined'"); |
-} |
- |
-TEST_F(CppBoundClassTest, PropertiesAreInitialized) { |
- CheckTrue("example.my_value == 10"); |
- |
- CheckTrue("example.my_other_value == 'Reinitialized!'"); |
-} |
- |
-TEST_F(CppBoundClassTest, SubOject) { |
- CheckTrue("typeof window.example.sub_object == 'object'"); |
- |
- CheckTrue("example.sub_object.sub_value == 'sub!'"); |
-} |
- |
-TEST_F(CppBoundClassTest, SetAndGetProperties) { |
- // The property on the left will be set to the value on the right, then |
- // checked to make sure it holds that same value. |
- static const std::string tests[] = { |
- "example.my_value", "7", |
- "example.my_value", "'test'", |
- "example.my_other_value", "3.14", |
- "example.my_other_value", "false", |
- "" // Array end marker: insert additional test pairs before this. |
- }; |
- |
- for (int i = 0; tests[i] != ""; i += 2) { |
- std::string left = tests[i]; |
- std::string right = tests[i + 1]; |
- // left = right; |
- std::string js = left; |
- js.append(" = "); |
- js.append(right); |
- js.append(";"); |
- ExecuteJavaScript(js.c_str()); |
- std::string expression = left; |
- expression += " == "; |
- expression += right; |
- CheckTrue(expression); |
- } |
-} |
- |
-TEST_F(CppBoundClassTest, SetAndGetPropertiesWithCallbacks) { |
- // TODO(dglazkov): fix NPObject issues around failing property setters and |
- // getters and add tests for situations when GetProperty or SetProperty fail. |
- ExecuteJavaScript("example.my_value_with_callback = 10;"); |
- CheckTrue("example.my_value_with_callback == 10"); |
- |
- ExecuteJavaScript("example.my_value_with_callback = 11;"); |
- CheckTrue("example.my_value_with_callback == 11"); |
- |
- CheckTrue("example.same == 42"); |
- |
- ExecuteJavaScript("example.same = 24;"); |
- CheckTrue("example.same == 42"); |
-} |
- |
-TEST_F(CppBoundClassTest, InvokeMethods) { |
- // The expression on the left is expected to return the value on the right. |
- static const std::string tests[] = { |
- "example.echoValue(true) == true", |
- "example.echoValue(13) == 13", |
- "example.echoValue(2.718) == 2.718", |
- "example.echoValue('yes') == 'yes'", |
- "example.echoValue() == null", // Too few arguments |
- |
- "example.echoType(false) == true", |
- "example.echoType(19) == 3.14159", |
- "example.echoType(9.876) == 3.14159", |
- "example.echoType('test string') == 'Success!'", |
- "example.echoType() == null", // Too few arguments |
- |
- // Comparing floats that aren't integer-valued is usually problematic due |
- // to rounding, but exact powers of 2 should also be safe. |
- "example.plus(2.5, 18.0) == 20.5", |
- "example.plus(2, 3.25) == 5.25", |
- "example.plus(2, 3) == 5", |
- "example.plus() == null", // Too few arguments |
- "example.plus(1) == null", // Too few arguments |
- "example.plus(1, 'test') == null", // Wrong argument type |
- "example.plus('test', 2) == null", // Wrong argument type |
- "example.plus('one', 'two') == null", // Wrong argument type |
- "" // Array end marker: insert additional test pairs before this. |
- }; |
- |
- for (int i = 0; tests[i] != ""; i++) |
- CheckTrue(tests[i]); |
- |
- ExecuteJavaScript("example.my_value = 3.25; example.my_other_value = 1.25;"); |
- CheckTrue("example.plus(example.my_value, example.my_other_value) == 4.5"); |
-} |
- |
-// Tests that invoking a nonexistent method with no fallback method stops the |
-// script's execution |
-TEST_F(CppBoundClassTest, |
- InvokeNonexistentMethodNoFallback) { |
- std::string js = "example.nonExistentMethod();document.writeln('SUCCESS');"; |
- CheckJavaScriptFailure(js); |
-} |
- |
-// Ensures existent methods can be invoked successfully when the fallback method |
-// is used |
-TEST_F(CppBoundClassWithFallbackMethodTest, |
- InvokeExistentMethodsWithFallback) { |
- CheckTrue("example.echoValue(34) == 34"); |
-} |
- |
-} // namespace content |