1// Copyright 2013 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 "chrome/browser/ui/ash/session_state_delegate_chromeos.h" 6 7#include <string> 8#include <vector> 9 10#include "chrome/browser/chromeos/login/fake_user_manager.h" 11#include "chrome/test/base/testing_profile_manager.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14 15class SessionStateDelegateChromeOSTest : public testing::Test { 16 protected: 17 SessionStateDelegateChromeOSTest() : user_manager_(NULL) { 18 } 19 20 virtual ~SessionStateDelegateChromeOSTest() { 21 } 22 23 virtual void SetUp() OVERRIDE { 24 // Initialize the UserManager singleton to a fresh FakeUserManager instance. 25 user_manager_ = new chromeos::FakeUserManager; 26 user_manager_enabler_.reset( 27 new chromeos::ScopedUserManagerEnabler(user_manager_)); 28 29 // Create our SessionStateDelegate to experiment with. 30 session_state_delegate_.reset(new SessionStateDelegateChromeos()); 31 testing::Test::SetUp(); 32 } 33 34 virtual void TearDown() OVERRIDE { 35 testing::Test::TearDown(); 36 session_state_delegate_.reset(); 37 user_manager_enabler_.reset(); 38 user_manager_ = NULL; 39 } 40 41 // Add and log in a user to the session. 42 void UserAddedToSession(std::string user) { 43 user_manager()->AddUser(user); 44 user_manager()->LoginUser(user); 45 } 46 47 // Get the active user. 48 const std::string& GetActiveUser() { 49 return chromeos::UserManager::Get()->GetActiveUser()->email(); 50 } 51 52 chromeos::FakeUserManager* user_manager() { return user_manager_; } 53 SessionStateDelegateChromeos* session_state_delegate() { 54 return session_state_delegate_.get(); 55 } 56 57 private: 58 scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; 59 scoped_ptr<SessionStateDelegateChromeos> session_state_delegate_; 60 61 // Not owned. 62 chromeos::FakeUserManager* user_manager_; 63 64 DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateChromeOSTest); 65}; 66 67// Make sure that cycling one user does not cause any harm. 68TEST_F(SessionStateDelegateChromeOSTest, CyclingOneUser) { 69 UserAddedToSession("firstuser@test.com"); 70 71 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 72 session_state_delegate()->CycleActiveUser( 73 ash::SessionStateDelegate::CYCLE_TO_NEXT_USER); 74 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 75 session_state_delegate()->CycleActiveUser( 76 ash::SessionStateDelegate::CYCLE_TO_PREVIOUS_USER); 77 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 78} 79 80// Cycle three users forwards and backwards to see that it works. 81TEST_F(SessionStateDelegateChromeOSTest, CyclingThreeUsers) { 82 UserAddedToSession("firstuser@test.com"); 83 UserAddedToSession("seconduser@test.com"); 84 UserAddedToSession("thirduser@test.com"); 85 const ash::SessionStateDelegate::CycleUser forward = 86 ash::SessionStateDelegate::CYCLE_TO_NEXT_USER; 87 88 // Cycle forward. 89 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 90 session_state_delegate()->CycleActiveUser(forward); 91 EXPECT_EQ("seconduser@test.com", GetActiveUser()); 92 session_state_delegate()->CycleActiveUser(forward); 93 EXPECT_EQ("thirduser@test.com", GetActiveUser()); 94 session_state_delegate()->CycleActiveUser(forward); 95 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 96 97 // Cycle backwards. 98 const ash::SessionStateDelegate::CycleUser backward = 99 ash::SessionStateDelegate::CYCLE_TO_PREVIOUS_USER; 100 session_state_delegate()->CycleActiveUser(backward); 101 EXPECT_EQ("thirduser@test.com", GetActiveUser()); 102 session_state_delegate()->CycleActiveUser(backward); 103 EXPECT_EQ("seconduser@test.com", GetActiveUser()); 104 session_state_delegate()->CycleActiveUser(backward); 105 EXPECT_EQ("firstuser@test.com", GetActiveUser()); 106} 107