// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chromeos/ash/experiences/arc/overlay/arc_overlay_controller_impl.h"

#include "ash/test/ash_test_base.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/window.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/test/test_widget_builder.h"

namespace ash {
namespace {

using ArcOverlayControllerImplTest = AshTestBase;

TEST_F(ArcOverlayControllerImplTest, OverlayComesOnTop) {
  auto* host_widget =
      views::test::TestWidgetBuilder().BuildOwnedByNativeWidget();
  auto* host_window = host_widget->GetNativeWindow();

  aura::Window child_window(nullptr);
  child_window.Init(ui::LAYER_NOT_DRAWN);
  host_window->AddChild(&child_window);

  auto* overlay_widget =
      views::test::TestWidgetBuilder().BuildOwnedByNativeWidget();

  // This sets the host_window as `ArcOverlayControllerImpl::host_window_`,
  // which the arc overlay should be hosted by.
  ArcOverlayControllerImpl controller(host_window);

  controller.AttachOverlay(overlay_widget->GetNativeWindow());

  // Make sure that the overlay is at the top of the stack i.e. the last child
  // of `host_window`.
  EXPECT_EQ(host_window->children().back(), overlay_widget->GetNativeWindow());
}

TEST_F(ArcOverlayControllerImplTest,
       OverlayNativeViewHostAccessibleProperties) {
  ArcOverlayControllerImpl controller(views::test::TestWidgetBuilder()
                                          .BuildOwnedByNativeWidget()
                                          ->GetNativeWindow());
  ui::AXNodeData data;

  controller.overlay_container_for_test()
      ->GetViewAccessibility()
      .GetAccessibleNodeData(&data);
  EXPECT_EQ(data.role, ax::mojom::Role::kApplication);
  EXPECT_FALSE(data.HasStringAttribute(ax::mojom::StringAttribute::kName));
  EXPECT_EQ(data.GetNameFrom(), ax::mojom::NameFrom::kAttributeExplicitlyEmpty);
}

}  // namespace
}  // namespace ash
