/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "gtest/gtest.h"
#include "mozilla/TouchEvents.h"
#include "mozilla/dom/MouseEventBinding.h"
#include "TestWidgetEventCtors.h"
namespace mozilla {
/**
* WidgetSimpleGestureEvent and WidgetTouchEvent have user-defined copy
* constructor which do not use the base class's copy constructor. Therefore,
* some base classes' members are not assigned to the new copy.
*/
TEST(WidgetTouchEventCtorTests, WidgetSimpleGestureEvent)
{
WidgetSimpleGestureEvent origin(
true, eSwipeGesture, nullptr);
// WidgetEvent
origin.mRefPoint = {
1,
1};
origin.mFlags.mHandledByAPZ =
true;
// WidgetInputEvent
origin.mModifiers = Modifier::MODIFIER_NUMLOCK;
// WidgetMouseEventBase
origin.mPressure =
0.
4f;
origin.mButton = MouseButton::eMiddle;
origin.mButtons = MouseButtonsFlag::eMiddleFlag;
origin.mInputSource = dom::MouseEvent_Binding::MOZ_SOURCE_TOUCH;
// WidgetSimpleGestureEvent
origin.mAllowedDirections =
1;
origin.mDirection =
2;
origin.mClickCount =
3;
// Should be reset to 0 by the copy constructor
origin.mDelta =
1.
5;
{
WidgetSimpleGestureEvent copy(origin);
EXPECT_EQ(copy.mMessage, origin.mMessage) <<
"CopyCtor: mMessage";
EXPECT_EQ(copy.mClass, origin.mClass) <<
"CopyCtor: mClass";
EXPECT_EQ(copy.mRefPoint, LayoutDeviceIntPoint(
0,
0))
<<
"CopyCtor: mRefPoint";
EXPECT_NE(copy.mRefPoint, origin.mRefPoint) <<
"CopyCtor: mRefPoint";
EXPECT_EQ(copy.mFlags.mHandledByAPZ,
false)
<<
"CopyCtor: mFlags.mHandledByAPZ";
EXPECT_NE(copy.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"CopyCtor: mFlags.mHandledByAPZ";
EXPECT_EQ(copy.mModifiers,
0u) <<
"CopyCtor: mModifiers";
EXPECT_NE(copy.mModifiers, origin.mModifiers) <<
"CopyCtor: mModifiers";
EXPECT_EQ(copy.mPressure,
0.
0f) <<
"CopyCtor: mPressure";
EXPECT_NE(copy.mPressure, origin.mPressure) <<
"CopyCtor: mPressure";
EXPECT_EQ(copy.mButton, MouseButton::ePrimary) <<
"CopyCtor: mButton";
EXPECT_NE(copy.mButton, origin.mButton) <<
"CopyCtor: mButton";
EXPECT_EQ(copy.mButtons, MouseButtonsFlag::eNoButtons)
<<
"CopyCtor: mButtons";
EXPECT_NE(copy.mButtons, origin.mButtons) <<
"CopyCtor: mButtons";
EXPECT_EQ(copy.mInputSource, dom::MouseEvent_Binding::MOZ_SOURCE_MOUSE)
<<
"CopyCtor: mInputSource";
EXPECT_NE(copy.mInputSource, origin.mInputSource)
<<
"CopyCtor: mInputSource";
EXPECT_EQ(copy.mAllowedDirections, origin.mAllowedDirections)
<<
"CopyCtor: mAllowedDirections";
EXPECT_EQ(copy.mDirection, origin.mDirection) <<
"CopyCtor: mDirection";
EXPECT_EQ(copy.mClickCount,
0u) <<
"CopyCtor: mClickCount";
EXPECT_NE(copy.mClickCount, origin.mClickCount) <<
"CopyCtor: mClickCount";
EXPECT_EQ(copy.mDelta, origin.mDelta) <<
"CopyCtor: mDelta";
}
{
WidgetSimpleGestureEvent assigned(
true, eSwipeGesture, nullptr);
assigned = origin;
EXPECT_EQ(assigned.mMessage, origin.mMessage)
<<
"Assignment(Copy): mMessage";
EXPECT_EQ(assigned.mClass, origin.mClass) <<
"Assignment(Copy): mClass";
EXPECT_EQ(assigned.mRefPoint, origin.mRefPoint)
<<
"Assignment(Copy): mRefPoint";
EXPECT_EQ(assigned.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"Assignment(Copy): mFlags.mHandledByAPZ";
EXPECT_EQ(assigned.mModifiers, origin.mModifiers)
<<
"Assignment(Copy): mModifiers";
EXPECT_EQ(assigned.mPressure, origin.mPressure)
<<
"Assignment(Copy): mPressure";
EXPECT_EQ(assigned.mButton, origin.mButton) <<
"Assignment(Copy): mButton";
EXPECT_EQ(assigned.mButtons, origin.mButtons)
<<
"Assignment(Copy): mButtons";
EXPECT_EQ(assigned.mInputSource, origin.mInputSource)
<<
"Assignment(Copy): mInputSource";
EXPECT_EQ(assigned.mAllowedDirections, origin.mAllowedDirections)
<<
"Assignment(Copy): mAllowedDirections";
EXPECT_EQ(assigned.mDirection, origin.mDirection)
<<
"Assignment(Copy): mDirection";
EXPECT_EQ(assigned.mClickCount, origin.mClickCount)
<<
"Assignment(Copy): mClickCount";
EXPECT_EQ(assigned.mDelta, origin.mDelta) <<
"Assignment(Copy): mDelta";
}
{
WidgetSimpleGestureEvent move(std::move(origin));
EXPECT_EQ(move.mMessage, origin.mMessage) <<
"MoveCtor: mMessage";
EXPECT_EQ(move.mClass, origin.mClass) <<
"MoveCtor: mClass";
EXPECT_EQ(move.mRefPoint, LayoutDeviceIntPoint(
0,
0))
<<
"MoveCtor: mRefPoint";
EXPECT_NE(move.mRefPoint, origin.mRefPoint) <<
"MoveCtor: mRefPoint";
EXPECT_EQ(move.mFlags.mHandledByAPZ,
false)
<<
"MoveCtor: mFlags.mHandledByAPZ";
EXPECT_NE(move.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"MoveCtor: mFlags.mHandledByAPZ";
EXPECT_EQ(move.mModifiers,
0u) <<
"MoveCtor: mModifiers";
EXPECT_NE(move.mModifiers, origin.mModifiers) <<
"MoveCtor: mModifiers";
EXPECT_EQ(move.mPressure,
0.
0f) <<
"MoveCtor: mPressure";
EXPECT_NE(move.mPressure, origin.mPressure) <<
"MoveCtor: mPressure";
EXPECT_EQ(move.mButton, MouseButton::ePrimary) <<
"MoveCtor: mButton";
EXPECT_NE(move.mButton, origin.mButton) <<
"MoveCtor: mButton";
EXPECT_EQ(move.mButtons, MouseButtonsFlag::eNoButtons)
<<
"MoveCtor: mButtons";
EXPECT_NE(move.mButtons, origin.mButtons) <<
"MoveCtor: mButtons";
EXPECT_EQ(move.mInputSource, dom::MouseEvent_Binding::MOZ_SOURCE_MOUSE)
<<
"MoveCtor: mInputSource";
EXPECT_NE(move.mInputSource, origin.mInputSource)
<<
"MoveCtor: mInputSource";
EXPECT_EQ(move.mAllowedDirections, origin.mAllowedDirections)
<<
"MoveCtor: mAllowedDirections";
EXPECT_EQ(move.mDirection, origin.mDirection) <<
"MoveCtor: mDirection";
EXPECT_EQ(move.mClickCount,
0u) <<
"MoveCtor: mClickCount";
EXPECT_NE(move.mClickCount, origin.mClickCount) <<
"MoveCtor: mClickCount";
EXPECT_EQ(move.mDelta, origin.mDelta) <<
"MoveCtor: mDelta";
}
{
WidgetSimpleGestureEvent originToBeMoved(
true, eSwipeGesture, nullptr);
CompletelyCopy(origin, originToBeMoved);
WidgetSimpleGestureEvent assigned(
true, eSwipeGestureEnd, nullptr);
assigned = std::move(originToBeMoved);
EXPECT_EQ(assigned.mMessage, origin.mMessage)
<<
"Assignment(Move): mMessage";
EXPECT_EQ(assigned.mClass, origin.mClass) <<
"Assignment(Move): mClass";
EXPECT_EQ(assigned.mRefPoint, origin.mRefPoint)
<<
"Assignment(Move): mRefPoint";
EXPECT_EQ(assigned.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"Assignment(Move): mFlags.mHandledByAPZ";
EXPECT_EQ(assigned.mModifiers, origin.mModifiers)
<<
"Assignment(Move): mModifiers";
EXPECT_EQ(assigned.mPressure, origin.mPressure)
<<
"Assignment(Move): mPressure";
EXPECT_EQ(assigned.mButton, origin.mButton) <<
"Assignment(Move): mButton";
EXPECT_EQ(assigned.mButtons, origin.mButtons)
<<
"Assignment(Move): mButtons";
EXPECT_EQ(assigned.mInputSource, origin.mInputSource)
<<
"Assignment(Move): mInputSource";
EXPECT_EQ(assigned.mAllowedDirections, origin.mAllowedDirections)
<<
"Assignment(Move): mAllowedDirections";
EXPECT_EQ(assigned.mDirection, origin.mDirection)
<<
"Assignment(Move): mDirection";
EXPECT_EQ(assigned.mClickCount, origin.mClickCount)
<<
"Assignment(Move): mClickCount";
EXPECT_EQ(assigned.mDelta, origin.mDelta) <<
"Assignment(Move): mDelta";
}
}
TEST(WidgetTouchEventCtorTests, WidgetTouchEvent)
{
WidgetTouchEvent origin(
true, eTouchStart, nullptr);
// WidgetEvent
origin.mRefPoint = {
1,
1};
origin.mFlags.mCancelable =
false;
// should be defaulted to true by the copy constructor
origin.mFlags.mHandledByAPZ =
true;
// should be copied by the copy constructor
// WidgetInputEvent
origin.mModifiers = Modifier::MODIFIER_NUMLOCK;
// WidgetTouchEvent
origin.mButton = MouseButton::eMiddle;
origin.mButtons = MouseButtonsFlag::eMiddleFlag;
origin.mInputSource = dom::MouseEvent_Binding::MOZ_SOURCE_MOUSE;
origin.mCallbackId = Some(
256);
auto touch = MakeRefPtr<dom::Touch>(
3, LayoutDeviceIntPoint{
0,
0},
LayoutDeviceIntPoint{
1,
1},
0.
0f,
0.
5f);
origin.mTouches.AppendElement(touch);
{
WidgetTouchEvent copy(origin);
EXPECT_EQ(copy.mMessage, origin.mMessage) <<
"CopyCtor: mMessage";
EXPECT_EQ(copy.mClass, origin.mClass) <<
"CopyCtor: mClass";
EXPECT_EQ(copy.mRefPoint, LayoutDeviceIntPoint(
0,
0))
<<
"CopyCtor: mRefPoint";
EXPECT_NE(copy.mRefPoint, origin.mRefPoint) <<
"CopyCtor: mRefPoint";
EXPECT_EQ(copy.mFlags.mCancelable,
true) <<
"CopyCtor: mFlags.mCancelable";
EXPECT_NE(copy.mFlags.mCancelable, origin.mFlags.mCancelable)
<<
"CopyCtor: mFlags.mCancelable";
EXPECT_EQ(copy.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"CopyCtor: mFlags.mHandledByAPZ";
EXPECT_EQ(copy.mModifiers, origin.mModifiers) <<
"CopyCtor: mModifiers";
EXPECT_EQ(copy.mTouches.Length(), origin.mTouches.Length())
<<
"CopyCtor: mTouches.Length()";
EXPECT_EQ(copy.mTouches.SafeElementAt(
0), touch) <<
"CopyCtor: mTouches[0]";
EXPECT_EQ(copy.mButton, origin.mButton) <<
"CopyCtor: mButton";
EXPECT_EQ(copy.mButtons, origin.mButtons) <<
"CopyCtor: mButtons";
EXPECT_EQ(copy.mInputSource, origin.mInputSource)
<<
"CopyCtor: mInputSource";
EXPECT_EQ(copy.mCallbackId, Nothing{}) <<
"CopyCtor: mCallbackId";
EXPECT_NE(copy.mCallbackId, origin.mCallbackId) <<
"CopyCtor: mCallbackId";
}
// FYI: No assignment operator
static_assert(!std::is_copy_assignable_v<WidgetTouchEvent>,
"Add the test for the copy assignment operator");
{
WidgetTouchEvent originToBeMoved(
true, eTouchStart, nullptr);
CompletelyCopy(origin, originToBeMoved);
WidgetTouchEvent move(std::move(originToBeMoved));
EXPECT_EQ(move.mMessage, origin.mMessage) <<
"MoveCtor: mMessage";
EXPECT_EQ(move.mClass, origin.mClass) <<
"MoveCtor: mClass";
EXPECT_EQ(move.mRefPoint, origin.mRefPoint) <<
"MoveCtor: mRefPoint";
EXPECT_EQ(move.mFlags.mCancelable, origin.mFlags.mCancelable)
<<
"MoveCtor: mFlags.mCancelable";
EXPECT_EQ(move.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"MoveCtor: mFlags.mHandledByAPZ";
EXPECT_EQ(move.mModifiers, origin.mModifiers) <<
"MoveCtor: mModifiers";
EXPECT_EQ(move.mTouches.Length(), origin.mTouches.Length())
<<
"MoveCtor: mTouches.Length()";
EXPECT_EQ(move.mTouches.SafeElementAt(
0), touch) <<
"MoveCtor: mTouches[0]";
EXPECT_EQ(move.mButton, origin.mButton) <<
"MoveCtor: mButton";
EXPECT_EQ(move.mButtons, origin.mButtons) <<
"MoveCtor: mButtons";
EXPECT_EQ(move.mInputSource, origin.mInputSource)
<<
"MoveCtor: mInputSource";
EXPECT_EQ(move.mCallbackId, Nothing{}) <<
"MoveCtor: mCallbackId";
EXPECT_NE(move.mCallbackId, origin.mCallbackId) <<
"MoveCtor: mCallbackId";
}
{
WidgetTouchEvent originToBeMoved(
true, eTouchStart, nullptr);
CompletelyCopy(origin, originToBeMoved);
WidgetTouchEvent assigned(
true, eTouchEnd, nullptr);
assigned = std::move(originToBeMoved);
EXPECT_EQ(assigned.mMessage, origin.mMessage)
<<
"Assignment(Move): mMessage";
EXPECT_EQ(assigned.mClass, origin.mClass) <<
"Assignment(Move): mClass";
EXPECT_EQ(assigned.mRefPoint, origin.mRefPoint)
<<
"Assignment(Move): mRefPoint";
EXPECT_EQ(assigned.mFlags.mCancelable, origin.mFlags.mCancelable)
<<
"Assignment(Move): mFlags.mCancelable";
EXPECT_EQ(assigned.mFlags.mHandledByAPZ, origin.mFlags.mHandledByAPZ)
<<
"Assignment(Move): mFlags.mHandledByAPZ";
EXPECT_EQ(assigned.mModifiers, origin.mModifiers)
<<
"Assignment(Move): mModifiers";
EXPECT_EQ(assigned.mTouches.Length(), origin.mTouches.Length())
<<
"Assignment(Move): mTouches.Length()";
EXPECT_EQ(assigned.mTouches.SafeElementAt(
0), touch)
<<
"Assignment(Move): mTouches[0]";
EXPECT_EQ(assigned.mButton, origin.mButton) <<
"Assignment(Move): mButton";
EXPECT_EQ(assigned.mButtons, origin.mButtons)
<<
"Assignment(Move): mButtons";
EXPECT_EQ(assigned.mInputSource, origin.mInputSource)
<<
"Assignment(Move): mInputSource";
EXPECT_EQ(assigned.mCallbackId, origin.mCallbackId)
<<
"Assignment(Move): mCallbackId";
}
}
}
// namespace mozilla