// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include <memory> #include "base/strings/stringprintf.h" #include "chrome/browser/extensions/extension_apitest.h" #include "content/public/test/browser_test.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" #include "extensions/test/test_extension_dir.h" namespace extensions { namespace { constexpr char kManifestStub[] = …; constexpr char kPersistentBackground[] = …; constexpr char kServiceWorkerBackground[] = …; // NOTE(devlin): When running tests using the chrome.tests.runTests API, it's // not possible to validate the failure message of individual sub-tests using // the ResultCatcher interface. This is because the test suite always fail with // an error message like `kExpectedFailureMessage` below without any // information about the failure of the individual sub-tests. If we expand this // suite significantly, we should investigate having more information available // on the C++ side, so that we can assert failures with more specificity. // TODO(devlin): Investigate using WebContentsConsoleObserver to watch for // specific errors / patterns. constexpr char kExpectedFailureMessage[] = …; } // namespace ContextType; class TestAPITest : public ExtensionApiTest { … }; const Extension* TestAPITest::LoadExtensionScriptWithContext( const char* background_script, ContextType context_type, int manifest_version = 2) { … } class TestAPITestWithContextType : public TestAPITest, public testing::WithParamInterface<ContextType> { … }; INSTANTIATE_TEST_SUITE_P(…); INSTANTIATE_TEST_SUITE_P(…); // TODO(devlin): This test name should be more descriptive. IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, ApiTest) { … } // Verifies that failing an assert in a promise will properly fail and end the // test. IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, FailedAssertsInPromises) { … } // Verifies that using await and assert'ing aspects of the results succeeds. IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AsyncAwaitAssertions_Succeed) { … } // Verifies that using await and having failed assertions properly fails the // test. IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AsyncAwaitAssertions_Failed) { … } IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AsyncExceptions) { … } // Exercises chrome.test.assertNe() in cases where the check should succeed // (that is, when the passed values are different). IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AssertNe_Success) { … } // Exercises chrome.test.assertNe() in failure cases (i.e., the passed values // are equal). We can only test one case at a time since otherwise we'd be // unable to determine which part of the test failed (since "failure" here is // a successful assertNe() check). IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AssertNe_Failure_Primitive) { … } // Exercises chrome.test.assertNe() in failure cases (i.e., the passed values // are equal). We can only test one case at a time since otherwise we'd be // unable to determine which part of the test failed (since "failure" here is // a successful assertNe() check). IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AssertNe_Failure_Object) { … } // Exercises chrome.test.assertNe() in failure cases (i.e., the passed values // are equal). We can only test one case at a time since otherwise we'd be // unable to determine which part of the test failed (since "failure" here is // a successful assertNe() check). IN_PROC_BROWSER_TEST_P(TestAPITestWithContextType, AssertNe_Failure_AdditionalErrorMessage) { … } // Verifies that chrome.test.assertPromiseRejects() succeeds using // promises that reject with the expected message. IN_PROC_BROWSER_TEST_F(TestAPITest, AssertPromiseRejects_Successful) { … } // Tests that chrome.test.assertPromiseRejects() properly fails the test when // the promise is rejected with an improper message. IN_PROC_BROWSER_TEST_F(TestAPITest, AssertPromiseRejects_WrongErrorMessage) { … } // Tests that chrome.test.assertPromiseRejects() properly fails the test when // the promise resolves instead of rejects. IN_PROC_BROWSER_TEST_F(TestAPITest, AssertPromiseRejects_PromiseResolved) { … } // Tests that finishing the test without waiting for the result of // chrome.test.assertPromiseRejects() properly fails the test. IN_PROC_BROWSER_TEST_F(TestAPITest, AssertPromiseRejects_PromiseIgnored) { … } // Tests that chrome.test.sendMessage() successfully sends a message to the C++ // side and can receive a response back using a promise. IN_PROC_BROWSER_TEST_F(TestAPITest, SendMessage_WithPromise) { … } // Tests that calling chrome.test.waitForRountTrip() eventually comes back with // the same message when using promises. Note: this does not verify that the // message actually passes through the renderer process, it just tests the // surface level from the Javascript side. IN_PROC_BROWSER_TEST_F(TestAPITest, WaitForRoundTrip_WithPromise) { … } } // namespace extensions