#ifndef UI_AURA_TEST_TEST_WINDOW_BUILDER_H_
#define UI_AURA_TEST_TEST_WINDOW_BUILDER_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/window.h"
#include "ui/base/class_property.h"
#include "ui/compositor/layer_type.h"
#include "ui/gfx/geometry/rect.h"
namespace aura::test {
struct WindowBuilderParams {
raw_ptr<WindowDelegate> delegate = nullptr;
raw_ptr<Window> parent = nullptr;
gfx::Rect bounds;
client::WindowType window_type = client::WINDOW_TYPE_NORMAL;
ui::LayerType layer_type = ui::LAYER_TEXTURED;
int window_id = Window::kInitialId;
bool show = true;
};
class TestWindowBuilder {
public:
explicit TestWindowBuilder(WindowBuilderParams params = {});
TestWindowBuilder(TestWindowBuilder& other);
TestWindowBuilder& operator=(TestWindowBuilder& params) = delete;
~TestWindowBuilder();
TestWindowBuilder& SetParent(Window* parent);
TestWindowBuilder& SetWindowType(client::WindowType type);
TestWindowBuilder& SetWindowId(int id);
TestWindowBuilder& SetBounds(const gfx::Rect& bounds);
TestWindowBuilder& SetWindowTitle(const std::u16string& title);
TestWindowBuilder& SetDelegate(WindowDelegate* delegate);
TestWindowBuilder& SetColorWindowDelegate(SkColor color);
TestWindowBuilder& SetTestWindowDelegate();
TestWindowBuilder& AllowAllWindowStates();
TestWindowBuilder& SetShow(bool show);
template <typename T>
TestWindowBuilder& SetWindowProperty(const ui::ClassProperty<T>* property,
T value) {
init_properties_.SetProperty(property, value);
return *this;
}
[[nodiscard]] virtual std::unique_ptr<Window> Build();
protected:
std::unique_ptr<Window> CreateWindowInternal();
const WindowBuilderParams& params() const { return params_; }
bool built() const { return built_; }
Window* release_parent() {
auto* r = params_.parent.get();
params_.parent = nullptr;
return r;
}
private:
WindowBuilderParams params_;
std::u16string window_title_;
ui::PropertyHandler init_properties_;
bool built_ = false;
};
}
#endif