X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-TextField.cpp;h=b53505916267ae6d84490749ea3ce6efbe0c011d;hp=5375a59a9faf0de4933f05eaeb2d17b2121624a1;hb=HEAD;hpb=d0f5378c5e09d1088eeb157d7df5af2eee80cc62 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp index 5375a59..d098f99 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ #include #include - #include #include #include @@ -116,6 +115,9 @@ const char* const PROPERTY_NAME_ENABLE_FONT_SIZE_SCALE = "enableFontSiz const char* const PROPERTY_NAME_GRAB_HANDLE_COLOR = "grabHandleColor"; const char* const PROPERTY_NAME_INPUT_FILTER = "inputFilter"; +const char* const PROPERTY_NAME_REMOVE_FRONT_INSET = "removeFrontInset"; +const char* const PROPERTY_NAME_REMOVE_BACK_INSET = "removeBackInset"; + const Vector4 PLACEHOLDER_TEXT_COLOR(0.8f, 0.8f, 0.8f, 0.8f); const Dali::Vector4 LIGHT_BLUE(0.75f, 0.96f, 1.f, 1.f); // The text highlight color. @@ -170,8 +172,8 @@ static void LoadMarkerImages(ToolkitTestApplication& app, TextField textField) textField.SetProperty(Toolkit::TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT, propertyMap); textField.SetProperty(Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_LEFT, propertyMap); textField.SetProperty(Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_RIGHT, propertyMap); - textField.SetProperty(Toolkit::TextField::Property::GRAB_HANDLE_IMAGE, propertyMap); - textField.SetProperty(Toolkit::TextField::Property::GRAB_HANDLE_PRESSED_IMAGE, propertyMap); + textField.SetProperty(Toolkit::TextField::Property::GRAB_HANDLE_IMAGE, "image.png"); + textField.SetProperty(Toolkit::TextField::Property::GRAB_HANDLE_PRESSED_IMAGE, "image.png"); } /* @@ -406,7 +408,6 @@ bool DaliTestCheckMaps(const Property::Map& fontStyleMapGet, const Property::Map return true; } - // Stores data that is populated in the callback and will be read by the test cases struct SignalData { @@ -645,6 +646,8 @@ int UtcDaliTextFieldGetPropertyP(void) DALI_TEST_CHECK(field.GetPropertyIndex(PROPERTY_NAME_STRIKETHROUGH) == DevelTextField::Property::STRIKETHROUGH); DALI_TEST_CHECK(field.GetPropertyIndex(PROPERTY_NAME_INPUT_STRIKETHROUGH) == DevelTextField::Property::INPUT_STRIKETHROUGH); DALI_TEST_CHECK(field.GetPropertyIndex(PROPERTY_NAME_SELECTION_POPUP_STYLE) == DevelTextField::Property::SELECTION_POPUP_STYLE); + DALI_TEST_CHECK(field.GetPropertyIndex(PROPERTY_NAME_REMOVE_FRONT_INSET) == DevelTextField::Property::REMOVE_FRONT_INSET); + DALI_TEST_CHECK(field.GetPropertyIndex(PROPERTY_NAME_REMOVE_BACK_INSET) == DevelTextField::Property::REMOVE_BACK_INSET); END_TEST; } @@ -1105,6 +1108,8 @@ int UtcDaliTextFieldSetPropertyP(void) outlineMapSet["color"] = Color::RED; outlineMapSet["width"] = 2.0f; + outlineMapSet["offset"] = Vector2(0.0f, 0.0f); + outlineMapSet["blurRadius"] = 0.0f; field.SetProperty(TextField::Property::OUTLINE, outlineMapSet); @@ -1269,6 +1274,19 @@ int UtcDaliTextFieldSetPropertyP(void) application.SendNotification(); application.Render(); + // Check Remove Front/Back Inset Property + DALI_TEST_CHECK(field.GetProperty(DevelTextField::Property::REMOVE_FRONT_INSET)); + field.SetProperty(DevelTextField::Property::REMOVE_FRONT_INSET, false); + DALI_TEST_CHECK(!field.GetProperty(DevelTextField::Property::REMOVE_FRONT_INSET)); + + DALI_TEST_CHECK(field.GetProperty(DevelTextField::Property::REMOVE_BACK_INSET)); + field.SetProperty(DevelTextField::Property::REMOVE_BACK_INSET, false); + DALI_TEST_CHECK(!field.GetProperty(DevelTextField::Property::REMOVE_BACK_INSET)); + + application.SendNotification(); + application.Render(); + + END_TEST; } @@ -1820,16 +1838,16 @@ int utcDaliTextFieldInputFilterWithInputMethodContext(void) // input text gInputFilteredAcceptedCallbackCalled = false; - imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello1234", 0, 9); + imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello1234", 0, 9); inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent); application.SendNotification(); application.Render(); DALI_TEST_CHECK(gInputFilteredAcceptedCallbackCalled); DALI_TEST_EQUALS(field.GetProperty(TextField::Property::TEXT), std::string("1234"), TEST_LOCATION); - inputFilteredSignal = false; + inputFilteredSignal = false; gInputFilteredRejectedCallbackCalled = false; - imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "1234567", 0, 7); + imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "1234567", 0, 7); inputMethodContext.EventReceivedSignal().Emit(inputMethodContext, imfEvent); application.SendNotification(); application.Render(); @@ -2480,6 +2498,203 @@ int utcDaliTextFieldInputStyleChanged02(void) END_TEST; } +int utcDaliTextFieldInputStyleChanged03(void) +{ + // Test InputStyleCahnged signal emitted even if AddIdle failed. + ToolkitTestApplication application; + tet_infoline(" utcDaliTextFieldInputStyleChanged03"); + + // Load some fonts. + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName(pathNamePtr); + free(pathNamePtr); + + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.SetDpi(93u, 93u); + + fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSerif.ttf", DEFAULT_FONT_SIZE); + fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSerif-Bold.ttf", DEFAULT_FONT_SIZE); + + TextField field = TextField::New(); + DALI_TEST_CHECK(field); + + field.SetProperty(Actor::Property::SIZE, Vector2(300.f, 50.f)); + field.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + field.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + + field.SetProperty(TextField::Property::ENABLE_MARKUP, true); + field.SetProperty(TextField::Property::TEXT, "Hello world demo"); + + // connect to the text changed signal. + ConnectionTracker* testTracker = new ConnectionTracker(); + field.InputStyleChangedSignal().Connect(&TestInputStyleChangedCallback); + bool inputStyleChangedSignal = false; + field.ConnectSignal(testTracker, "inputStyleChanged", CallbackFunctor(&inputStyleChangedSignal)); + + application.GetScene().Add(field); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 18.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(gInputStyleChangedCallbackCalled); + if(gInputStyleChangedCallbackCalled) + { + DALI_TEST_EQUALS(static_cast(gInputStyleMask), static_cast(TextField::InputStyle::FONT_FAMILY | TextField::InputStyle::POINT_SIZE), TEST_LOCATION); + + const std::string fontFamily = field.GetProperty(TextField::Property::INPUT_FONT_FAMILY).Get(); + DALI_TEST_EQUALS(fontFamily, "DejaVuSerif", TEST_LOCATION); + + const float pointSize = field.GetProperty(TextField::Property::INPUT_POINT_SIZE).Get(); + DALI_TEST_EQUALS(pointSize, 18.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + } + DALI_TEST_CHECK(inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 30.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(!gInputStyleChangedCallbackCalled); + DALI_TEST_CHECK(!inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 43.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(gInputStyleChangedCallbackCalled); + if(gInputStyleChangedCallbackCalled) + { + DALI_TEST_EQUALS(static_cast(gInputStyleMask), static_cast(TextField::InputStyle::COLOR), TEST_LOCATION); + + const Vector4 color = field.GetProperty(TextField::Property::INPUT_COLOR).Get(); + DALI_TEST_EQUALS(color, Color::GREEN, TEST_LOCATION); + } + DALI_TEST_CHECK(inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Make AddIdle return false. + ToolkitApplication::ADD_IDLE_SUCCESS = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 88.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Execute the idle callbacks. + // And check whether we didn't change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(!gInputStyleChangedCallbackCalled); + DALI_TEST_CHECK(!inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 115.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Execute the idle callbacks. + // And check whether we didn't change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(!gInputStyleChangedCallbackCalled); + DALI_TEST_CHECK(!inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Revert AddIdle return true. + ToolkitApplication::ADD_IDLE_SUCCESS = true; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 164.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(gInputStyleChangedCallbackCalled); + if(gInputStyleChangedCallbackCalled) + { + DALI_TEST_EQUALS(static_cast(gInputStyleMask), static_cast(TextField::InputStyle::FONT_STYLE), TEST_LOCATION); + + const std::string style = field.GetProperty(TextField::Property::INPUT_FONT_STYLE).Get(); + DALI_TEST_CHECK(style.empty()); + } + DALI_TEST_CHECK(inputStyleChangedSignal); + + gInputStyleChangedCallbackCalled = false; + gInputStyleMask = TextField::InputStyle::NONE; + inputStyleChangedSignal = false; + + // Create a tap event to touch the text field. + TestGenerateTap(application, 191.0f, 25.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Executes the idle callbacks added by the text control on the change of input style. + application.RunIdles(); + + DALI_TEST_CHECK(!gInputStyleChangedCallbackCalled); + DALI_TEST_CHECK(!inputStyleChangedSignal); + + END_TEST; +} + int utcDaliTextFieldEvent01(void) { ToolkitTestApplication application; @@ -2832,6 +3047,10 @@ int utcDaliTextFieldEvent04(void) // Tap grab handle TestGenerateTap(application, 0.0f, 40.0f); + + field.SetProperty(TextField::Property::POINT_SIZE, 12.f); + DALI_TEST_EQUALS(field.GetProperty(TextField::Property::INPUT_POINT_SIZE), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION); + END_TEST; } @@ -2981,8 +3200,9 @@ int utcDaliTextFieldEvent08(void) ToolkitTestApplication application; tet_infoline(" utcDaliTextFieldEvent08"); - Dali::TextClipboard clipboard = TextClipboard::Get(); - clipboard.SetItem("testTextFieldEvent"); + Dali::Clipboard clipboard = Clipboard::Get(); + Dali::Clipboard::ClipData data("text/plain;charset=utf-8", "testTextFieldEvent"); + clipboard.SetData(data); // Checks Longpress when only place holder text @@ -3044,7 +3264,56 @@ int utcDaliTextFieldEvent08(void) event.AddPoint(GetPointUpInside(position)); application.ProcessEvent(event); } - DALI_TEST_EQUALS(field.GetProperty(TextEditor::Property::TEXT), std::string("testTextFieldEvent"), TEST_LOCATION); + DALI_TEST_EQUALS(field.GetProperty(TextField::Property::TEXT), std::string("testTextFieldEvent"), TEST_LOCATION); + + Dali::Clipboard::ClipData htmlData("application/xhtml+xml", "testTextFieldEventHtml"); + clipboard.SetData(htmlData); + + field.SetProperty(TextField::Property::TEXT, ""); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Long Press + TestGenerateLongPress(application, 1.0f, 25.0f, 20); + + // Render and notify + application.SendNotification(); + application.Render(); + + Wait(application, 500); + + TestEndLongPress(application, 1.0f, 25.0f, 520); + + // Long Press + TestGenerateLongPress(application, 1.0f, 25.0f, 600); + + // Render and notify + application.Render(); + + Wait(application, 500); + + stage = application.GetScene(); + layer = stage.GetRootLayer(); + actor = layer.FindChildByName("optionPaste"); + + if(actor) + { + Vector3 worldPosition = actor.GetCurrentProperty(Actor::Property::WORLD_POSITION); + Vector2 halfStageSize = stage.GetSize() / 2.0f; + Vector2 position(worldPosition.x + halfStageSize.width, worldPosition.y + halfStageSize.height); + + Dali::Integration::TouchEvent event; + event = Dali::Integration::TouchEvent(); + event.AddPoint(GetPointDownInside(position)); + application.ProcessEvent(event); + + event = Dali::Integration::TouchEvent(); + event.AddPoint(GetPointUpInside(position)); + application.ProcessEvent(event); + } + DALI_TEST_EQUALS(field.GetProperty(TextField::Property::TEXT), std::string("testTextFieldEventHtml"), TEST_LOCATION); END_TEST; } @@ -4933,7 +5202,6 @@ int utcDaliTextFieldGeometryGlyphMiddle(void) END_TEST; } - int utcDaliTextFieldGeometryNullPtr(void) { ToolkitTestApplication application; @@ -5783,7 +6051,6 @@ int utcDaliTextFieldPanGesturePropagation(void) DALI_TEST_EQUALS(true, data.functorCalled, TEST_LOCATION); data.Reset(); - END_TEST; } @@ -5810,13 +6077,115 @@ int utcDaliTextFieldGetTextBoundingRectangle(void) application.SendNotification(); application.Render(); - unsigned int startIndex = 0; - unsigned int endIndex = 15; + unsigned int startIndex = 0; + unsigned int endIndex = 15; - Rect<> textBoundingRectangle = DevelTextField::GetTextBoundingRectangle(field, startIndex, endIndex); + Rect<> textBoundingRectangle = DevelTextField::GetTextBoundingRectangle(field, startIndex, endIndex); Rect<> expectedTextBoundingRectangle = {0, 0, 100, 25}; TestTextGeometryUtils::CheckRectGeometryResult(textBoundingRectangle, expectedTextBoundingRectangle); END_TEST; -} \ No newline at end of file +} + +int utcDaliTextFieldDecoratorColor(void) +{ + ToolkitTestApplication application; + tet_infoline(" utcDaliTextFieldDecoratorColor"); + TextField textField = TextField::New(); + DALI_TEST_CHECK(textField); + LoadMarkerImages(application, textField); + application.GetScene().Add(textField); + + // Render and notify + application.SendNotification(); + application.Render(); + + textField.SetProperty(TextField::Property::TEXT, "العالم Hello"); + textField.SetProperty(TextField::Property::POINT_SIZE, 10.f); + textField.SetProperty(Actor::Property::SIZE, Vector2(300.f, 50.f)); + textField.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + textField.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + + // Avoid a crash when core load gl resources. + application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); + + application.SendNotification(); + application.Render(); + + textField.SetKeyInputFocus(); + + application.SendNotification(); + application.Render(); + + // Create a tap event to touch the text field. + TestGenerateTap(application, 1.0f, 25.0f, 100); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Double tap to select a word. + TestGenerateTap(application, 1.0f, 25.0f, 200); + + application.SendNotification(); + application.Render(); + + // At this point, the text decorator's primary/secondary cursor, grab/left/right handle and highlight actor were all created. + // Check some properties for coverage. + textField.SetProperty(TextField::Property::PRIMARY_CURSOR_COLOR, Color::RED); + DALI_TEST_EQUALS(textField.GetProperty(TextField::Property::PRIMARY_CURSOR_COLOR), Color::RED, TEST_LOCATION); + + textField.SetProperty(TextField::Property::SECONDARY_CURSOR_COLOR, Color::BLUE); + DALI_TEST_EQUALS(textField.GetProperty(TextField::Property::SECONDARY_CURSOR_COLOR), Color::BLUE, TEST_LOCATION); + + textField.SetProperty(DevelTextField::Property::GRAB_HANDLE_COLOR, Color::GREEN); + DALI_TEST_EQUALS(textField.GetProperty(DevelTextField::Property::GRAB_HANDLE_COLOR), Color::GREEN, TEST_LOCATION); + + textField.SetProperty(TextField::Property::SELECTION_HIGHLIGHT_COLOR, Color::GREEN); + DALI_TEST_EQUALS(textField.GetProperty(TextField::Property::SELECTION_HIGHLIGHT_COLOR), Color::GREEN, TEST_LOCATION); + + textField.SetProperty(TextField::Property::CURSOR_WIDTH, 3); + DALI_TEST_EQUALS(textField.GetProperty(TextField::Property::CURSOR_WIDTH), 3, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + END_TEST; +} + +int utcDaliTextFieldRemoveFrontInset(void) +{ + ToolkitTestApplication application; + tet_infoline(" utcDaliTextFieldRemoveFrontInset"); + + TextField field = TextField::New(); + DALI_TEST_CHECK(field); + + application.GetScene().Add(field); + application.SendNotification(); + application.Render(); + + DevelTextField::SetRemoveFrontInset(field, false); + DALI_TEST_CHECK(!DevelTextField::IsRemoveFrontInset(field)); + + END_TEST; +} + +int utcDaliTextFieldRemoveBackInset(void) +{ + ToolkitTestApplication application; + tet_infoline(" utcDaliTextFieldRemoveBackInset"); + + TextField field = TextField::New(); + DALI_TEST_CHECK(field); + + application.GetScene().Add(field); + application.SendNotification(); + application.Render(); + + DevelTextField::SetRemoveBackInset(field, false); + DALI_TEST_CHECK(!DevelTextField::IsRemoveBackInset(field)); + + END_TEST; +}