+ DALI_TEST_CHECK(!gTouchedOutside);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyAutoHide(void)
+{
+ ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
+ tet_infoline(" UtcDaliPopupPropertyAutoHide");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ ConnectStateSignals(popup);
+
+ Actor container = Actor::New();
+ PushButton button1 = PushButton::New();
+ button1.SetProperty(Actor::Property::SIZE, DEFAULT_BUTTON_SIZE.GetVectorXY());
+ container.Add(button1);
+ popup.SetFooter(container);
+
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ float getAnimationDuration = 0.0f;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::ANIMATION_DURATION).Get(getAnimationDuration));
+ DALI_TEST_EQUALS(getAnimationDuration, 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ popup.SetProperty(Popup::Property::AUTO_HIDE_DELAY, 200);
+ int getAutoHideDelay = 0;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::AUTO_HIDE_DELAY).Get(getAutoHideDelay));
+ DALI_TEST_EQUALS(getAutoHideDelay, 200, TEST_LOCATION);
+
+ application.GetScene().Add(popup);
+
+ DALI_TEST_EQUALS(gPopupState, Popup::HIDDEN, TEST_LOCATION);
+
+ // Show
+ // Note: in most popup animation implementations show would result in
+ // popup being onstage immediately following Show(). However we can't
+ // assume for all. e.g. If one creates a animation with a delay.
+ popup.SetDisplayState(Popup::SHOWN);
+
+ DALI_TEST_EQUALS(gPopupState, Popup::SHOWN, TEST_LOCATION);
+
+ for(int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ // Force the timer used by the popup to expire,
+ // this will cause the popup to hide automatically.
+ Dali::Timer timer = Timer::New(0);
+ timer.MockEmitSignal();
+
+ DALI_TEST_EQUALS(gPopupState, Popup::HIDDEN, TEST_LOCATION);
+
+ END_TEST;
+}
+
+/*
+ * This test checks all animation modes to confirm they all trigger all display states at the expected times.
+ */
+int UtcDaliPopupPropertyAnimationMode(void)
+{
+ ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
+ tet_infoline(" UtcDaliPopupPropertyAnimationMode");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ ConnectStateSignals(popup);
+ popup.SetTitle(TextLabel::New("Title"));
+ application.GetScene().Add(popup);
+
+ std::string animationModes[] = {"NONE", "ZOOM", "FADE", "CUSTOM"};
+
+ // Try both default and zero animation duration, as zero has a special case for some animation types.
+ for(int j = 0; j <= 1; j++)
+ {
+ // On the second loop, set duration to zero.
+ if(j == 1)
+ {
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ }
+
+ // Loop through 4 animation modes.
+ for(int i = 0; i < 4; i++)
+ {
+ popup.SetProperty(Popup::Property::ANIMATION_MODE, animationModes[i]);
+
+ std::string checkMode;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::ANIMATION_MODE).Get(checkMode))
+
+ DALI_TEST_EQUALS(checkMode, animationModes[i], TEST_LOCATION);
+
+ popup.SetProperty(Toolkit::Popup::Property::DISPLAY_STATE, "SHOWN");
+ std::string resultState;
+
+ // Only wait for animation if it isn't instant.
+ if(j == 0)
+ {
+ DALI_TEST_EQUALS(gPopupState, Popup::SHOWING, TEST_LOCATION);
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE).Get(resultState));
+ DALI_TEST_EQUALS(resultState, "SHOWING", TEST_LOCATION);
+ WaitAnimation(application);
+ }
+
+ DALI_TEST_EQUALS(gPopupState, Popup::SHOWN, TEST_LOCATION);
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE).Get(resultState));
+ DALI_TEST_EQUALS(resultState, "SHOWN", TEST_LOCATION);
+ popup.SetDisplayState(Popup::HIDDEN);
+
+ if(j == 0)
+ {
+ DALI_TEST_EQUALS(gPopupState, Popup::HIDING, TEST_LOCATION);
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE).Get(resultState));
+ DALI_TEST_EQUALS(resultState, "HIDING", TEST_LOCATION);
+ WaitAnimation(application);
+ }
+
+ DALI_TEST_EQUALS(gPopupState, Popup::HIDDEN, TEST_LOCATION);
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE).Get(resultState));
+ DALI_TEST_EQUALS(resultState, "HIDDEN", TEST_LOCATION);
+ }
+ }
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyTitle(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyTitle");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+
+ std::string testLabelText = "TitleTest";
+ TextLabel titleLabel = TextLabel::New();
+ titleLabel.SetProperty(Toolkit::TextLabel::Property::TEXT, testLabelText);
+ Actor title = titleLabel;
+ Property::Map map;
+ Scripting::CreatePropertyMap(title, map);
+ popup.SetProperty(Toolkit::Popup::Property::TITLE, map);
+
+ Property::Map resultMap;
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::TITLE).Get(resultMap));
+
+ Property::Value* resultProperty = resultMap.Find("text");
+ DALI_TEST_CHECK(resultProperty);
+
+ std::string resultText;
+ DALI_TEST_CHECK(resultProperty->Get(resultText));
+
+ DALI_TEST_EQUALS(resultText, testLabelText, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyContent(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyContent");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+
+ std::string testLabelText = "ContentTest";
+ TextLabel contentLabel = TextLabel::New();
+ contentLabel.SetProperty(Toolkit::TextLabel::Property::TEXT, testLabelText);
+ Actor content = contentLabel;
+ Property::Map map;
+ Scripting::CreatePropertyMap(content, map);
+ popup.SetProperty(Toolkit::Popup::Property::CONTENT, map);
+
+ Property::Map resultMap;
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::CONTENT).Get(resultMap));
+
+ Property::Value* resultProperty = resultMap.Find("text");
+ DALI_TEST_CHECK(resultProperty);
+
+ std::string resultText;
+ DALI_TEST_CHECK(resultProperty->Get(resultText));
+
+ DALI_TEST_EQUALS(resultText, testLabelText, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyFooter(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyFooter");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+
+ std::string testLabelText = "FooterTest";
+ TextLabel footerLabel = TextLabel::New();
+ footerLabel.SetProperty(Toolkit::TextLabel::Property::TEXT, testLabelText);
+ Actor footer = footerLabel;
+ Property::Map map;
+ Scripting::CreatePropertyMap(footer, map);
+ popup.SetProperty(Toolkit::Popup::Property::FOOTER, map);
+
+ Property::Map resultMap;
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::FOOTER).Get(resultMap));
+
+ Property::Value* resultProperty = resultMap.Find("text");
+ DALI_TEST_CHECK(resultProperty);
+
+ std::string resultText;
+ DALI_TEST_CHECK(resultProperty->Get(resultText));
+
+ DALI_TEST_EQUALS(resultText, testLabelText, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyContextualMode(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyContextualMode");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ std::string testLabelText = "ContentTest";
+
+ TextLabel contentLabel = TextLabel::New();
+
+ popup.SetContent(contentLabel);
+
+ // Placement actor to parent the popup from so the popup's contextual position can be relative to it.
+ Actor placement = Actor::New();
+ placement.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ placement.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ placement.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
+ placement.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
+ application.GetScene().Add(placement);
+
+ placement.Add(popup);
+
+ // Test all contextual modes.
+ const char* mode[5] = {"NON_CONTEXTUAL", "ABOVE", "RIGHT", "BELOW", "LEFT"};
+ Vector2 offsetValues[5];
+ offsetValues[0] = Vector2(0.375f, 0.0f);
+ offsetValues[1] = Vector2(-0.125f, -10.5f);
+ offsetValues[2] = Vector2(10.875f, -0.5f);
+ offsetValues[3] = Vector2(-0.125f, 10.5f);
+ offsetValues[4] = Vector2(-10.875f, -0.5f);
+
+ for(int i = 0; i < 5; ++i)
+ {
+ popup.SetProperty(Toolkit::Popup::Property::CONTEXTUAL_MODE, mode[i]);
+
+ std::string propertyResult;
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::CONTEXTUAL_MODE).Get(propertyResult));
+ DALI_TEST_EQUALS(propertyResult, std::string(mode[i]), TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ // Check the position of the label within the popup.
+ DALI_TEST_EQUALS(contentLabel.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).GetVectorXY(), offsetValues[i], TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+ }
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyBacking(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyBacking");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ application.GetScene().Add(popup);
+
+ Actor backing = popup.FindChildByName("popupBacking");
+ DALI_TEST_CHECK(backing);
+
+ DALI_TEST_EQUALS(backing.GetCurrentProperty<float>(Actor::Property::OPACITY), 1.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ // Check enabled property.
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(backing.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.5f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(backing.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ popup.SetProperty(Popup::Property::BACKING_ENABLED, false);
+ bool propertyResult;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::BACKING_ENABLED).Get(propertyResult));
+ DALI_TEST_EQUALS(propertyResult, false, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(backing.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(backing.GetCurrentProperty<float>(Actor::Property::OPACITY), 0.0f, Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ // Check color property.
+ popup.SetProperty(Popup::Property::BACKING_ENABLED, true);
+ popup.SetProperty(Popup::Property::BACKING_COLOR, Vector4(1.0f, 0.0f, 0.0f, 1.0f));
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ Vector4 resultColor;
+ popup.GetProperty(Popup::Property::BACKING_COLOR).Get(resultColor);
+ DALI_TEST_EQUALS(resultColor, Vector4(1.0f, 0.0f, 0.0f, 1.0f), Math::MACHINE_EPSILON_0, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyBackgroundImage(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyBackgroundImage");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ application.GetScene().Add(popup);
+
+ // Check setting an image
+ popup.SetProperty(Toolkit::Popup::Property::POPUP_BACKGROUND_IMAGE, "invalid-image.png");
+ std::string resultString;
+ popup.GetProperty(Toolkit::Popup::Property::POPUP_BACKGROUND_IMAGE).Get(resultString);
+ DALI_TEST_EQUALS(resultString, "invalid-image.png", TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyCustomAnimation(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyCustomAnimation");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ TextLabel content = TextLabel::New("text");
+ popup.SetContent(content);
+
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 1.0f);
+ popup.SetProperty(Popup::Property::ANIMATION_MODE, "CUSTOM");
+
+ Actor popupContainer = popup.FindChildByName("popupContainer");
+ DALI_TEST_CHECK(popupContainer);
+
+ Vector3 entryAnimationDestination(300.0f, 200.0f, 0.0f);
+ Vector3 exitAnimationDestination(-300.0f, -200.0f, 0.0f);
+
+ Property::Map animationMapEntry;
+ animationMapEntry.Insert("actor", "customAnimationPopup");
+ animationMapEntry.Insert("property", "position");
+ animationMapEntry.Insert("value", entryAnimationDestination);
+ animationMapEntry.Insert("alphaFunction", "EASE_OUT");
+
+ Property::Array timePeriodMapEntry;
+ timePeriodMapEntry.PushBack(0.0f);
+ timePeriodMapEntry.PushBack(1.0f);
+
+ animationMapEntry.Insert("timePeriod", timePeriodMapEntry);
+
+ Property::Map animationMapExit;
+ animationMapExit.Insert("actor", "customAnimationPopup");
+ animationMapExit.Insert("property", "position");
+ animationMapExit.Insert("value", exitAnimationDestination);
+ animationMapExit.Insert("alphaFunction", "EASE_IN");
+
+ Property::Array timePeriodMapExit;
+ timePeriodMapExit.PushBack(0.0f);
+ timePeriodMapExit.PushBack(1.0f);
+
+ animationMapExit.Insert("timePeriod", timePeriodMapExit);
+
+ popup.SetProperty(Toolkit::Popup::Property::ENTRY_ANIMATION, animationMapEntry);
+ popup.SetProperty(Toolkit::Popup::Property::EXIT_ANIMATION, animationMapExit);
+
+ Property::Map resultMap;
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::ENTRY_ANIMATION).Get(resultMap));
+ DALI_TEST_EQUALS(resultMap.Count(), 0u, TEST_LOCATION);
+ DALI_TEST_CHECK(popup.GetProperty(Toolkit::Popup::Property::EXIT_ANIMATION).Get(resultMap));
+ DALI_TEST_EQUALS(resultMap.Count(), 0u, TEST_LOCATION);
+
+ application.GetScene().Add(popup);
+ popup.SetDisplayState(Popup::SHOWN);
+
+ for(int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ // Test the popup has animated to it's entry-transition destination.
+ DALI_TEST_EQUALS(popupContainer.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), entryAnimationDestination, 0.1f, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+
+ for(int j = 0; j < RENDER_ANIMATION_TEST_DURATION_FRAMES; j++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ DALI_TEST_EQUALS(popupContainer.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), exitAnimationDestination, 0.1f, TEST_LOCATION);
+
+ END_TEST;
+}
+
+static bool gPushButtonClicked;
+static bool PushButtonClicked(Button button)
+{
+ gPushButtonClicked = true;
+ return true;
+}
+
+int UtcDaliPopupPropertyTouchTransparent(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyTouchTransparent");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ TextLabel content = TextLabel::New("text");
+ popup.SetContent(content);
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ popup.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ popup.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ popup.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+ popup.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
+
+ // Create a button (to go underneath the popup).
+ PushButton button = Toolkit::PushButton::New();
+ button.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ button.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ button.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+ button.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
+
+ button.ClickedSignal().Connect(&PushButtonClicked);
+
+ application.GetScene().Add(button);
+
+ button.Add(popup);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ gPushButtonClicked = false;
+ Dali::Integration::TouchEvent event;
+
+ // Perform a click, the popup should block the click from hitting the button.
+ event = Dali::Integration::TouchEvent();
+ event.AddPoint(GetPointDown());
+ application.ProcessEvent(event);
+ application.SendNotification();
+ application.Render();
+
+ event = Dali::Integration::TouchEvent();
+ event.AddPoint(GetPointUp());
+ application.ProcessEvent(event);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(!gPushButtonClicked);
+
+ // Perform a wheel event
+ Dali::Integration::WheelEvent wheelEvent(Dali::Integration::WheelEvent::MOUSE_WHEEL, 0, 0u, Vector2(10.0f, 10.0f), 1, 1000u);
+ application.ProcessEvent(wheelEvent);
+ application.SendNotification();
+ application.Render();
+
+ // Enable touch transparency.
+ popup.SetProperty(Popup::Property::TOUCH_TRANSPARENT, true);
+ bool propertyResult;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::TOUCH_TRANSPARENT).Get(propertyResult));
+ DALI_TEST_EQUALS(propertyResult, true, TEST_LOCATION);
+
+ // Perform a click, the popup should allow the click to travel through to the button.
+ event = Dali::Integration::TouchEvent();
+ event.AddPoint(GetPointDown());
+ application.ProcessEvent(event);
+ application.SendNotification();
+ application.Render();
+
+ event = Dali::Integration::TouchEvent();
+ event.AddPoint(GetPointUp());
+ application.ProcessEvent(event);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(gPushButtonClicked);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyTail(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyTail");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ popup.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ popup.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ popup.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+ popup.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
+ TextLabel content = TextLabel::New("text");
+ popup.SetContent(content);
+
+ std::string imageFilename = "invalid-image.jpg";
+ popup.SetProperty(Popup::Property::TAIL_DOWN_IMAGE, imageFilename);
+ popup.SetProperty(Popup::Property::TAIL_UP_IMAGE, imageFilename);
+ popup.SetProperty(Popup::Property::TAIL_RIGHT_IMAGE, imageFilename);
+ popup.SetProperty(Popup::Property::TAIL_LEFT_IMAGE, imageFilename);
+
+ std::string resultString;
+ popup.GetProperty(Toolkit::Popup::Property::TAIL_DOWN_IMAGE).Get(resultString);
+ DALI_TEST_EQUALS(resultString, imageFilename, TEST_LOCATION);
+ popup.GetProperty(Toolkit::Popup::Property::TAIL_UP_IMAGE).Get(resultString);
+ DALI_TEST_EQUALS(resultString, imageFilename, TEST_LOCATION);
+ popup.GetProperty(Toolkit::Popup::Property::TAIL_RIGHT_IMAGE).Get(resultString);
+ DALI_TEST_EQUALS(resultString, imageFilename, TEST_LOCATION);
+ popup.GetProperty(Toolkit::Popup::Property::TAIL_LEFT_IMAGE).Get(resultString);
+ DALI_TEST_EQUALS(resultString, imageFilename, TEST_LOCATION);
+
+ popup.SetProperty(Popup::Property::TAIL_VISIBILITY, true);
+ bool boolResult;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::TAIL_VISIBILITY).Get(boolResult));
+ DALI_TEST_EQUALS(boolResult, true, TEST_LOCATION);
+
+ Actor tailActor;
+ Vector3 tailPosition(ParentOrigin::TOP_CENTER);
+
+ popup.SetProperty(Popup::Property::TAIL_POSITION, tailPosition);
+ Vector3 vectorResult;
+ DALI_TEST_CHECK(popup.GetProperty(Popup::Property::TAIL_POSITION).Get(vectorResult));
+ DALI_TEST_EQUALS(vectorResult, tailPosition, TEST_LOCATION);
+
+ application.GetScene().Add(popup);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+ tailActor = popup.FindChildByName("tailImage");
+ DALI_TEST_CHECK(tailActor);
+
+ float baseValX = tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).x;
+
+ DALI_TEST_GREATER(baseValX, tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).y, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ tailPosition = ParentOrigin::CENTER_LEFT;
+ popup.SetProperty(Popup::Property::TAIL_POSITION, tailPosition);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+ tailActor = popup.FindChildByName("tailImage");
+ DALI_TEST_CHECK(tailActor);
+
+ float baseValY = tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).y;
+ DALI_TEST_GREATER(baseValX, tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).x, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ tailPosition = ParentOrigin::BOTTOM_CENTER;
+ popup.SetProperty(Popup::Property::TAIL_POSITION, tailPosition);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+ tailActor = popup.FindChildByName("tailImage");
+ DALI_TEST_CHECK(tailActor);
+ DALI_TEST_EQUALS(tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).x, baseValX, TEST_LOCATION);
+ DALI_TEST_GREATER(tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).y, baseValY, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ tailPosition = ParentOrigin::CENTER_RIGHT;
+ popup.SetProperty(Popup::Property::TAIL_POSITION, tailPosition);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+ tailActor = popup.FindChildByName("tailImage");
+ DALI_TEST_CHECK(tailActor);
+ DALI_TEST_GREATER(tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).x, baseValX, TEST_LOCATION);
+ DALI_TEST_EQUALS(tailActor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION).y, baseValY, TEST_LOCATION);
+
+ popup.SetDisplayState(Popup::HIDDEN);
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}
+
+int UtcDaliPopupTypeToast(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupTypeToast");
+
+ TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo("PopupToast");
+ DALI_TEST_CHECK(typeInfo)
+
+ BaseHandle baseHandle = typeInfo.CreateInstance();
+ DALI_TEST_CHECK(baseHandle)
+
+ Toolkit::Popup popup = Toolkit::Popup::DownCast(baseHandle);
+ gPopupState = Toolkit::Popup::HIDDEN;
+ ConnectStateSignals(popup);
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 1.0f);
+
+ popup.SetTitle(Toolkit::TextLabel::New("This is a Toast Popup.\nIt will auto-hide itself"));
+ application.GetScene().Add(popup);
+ popup.SetDisplayState(Toolkit::Popup::SHOWN);
+
+ for(int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ // Check the toast popup is shown.
+ DALI_TEST_EQUALS(gPopupState, Popup::SHOWN, TEST_LOCATION);
+
+ for(int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ // Check the toast popup hides.
+ Dali::Timer timer = Timer::New(0);
+ timer.MockEmitSignal();
+
+ for(int i = 0; i < RENDER_ANIMATION_TEST_DURATION_FRAMES; i++)
+ {
+ application.SendNotification();
+ application.Render(RENDER_FRAME_INTERVAL);
+ }
+
+ DALI_TEST_EQUALS(gPopupState, Popup::HIDDEN, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupTypeRegistryCreation(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupTypeRegistryCreation");
+
+ TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo("Popup");
+ DALI_TEST_CHECK(typeInfo)
+
+ BaseHandle baseHandle = typeInfo.CreateInstance();
+ DALI_TEST_CHECK(baseHandle)
+
+ Toolkit::Popup popup = Toolkit::Popup::DownCast(baseHandle);
+ gPopupState = Toolkit::Popup::HIDDEN;
+ ConnectStateSignals(popup);
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+
+ application.GetScene().Add(popup);
+ popup.SetDisplayState(Toolkit::Popup::SHOWN);
+
+ application.SendNotification();
+ application.Render();
+
+ // Check the popup is shown.
+ DALI_TEST_EQUALS(gPopupState, Popup::SHOWN, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupPropertyTypeRegistryConnectSignal(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupPropertyTypeRegistryConnectSignal");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+
+ TestConnectionTrackerObject* testTracker = new TestConnectionTrackerObject();
+ // Note: The emmision of this signals has already been tested in other tests.
+ DALI_TEST_CHECK(popup.ConnectSignal(testTracker, "touchedOutside", PopupTestFunctor()));
+ DALI_TEST_CHECK(popup.ConnectSignal(testTracker, "showing", PopupTestFunctor()));
+ DALI_TEST_CHECK(popup.ConnectSignal(testTracker, "shown", PopupTestFunctor()));
+ DALI_TEST_CHECK(popup.ConnectSignal(testTracker, "hiding", PopupTestFunctor()));
+ DALI_TEST_CHECK(popup.ConnectSignal(testTracker, "hidden", PopupTestFunctor()));
+
+ // Test connecting to an invalid signal does not work.
+ DALI_TEST_CHECK(!popup.ConnectSignal(testTracker, "invalid", PopupTestFunctor()));
+
+ END_TEST;
+}
+
+int UtcDaliPopupOnChildAdd(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupOnChildAdd");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ std::string testLabelText = "ContentTest";
+ TextLabel contentLabel = TextLabel::New(testLabelText);
+
+ popup.Add(contentLabel);
+
+ DALI_TEST_CHECK(HasAncestor(contentLabel, popup));
+
+ END_TEST;
+}
+
+int UtcDaliPopupOnKeyEvent(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPopupOnKeyEvent");
+
+ // Create the Popup actor
+ Popup popup = Popup::New();
+ popup.SetProperty(Popup::Property::ANIMATION_DURATION, 0.0f);
+ application.GetScene().Add(popup);
+
+ popup.SetDisplayState(Popup::SHOWN);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(popup.GetDisplayState(), Popup::SHOWN, TEST_LOCATION);
+
+ popup.SetKeyInputFocus();
+
+ application.ProcessEvent(GenerateKey("", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::DOWN, "", "", Device::Class::TOUCH, Device::Subclass::NONE));
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(popup.GetDisplayState(), Popup::HIDDEN, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPopupSetPopupBackgroundBorderProperty(void)
+{
+ ToolkitTestApplication application;
+
+ tet_infoline("Set the background border property of a popup & retrieve it");
+ Popup popup = Popup::New();
+
+ Rect<int> rect(40, 30, 20, 10);
+ tet_infoline("Ensure value we want to set is different from what is already set");
+ DALI_TEST_CHECK(rect != popup.GetProperty(Popup::Property::POPUP_BACKGROUND_BORDER).Get<Rect<int> >());
+
+ tet_infoline("Set the property and retrieve it to make sure it's the value we set");
+ popup.SetProperty(Popup::Property::POPUP_BACKGROUND_BORDER, rect);
+ DALI_TEST_EQUALS(rect, popup.GetProperty(Popup::Property::POPUP_BACKGROUND_BORDER).Get<Rect<int> >(), TEST_LOCATION);
+
+ tet_infoline("Set a vector4 as well which should also work");
+ Vector4 vectorValue(10.0f, 20.0f, 30.0f, 40.0f);
+ popup.SetProperty(Popup::Property::POPUP_BACKGROUND_BORDER, vectorValue);
+ DALI_TEST_EQUALS(Rect<int>(10, 20, 30, 40), popup.GetProperty(Popup::Property::POPUP_BACKGROUND_BORDER).Get<Rect<int> >(), TEST_LOCATION);
+