blob: b8ed77342ca598e2685362251058b0dac5a372ef [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 "src/ui/a11y/lib/screen_reader/node_describer.h"
#include <fuchsia/accessibility/semantics/cpp/fidl.h>
#include <memory>
#include "src/lib/testing/loop_fixture/real_loop_fixture.h"
#include "src/ui/a11y/lib/screen_reader/i18n/tests/mocks/mock_message_formatter.h"
// This header file has been generated from the strings library fuchsia.intl.l10n.
#include "fuchsia/intl/l10n/cpp/fidl.h"
namespace accessibility_test {
namespace {
using fuchsia::accessibility::semantics::Node;
using fuchsia::accessibility::semantics::Role;
using fuchsia::intl::l10n::MessageIds;
class NodeDescriberTest : public gtest::RealLoopFixture {
public:
void SetUp() override {
auto mock_message_formatter = std::make_unique<MockMessageFormatter>();
mock_message_formatter_ptr_ = mock_message_formatter.get();
node_describer_ = std::make_unique<a11y::NodeDescriber>(std::move(mock_message_formatter));
}
protected:
std::unique_ptr<a11y::NodeDescriber> node_describer_;
MockMessageFormatter* mock_message_formatter_ptr_;
};
TEST_F(NodeDescriberTest, BasicNode) {
Node node;
auto result = node_describer_->DescribeNode(&node);
ASSERT_EQ(result.size(), 1u);
EXPECT_FALSE(result[0].utterance.has_message());
}
TEST_F(NodeDescriberTest, NodeWithALabel) {
Node node;
node.mutable_attributes()->set_label("foo");
auto result = node_describer_->DescribeNode(&node);
ASSERT_EQ(result.size(), 1u);
ASSERT_TRUE(result[0].utterance.has_message());
ASSERT_EQ(result[0].utterance.message(), "foo");
}
TEST_F(NodeDescriberTest, NodeButton) {
Node node;
node.mutable_attributes()->set_label("foo");
node.set_role(Role::BUTTON);
mock_message_formatter_ptr_->SetMessageForId(static_cast<uint64_t>(MessageIds::ROLE_BUTTON),
"button");
auto result = node_describer_->DescribeNode(&node);
ASSERT_EQ(result.size(), 2u);
ASSERT_TRUE(result[0].utterance.has_message());
ASSERT_EQ(result[0].utterance.message(), "foo");
ASSERT_TRUE(result[1].utterance.has_message());
ASSERT_EQ(result[1].utterance.message(), "button");
}
TEST_F(NodeDescriberTest, NodeHeader) {
Node node;
node.mutable_attributes()->set_label("foo");
node.set_role(Role::HEADER);
mock_message_formatter_ptr_->SetMessageForId(static_cast<uint64_t>(MessageIds::ROLE_HEADER),
"header");
auto result = node_describer_->DescribeNode(&node);
ASSERT_EQ(result.size(), 2u);
ASSERT_TRUE(result[0].utterance.has_message());
ASSERT_EQ(result[0].utterance.message(), "foo");
ASSERT_TRUE(result[1].utterance.has_message());
ASSERT_EQ(result[1].utterance.message(), "header");
}
TEST_F(NodeDescriberTest, NodeImage) {
Node node;
node.mutable_attributes()->set_label("foo");
node.set_role(Role::IMAGE);
mock_message_formatter_ptr_->SetMessageForId(static_cast<uint64_t>(MessageIds::ROLE_IMAGE),
"image");
auto result = node_describer_->DescribeNode(&node);
ASSERT_EQ(result.size(), 2u);
ASSERT_TRUE(result[0].utterance.has_message());
ASSERT_EQ(result[0].utterance.message(), "foo");
ASSERT_TRUE(result[1].utterance.has_message());
ASSERT_EQ(result[1].utterance.message(), "image");
}
} // namespace
} // namespace accessibility_test