+ videoView.SetProperty(VideoView::Property::VIDEO, windowSurfaceTarget);
+
+ value = videoView.GetProperty(VideoView::Property::VIDEO);
+ DALI_TEST_CHECK(value.Get(map));
+
+ Property::Value* type = map.Find(RENDERING_TYPE);
+ DALI_TEST_CHECK(type);
+ DALI_TEST_EQUALS("windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION);
+
+ Vector3 vector(100.0f, 100.0f, 0.0f);
+
+ DALI_TEST_CHECK(vector != videoView.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
+ videoView.SetProperty(Actor::Property::SIZE, vector);
+
+ application.SendNotification();
+ application.Render();
+
+ // Check the size in the new frame
+ DALI_TEST_CHECK(vector == videoView.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewCustomShaderForCoverage3(void)
+{
+ ToolkitTestApplication application;
+ VideoView videoView = VideoView::New();
+ DALI_TEST_CHECK(videoView);
+
+ ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
+
+ videoView.SetProperty(Toolkit::VideoView::Property::UNDERLAY, false);
+ bool isUnderlay = videoView.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(!isUnderlay);
+
+ application.GetScene().Add(videoView);
+ videoView.SetProperty(VideoView::Property::VIDEO, "testvideo");
+
+ Property::Map customShader;
+ customShader.Insert("vertexShader", VERTEX_SHADER);
+
+ Property::Map map;
+ map.Insert("shader", customShader);
+
+ videoView.SetProperty(VideoView::Property::VIDEO, map);
+
+ Property::Map map2;
+ Property::Value value = videoView.GetProperty(VideoView::Property::VIDEO);
+
+ DALI_TEST_CHECK(!value.Get(map2));
+ END_TEST;
+}
+
+int UtcDaliVideoViewPropertyUnderlay(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewPropertyUnderlay");
+ ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
+
+ VideoView view = VideoView::New();
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ bool isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(isUnderlay);
+
+ view.Play();
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, false);
+ isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(!isUnderlay);
+
+ view.Play();
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, true);
+ isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(isUnderlay);
+
+ // If platform api doesn't provide any API or feature for decoded images of video,
+ // UNDERLAY should be true
+ ToolkitApplication::DECODED_IMAGES_SUPPORTED = false;
+
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, false);
+ isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(isUnderlay);
+
+ // For coverage
+ ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
+
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, true);
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, false);
+ isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(!isUnderlay);
+
+ view.Stop();
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewPropertyPlayPosition(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewPropertyPlayPosition");
+
+ VideoView view = VideoView::New();
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ int playPos = view.GetProperty(Toolkit::VideoView::Property::PLAY_POSITION).Get<int>();
+ DALI_TEST_CHECK(playPos == 0);
+
+ view.SetProperty(Toolkit::VideoView::Property::PLAY_POSITION, 10);
+ playPos = view.GetProperty(Toolkit::VideoView::Property::PLAY_POSITION).Get<int>();
+ // Actually setting play position will be async
+ // Actual platform result may be different.
+ DALI_TEST_CHECK(playPos == 10);
+
+ END_TEST;
+}
+
+// For coverage.
+int UtcDaliVideoViewNew2(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewNew2");
+
+ VideoView view = VideoView::New(true);
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ VideoView view2 = VideoView::New("", false);
+ DALI_TEST_CHECK(view2);
+
+ application.GetScene().Add(view2);
+ view2.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewRaiseAboveLowerBelow(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewRaiseAboveLowerBelow");
+
+ VideoView view = VideoView::New(true);
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ VideoView view2 = VideoView::New("", false);
+ DALI_TEST_CHECK(view2);
+
+ application.GetScene().Add(view2);
+ view2.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ view.RaiseAbove(view2);
+ view.LowerBelow(view2);
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewRaiseTopLowerBottom(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewRaiseTopLowerBottom");
+
+ VideoView view = VideoView::New(true);
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ VideoView view2 = VideoView::New("", false);
+ DALI_TEST_CHECK(view2);
+
+ application.GetScene().Add(view2);
+ view2.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ view.RaiseToTop();
+ view.LowerToBottom();
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewPropertyDisplayMode(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewPropertyDisplayMode");
+
+ VideoView view = VideoView::New();
+ DALI_TEST_CHECK(view);
+
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ view.SetProperty(Toolkit::VideoView::Property::DISPLAY_MODE, Toolkit::VideoView::DisplayMode::DST_ROI);
+ int displayMode = view.GetProperty(Toolkit::VideoView::Property::DISPLAY_MODE).Get<int>();
+ DALI_TEST_CHECK(displayMode == Toolkit::VideoView::DisplayMode::DST_ROI);
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewCustomShader(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("VideoView with custom shader");
+
+ VideoView view = VideoView::New(false);
+ DALI_TEST_CHECK(view);
+
+ ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
+
+ view.SetProperty(Toolkit::VideoView::Property::UNDERLAY, false);
+ bool isUnderlay = view.GetProperty(Toolkit::VideoView::Property::UNDERLAY).Get<bool>();
+ DALI_TEST_CHECK(!isUnderlay);
+
+ application.GetScene().Add(view);
+ view.SetProperty(VideoView::Property::VIDEO, "testvideo");
+
+ /* insert custom shader */
+ Property::Map customShader;
+ std::string fragmentShaderString;
+ fragmentShaderString.reserve(strlen(fragmentShaderPrefix) + strlen(FRAGMENT_SHADER));
+ fragmentShaderString.append(fragmentShaderPrefix);
+ fragmentShaderString.append(FRAGMENT_SHADER);
+ customShader.Insert("vertexShader", VERTEX_SHADER);
+ customShader.Insert("fragmentShader", fragmentShaderString);
+
+ Property::Map map;
+ map.Insert("shader", customShader);
+
+ view.SetProperty(VideoView::Property::VIDEO, map);
+
+ /* do render for check custom shader */
+ application.GetScene().Add(view);
+ view.Play();
+
+ application.SendNotification();
+ application.Render();
+
+ /* get renderer */
+ DALI_TEST_CHECK(view.GetRendererCount() == 1u);
+ Renderer renderer = view.GetRendererAt(0);
+ Shader shader = renderer.GetShader();
+ DALI_TEST_CHECK(shader);
+
+ Property::Value value = shader.GetProperty(Shader::Property::PROGRAM);
+ Property::Map* shaderMap = value.GetMap();
+ DALI_TEST_CHECK(shaderMap);
+
+ Property::Value* fragment = shaderMap->Find("fragment"); // fragment key name from shader-impl.cpp
+ DALI_TEST_EQUALS(fragmentShaderString, fragment->Get<std::string>(), TEST_LOCATION);
+
+ Property::Value* vertex = shaderMap->Find("vertex"); // vertex key name from shader-impl.cpp
+ DALI_TEST_EQUALS(VERTEX_SHADER, vertex->Get<std::string>(), TEST_LOCATION);
+
+ END_TEST;
+}
+
+// Functor to test whether a Finish signal is emitted
+struct AnimationFinishCheck
+{
+ AnimationFinishCheck(bool& signalReceived)
+ : mSignalReceived(signalReceived)
+ {
+ }
+
+ void operator()(Animation& animation)
+ {
+ mSignalReceived = true;
+ }
+
+ void Reset()
+ {
+ mSignalReceived = false;
+ }
+
+ void CheckSignalReceived()
+ {
+ if(!mSignalReceived)
+ {
+ tet_printf("Expected Finish signal was not received\n");
+ tet_result(TET_FAIL);
+ }
+ else
+ {
+ tet_result(TET_PASS);
+ }
+ }
+
+ void CheckSignalNotReceived()
+ {
+ if(mSignalReceived)
+ {
+ tet_printf("Unexpected Finish signal was received\n");
+ tet_result(TET_FAIL);
+ }
+ else
+ {
+ tet_result(TET_PASS);
+ }
+ }
+
+ bool& mSignalReceived; // owned by individual tests
+};
+
+int UtcDaliVideoViewSyncAniamtionForCoverage(void)
+{
+ ToolkitTestApplication application;
+
+ VideoView videoView = DevelVideoView::New(Dali::VideoSyncMode::ENABLED);
+ DALI_TEST_CHECK(videoView);
+
+ application.GetScene().Add(videoView);
+
+ // Build the animation
+ float durationSeconds(1.0f);
+ Animation animation = Animation::New(durationSeconds);
+
+ // Start the animation
+ Vector3 targetPosition(10.0f, 10.0f, 10.0f);
+ animation.AnimateTo(Property(videoView, Actor::Property::POSITION), targetPosition, AlphaFunction::LINEAR);
+ DevelVideoView::PlayAnimation(videoView, animation);
+
+ bool signalReceived(false);
+ AnimationFinishCheck finishCheck(signalReceived);
+ animation.FinishedSignal().Connect(&application, finishCheck);
+
+ application.SendNotification();
+ application.Render(static_cast<unsigned int>(durationSeconds * 1000.0f) - 1u /*just less than the animation duration*/);
+
+ // We didn't expect the animation to finish yet
+ application.SendNotification();
+ finishCheck.CheckSignalNotReceived();
+
+ application.Render(2u /*just beyond the animation duration*/);
+
+ // We did expect the animation to finish
+ application.SendNotification();
+ finishCheck.CheckSignalReceived();
+ DALI_TEST_EQUALS(targetPosition, videoView.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
+
+ // Restart the animation, with a different duration
+ finishCheck.Reset();
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewASyncAniamtionForCoverage(void)
+{
+ ToolkitTestApplication application;
+
+ VideoView videoView = DevelVideoView::New(Dali::VideoSyncMode::DISABLED);
+ DALI_TEST_CHECK(videoView);
+
+ application.GetScene().Add(videoView);
+
+ // Build the animation
+ float durationSeconds(1.0f);
+ Animation animation = Animation::New(durationSeconds);
+
+ // Start the animation
+ Vector3 targetPosition(10.0f, 10.0f, 10.0f);
+ animation.AnimateTo(Property(videoView, Actor::Property::POSITION), targetPosition, AlphaFunction::LINEAR);
+ DevelVideoView::PlayAnimation(videoView, animation);
+
+ bool signalReceived(false);
+ AnimationFinishCheck finishCheck(signalReceived);
+ animation.FinishedSignal().Connect(&application, finishCheck);
+
+ application.SendNotification();
+ application.Render(static_cast<unsigned int>(durationSeconds * 1000.0f) - 1u /*just less than the animation duration*/);
+
+ // We didn't expect the animation to finish yet
+ application.SendNotification();
+ finishCheck.CheckSignalNotReceived();
+
+ application.Render(2u /*just beyond the animation duration*/);
+
+ // We did expect the animation to finish
+ application.SendNotification();
+ finishCheck.CheckSignalReceived();
+ DALI_TEST_EQUALS(targetPosition, videoView.GetCurrentProperty<Vector3>(Actor::Property::POSITION), TEST_LOCATION);
+
+ // Restart the animation, with a different duration
+ finishCheck.Reset();
+
+ END_TEST;
+}
+
+int UtcDaliVideoViewResizeWithSynchronization(void)
+{
+ ToolkitTestApplication application;
+ VideoView videoView = DevelVideoView::New(Dali::VideoSyncMode::ENABLED);
+ DALI_TEST_CHECK(videoView);
+
+ application.GetScene().Add(videoView);
+
+ Vector3 vector(50.0f, 200.0f, 0.0f);
+ videoView.SetProperty(Actor::Property::SIZE, vector);
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(vector == videoView.GetCurrentProperty<Vector3>(Actor::Property::SIZE));
+
+ END_TEST;
+}
+
+// For coverage.
+int UtcDaliVideoViewSynchronizationForWindowRotation(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVideoViewSynchronizationForWindowRotation");
+
+ Window window = Window::New(PositionSize(0, 0, 100, 100), "", false);
+ DALI_TEST_CHECK(window);