1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/signin/ios/browser/wait_for_network_callback_helper.h"
6 
7 #include <memory>
8 
9 #include "base/bind.h"
10 #include "base/run_loop.h"
11 #include "base/test/task_environment.h"
12 #include "net/base/mock_network_change_notifier.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 
15 // A test fixture to test WaitForNetworkCallbackHelper.
16 class WaitForNetworkCallbackHelperTest : public testing::Test {
17  public:
CallbackFunction()18   void CallbackFunction() { num_callbacks_invoked_++; }
19 
20  protected:
WaitForNetworkCallbackHelperTest()21   WaitForNetworkCallbackHelperTest() : num_callbacks_invoked_(0) {}
22 
23   int num_callbacks_invoked_;
24   base::test::TaskEnvironment task_environment_;
25   std::unique_ptr<net::test::MockNetworkChangeNotifier>
26       network_change_notifier_ = net::test::MockNetworkChangeNotifier::Create();
27   WaitForNetworkCallbackHelper callback_helper_;
28 };
29 
TEST_F(WaitForNetworkCallbackHelperTest,CallbackInvokedImmediately)30 TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedImmediately) {
31   network_change_notifier_->SetConnectionType(
32       net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
33   callback_helper_.HandleCallback(
34       base::BindOnce(&WaitForNetworkCallbackHelperTest::CallbackFunction,
35                      base::Unretained(this)));
36   EXPECT_EQ(1, num_callbacks_invoked_);
37 }
38 
TEST_F(WaitForNetworkCallbackHelperTest,CallbackInvokedLater)39 TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedLater) {
40   network_change_notifier_->SetConnectionType(
41       net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE);
42   callback_helper_.HandleCallback(
43       base::BindOnce(&WaitForNetworkCallbackHelperTest::CallbackFunction,
44                      base::Unretained(this)));
45   callback_helper_.HandleCallback(
46       base::BindOnce(&WaitForNetworkCallbackHelperTest::CallbackFunction,
47                      base::Unretained(this)));
48   EXPECT_EQ(0, num_callbacks_invoked_);
49 
50   network_change_notifier_->SetConnectionType(
51       net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
52   network_change_notifier_->NotifyObserversOfConnectionTypeChangeForTests(
53       net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
54   task_environment_.RunUntilIdle();
55   EXPECT_EQ(2, num_callbacks_invoked_);
56 }
57