blob: 9aa3053a4ec279b8526791031a8d1231457aab6f [file] [log] [blame]
// Copyright 2020 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 "chrome/browser/chromeos/input_method/assistive_suggester.h"
#include "chrome/browser/chromeos/input_method/personal_info_suggester.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/test/base/testing_profile.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ime/chromeos/ime_bridge.h"
namespace chromeos {
using ::chromeos::ime::TextSuggestion;
using ::chromeos::ime::TextSuggestionMode;
using ::chromeos::ime::TextSuggestionType;
class AssistiveSuggesterTest : public testing::Test {
protected:
AssistiveSuggesterTest() { profile_ = std::make_unique<TestingProfile>(); }
void SetUp() override {
engine_ = std::make_unique<InputMethodEngine>();
assistive_suggester_ =
std::make_unique<AssistiveSuggester>(engine_.get(), profile_.get());
histogram_tester_.ExpectUniqueSample(
"InputMethod.Assistive.UserPref.PersonalInfo", true, 1);
histogram_tester_.ExpectUniqueSample("InputMethod.Assistive.UserPref.Emoji",
true, 1);
histogram_tester_.ExpectUniqueSample(
"InputMethod.Assistive.UserPref.MultiWord", true, 1);
ui::IMEBridge::Initialize();
}
content::BrowserTaskEnvironment task_environment_;
std::unique_ptr<TestingProfile> profile_;
std::unique_ptr<AssistiveSuggester> assistive_suggester_;
std::unique_ptr<InputMethodEngine> engine_;
base::HistogramTester histogram_tester_;
};
TEST_F(AssistiveSuggesterTest,
EmojiSuggestionPrefFalseFeatureFlagTrue_UserPrefEnabledFalse) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kEmojiSuggestAddition},
/*disabled_features=*/{chromeos::features::kAssistPersonalInfo,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnterpriseAllowed,
true);
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnabled, false);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
EmojiSuggestionPrefFalseFeatureFlagTrue_EnterprisePrefEnabledFalse) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kEmojiSuggestAddition},
/*disabled_features=*/{chromeos::features::kAssistPersonalInfo,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnterpriseAllowed,
false);
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnabled, true);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
EmojiSuggestionPrefTrueFeatureFlagTrue_BothPrefsEnabledTrue) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kEmojiSuggestAddition},
/*disabled_features=*/{chromeos::features::kAssistPersonalInfo,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnterpriseAllowed,
true);
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnabled, true);
EXPECT_TRUE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
EmojiSuggestionPrefTrueFeatureFlagTrue_BothPrefsEnabledFalse) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kEmojiSuggestAddition},
/*disabled_features=*/{chromeos::features::kAssistPersonalInfo,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnterpriseAllowed,
false);
profile_->GetPrefs()->SetBoolean(prefs::kEmojiSuggestionEnabled, false);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(
AssistiveSuggesterTest,
AssistPersonalInfoEnabledPrefFalseFeatureFlagTrue_AssitiveFeatureEnabledFalse) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistPersonalInfo},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kAssistPersonalInfoEnabled, false);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(
AssistiveSuggesterTest,
AssistPersonalInfoEnabledTrueFeatureFlagTrue_AssitiveFeatureEnabledTrue) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistPersonalInfo},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kAssistPersonalInfoEnabled, true);
EXPECT_TRUE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
MultiWordEnabledWhenFeatureFlagEnabledAndPrefEnabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistMultiWord},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo});
profile_->GetPrefs()->SetBoolean(prefs::kAssistPredictiveWritingEnabled,
true);
EXPECT_TRUE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
MultiWordDisabledWhenFeatureFlagEnabledAndPrefDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistMultiWord},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo});
profile_->GetPrefs()->SetBoolean(prefs::kAssistPredictiveWritingEnabled,
false);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
MultiWordDisabledWhenFeatureFlagDisabledAndPrefDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo,
chromeos::features::kAssistMultiWord});
profile_->GetPrefs()->SetBoolean(prefs::kAssistPredictiveWritingEnabled,
false);
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
MultiWordDisabledWhenFeatureFlagEnabledButImeServiceDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistMultiWord},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo,
chromeos::features::kImeMojoDecoder});
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest,
MultiWordDisabledWhenFeatureFlagAndImeServiceEnableButSystemPkDisabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistMultiWord,
chromeos::features::kImeMojoDecoder},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo,
chromeos::features::kSystemLatinPhysicalTyping});
EXPECT_FALSE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
TEST_F(AssistiveSuggesterTest, MultiWordEnabledWhenFeatureFlagAndDepsEnabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
/*enabled_features=*/{chromeos::features::kAssistMultiWord,
chromeos::features::kImeMojoDecoder,
chromeos::features::kSystemLatinPhysicalTyping},
/*disabled_features=*/{chromeos::features::kEmojiSuggestAddition,
chromeos::features::kAssistPersonalInfo});
EXPECT_TRUE(assistive_suggester_->IsAssistiveFeatureEnabled());
}
} // namespace chromeos