#ifndef UI_VIEWS_INTERACTION_INTERACTIVE_VIEWS_TEST_INTERNAL_H_
#define UI_VIEWS_INTERACTION_INTERACTIVE_VIEWS_TEST_INTERNAL_H_
#include <map>
#include <memory>
#include <string>
#include <utility>
#include "ui/base/interaction/element_identifier.h"
#include "ui/base/interaction/element_tracker.h"
#include "ui/base/interaction/interaction_sequence.h"
#include "ui/base/interaction/interaction_test_util.h"
#include "ui/base/interaction/interactive_test_internal.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/views/interaction/interaction_test_util_mouse.h"
namespace views {
class NativeWindowTracker;
}
namespace views::test {
class InteractiveViewsTestApi;
namespace internal {
class InteractiveViewsTestPrivate
: public ui::test::internal::InteractiveTestPrivate {
public:
explicit InteractiveViewsTestPrivate(
std::unique_ptr<ui::test::InteractionTestUtil> test_util);
~InteractiveViewsTestPrivate() override;
void OnSequenceComplete() override;
void OnSequenceAborted(
const ui::InteractionSequence::AbortedData& data) override;
InteractionTestUtilMouse& mouse_util() { return *mouse_util_; }
gfx::NativeWindow GetWindowHintFor(ui::TrackedElement* el);
protected:
virtual gfx::NativeWindow GetNativeWindowFromElement(
ui::TrackedElement* el) const;
virtual gfx::NativeWindow GetNativeWindowFromContext(
ui::ElementContext context) const;
private:
friend class views::test::InteractiveViewsTestApi;
class WindowHintCacheEntry;
std::unique_ptr<InteractionTestUtilMouse> mouse_util_;
std::string mouse_error_message_;
std::map<ui::ElementContext, WindowHintCacheEntry> window_hint_cache_;
};
template <size_t N, typename F>
using ViewArgType = std::remove_cv_t<
std::remove_pointer_t<ui::test::internal::NthArgumentOf<N, F>>>;
}
}
#endif