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") {
"//base/util/values:values_util",
"//build:branding_buildflags",
"//chromeos:test_support",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//chromeos/strings:strings_grit",
# TODO(https://crbug.com/644336): Make CrasAudioHandler Chrome or Ash only.
......@@ -2486,6 +2487,7 @@ static_library("test_support") {
"//base:i18n",
"//base/test:test_support",
"//cc:test_support",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//chromeos/services/assistant/public/cpp:prefs",
"//ui/platform_window/common",
......
......@@ -237,6 +237,7 @@ test("app_list_unittests") {
"//base",
"//base/test:test_support",
"//chromeos/constants",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//mojo/core/embedder",
"//mojo/public/cpp/bindings",
"//services/content/public/cpp",
......
......@@ -8,7 +8,7 @@
#include "ash/assistant/ui/main_stage/suggestion_chip_view.h"
#include "base/run_loop.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/events/event.h"
#include "ui/views/controls/textfield/textfield.h"
......@@ -208,12 +208,11 @@ class AssistantPageViewTest : public AssistantAshTestBase {
// Counts the number of Assistant interactions that are started.
class AssistantInteractionCounter
: private chromeos::assistant::mojom::AssistantInteractionSubscriber {
: private chromeos::assistant::DefaultAssistantInteractionSubscriber {
public:
explicit AssistantInteractionCounter(
chromeos::assistant::mojom::Assistant* service) {
service->AddAssistantInteractionSubscriber(
receiver_.BindNewPipeAndPassRemote());
service->AddAssistantInteractionSubscriber(BindNewPipeAndPassRemote());
}
AssistantInteractionCounter(AssistantInteractionCounter&) = delete;
AssistantInteractionCounter& operator=(AssistantInteractionCounter&) = delete;
......@@ -222,35 +221,12 @@ class AssistantInteractionCounter
int interaction_count() const { return interaction_count_; }
private:
// AssistantInteractionSubscriber implementation:
// DefaultAssistantInteractionSubscriber implementation:
void OnInteractionStarted(
chromeos::assistant::mojom::AssistantInteractionMetadataPtr) override {
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;
};
......
......@@ -10,11 +10,12 @@
#include "ash/assistant/assistant_interaction_controller.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"
namespace ash {
using chromeos::assistant::DefaultAssistantInteractionSubscriber;
using chromeos::assistant::mojom::AssistantInteractionMetadata;
using chromeos::assistant::mojom::AssistantInteractionMetadataPtr;
using chromeos::assistant::mojom::AssistantInteractionResolution;
......@@ -28,17 +29,12 @@ using chromeos::assistant::mojom::AssistantSuggestionPtr;
// - A conversation is finished before starting a new one.
// - No responses (text, card, ...) are sent before starting or after
// finishing an interaction.
class SanityCheckSubscriber : public AssistantInteractionSubscriber {
class SanityCheckSubscriber : public DefaultAssistantInteractionSubscriber {
public:
SanityCheckSubscriber() : receiver_(this) {}
SanityCheckSubscriber() = default;
~SanityCheckSubscriber() override = default;
mojo::PendingRemote<AssistantInteractionSubscriber>
BindNewPipeAndPassRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
// AssistantInteractionSubscriber implementation:
// DefaultAssistantInteractionSubscriber implementation:
void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override {
if (current_state_ == ConversationState::kInProgress) {
ADD_FAILURE()
......@@ -81,23 +77,6 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber {
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:
void CheckResponse() {
if (current_state_ == ConversationState::kNotStarted)
......@@ -115,26 +94,21 @@ class SanityCheckSubscriber : public AssistantInteractionSubscriber {
};
ConversationState current_state_ = ConversationState::kNotStarted;
mojo::Receiver<AssistantInteractionSubscriber> receiver_;
DISALLOW_COPY_AND_ASSIGN(SanityCheckSubscriber);
};
// Subscriber that tracks the current interaction.
class CurrentInteractionSubscriber : public AssistantInteractionSubscriber {
class CurrentInteractionSubscriber
: public DefaultAssistantInteractionSubscriber {
public:
CurrentInteractionSubscriber() : receiver_(this) {}
CurrentInteractionSubscriber() = default;
CurrentInteractionSubscriber(CurrentInteractionSubscriber&) = delete;
CurrentInteractionSubscriber& operator=(CurrentInteractionSubscriber&) =
delete;
~CurrentInteractionSubscriber() override = default;
mojo::PendingRemote<AssistantInteractionSubscriber>
BindNewPipeAndPassRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
// AssistantInteractionSubscriber implementation:
// DefaultAssistantInteractionSubscriber implementation:
void OnInteractionStarted(AssistantInteractionMetadataPtr metadata) override {
current_interaction_ = *metadata;
}
......@@ -144,27 +118,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber {
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() {
return current_interaction_;
}
......@@ -172,7 +125,6 @@ class CurrentInteractionSubscriber : public AssistantInteractionSubscriber {
private:
base::Optional<AssistantInteractionMetadata> current_interaction_ =
base::nullopt;
mojo::Receiver<AssistantInteractionSubscriber> receiver_;
};
class InteractionResponse::Response {
......
......@@ -278,6 +278,7 @@ source_set("chromeos") {
# TODO: care about enable_basic_printing and enable_print_preview.
"//ash/keyboard/ui",
"//chromeos/services/assistant/public/cpp:interaction_subscriber",
"//printing",
"//remoting/host/it2me:chrome_os_host",
"//services/audio/public/cpp",
......
......@@ -109,7 +109,7 @@
#include "chromeos/dbus/session_manager/session_manager_client.h"
#include "chromeos/printing/printer_configuration.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/settings/cros_settings_names.h"
#include "components/arc/arc_prefs.h"
......@@ -2290,7 +2290,7 @@ void AutotestPrivateEnableAssistantAndWaitForReadyFunction::
// |AutotestPrivateSendAssistantTextQueryFunction| and
// |AutotestPrivateWaitForAssistantQueryStatusFunction|.
class AssistantInteractionHelper
: public chromeos::assistant::mojom::AssistantInteractionSubscriber {
: public chromeos::assistant::DefaultAssistantInteractionSubscriber {
public:
using OnInteractionFinishedCallback = base::OnceCallback<void(bool)>;
......@@ -2305,8 +2305,7 @@ class AssistantInteractionHelper
assistant_.BindNewPipeAndPassReceiver());
// Subscribe to Assistant interaction events.
assistant_->AddAssistantInteractionSubscriber(
assistant_interaction_subscriber_receiver_.BindNewPipeAndPassRemote());
assistant_->AddAssistantInteractionSubscriber(BindNewPipeAndPassRemote());
on_interaction_finished_callback_ =
std::move(on_interaction_finished_callback);
......@@ -2383,21 +2382,7 @@ class AssistantInteractionHelper
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::Receiver<chromeos::assistant::mojom::AssistantInteractionSubscriber>
assistant_interaction_subscriber_receiver_{this};
std::unique_ptr<base::DictionaryValue> query_status_;
base::DictionaryValue result_;
......
......@@ -10,3 +10,15 @@ source_set("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