| Index: net/proxy/proxy_resolver_error_observer_mojo_unittest.cc
|
| diff --git a/net/proxy/proxy_resolver_error_observer_mojo_unittest.cc b/net/proxy/proxy_resolver_error_observer_mojo_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d28bd059678c0c898929d44b3f13901e3671cf7d
|
| --- /dev/null
|
| +++ b/net/proxy/proxy_resolver_error_observer_mojo_unittest.cc
|
| @@ -0,0 +1,103 @@
|
| +// Copyright 2015 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 "net/proxy/proxy_resolver_error_observer_mojo.h"
|
| +
|
| +#include <utility>
|
| +#include <vector>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "base/threading/thread.h"
|
| +#include "mojo/common/common_type_converters.h"
|
| +#include "net/test/event_waiter.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace net {
|
| +namespace {
|
| +
|
| +class ErrorObserverClient : public interfaces::ProxyResolverErrorObserver {
|
| + public:
|
| + enum Event {
|
| + ERROR_RECEIVED,
|
| + };
|
| +
|
| + explicit ErrorObserverClient(
|
| + mojo::InterfaceRequest<interfaces::ProxyResolverErrorObserver> request);
|
| +
|
| + EventWaiter<Event>& event_waiter() { return event_waiter_; }
|
| + const std::vector<std::pair<int, base::string16>>& errors() const {
|
| + return errors_;
|
| + }
|
| +
|
| + private:
|
| + void OnPacScriptError(int32_t line_number,
|
| + const mojo::String& error) override;
|
| +
|
| + mojo::Binding<interfaces::ProxyResolverErrorObserver> binding_;
|
| + EventWaiter<Event> event_waiter_;
|
| + std::vector<std::pair<int, base::string16>> errors_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ErrorObserverClient);
|
| +};
|
| +
|
| +ErrorObserverClient::ErrorObserverClient(
|
| + mojo::InterfaceRequest<interfaces::ProxyResolverErrorObserver> request)
|
| + : binding_(this, request.Pass()) {
|
| +}
|
| +
|
| +void ErrorObserverClient::OnPacScriptError(int32_t line_number,
|
| + const mojo::String& error) {
|
| + errors_.push_back(std::make_pair(line_number, error.To<base::string16>()));
|
| + event_waiter_.NotifyEvent(ERROR_RECEIVED);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class ProxyResolverErrorObserverMojoTest : public testing::Test {
|
| + public:
|
| + ProxyResolverErrorObserver& error_observer() { return *error_observer_; }
|
| + ErrorObserverClient& client() { return *client_; }
|
| +
|
| + private:
|
| + void SetUp() override {
|
| + interfaces::ProxyResolverErrorObserverPtr error_observer_ptr;
|
| + client_.reset(new ErrorObserverClient(mojo::GetProxy(&error_observer_ptr)));
|
| + error_observer_ =
|
| + ProxyResolverErrorObserverMojo::Create(error_observer_ptr.Pass());
|
| + ASSERT_TRUE(error_observer_);
|
| + }
|
| +
|
| + scoped_ptr<ErrorObserverClient> client_;
|
| + scoped_ptr<ProxyResolverErrorObserver> error_observer_;
|
| +};
|
| +
|
| +TEST_F(ProxyResolverErrorObserverMojoTest, NullHandle) {
|
| + EXPECT_FALSE(ProxyResolverErrorObserverMojo::Create(
|
| + interfaces::ProxyResolverErrorObserverPtr()));
|
| +}
|
| +
|
| +TEST_F(ProxyResolverErrorObserverMojoTest, ErrorReportedOnMainThread) {
|
| + base::string16 error(base::ASCIIToUTF16("error message"));
|
| + error_observer().OnPACScriptError(123, error);
|
| + client().event_waiter().WaitForEvent(ErrorObserverClient::ERROR_RECEIVED);
|
| + ASSERT_EQ(1u, client().errors().size());
|
| + EXPECT_EQ(123, client().errors()[0].first);
|
| + EXPECT_EQ(error, client().errors()[0].second);
|
| +}
|
| +
|
| +TEST_F(ProxyResolverErrorObserverMojoTest, ErrorReportedOnAnotherThread) {
|
| + base::Thread other_thread("error reporting thread");
|
| + base::string16 error(base::ASCIIToUTF16("error message"));
|
| + other_thread.Start();
|
| + other_thread.message_loop()->PostTask(
|
| + FROM_HERE, base::Bind(&ProxyResolverErrorObserver::OnPACScriptError,
|
| + base::Unretained(&error_observer()), 123, error));
|
| + client().event_waiter().WaitForEvent(ErrorObserverClient::ERROR_RECEIVED);
|
| + ASSERT_EQ(1u, client().errors().size());
|
| + EXPECT_EQ(123, client().errors()[0].first);
|
| + EXPECT_EQ(error, client().errors()[0].second);
|
| +}
|
| +
|
| +} // namespace net
|
|
|