blob: 7ea96142ddd9f32fc079e7cdfdbe7b12e8df1e7a [file] [log] [blame]
// Copyright 2017 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 "ash/voice_interaction/voice_interaction_controller.h"
#include <memory>
#include "ash/shell.h"
#include "ash/test/ash_test_base.h"
#include "ash/voice_interaction/voice_interaction_observer.h"
namespace ash {
namespace {
class TestVoiceInteractionObserver : public VoiceInteractionObserver {
public:
TestVoiceInteractionObserver() = default;
~TestVoiceInteractionObserver() override = default;
// VoiceInteractionObserver overrides:
void OnVoiceInteractionStatusChanged(
mojom::VoiceInteractionState state) override {
state_ = state;
}
void OnVoiceInteractionSettingsEnabled(bool enabled) override {
settings_enabled_ = enabled;
}
void OnVoiceInteractionContextEnabled(bool enabled) override {
context_enabled_ = enabled;
}
void OnVoiceInteractionSetupCompleted(bool completed) override {
setup_completed_ = completed;
}
mojom::VoiceInteractionState voice_interaction_state() const {
return state_;
}
bool settings_enabled() const { return settings_enabled_; }
bool context_enabled() const { return context_enabled_; }
bool setup_completed() const { return setup_completed_; }
private:
mojom::VoiceInteractionState state_ = mojom::VoiceInteractionState::STOPPED;
bool settings_enabled_ = false;
bool context_enabled_ = false;
bool setup_completed_ = false;
DISALLOW_COPY_AND_ASSIGN(TestVoiceInteractionObserver);
};
class VoiceInteractionControllerTest : public AshTestBase {
public:
VoiceInteractionControllerTest() = default;
~VoiceInteractionControllerTest() override = default;
void SetUp() override {
AshTestBase::SetUp();
observer_ = std::make_unique<TestVoiceInteractionObserver>();
controller()->AddObserver(observer_.get());
}
void TearDown() override {
controller()->RemoveObserver(observer_.get());
observer_.reset();
AshTestBase::TearDown();
}
protected:
VoiceInteractionController* controller() {
return Shell::Get()->voice_interaction_controller();
}
TestVoiceInteractionObserver* observer() { return observer_.get(); }
private:
std::unique_ptr<TestVoiceInteractionObserver> observer_;
DISALLOW_COPY_AND_ASSIGN(VoiceInteractionControllerTest);
};
} // namespace
TEST_F(VoiceInteractionControllerTest, NotifyStatusChanged) {
controller()->NotifyStatusChanged(mojom::VoiceInteractionState::RUNNING);
// The cached state should be updated.
EXPECT_EQ(mojom::VoiceInteractionState::RUNNING,
controller()->voice_interaction_state());
// The observers should be notified.
EXPECT_EQ(mojom::VoiceInteractionState::RUNNING,
observer()->voice_interaction_state());
}
TEST_F(VoiceInteractionControllerTest, NotifySettingsEnabled) {
controller()->NotifySettingsEnabled(true);
// The cached state should be updated.
EXPECT_TRUE(controller()->settings_enabled());
// The observers should be notified.
EXPECT_TRUE(observer()->settings_enabled());
}
TEST_F(VoiceInteractionControllerTest, NotifyContextEnabled) {
controller()->NotifyContextEnabled(true);
// The observers should be notified.
EXPECT_TRUE(observer()->context_enabled());
}
TEST_F(VoiceInteractionControllerTest, NotifySetupCompleted) {
controller()->NotifySetupCompleted(true);
// The cached state should be updated.
EXPECT_TRUE(controller()->setup_completed());
// The observers should be notified.
EXPECT_TRUE(observer()->setup_completed());
}
} // namespace ash