Commit 547cf946 authored by Jeroen Dhollander's avatar Jeroen Dhollander Committed by Commit Bot

Introduce TestAssistantInteractionSubscriber

This class inherits from |AssistantInteractionSubscriber| and provides
a dummy implementation of all the methods, so that test classes can
derive from this and only implement what they need.

It also adds a |mojom::Remote| that every test class needs.

Bug: b/151800188
Change-Id: I1f06f180e2f99c76a09171122777e24561e0a562
Tests: Ran existing unittests
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2128838Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Commit-Queue: Jeroen Dhollander <jeroendh@google.com>
Cr-Commit-Position: refs/heads/master@{#756354}
parent ad1715be
...@@ -2143,6 +2143,7 @@ test("ash_unittests") { ...@@ -2143,6 +2143,7 @@ test("ash_unittests") {
"//base/util/values:values_util", "//base/util/values:values_util",
"//build:branding_buildflags", "//build:branding_buildflags",
"//chromeos:test_support", "//chromeos:test_support",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//chromeos/strings:strings_grit", "//chromeos/strings:strings_grit",
# TODO(https://crbug.com/644336): Make CrasAudioHandler Chrome or Ash only. # TODO(https://crbug.com/644336): Make CrasAudioHandler Chrome or Ash only.
...@@ -2486,6 +2487,7 @@ static_library("test_support") { ...@@ -2486,6 +2487,7 @@ static_library("test_support") {
"//base:i18n", "//base:i18n",
"//base/test:test_support", "//base/test:test_support",
"//cc:test_support", "//cc:test_support",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//chromeos/services/assistant/public/cpp:prefs", "//chromeos/services/assistant/public/cpp:prefs",
"//ui/platform_window/common", "//ui/platform_window/common",
......
...@@ -237,6 +237,7 @@ test("app_list_unittests") { ...@@ -237,6 +237,7 @@ test("app_list_unittests") {
"//base", "//base",
"//base/test:test_support", "//base/test:test_support",
"//chromeos/constants", "//chromeos/constants",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//mojo/core/embedder", "//mojo/core/embedder",
"//mojo/public/cpp/bindings", "//mojo/public/cpp/bindings",
"//services/content/public/cpp", "//services/content/public/cpp",
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "ash/assistant/ui/main_stage/suggestion_chip_view.h" #include "ash/assistant/ui/main_stage/suggestion_chip_view.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom-shared.h" #include "chromeos/services/assistant/public/cpp/default_assistant_interaction_subscriber.h"
#include "ui/compositor/scoped_animation_duration_scale_mode.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h"
#include "ui/events/event.h" #include "ui/events/event.h"
#include "ui/views/controls/textfield/textfield.h" #include "ui/views/controls/textfield/textfield.h"
...@@ -208,12 +208,11 @@ class AssistantPageViewTest : public AssistantAshTestBase { ...@@ -208,12 +208,11 @@ class AssistantPageViewTest : public AssistantAshTestBase {
// Counts the number of Assistant interactions that are started. // Counts the number of Assistant interactions that are started.
class AssistantInteractionCounter class AssistantInteractionCounter
: private chromeos::assistant::mojom::AssistantInteractionSubscriber { : private chromeos::assistant::DefaultAssistantInteractionSubscriber {
public: public:
explicit AssistantInteractionCounter( explicit AssistantInteractionCounter(
chromeos::assistant::mojom::Assistant* service) { chromeos::assistant::mojom::Assistant* service) {
service->AddAssistantInteractionSubscriber( service->AddAssistantInteractionSubscriber(BindNewPipeAndPassRemote());
receiver_.BindNewPipeAndPassRemote());
} }
AssistantInteractionCounter(AssistantInteractionCounter&) = delete; AssistantInteractionCounter(AssistantInteractionCounter&) = delete;
AssistantInteractionCounter& operator=(AssistantInteractionCounter&) = delete; AssistantInteractionCounter& operator=(AssistantInteractionCounter&) = delete;
...@@ -222,35 +221,12 @@ class AssistantInteractionCounter ...@@ -222,35 +221,12 @@ class AssistantInteractionCounter
int interaction_count() const { return interaction_count_; } int interaction_count() const { return interaction_count_; }
private: private:
// AssistantInteractionSubscriber implementation: // DefaultAssistantInteractionSubscriber implementation:
void OnInteractionStarted( void OnInteractionStarted(
chromeos::assistant::mojom::AssistantInteractionMetadataPtr) override { chromeos::assistant::mojom::AssistantInteractionMetadataPtr) override {
interaction_count_++; interaction_count_++;
} }
void OnInteractionFinished(
chromeos::assistant::mojom::AssistantInteractionResolution) override {}
void OnHtmlResponse(const std::string& response,
const std::string& fallback) override {}
void OnSuggestionsResponse(
std::vector<chromeos::assistant::mojom::AssistantSuggestionPtr> response)
override {}
void OnTextResponse(const std::string& response) override {}
void OnTimersResponse(const std::vector<std::string>& timer_ids) override {}
void OnOpenUrlResponse(const ::GURL& url, bool in_background) override {}
void OnOpenAppResponse(chromeos::assistant::mojom::AndroidAppInfoPtr app_info,
OnOpenAppResponseCallback callback) override {}
void OnSpeechRecognitionStarted() override {}
void OnSpeechRecognitionIntermediateResult(
const std::string& high_confidence_text,
const std::string& low_confidence_text) override {}
void OnSpeechRecognitionEndOfUtterance() override {}
void OnSpeechRecognitionFinalResult(
const std::string& final_result) override {}
void OnSpeechLevelUpdated(float speech_level) override {}
void OnTtsStarted(bool due_to_error) override {}
void OnWaitStarted() override {}
mojo::Receiver<AssistantInteractionSubscriber> receiver_{this};
int interaction_count_ = 0; int interaction_count_ = 0;
}; };
......
...@@ -10,11 +10,12 @@ ...@@ -10,11 +10,12 @@
#include "ash/assistant/assistant_interaction_controller.h" #include "ash/assistant/assistant_interaction_controller.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "chromeos/services/assistant/public/cpp/default_assistant_interaction_subscriber.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace ash { namespace ash {
using chromeos::assistant::DefaultAssistantInteractionSubscriber;
using chromeos::assistant::mojom::AssistantInteractionMetadata; using chromeos::assistant::mojom::AssistantInteractionMetadata;
using chromeos::assistant::mojom::AssistantInteractionMetadataPtr; using chromeos::assistant::mojom::AssistantInteractionMetadataPtr;
using chromeos::assistant::mojom::AssistantInteractionResolution; using chromeos::assistant::mojom::AssistantInteractionResolution;
...@@ -28,17 +29,12 @@ using chromeos::assistant::mojom::AssistantSuggestionPtr; ...@@ -28,17 +29,12 @@ using chromeos::assistant::mojom::AssistantSuggestionPtr;
// - A conversation is finished before starting a new one. // - A conversation is finished before starting a new one.
// - No responses (text, card, ...) are sent before starting or after // - No responses (text, card, ...) are sent before starting or after
// finishing an interaction. // finishing an interaction.
class SanityCheckSubscriber : public AssistantInteractionSubscriber { class SanityCheckSubscriber : public DefaultAssistantInteractionSubscriber {
public: public:
SanityCheckSubscriber() : receiver_(this) {} SanityCheckSubscriber() = default;
~SanityCheckSubscriber() override = default; ~SanityCheckSubscriber() override = default;
mojo::PendingRemote<AssistantInteractionSubscriber> // DefaultAssistantInteractionSubscriber implementation:
BindNewPipeAndPassRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
// AssistantInteractionSubscriber implementation:
void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override { void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override {
if (current_state_ == ConversationState::kInProgress) { if (current_state_ == ConversationState::kInProgress) {
ADD_FAILURE() ADD_FAILURE()
...@@ -81,23 +77,6 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber { ...@@ -81,23 +77,6 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber {
CheckResponse(); CheckResponse();
} }
void OnSpeechRecognitionStarted() override {}
void OnSpeechRecognitionIntermediateResult(
const std::string& high_confidence_text,
const std::string& low_confidence_text) override {}
void OnSpeechRecognitionEndOfUtterance() override {}
void OnSpeechRecognitionFinalResult(
const std::string& final_result) override {}
void OnSpeechLevelUpdated(float speech_level) override {}
void OnTtsStarted(bool due_to_error) override {}
void OnWaitStarted() override {}
private: private:
void CheckResponse() { void CheckResponse() {
if (current_state_ == ConversationState::kNotStarted) if (current_state_ == ConversationState::kNotStarted)
...@@ -115,26 +94,21 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber { ...@@ -115,26 +94,21 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber {
}; };
ConversationState current_state_ = ConversationState::kNotStarted; ConversationState current_state_ = ConversationState::kNotStarted;
mojo::Receiver<AssistantInteractionSubscriber> receiver_;
DISALLOW_COPY_AND_ASSIGN(SanityCheckSubscriber); DISALLOW_COPY_AND_ASSIGN(SanityCheckSubscriber);
}; };
// Subscriber that tracks the current interaction. // Subscriber that tracks the current interaction.
class CurrentInteractionSubscriber : public AssistantInteractionSubscriber { class CurrentInteractionSubscriber
: public DefaultAssistantInteractionSubscriber {
public: public:
CurrentInteractionSubscriber() : receiver_(this) {} CurrentInteractionSubscriber() = default;
CurrentInteractionSubscriber(CurrentInteractionSubscriber&) = delete; CurrentInteractionSubscriber(CurrentInteractionSubscriber&) = delete;
CurrentInteractionSubscriber& operator=(CurrentInteractionSubscriber&) = CurrentInteractionSubscriber& operator=(CurrentInteractionSubscriber&) =
delete; delete;
~CurrentInteractionSubscriber() override = default; ~CurrentInteractionSubscriber() override = default;
mojo::PendingRemote<AssistantInteractionSubscriber> // DefaultAssistantInteractionSubscriber implementation:
BindNewPipeAndPassRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
// AssistantInteractionSubscriber implementation:
void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override { void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override {
current_interaction_ = *metadata; current_interaction_ = *metadata;
} }
...@@ -144,27 +118,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber { ...@@ -144,27 +118,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber {
current_interaction_ = base::nullopt; current_interaction_ = base::nullopt;
} }
void OnHtmlResponse(const std::string& response,
const std::string& fallback) override {}
void OnSuggestionsResponse(
std::vector<chromeos::assistant::mojom::AssistantSuggestionPtr> response)
override {}
void OnTextResponse(const std::string& response) override {}
void OnTimersResponse(const std::vector<std::string>& timer_ids) override {}
void OnOpenUrlResponse(const ::GURL& url, bool in_background) override {}
void OnOpenAppResponse(chromeos::assistant::mojom::AndroidAppInfoPtr app_info,
OnOpenAppResponseCallback callback) override {}
void OnSpeechRecognitionStarted() override {}
void OnSpeechRecognitionIntermediateResult(
const std::string& high_confidence_text,
const std::string& low_confidence_text) override {}
void OnSpeechRecognitionEndOfUtterance() override {}
void OnSpeechRecognitionFinalResult(
const std::string& final_result) override {}
void OnSpeechLevelUpdated(float speech_level) override {}
void OnTtsStarted(bool due_to_error) override {}
void OnWaitStarted() override {}
base::Optional<AssistantInteractionMetadata> current_interaction() { base::Optional<AssistantInteractionMetadata> current_interaction() {
return current_interaction_; return current_interaction_;
} }
...@@ -172,7 +125,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber { ...@@ -172,7 +125,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber {
private: private:
base::Optional<AssistantInteractionMetadata> current_interaction_ = base::Optional<AssistantInteractionMetadata> current_interaction_ =
base::nullopt; base::nullopt;
mojo::Receiver<AssistantInteractionSubscriber> receiver_;
}; };
class InteractionResponse::Response { class InteractionResponse::Response {
......
...@@ -278,6 +278,7 @@ source_set("chromeos") { ...@@ -278,6 +278,7 @@ source_set("chromeos") {
# TODO: care about enable_basic_printing and enable_print_preview. # TODO: care about enable_basic_printing and enable_print_preview.
"//ash/keyboard/ui", "//ash/keyboard/ui",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//printing", "//printing",
"//remoting/host/it2me:chrome_os_host", "//remoting/host/it2me:chrome_os_host",
"//services/audio/public/cpp", "//services/audio/public/cpp",
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
#include "chromeos/dbus/session_manager/session_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h"
#include "chromeos/printing/printer_configuration.h" #include "chromeos/printing/printer_configuration.h"
#include "chromeos/services/assistant/public/cpp/assistant_prefs.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "chromeos/services/assistant/public/cpp/default_assistant_interaction_subscriber.h"
#include "chromeos/services/machine_learning/public/cpp/service_connection.h" #include "chromeos/services/machine_learning/public/cpp/service_connection.h"
#include "chromeos/settings/cros_settings_names.h" #include "chromeos/settings/cros_settings_names.h"
#include "components/arc/arc_prefs.h" #include "components/arc/arc_prefs.h"
...@@ -2290,7 +2290,7 @@ void AutotestPrivateEnableAssistantAndWaitForReadyFunction:: ...@@ -2290,7 +2290,7 @@ void AutotestPrivateEnableAssistantAndWaitForReadyFunction::
// |AutotestPrivateSendAssistantTextQueryFunction| and // |AutotestPrivateSendAssistantTextQueryFunction| and
// |AutotestPrivateWaitForAssistantQueryStatusFunction|. // |AutotestPrivateWaitForAssistantQueryStatusFunction|.
class AssistantInteractionHelper class AssistantInteractionHelper
: public chromeos::assistant::mojom::AssistantInteractionSubscriber { : public chromeos::assistant::DefaultAssistantInteractionSubscriber {
public: public:
using OnInteractionFinishedCallback = base::OnceCallback<void(bool)>; using OnInteractionFinishedCallback = base::OnceCallback<void(bool)>;
...@@ -2305,8 +2305,7 @@ class AssistantInteractionHelper ...@@ -2305,8 +2305,7 @@ class AssistantInteractionHelper
assistant_.BindNewPipeAndPassReceiver()); assistant_.BindNewPipeAndPassReceiver());
// Subscribe to Assistant interaction events. // Subscribe to Assistant interaction events.
assistant_->AddAssistantInteractionSubscriber( assistant_->AddAssistantInteractionSubscriber(BindNewPipeAndPassRemote());
assistant_interaction_subscriber_receiver_.BindNewPipeAndPassRemote());
on_interaction_finished_callback_ = on_interaction_finished_callback_ =
std::move(on_interaction_finished_callback); std::move(on_interaction_finished_callback);
...@@ -2383,21 +2382,7 @@ class AssistantInteractionHelper ...@@ -2383,21 +2382,7 @@ class AssistantInteractionHelper
std::move(callback).Run(true); std::move(callback).Run(true);
} }
void OnSuggestionsResponse(std::vector<AssistantSuggestionPtr>) override {}
void OnTimersResponse(const std::vector<std::string>& timer_ids) override {}
void OnOpenUrlResponse(const GURL& url, bool in_background) override {}
void OnSpeechRecognitionStarted() override {}
void OnSpeechRecognitionIntermediateResult(
const std::string& high_confidence_text,
const std::string& low_confidence_text) override {}
void OnSpeechRecognitionEndOfUtterance() override {}
void OnSpeechLevelUpdated(float speech_level) override {}
void OnTtsStarted(bool due_to_error) override {}
void OnWaitStarted() override {}
mojo::Remote<chromeos::assistant::mojom::Assistant> assistant_; mojo::Remote<chromeos::assistant::mojom::Assistant> assistant_;
mojo::Receiver<chromeos::assistant::mojom::AssistantInteractionSubscriber>
assistant_interaction_subscriber_receiver_{this};
std::unique_ptr<base::DictionaryValue> query_status_; std::unique_ptr<base::DictionaryValue> query_status_;
base::DictionaryValue result_; base::DictionaryValue result_;
......
...@@ -10,3 +10,15 @@ source_set("prefs") { ...@@ -10,3 +10,15 @@ source_set("prefs") {
deps = [ "//components/prefs" ] deps = [ "//components/prefs" ]
} }
source_set("interaction_subscriber") {
sources = [
"default_assistant_interaction_subscriber.cc",
"default_assistant_interaction_subscriber.h",
]
deps = [
"//chromeos/services/assistant/public/mojom",
"//mojo/public/cpp/bindings",
]
}
// 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 "chromeos/services/assistant/public/cpp/default_assistant_interaction_subscriber.h"
namespace chromeos {
namespace assistant {
DefaultAssistantInteractionSubscriber::DefaultAssistantInteractionSubscriber() =
default;
DefaultAssistantInteractionSubscriber::
~DefaultAssistantInteractionSubscriber() = default;
mojo::PendingRemote<mojom::AssistantInteractionSubscriber>
DefaultAssistantInteractionSubscriber::BindNewPipeAndPassRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
} // namespace assistant
} // namespace chromeos
// 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.
#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_DEFAULT_ASSISTANT_INTERACTION_SUBSCRIBER_H_
#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_DEFAULT_ASSISTANT_INTERACTION_SUBSCRIBER_H_
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace chromeos {
namespace assistant {
// Implementation of |AssistantInteractionSubscriber| that has a default, empty
// implementation for each virtual method.
// This reduces the clutter if a derived class only cares about a few of the
// methods.
// It also contains a |mojo::Receiver| as every derived class needs this anyway.
class DefaultAssistantInteractionSubscriber
: public mojom::AssistantInteractionSubscriber {
public:
DefaultAssistantInteractionSubscriber();
~DefaultAssistantInteractionSubscriber() override;
mojo::PendingRemote<AssistantInteractionSubscriber>
BindNewPipeAndPassRemote();
// AssistantInteractionSubscriber implementation:
void OnInteractionStarted(
chromeos::assistant::mojom::AssistantInteractionMetadataPtr) override {}
void OnInteractionFinished(
chromeos::assistant::mojom::AssistantInteractionResolution) override {}
void OnHtmlResponse(const std::string& response,
const std::string& fallback) override {}
void OnSuggestionsResponse(
std::vector<chromeos::assistant::mojom::AssistantSuggestionPtr> response)
override {}
void OnTextResponse(const std::string& response) override {}
void OnTimersResponse(const std::vector<std::string>& timer_ids) override {}
void OnOpenUrlResponse(const ::GURL& url, bool in_background) override {}
void OnOpenAppResponse(chromeos::assistant::mojom::AndroidAppInfoPtr app_info,
OnOpenAppResponseCallback callback) override {}
void OnSpeechRecognitionStarted() override {}
void OnSpeechRecognitionIntermediateResult(
const std::string& high_confidence_text,
const std::string& low_confidence_text) override {}
void OnSpeechRecognitionEndOfUtterance() override {}
void OnSpeechRecognitionFinalResult(
const std::string& final_result) override {}
void OnSpeechLevelUpdated(float speech_level) override {}
void OnTtsStarted(bool due_to_error) override {}
void OnWaitStarted() override {}
private:
mojo::Receiver<AssistantInteractionSubscriber> receiver_{this};
};
} // namespace assistant
} // namespace chromeos
#endif // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_DEFAULT_ASSISTANT_INTERACTION_SUBSCRIBER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment