// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/views/widget/sublevel_manager.h" #include <algorithm> #include <memory> #include <string> #include <tuple> #include <utility> #include "build/buildflag.h" #include "ui/views/test/views_test_base.h" #include "ui/views/test/widget_test.h" #if BUILDFLAG(IS_MAC) #include "base/mac/mac_util.h" #endif namespace views { enum WidgetShowType { … }; class SublevelManagerTest : public ViewsTestBase, public testing::WithParamInterface< std::tuple<ViewsTestBase::NativeWidgetType, WidgetShowType, Widget::InitParams::Activatable>> { … }; // Widgets should be stacked according to their sublevel regardless // the order of showing. TEST_P(SublevelManagerTest, EnsureSublevel) { … } // Level should takes precedence over sublevel. // TODO(crbug.com/40237029): disabled because currently non-desktop widgets // ignore z-order level (except on ash) and we don't have a reliable way to // test desktop widgets. TEST_P(SublevelManagerTest, DISABLED_LevelSupersedeSublevel) { … } // Widgets are re-ordered only within the same level. TEST_P(SublevelManagerTest, SublevelOnlyEnsuredWithinSameLevel) { … } // SetSublevel() should trigger re-ordering. TEST_P(SublevelManagerTest, SetSublevel) { … } TEST_P(SublevelManagerTest, GetSublevel) { … } // The stacking order between non-sibling widgets depend on the sublevels // of the children of their most recent common ancestor. TEST_P(SublevelManagerTest, GrandChildren) { … } // The sublevel manager should be able to handle the Widget re-parenting. TEST_P(SublevelManagerTest, WidgetReparent) { … } // Invisible widgets should be skipped to work around MacOS where // stacking above them is no-op (crbug.com/1369180). // When they become invisible, sublevels should be respected. TEST_P(SublevelManagerTest, SkipInvisibleWidget) { … } // TODO(crbug.com/40227915): We should also test NativeWidgetType::kDesktop, // but currently IsWindowStackedAbove() does not work for desktop widgets. INSTANTIATE_TEST_SUITE_P(…); } // namespace views