Index: chromeos/network/network_state_handler_unittest.cc |
diff --git a/chromeos/network/network_state_handler_unittest.cc b/chromeos/network/network_state_handler_unittest.cc |
index e6c467c07b8a882bb6828566f816e73655e6668f..ecd130d5e8112e5916154c9da75e7e1e95560312 100644 |
--- a/chromeos/network/network_state_handler_unittest.cc |
+++ b/chromeos/network/network_state_handler_unittest.cc |
@@ -6,6 +6,7 @@ |
#include <stddef.h> |
+#include <algorithm> |
#include <map> |
#include <memory> |
#include <set> |
@@ -33,6 +34,8 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
+namespace chromeos { |
+ |
namespace { |
void ErrorCallbackFunction(const std::string& error_name, |
@@ -199,9 +202,33 @@ class TestObserver : public chromeos::NetworkStateHandlerObserver { |
DISALLOW_COPY_AND_ASSIGN(TestObserver); |
}; |
-} // namespace |
+class TestTetherNetworkListSorter |
+ : public NetworkStateHandler::TetherNetworkListSorter { |
+ public: |
+ TestTetherNetworkListSorter() {} |
+ ~TestTetherNetworkListSorter() {} |
+ |
+ // NetworkStateHandler::TetherNetworkListSorter: |
+ void SortTetherNetworkList( |
+ NetworkStateHandler::ManagedStateList* tether_networks) const override { |
+ std::sort(tether_networks->begin(), tether_networks->end(), |
+ [](const std::unique_ptr<ManagedState>& first, |
+ const std::unique_ptr<ManagedState>& second) { |
+ const NetworkState* first_network = |
+ static_cast<const NetworkState*>(first.get()); |
+ const NetworkState* second_network = |
+ static_cast<const NetworkState*>(second.get()); |
+ |
+ // Sort by reverse-alphabetical order of GUIDs. |
+ return first_network->guid() >= second_network->guid(); |
+ }); |
+ } |
-namespace chromeos { |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TestTetherNetworkListSorter); |
+}; |
+ |
+} // namespace |
class NetworkStateHandlerTest : public testing::Test { |
public: |
@@ -463,6 +490,55 @@ TEST_F(NetworkStateHandlerTest, GetTetherNetworkList) { |
EXPECT_EQ(1u, tether_networks.size()); |
} |
+TEST_F(NetworkStateHandlerTest, SortTetherNetworkList) { |
+ network_state_handler_->SetTetherTechnologyState( |
+ NetworkStateHandler::TECHNOLOGY_ENABLED); |
+ |
+ TestTetherNetworkListSorter sorter; |
+ network_state_handler_->SetTetherNetworkListSorter(&sorter); |
+ |
+ network_state_handler_->AddTetherNetworkState( |
+ kTetherGuid1, kTetherName1, kTetherCarrier1, kTetherBatteryPercentage1, |
+ kTetherSignalStrength1, kTetherHasConnectedToHost1); |
+ network_state_handler_->AddTetherNetworkState( |
+ kTetherGuid2, kTetherName2, kTetherCarrier2, kTetherBatteryPercentage2, |
+ kTetherSignalStrength2, kTetherHasConnectedToHost2); |
+ |
+ // Note: GetVisibleNetworkListByType() sorts before outputting networks. |
+ NetworkStateHandler::NetworkStateList tether_networks; |
+ network_state_handler_->GetVisibleNetworkListByType( |
+ NetworkTypePattern::Tether(), &tether_networks); |
+ |
+ // The list should have been reversed due to reverse-alphabetical sorting. |
+ EXPECT_EQ(2u, tether_networks.size()); |
+ EXPECT_EQ(kTetherGuid2, tether_networks[0]->guid()); |
+ EXPECT_EQ(kTetherGuid1, tether_networks[1]->guid()); |
+} |
+ |
+TEST_F(NetworkStateHandlerTest, SortTetherNetworkList_NoSortingDelegate) { |
+ network_state_handler_->SetTetherTechnologyState( |
+ NetworkStateHandler::TECHNOLOGY_ENABLED); |
+ |
+ // Do not set a TetherNetworkListSorter. |
+ |
+ network_state_handler_->AddTetherNetworkState( |
+ kTetherGuid1, kTetherName1, kTetherCarrier1, kTetherBatteryPercentage1, |
+ kTetherSignalStrength1, kTetherHasConnectedToHost1); |
+ network_state_handler_->AddTetherNetworkState( |
+ kTetherGuid2, kTetherName2, kTetherCarrier2, kTetherBatteryPercentage2, |
+ kTetherSignalStrength2, kTetherHasConnectedToHost2); |
+ |
+ // Note: GetVisibleNetworkListByType() sorts before outputting networks. |
+ NetworkStateHandler::NetworkStateList tether_networks; |
+ network_state_handler_->GetVisibleNetworkListByType( |
+ NetworkTypePattern::Tether(), &tether_networks); |
+ |
+ // The list should be in the original order. |
+ EXPECT_EQ(2u, tether_networks.size()); |
+ EXPECT_EQ(kTetherGuid1, tether_networks[0]->guid()); |
+ EXPECT_EQ(kTetherGuid2, tether_networks[1]->guid()); |
+} |
+ |
TEST_F(NetworkStateHandlerTest, NetworkListChanged) { |
size_t stub_network_count = test_observer_->network_count(); |
// Set up two additional visible networks. |