Index: chrome/browser/chromeos/arc/arc_session_manager_unittest.cc |
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc |
index 130662b020410af63b397da7dc52649df7ab1a7e..a93e938b8ba693ec7a2f52f1b5f2f896a5101701 100644 |
--- a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc |
+++ b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc |
@@ -35,6 +35,7 @@ |
#include "chrome/browser/prefs/pref_service_syncable_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" |
+#include "chrome/browser/ui/app_list/arc/arc_app_test.h" |
#include "chrome/browser/ui/ash/multi_user/multi_user_util.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/test/base/testing_profile.h" |
@@ -64,6 +65,11 @@ namespace arc { |
namespace { |
+enum ArcAlwaysStartOption : bool { |
+ ON = true, |
+ OFF = false, |
+}; |
+ |
class FakeLoginDisplayHost : public chromeos::LoginDisplayHost { |
public: |
FakeLoginDisplayHost() { |
@@ -203,12 +209,14 @@ class ArcSessionManagerTestBase : public testing::Test { |
DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTestBase); |
}; |
-class ArcSessionManagerTest : public ArcSessionManagerTestBase { |
+// Intermediate class so that the children can inject test parameter freely. |
+class AbstractArcSessionManagerTest : public ArcSessionManagerTestBase { |
public: |
- ArcSessionManagerTest() = default; |
- |
+ AbstractArcSessionManagerTest() = default; |
void SetUp() override { |
ArcSessionManagerTestBase::SetUp(); |
+ if (ShouldArcAlwaysStartInTest() == ArcAlwaysStartOption::ON) |
+ SetArcAlwaysStartForTesting(); |
const AccountId account_id(AccountId::FromUserEmailGaiaId( |
profile()->GetProfileUserName(), "1234567890")); |
@@ -220,11 +228,38 @@ class ArcSessionManagerTest : public ArcSessionManagerTestBase { |
ASSERT_TRUE(arc_session_manager()->IsSessionStopped()); |
} |
+ protected: |
+ virtual ArcAlwaysStartOption ShouldArcAlwaysStartInTest() = 0; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(AbstractArcSessionManagerTest); |
+}; |
+ |
+class ArcSessionManagerTest |
+ : public AbstractArcSessionManagerTest, |
+ public testing::WithParamInterface<ArcAlwaysStartOption> { |
+ public: |
+ ArcSessionManagerTest() = default; |
+ |
+ protected: |
+ ArcAlwaysStartOption ShouldArcAlwaysStartInTest() override { |
+ return GetParam(); |
+ } |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(ArcSessionManagerTest); |
}; |
-TEST_F(ArcSessionManagerTest, PrefChangeTriggersService) { |
+INSTANTIATE_TEST_CASE_P(, |
+ ArcSessionManagerTest, |
+ testing::Values(ArcAlwaysStartOption::OFF, |
+ ArcAlwaysStartOption::ON)); |
+ |
+TEST_P(ArcSessionManagerTest, PrefChangeTriggersService) { |
+ // TODO(victorhsieh): Implement opt-in and opt-out flow. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
ASSERT_FALSE(IsArcPlayStoreEnabledForProfile(profile())); |
arc_session_manager()->SetProfile(profile()); |
arc_session_manager()->StartPreferenceHandler(); |
@@ -246,7 +281,11 @@ TEST_F(ArcSessionManagerTest, PrefChangeTriggersService) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, PrefChangeTriggersService_Restart) { |
+TEST_P(ArcSessionManagerTest, PrefChangeTriggersService_Restart) { |
+ // TODO(victorhsieh): Implement opt-in and opt-out flow. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
// Sets the Google Play Store preference at beginning. |
SetArcPlayStoreEnabledForProfile(profile(), true); |
@@ -268,7 +307,10 @@ TEST_F(ArcSessionManagerTest, PrefChangeTriggersService_Restart) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, BaseWorkflow) { |
+TEST_P(ArcSessionManagerTest, BaseWorkflow) { |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); |
EXPECT_TRUE(arc_session_manager()->arc_start_time().is_null()); |
@@ -296,7 +338,11 @@ TEST_F(ArcSessionManagerTest, BaseWorkflow) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, CancelFetchingDisablesArc) { |
+TEST_P(ArcSessionManagerTest, CancelFetchingDisablesArc) { |
+ // TODO(victorhsieh): Implement opt-in flow on Persistent ARC. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
SetArcPlayStoreEnabledForProfile(profile(), true); |
// Starts ARC. |
@@ -322,7 +368,11 @@ TEST_F(ArcSessionManagerTest, CancelFetchingDisablesArc) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, CloseUIKeepsArcEnabled) { |
+TEST_P(ArcSessionManagerTest, CloseUIKeepsArcEnabled) { |
+ // TODO(victorhsieh): Implement opt-in flow. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
// Starts ARC. |
SetArcPlayStoreEnabledForProfile(profile(), true); |
arc_session_manager()->SetProfile(profile()); |
@@ -342,7 +392,7 @@ TEST_F(ArcSessionManagerTest, CloseUIKeepsArcEnabled) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, Provisioning_Success) { |
+TEST_P(ArcSessionManagerTest, Provisioning_Success) { |
PrefService* const prefs = profile()->GetPrefs(); |
EXPECT_TRUE(arc_session_manager()->sign_in_start_time().is_null()); |
@@ -353,12 +403,18 @@ TEST_F(ArcSessionManagerTest, Provisioning_Success) { |
arc_session_manager()->SetProfile(profile()); |
arc_session_manager()->RequestEnable(); |
- ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, |
- arc_session_manager()->state()); |
+ if (ShouldArcAlwaysStart()) { |
+ ASSERT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); |
+ } else { |
+ ASSERT_EQ(ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, |
+ arc_session_manager()->state()); |
+ } |
// Emulate to accept the terms of service. |
prefs->SetBoolean(prefs::kArcTermsAccepted, true); |
- arc_session_manager()->StartArc(); |
+ if (!ShouldArcAlwaysStart()) { |
+ arc_session_manager()->StartArc(); |
+ } |
EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); |
EXPECT_TRUE(arc_session_manager()->IsSessionRunning()); |
@@ -376,7 +432,7 @@ TEST_F(ArcSessionManagerTest, Provisioning_Success) { |
EXPECT_TRUE(arc_session_manager()->IsPlaystoreLaunchRequestedForTesting()); |
} |
-TEST_F(ArcSessionManagerTest, Provisioning_Restart) { |
+TEST_P(ArcSessionManagerTest, Provisioning_Restart) { |
// Set up the situation that provisioning is successfully done in the |
// previous session. |
PrefService* const prefs = profile()->GetPrefs(); |
@@ -403,12 +459,17 @@ TEST_F(ArcSessionManagerTest, Provisioning_Restart) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, RemoveDataDir) { |
+TEST_P(ArcSessionManagerTest, RemoveDataDir) { |
+ // TODO(victorhsieh): Implement data removal on Persistent ARC. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
// Emulate the situation where the initial Google Play Store enabled |
// preference is false for managed user, i.e., data dir is being removed at |
// beginning. |
arc_session_manager()->SetProfile(profile()); |
arc_session_manager()->RemoveArcData(); |
+ |
EXPECT_TRUE( |
profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); |
EXPECT_EQ(ArcSessionManager::State::REMOVING_DATA_DIR, |
@@ -442,7 +503,11 @@ TEST_F(ArcSessionManagerTest, RemoveDataDir) { |
profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); |
} |
-TEST_F(ArcSessionManagerTest, RemoveDataDir_Restart) { |
+TEST_P(ArcSessionManagerTest, RemoveDataDir_Restart) { |
+ // TODO(victorhsieh): Implement data removal on Persistent ARC. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
// Emulate second sign-in. Data should be removed first and ARC started after. |
PrefService* const prefs = profile()->GetPrefs(); |
prefs->SetBoolean(prefs::kArcDataRemoveRequested, true); |
@@ -458,7 +523,11 @@ TEST_F(ArcSessionManagerTest, RemoveDataDir_Restart) { |
arc_session_manager()->Shutdown(); |
} |
-TEST_F(ArcSessionManagerTest, RemoveDataDir_Managed) { |
+TEST_P(ArcSessionManagerTest, RemoveDataDir_Managed) { |
+ // TODO(victorhsieh): Implement data removal on Persistent ARC. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
// Set ARC to be managed and disabled. |
profile()->GetTestingPrefService()->SetManagedPref(prefs::kArcEnabled, |
new base::Value(false)); |
@@ -471,7 +540,7 @@ TEST_F(ArcSessionManagerTest, RemoveDataDir_Managed) { |
profile()->GetPrefs()->GetBoolean(prefs::kArcDataRemoveRequested)); |
} |
-TEST_F(ArcSessionManagerTest, IgnoreSecondErrorReporting) { |
+TEST_P(ArcSessionManagerTest, IgnoreSecondErrorReporting) { |
arc_session_manager()->SetProfile(profile()); |
arc_session_manager()->RequestEnable(); |
arc_session_manager()->StartArc(); |
@@ -492,8 +561,9 @@ TEST_F(ArcSessionManagerTest, IgnoreSecondErrorReporting) { |
} |
class ArcSessionManagerPolicyTest |
- : public ArcSessionManagerTest, |
- public testing::WithParamInterface<std::tuple<base::Value, base::Value>> { |
+ : public AbstractArcSessionManagerTest, |
+ public testing::WithParamInterface< |
+ std::tuple<base::Value, base::Value, ArcAlwaysStartOption>> { |
public: |
const base::Value& backup_restore_pref_value() const { |
return std::get<0>(GetParam()); |
@@ -502,9 +572,18 @@ class ArcSessionManagerPolicyTest |
const base::Value& location_service_pref_value() const { |
return std::get<1>(GetParam()); |
} |
+ |
+ protected: |
+ ArcAlwaysStartOption ShouldArcAlwaysStartInTest() override { |
+ return std::get<2>(GetParam()); |
+ } |
}; |
TEST_P(ArcSessionManagerPolicyTest, SkippingTerms) { |
+ // TODO(victorhsieh): Implement opt-in flow. |
+ if (ShouldArcAlwaysStart()) |
+ return; |
+ |
sync_preferences::TestingPrefServiceSyncable* const prefs = |
profile()->GetTestingPrefService(); |
@@ -567,11 +646,12 @@ TEST_P(ArcSessionManagerPolicyTest, SkippingTerms) { |
} |
INSTANTIATE_TEST_CASE_P( |
- ArcSessionManagerPolicyTest, |
+ , |
ArcSessionManagerPolicyTest, |
testing::Combine( |
testing::Values(base::Value(), base::Value(false), base::Value(true)), |
- testing::Values(base::Value(), base::Value(false), base::Value(true)))); |
+ testing::Values(base::Value(), base::Value(false), base::Value(true)), |
+ testing::Values(ArcAlwaysStartOption::OFF, ArcAlwaysStartOption::ON))); |
class ArcSessionManagerKioskTest : public ArcSessionManagerTestBase { |
public: |
@@ -607,11 +687,20 @@ TEST_F(ArcSessionManagerKioskTest, AuthFailure) { |
EXPECT_TRUE(terminated); |
} |
-class ArcSessionOobeOptInTest : public ArcSessionManagerTest { |
+// This class takes two test parameters because both itself and its child need |
+// to be parameterized. Having redundant parameter here avoid the trouble to |
+// deal with multiple inheritance from WithParamInterface instances. |
+class ArcSessionOobeOptInTest : public AbstractArcSessionManagerTest, |
+ public testing::WithParamInterface< |
+ std::tuple<ArcAlwaysStartOption, bool>> { |
Luis Héctor Chávez
2017/03/02 21:07:10
Much better :D
|
public: |
ArcSessionOobeOptInTest() = default; |
protected: |
+ ArcAlwaysStartOption ShouldArcAlwaysStartInTest() override { |
+ return std::get<0>(GetParam()); |
+ } |
+ |
void CreateLoginDisplayHost() { |
fake_login_display_host_ = base::MakeUnique<FakeLoginDisplayHost>(); |
} |
@@ -629,7 +718,14 @@ class ArcSessionOobeOptInTest : public ArcSessionManagerTest { |
DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInTest); |
}; |
-TEST_F(ArcSessionOobeOptInTest, OobeOptInActive) { |
+INSTANTIATE_TEST_CASE_P( |
+ , |
+ ArcSessionOobeOptInTest, |
+ testing::Combine(testing::Values(ArcAlwaysStartOption::OFF, |
+ ArcAlwaysStartOption::ON), |
+ testing::Values(false) /* dummy */)); |
+ |
+TEST_P(ArcSessionOobeOptInTest, OobeOptInActive) { |
// OOBE OptIn is active in case of OOBE is started for new user and ARC OOBE |
// is enabled by switch. |
EXPECT_FALSE(ArcSessionManager::IsOobeOptInActive()); |
@@ -650,8 +746,7 @@ TEST_F(ArcSessionOobeOptInTest, OobeOptInActive) { |
class ArcSessionOobeOptInNegotiatorTest |
: public ArcSessionOobeOptInTest, |
- public chromeos::ArcTermsOfServiceScreenView, |
- public testing::WithParamInterface<bool> { |
+ public chromeos::ArcTermsOfServiceScreenView { |
public: |
ArcSessionOobeOptInNegotiatorTest() = default; |
@@ -692,7 +787,11 @@ class ArcSessionOobeOptInNegotiatorTest |
} |
protected: |
- bool IsManagedUser() { return GetParam(); } |
+ ArcAlwaysStartOption ShouldArcAlwaysStartInTest() override { |
+ return std::get<0>(GetParam()); |
+ } |
+ |
+ bool IsManagedUser() { return std::get<1>(GetParam()); } |
void ReportResult(bool accepted) { |
for (auto& observer : observer_list_) { |
@@ -738,9 +837,12 @@ class ArcSessionOobeOptInNegotiatorTest |
DISALLOW_COPY_AND_ASSIGN(ArcSessionOobeOptInNegotiatorTest); |
}; |
-INSTANTIATE_TEST_CASE_P(ArcSessionOobeOptInNegotiatorTestImpl, |
- ArcSessionOobeOptInNegotiatorTest, |
- ::testing::Values(true, false)); |
+// TODO(victorhsieh): Add test to cover when ARC always start |
+INSTANTIATE_TEST_CASE_P( |
+ , |
+ ArcSessionOobeOptInNegotiatorTest, |
+ testing::Combine(testing::Values(ArcAlwaysStartOption::OFF), |
+ testing::Bool() /* managed user */)); |
TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsAccepted) { |
view()->Show(); |