From dc1fe9ac4a02ec361dd0d8bbe0a33c20700b407f Mon Sep 17 00:00:00 2001 From: Tan Nguyen Date: Fri, 15 Dec 2023 02:09:06 +0000 Subject: [PATCH] Revert "[ACR-515] Remove Webview and Webview.Manual because they were deprecated" This reverts commit 7b7db3c1cd148c34ae0b963cabaa32c556adb738. Change-Id: I9cd13a081aed9cac90b51bd5a94621532bcb2a5c --- tct-suite-vs/CSharpTCT.sln | 41 +- tct-suite-vs/Tizen.WebView.Manual.Tests/Program.cs | 52 + .../Tizen.WebView.Manual.Tests.csproj | 40 + .../Tizen.WebView.Manual.Tests.sln | 92 ++ .../res/context_menu.html | 17 + .../Tizen.WebView.Manual.Tests/res/tizen.png | Bin 0 -> 3994 bytes .../shared/res/Tizen.WebView.Manual.Tests.png | Bin 0 -> 57662 bytes .../testcase/TSContextMenu.cs | 267 ++++ .../testcase/TSContextMenuItem.cs | 86 + .../testcase/TSContextMenuItemEventArgs.cs | 103 ++ .../testcase/TSWebView.cs | 143 ++ .../testcase/support/WebViewCommon.cs | 112 ++ .../Tizen.WebView.Manual.Tests/tizen-manifest.xml | 16 + tct-suite-vs/Tizen.WebView.Tests/Program.cs | 61 + .../Tizen.WebView.Tests/Tizen.WebView.Tests.csproj | 40 + .../Tizen.WebView.Tests/Tizen.WebView.Tests.sln | 78 + .../res/add_js_interface_sample.html | 44 + .../res/form_submit_sample.html | 19 + .../Tizen.WebView.Tests/res/link_click_sample.html | 18 + tct-suite-vs/Tizen.WebView.Tests/res/sample.html | 13 + tct-suite-vs/Tizen.WebView.Tests/res/sample_1.html | 11 + tct-suite-vs/Tizen.WebView.Tests/res/sample_2.html | 11 + .../res/window_open_sample.html | 18 + .../shared/res/Tizen.WebView.Tests.png | Bin 0 -> 57662 bytes .../testcase/TSBackForwardList.cs | 271 ++++ .../testcase/TSBackForwardListItem.cs | 147 ++ .../Tizen.WebView.Tests/testcase/TSChromium.cs | 74 + .../Tizen.WebView.Tests/testcase/TSContext.cs | 127 ++ .../testcase/TSCookieManager.cs | 140 ++ .../testcase/TSJavaScriptMessage.cs | 271 ++++ .../testcase/TSNavigationPolicyEventArgs.cs | 383 +++++ .../testcase/TSPolicyDecisionEventArgs.cs | 194 +++ .../testcase/TSResponsePolicyEventArgs.cs | 169 ++ .../Tizen.WebView.Tests/testcase/TSSettings.cs | 141 ++ .../testcase/TSSmartCallbackArgs.cs | 177 +++ .../testcase/TSSmartCallbackLoadErrorArgs.cs | 181 +++ .../Tizen.WebView.Tests/testcase/TSWebView.cs | 1675 ++++++++++++++++++++ .../testcase/support/WebViewCommon.cs | 54 + .../Tizen.WebView.Tests/tizen-manifest.xml | 15 + 39 files changed, 5299 insertions(+), 2 deletions(-) create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/Program.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.csproj create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.sln create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/res/context_menu.html create mode 100644 tct-suite-vs/Tizen.WebView.Manual.Tests/res/tizen.png create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/shared/res/Tizen.WebView.Manual.Tests.png create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenu.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItem.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItemEventArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSWebView.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/support/WebViewCommon.cs create mode 100755 tct-suite-vs/Tizen.WebView.Manual.Tests/tizen-manifest.xml create mode 100755 tct-suite-vs/Tizen.WebView.Tests/Program.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.csproj create mode 100755 tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.sln create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/add_js_interface_sample.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/form_submit_sample.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/link_click_sample.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/sample.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/sample_1.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/sample_2.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/res/window_open_sample.html create mode 100755 tct-suite-vs/Tizen.WebView.Tests/shared/res/Tizen.WebView.Tests.png create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSBackForwardList.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSBackForwardListItem.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSChromium.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSContext.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSCookieManager.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSJavaScriptMessage.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSNavigationPolicyEventArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSPolicyDecisionEventArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSResponsePolicyEventArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSSettings.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackLoadErrorArgs.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/TSWebView.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/testcase/support/WebViewCommon.cs create mode 100755 tct-suite-vs/Tizen.WebView.Tests/tizen-manifest.xml diff --git a/tct-suite-vs/CSharpTCT.sln b/tct-suite-vs/CSharpTCT.sln index a10de32..f1e0e9d 100644 --- a/tct-suite-vs/CSharpTCT.sln +++ b/tct-suite-vs/CSharpTCT.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30225.117 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33829.357 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.Tests", "Tizen.Applications.Tests\Tizen.Applications.Tests.csproj", "{F0D122C4-48E1-4037-A97D-F7BC75365C81}" EndProject @@ -214,6 +214,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Usb.Manual.Tests", "T EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Nlp.Tests", "Tizen.Nlp.Tests\Tizen.Nlp.Tests.csproj", "{12D898B5-41E2-4E2E-9697-70C7501E33EC}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.WebView.Tests", "Tizen.WebView.Tests\Tizen.WebView.Tests.csproj", "{CB2C92D4-36B8-445F-8090-082AD62137EE}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Connection.Tests", "Tizen.Connection.Tests\Tizen.Connection.Tests.csproj", "{13A7BAD5-3C3C-4385-A4F9-09E8DA2935F4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Connection.Manual.Tests", "Tizen.Connection.Manual.Tests\Tizen.Connection.Manual.Tests.csproj", "{9374FA38-9FB6-4FFB-A42C-48DBA8078F3A}" @@ -240,6 +242,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.EventMan EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.EventManager.Manual.Tests", "Tizen.Applications.EventManager.Manual.Tests\Tizen.Applications.EventManager.Manual.Tests.csproj", "{C8796F73-3BF9-485B-8616-92B7E140A6BA}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.WebView.Manual.Tests", "Tizen.WebView.Manual.Tests\Tizen.WebView.Manual.Tests.csproj", "{0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Components.Tests", "Tizen.NUI.Components.Tests\Tizen.NUI.Components.Tests.csproj", "{76F45553-4F99-4605-8746-E315F6AF9614}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Components.Manual.Tests", "Tizen.NUI.Components.Manual.Tests\Tizen.NUI.Components.Manual.Tests.csproj", "{6B88A41D-1DD9-416F-9B51-84189E7A1232}" @@ -490,6 +494,12 @@ Global {0C5D3A30-65AD-4419-9584-67D3D596131A}.NUI|Any CPU.ActiveCfg = Release|Any CPU {0C5D3A30-65AD-4419-9584-67D3D596131A}.Release|Any CPU.ActiveCfg = Release|Any CPU {0C5D3A30-65AD-4419-9584-67D3D596131A}.Release|Any CPU.Build.0 = Release|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.NUI|Any CPU.ActiveCfg = Release|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.NUI|Any CPU.Build.0 = Release|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0360617-24BA-4449-85A5-80420150C84F}.Release|Any CPU.Build.0 = Release|Any CPU {B4408568-4DBB-41F8-BB41-508A07614129}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B4408568-4DBB-41F8-BB41-508A07614129}.Debug|Any CPU.Build.0 = Debug|Any CPU {B4408568-4DBB-41F8-BB41-508A07614129}.NUI|Any CPU.ActiveCfg = Release|Any CPU @@ -560,6 +570,21 @@ Global {D09A0ACE-E070-4694-9E3C-F81F54C27A69}.NUI|Any CPU.ActiveCfg = Release|Any CPU {D09A0ACE-E070-4694-9E3C-F81F54C27A69}.Release|Any CPU.ActiveCfg = Release|Any CPU {D09A0ACE-E070-4694-9E3C-F81F54C27A69}.Release|Any CPU.Build.0 = Release|Any CPU + {552E1436-AF4D-4DAA-BA0A-CA43A050DEB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {552E1436-AF4D-4DAA-BA0A-CA43A050DEB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {552E1436-AF4D-4DAA-BA0A-CA43A050DEB0}.NUI|Any CPU.ActiveCfg = Release|Any CPU + {552E1436-AF4D-4DAA-BA0A-CA43A050DEB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {552E1436-AF4D-4DAA-BA0A-CA43A050DEB0}.Release|Any CPU.Build.0 = Release|Any CPU + {22673A2C-2B03-4114-ADF3-B6B952F758C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22673A2C-2B03-4114-ADF3-B6B952F758C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22673A2C-2B03-4114-ADF3-B6B952F758C9}.NUI|Any CPU.ActiveCfg = Release|Any CPU + {22673A2C-2B03-4114-ADF3-B6B952F758C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22673A2C-2B03-4114-ADF3-B6B952F758C9}.Release|Any CPU.Build.0 = Release|Any CPU + {6BA4E0F6-A125-4A12-AE89-30604126C90D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BA4E0F6-A125-4A12-AE89-30604126C90D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BA4E0F6-A125-4A12-AE89-30604126C90D}.NUI|Any CPU.ActiveCfg = Release|Any CPU + {6BA4E0F6-A125-4A12-AE89-30604126C90D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BA4E0F6-A125-4A12-AE89-30604126C90D}.Release|Any CPU.Build.0 = Release|Any CPU {D23C0C2B-2361-42CA-8BC6-F2F9325A8158}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D23C0C2B-2361-42CA-8BC6-F2F9325A8158}.Debug|Any CPU.Build.0 = Debug|Any CPU {D23C0C2B-2361-42CA-8BC6-F2F9325A8158}.NUI|Any CPU.ActiveCfg = Release|Any CPU @@ -901,6 +926,12 @@ Global {12D898B5-41E2-4E2E-9697-70C7501E33EC}.NUI|Any CPU.Build.0 = Debug|Any CPU {12D898B5-41E2-4E2E-9697-70C7501E33EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {12D898B5-41E2-4E2E-9697-70C7501E33EC}.Release|Any CPU.Build.0 = Release|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.NUI|Any CPU.ActiveCfg = Debug|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.NUI|Any CPU.Build.0 = Debug|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB2C92D4-36B8-445F-8090-082AD62137EE}.Release|Any CPU.Build.0 = Release|Any CPU {13A7BAD5-3C3C-4385-A4F9-09E8DA2935F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13A7BAD5-3C3C-4385-A4F9-09E8DA2935F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {13A7BAD5-3C3C-4385-A4F9-09E8DA2935F4}.NUI|Any CPU.ActiveCfg = Debug|Any CPU @@ -979,6 +1010,12 @@ Global {C8796F73-3BF9-485B-8616-92B7E140A6BA}.NUI|Any CPU.Build.0 = Debug|Any CPU {C8796F73-3BF9-485B-8616-92B7E140A6BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8796F73-3BF9-485B-8616-92B7E140A6BA}.Release|Any CPU.Build.0 = Release|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.NUI|Any CPU.ActiveCfg = Debug|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.NUI|Any CPU.Build.0 = Debug|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E4F1A1C-40DE-42E3-9D8E-DB148E70D981}.Release|Any CPU.Build.0 = Release|Any CPU {76F45553-4F99-4605-8746-E315F6AF9614}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76F45553-4F99-4605-8746-E315F6AF9614}.Debug|Any CPU.Build.0 = Debug|Any CPU {76F45553-4F99-4605-8746-E315F6AF9614}.NUI|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/Program.cs b/tct-suite-vs/Tizen.WebView.Manual.Tests/Program.cs new file mode 100755 index 0000000..b356830 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/Program.cs @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using System; +using NUnit.Framework; +using Xamarin.Forms; +using Tizen.WebView; + +namespace XamarinApplication.Tizen +{ + class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication + { + private Application _app; + protected override void OnCreate() + { + Console.WriteLine("TCT : OnCreate()"); + base.OnCreate(); + if (ManualTest.IsWearable()) + { + _app = new WearableTemplate.MainPage(); + } + else + { + _app = new ManualTemplate.MainPage(); + } + LoadApplication(_app); + } + + static void Main(string[] args) + { + Console.WriteLine("TCT : Main()"); + var app = new Program(); + global::Xamarin.Forms.Forms.Init(app); + Chromium.Initialize(); + app.Run(args); + Chromium.Shutdown(); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.csproj b/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.csproj new file mode 100755 index 0000000..2dd4d7d --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.csproj @@ -0,0 +1,40 @@ + + + + + Exe + net6.0-tizen8.0 + True + Tizen + + + + + true + + + + portable + + + None + + + + + + + + + + + Runtime + + + + + + + + + diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.sln b/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.sln new file mode 100755 index 0000000..e1cac60 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/Tizen.WebView.Manual.Tests.sln @@ -0,0 +1,92 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.15 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.WebView.Manual.Tests", "Tizen.WebView.Manual.Tests.csproj", "{D92BEEAC-3B2A-45F8-8C53-53B92550404A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\nunit.framework\nunit.framework.csproj", "{B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\nunitlite\nunitlite.csproj", "{FDB8025A-C029-461F-895E-287B4C65939B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManualTemplate", "..\Template\ManualTemplate\ManualTemplate.csproj", "{269F89A7-E648-4811-8421-844E00ACF5F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManualTemplateForWearable", "..\Template\ManualTemplateForWearable\ManualTemplateForWearable.csproj", "{D36CED01-29BD-4EB3-8903-62E0BF2A822D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.Build.0 = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.Build.0 = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.Build.0 = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x64.ActiveCfg = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x64.Build.0 = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x86.ActiveCfg = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x86.Build.0 = Debug|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|Any CPU.Build.0 = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x64.ActiveCfg = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x64.Build.0 = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x86.ActiveCfg = Release|Any CPU + {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x86.Build.0 = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x64.ActiveCfg = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x64.Build.0 = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x86.ActiveCfg = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x86.Build.0 = Debug|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|Any CPU.Build.0 = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x64.ActiveCfg = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x64.Build.0 = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x86.ActiveCfg = Release|Any CPU + {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ED382B91-9930-40B6-B3D7-362304C78680} + EndGlobalSection +EndGlobal diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/res/context_menu.html b/tct-suite-vs/Tizen.WebView.Manual.Tests/res/context_menu.html new file mode 100755 index 0000000..c829c2a --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/res/context_menu.html @@ -0,0 +1,17 @@ + + + Testing Context Menu + + + + +

Context Menu Test Page

+

Please long press below image.

+ Test image + + diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/res/tizen.png b/tct-suite-vs/Tizen.WebView.Manual.Tests/res/tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..46b80abf2bf1905fe50be47c187d047ee013198f GIT binary patch literal 3994 zcmaJ^c{o)4-_}aDEK`=m7z$x#Ft%YVWogJhWesCyEHR6jVI)RE%8;$>As$Id$P$uB zWY3f}OZMyu$=W+Tzo+N-{_*yn>zwmluKT_}pU?MmU)QGcKT^*oy0GuU&$5GM10K5-@0uMld{?>)F=D)TfAmHB+sy71k zpQP-}EP>~UWE@ZxtfGj4Dk%Zg)WAwGRW&sw1)wriNf`oV-D-+TFu1B3Tv;9X&jn&d zBV*m+)&@rZ#A2-wAWtfl1cyLqG#Z$u0w$6@AWE8=n!hxZl@(bCMaoqI6&;{Rph*2z zFu+kTWG@oci%0Q^Wd{2UpFrV`00BGKpfDO!3GsYHq= zkpw(vqXv|<^&()2G>Y8ccr!CNl0c!N2^bvG00CktfW5r1a7}$RLztnyih+iKzLJt5 zOyjJfhLM_~p_+!Oijolw`kQM&#Q5QH1nO@t_P<=%AGyD*fG4pc8{o)Z{y3}=nTQAe zT{7J3&$%f5QSTov_RqN}|B(w}B?I}@*#Fh&-&-vA{F?r2Th`)V0vMpi+3VF#m4csMWaGk%B{OF_%(n8-2txz1|29w|O8oi6>4-Px<>d+P(0?MLhhDM> z+g%x&6OwMV_r9W&a8+4_^S~gFipokCUisvqek(gWn66dpdLW{9`}<;>eVHdeXGdOs z{xZ@+B3~uDzCKju-PFm&p$tvRnZ(3qm=hNd-+pN2cv1CmNTEwdO;&vT3cwn=AF&GbZO-F zZSDpI^Q?&N*KD zB;O+Ij(wDDmrhm#v&ea$CAV;b=lF+E4tf@+L*}u$2s^f92yJA0p{Y;e)7sA5aQ6oW zpCN&->7pVdr(cfawBEk6{NZ$))36!?w3x_kGX!+9$xJNvXK zAeA7~KlNVRD3n91o$*1(a|E^Vot#oFGNbv+MTQpX^J}T*Sc#Ckm9860h_+!uSGof>6dK(%67ti+ zeP;5@Y-@Wv>WsX+NO`wY(@i)a{GIRCTAvJUp~ zJ#qN;>KQS9SX`^Ev-4gD*YTlGKGN24A8v+>HAG}U@Aw&t$DfEpUKZe1$gcYtbywQ{ z6;LCZ;*;iJ_8pnPYdF%-{zT-0T`0*JRkN`?g>3aMLqb;rBd`JEYlqyXM3jo~rXE=co8Pce(2T`(+qt2f1B* zMa4ynry+QPf*4xc*HXkKGHRL=#vM297G`4gRM>EQpYJqpk=qj&dS77o*7d%LLv-ul zE1{x(bp86YYM!nTz&-IRJ`S1Z_h7f($?YVW!gJv%h(}^!+L$Ewnqao?YgCEAfY~!> zX|Xrtb1M;3@#|6hP9%A82*zj@nMfB{Xjb5ys^t4#mF<0E2qnj_<}8WJ@#>F#EJ&~H zd1>bX!=@=dCjUfGrtz}8&(`wu@;bEq7rx|u(Uz*XWh1HRw~&8%IJo+-$+dL6lP|Kx zV{&HL0d5b;`xaTknCj1DSm{-1Lq&7?XJ)O~Mb?IndG|qxr4D^s8N8QeF9CFA70zrG z)7zeS$1nv2wDHc}Y0%?w@6!-asHIrj^#HOKZO*`t?o4Ml)s2`YKBYZ%+8(zydyBZT z*^B~n-W#_&@Gd~(ZAv{q0Bp1}VZXA*#g$$tG$Jncf^$~~#LXjHDgiilJh*x_#>{j) zM%uvvDFvHs+_?Kg+^OXF$7EocrIj@<0y_(AjSZb$nBuC)9n!?!Ksd7V8~%>Vt{J z@}M&Du7+#< zRaS;t4>0gP@lHHq{I26d@dXOl2re8!Uh!Nh3 zoqA+)2q-T^~977$rMDA=7Tw14harZ2VOntozJrKzi{vvXeg{I)aAtzP;X zeXr4Rq~OVlsP4n-weDr|Uga;rwSOuQ`wwyYZ7J03v znzwqWhy(4kxEzUWX{ijXCEOVj@a@d&ja%k``XEqSyQQ_-I>gh(oR{>@ruEn?czdUvYe>E~mm~9U+54o&YqplEbYLU#vV95KwDxYFLI>9X#_@%pj zmLy$x?hy55&ZB!vBO8^v@N%pJd)t#hCm2xu99nbjO7v3zzd($51h7|?iIkn}?@PeR zt7rZA#!%*(2`)k=6wAKu_^Ck!LPEy>dTF;Eb;GrMz(MqCxk00lfV;|5y1uRL1|q`n zZLLwj^YhFCE}_nH<7>IO6Pi(dQGYNU(z#c;k=|3ElNBrhRo{fH_BWJv$;gMQ zQ#80kcOJN6G8rJ!K{nqfua>7KwUwbzjv(h}XzI&lcc>qdUZ|tPs9(#4(e-J>VPagvx(*w zf^%(AvWMB|i^oK3=_cb~t0E0}lN z*57pC<@ZaU?&)>)=w6vJ!fVD0w=;A79|3RxM-Gs#!r4a_E*kE!pTic3RpNV7%t-j) zAg|<{;n+GfLk}wOUNsWe;x^lBaF;{{{yd@lm%V=Re2(&^nX0#K#x`1qn8zSOdNd(FG9YUpuJ&?D{K=Igsi6N z(dqV2xxI(qD9db}Zl*qx4%?9#KK8udn;o?G!$KoN(u) zR?-QyMuK!-Z?FGF6w08yL2K!S6l1czB-d}~EbN3G)k$Fv4yF~{Z)CYj}Mb4T5IXeKMxAC!4y&*3w2xDfBh{Z4b2UT&br?C EA7ry5_W%F@ literal 0 HcmV?d00001 diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/shared/res/Tizen.WebView.Manual.Tests.png b/tct-suite-vs/Tizen.WebView.Manual.Tests/shared/res/Tizen.WebView.Manual.Tests.png new file mode 100755 index 0000000000000000000000000000000000000000..9765b1bda7e5bddf0925555ab204b887a873bf24 GIT binary patch literal 57662 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 kZ}gYfNaCF}xV$|1>H6z0+kD tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + bool isFailed = false; + foreach (ContextMenuItemTag tag in Enum.GetValues(typeof(ContextMenuItemTag))) + { + var count = menu.ItemCount; + var newItem = menu.AppendItem(tag, tag.ToString(), null, true); + + if (newItem == null || tag != newItem.ItemTag || menu.ItemCount - count != 1) + { + isFailed = true; + break; + } + } + + if (isFailed) + { + ManualTest.ConfirmFail("Failed to append item"); + } + else + { + ManualTest.Confirm(); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + + [Test] + [Category("P1")] + [Description("Test: Gets the item of the context menu.")] + [Property("SPEC", "Tizen.WebView.ContextMenu.GetItemAtIndex M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task GetItemAtIndex_RETURN_VALUE() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + Assert.IsTrue(menu.ItemCount > 0, "ContextMenu has no item"); + var item = menu.GetItemAtIndex(0); + if (item != null && item.GetType() == typeof(ContextMenuItem)) + { + ManualTest.Confirm(); + } + else + { + ManualTest.ConfirmFail("Item is invalid object"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + + [Test] + [Category("P1")] + [Description("Test: Removes the item from the context menu.")] + [Property("SPEC", "Tizen.WebView.ContextMenu.RemoveItem M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task RemoveItem_CHANGE_STATUS() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + var count = menu.ItemCount; + Assert.IsTrue(count > 0, "There are no items in the context menu"); + menu.RemoveItem(menu.GetItemAtIndex(0)); + if (menu.ItemCount - count == -1) + { + ManualTest.Confirm(); + } + else + { + ManualTest.ConfirmFail("Failed to remove item"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + + [Test] + [Category("P1")] + [Description("Test: Gets the count of items in the context menu.")] + [Property("SPEC", "Tizen.WebView.ContextMenu.ItemCount A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task ItemCount_READ_ONLY() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + if (menu.ItemCount > 0) + { + ManualTest.Confirm(); + } + else + { + ManualTest.ConfirmFail("There are no items in the context menu"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + }; +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItem.cs b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItem.cs new file mode 100755 index 0000000..a62be69 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItem.cs @@ -0,0 +1,86 @@ +using System; +using System.Threading.Tasks; +using NUnit.Framework; +using NUnit.Framework.TUnit; + +namespace Tizen.WebView.Manual.Tests +{ + [TestFixture] + [Description("Tizen.WebView.ContextMenuItem test")] + class ContextMenuItemTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Preconditions for Tizen.WebView.ContextMenuItem TEST"); + _webView = WebViewCommon.GetWebViewPage(); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Postconditions for Tizen.WebView.ContextMenuItem TEST"); + WebViewCommon.RemoveWebViewPage(); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Test: Gets ItemTag property of ContextMenuItem.")] + [Property("SPEC", "Tizen.WebView.ContextMenuItem.ItemTag A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task ItemTag_READ_ONLY() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + Assert.IsTrue(menu.ItemCount > 0, "ContextMenu has no item"); + var item = menu.GetItemAtIndex(0); + if (item != null && item.ItemTag.GetType() == typeof(ContextMenuItemTag)) + { + ManualTest.Confirm(); + } + else + { + ManualTest.ConfirmFail("ItemTag is invalid object"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItemEventArgs.cs b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItemEventArgs.cs new file mode 100755 index 0000000..313679f --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSContextMenuItemEventArgs.cs @@ -0,0 +1,103 @@ +using System; +using System.Threading.Tasks; +using NUnit.Framework; +using NUnit.Framework.TUnit; + +namespace Tizen.WebView.Manual.Tests +{ + [TestFixture] + [Description("Tizen.WebView.ContextMenuItemEventArgs test")] + class ContextMenuItemEventArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Preconditions for Tizen.WebView.ContextMenuItemEventArgs TEST"); + _webView = WebViewCommon.GetWebViewPage(); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Postconditions for Tizen.WebView.ContextMenuItemEventArgs TEST"); + WebViewCommon.RemoveWebViewPage(); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Test: Gets Item property of ContextMenuItemEventArgs.")] + [Property("SPEC", "Tizen.WebView.ContextMenuItemEventArgs.Item A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "Select item of the context menu.")] + [Step(4, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task Item_READ_ONLY() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + var count = menu.ItemCount; + for (int i = 0; i < count; i++) + { + menu.RemoveItem(menu.GetItemAtIndex(0)); + } + + var newItem = menu.AppendItem(WebViewCommon.CustomItemTag, "Select me!!!", null, true); + if (newItem == null) + { + ManualTest.ConfirmFail("Failed to append item"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + /* TEST CODE */ + EventHandler onContextMenuItemSelected = (s, e) => + { + var item = e.Item; + if (item != null && item.GetType() == typeof(ContextMenuItem)) + { + ManualTest.Confirm(); + } + else + { + ManualTest.ConfirmFail("Seleted item is invalid object"); + } + }; + _webView.ContextMenuItemSelected += onContextMenuItemSelected; + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + _webView.ContextMenuItemSelected -= onContextMenuItemSelected; + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSWebView.cs b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSWebView.cs new file mode 100755 index 0000000..5b9b95e --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/TSWebView.cs @@ -0,0 +1,143 @@ +using System; +using System.Threading.Tasks; +using NUnit.Framework; +using NUnit.Framework.TUnit; + +namespace Tizen.WebView.Manual.Tests +{ + [TestFixture] + [Description("Tizen.WebView.WebView test")] + class WebViewTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Preconditions for Tizen.WebView.WebView TEST"); + _webView = WebViewCommon.GetWebViewPage(); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Postconditions for Tizen.WebView.WebView TEST"); + WebViewCommon.RemoveWebViewPage(); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Test: Sets the delegate for context menu customization.")] + [Property("SPEC", "Tizen.WebView.WebView.SetContextMenuCustomizeDelegate M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task SetContextMenuCustomizeDelegate_CHANGE_STATUS() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + ManualTest.Confirm(); + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + } + + [Test] + [Category("P1")] + [Description("Test: Checks event that occurs when customized item is selected.")] + [Property("SPEC", "Tizen.WebView.WebView.ContextMenuItemSelected E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + [Precondition(1, "Context menu is not supported on both TV and Wearable profile. So the testcase will be passed automatically after run if the profile is TV or Wearable.")] + [Step(1, "Click run TC.")] + [Step(2, "Long press image of test page.")] + [Step(3, "Select item of the context menu.")] + [Step(4, "If there is no exception, test will be automatically passed.")] + [Postcondition(1, "NA")] + public async Task ContextMenuItemSelected_CHECK_EVENT() + { + /* PRECONDITION */ + if (WebViewCommon.IsTVProfile() || WebViewCommon.IsWearableProfile()) + { + Assert.Pass("Context menu is not supported on both TV and Wearable profile"); + } + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.ContextMenuHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + var count = menu.ItemCount; + for (int i = 0; i < count; i++) + { + menu.RemoveItem(menu.GetItemAtIndex(0)); + } + + var newItem = menu.AppendItem(WebViewCommon.CustomItemTag, "Select me!!!", null, true); + if (newItem == null) + { + ManualTest.ConfirmFail("Failed to append item"); + } + }; + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + + /* TEST CODE */ + EventHandler onContextMenuItemSelected = (s, e) => + { + ManualTest.Confirm(); + }; + _webView.ContextMenuItemSelected += onContextMenuItemSelected; + + await ManualTest.WaitForConfirm(); + + /* POSTCONDITION */ + _webView.SetContextMenuCustomizeDelegate(null); + _webView.ContextMenuItemSelected -= onContextMenuItemSelected; + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/support/WebViewCommon.cs b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/support/WebViewCommon.cs new file mode 100755 index 0000000..71efc94 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/testcase/support/WebViewCommon.cs @@ -0,0 +1,112 @@ +using ElmSharp; +using Tizen.WebView; +using Tizen.System; + +namespace Tizen.WebView.Manual.Tests +{ + internal static class WebViewCommon + { + private static Window _window; + private static Box _box; + private static WebView _webView; + private static string _profile; + + public const string ContextMenuHtml = "file:///opt/usr/home/owner/share/res/context_menu.html"; + public const ContextMenuItemTag CustomItemTag = ContextMenuItemTag.BaseApplicationTag + 1; + + public static WebView GetWebViewPage() + { + if (_window == null) + { + Elementary.Initialize(); + + _window = new Window("Tizen.WebView.Test"); + _window.KeyGrab(EvasKeyEventArgs.PlatformBackButtonName, false); + _window.KeyUp += (s, e) => + { + if (e.KeyName == EvasKeyEventArgs.PlatformBackButtonName) + RemoveWebViewPage(); + + }; + _window.Show(); + + Background background = new Background(_window) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1, + Color = Color.White + }; + background.Show(); + _window.AddResizeObject(background); + + Conformant conformant = new Conformant(_window); + conformant.Show(); + + _box = new Box(_window) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1 + }; + _box.Show(); + conformant.SetContent(_box); + } + else + { + _window.Show(); + } + + _webView = new WebView(_window) + { + AlignmentX = -1, + AlignmentY = -1, + WeightX = 1, + WeightY = 1 + }; + _webView.Show(); + + _box.PackEnd(_webView); + + return _webView; + } + + public static void RemoveWebViewPage() + { + if (_webView != null) + { + _box.UnPack(_webView); + _webView.Unrealize(); + _webView = null; + } + _window.Hide(); + } + + public static bool IsTVProfile() + { + return string.Compare("tv", GetProfile()) == 0 ? true : false; + } + + public static bool IsMobileProfile() + { + return string.Compare("mobile", GetProfile()) == 0 ? true : false; + } + + public static bool IsWearableProfile() + { + return string.Compare("wearable", GetProfile()) == 0 ? true : false; + } + + private static string GetProfile() + { + if (string.IsNullOrEmpty(_profile)) + { + Information.TryGetValue("http://tizen.org/feature/profile", out _profile); + } + + return _profile; + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Manual.Tests/tizen-manifest.xml b/tct-suite-vs/Tizen.WebView.Manual.Tests/tizen-manifest.xml new file mode 100755 index 0000000..1a906e9 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Manual.Tests/tizen-manifest.xml @@ -0,0 +1,16 @@ + + + + + Tizen.WebView.Manual.Tests.png + + + + http://tizen.org/privilege/appmanager.launch + + diff --git a/tct-suite-vs/Tizen.WebView.Tests/Program.cs b/tct-suite-vs/Tizen.WebView.Tests/Program.cs new file mode 100755 index 0000000..f6df9ae --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/Program.cs @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using System; +using NUnitLite.TUnit; +using AutoTemplate; +using System.Collections.Generic; +using Tizen.WebView; + +namespace XamarinForTizen.Tizen +{ + + class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication + { + private static App _app; + private static string[] _chromiumArgv = { "--renderer-process-limit=1" }; + + protected override void OnCreate() + { + base.OnCreate(); + + Console.WriteLine("TCT : OnCreate()"); + _app = new App(); + LoadApplication(_app); + + TRunner t = new TRunner(); + t.LoadTestsuite(); + t.Execute(); + } + + public static App getApp() + { + return _app; + } + static void Main(string[] args) + { + Console.WriteLine("TCT : Main()"); + var app = new Program(); + global::Xamarin.Forms.Forms.Init(app); + Chromium.Initialize(); + List argv = new List(_chromiumArgv); + argv.Insert(0, app.Name); + Chromium.SetArguments(argv.ToArray()); + app.Run(args); + Chromium.Shutdown(); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.csproj b/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.csproj new file mode 100755 index 0000000..fb2e582 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.csproj @@ -0,0 +1,40 @@ + + + + + Exe + net6.0-tizen8.0 + True + Tizen + + + + + true + + + + portable + + + None + + + + + + + + + + + Runtime + + + + + + + + + diff --git a/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.sln b/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.sln new file mode 100755 index 0000000..c687114 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/Tizen.WebView.Tests.sln @@ -0,0 +1,78 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.15 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.WebView.Tests", "Tizen.WebView.Tests.csproj", "{D92BEEAC-3B2A-45F8-8C53-53B92550404A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\nunit.framework\nunit.framework.csproj", "{B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\nunitlite\nunitlite.csproj", "{FDB8025A-C029-461F-895E-287B4C65939B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoTemplate", "..\Template\AutoTemplate\AutoTemplate.csproj", "{B11ABB0C-C3C1-4B5C-8251-A15628A775F3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.ActiveCfg = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.Build.0 = Debug|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.Build.0 = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.Build.0 = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.ActiveCfg = Release|Any CPU + {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.Build.0 = Debug|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.Build.0 = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.ActiveCfg = Release|Any CPU + {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.ActiveCfg = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.Build.0 = Debug|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.Build.0 = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.ActiveCfg = Release|Any CPU + {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.Build.0 = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x64.ActiveCfg = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x64.Build.0 = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x86.ActiveCfg = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x86.Build.0 = Debug|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.Build.0 = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x64.ActiveCfg = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x64.Build.0 = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x86.ActiveCfg = Release|Any CPU + {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ED382B91-9930-40B6-B3D7-362304C78680} + EndGlobalSection +EndGlobal diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/add_js_interface_sample.html b/tct-suite-vs/Tizen.WebView.Tests/res/add_js_interface_sample.html new file mode 100755 index 0000000..e175d42 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/add_js_interface_sample.html @@ -0,0 +1,44 @@ + + + + Testing Sample Page for Add JavaScript Interface + + + +

Sample HTML for Add JavaScript Interface

+
+

+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/form_submit_sample.html b/tct-suite-vs/Tizen.WebView.Tests/res/form_submit_sample.html new file mode 100755 index 0000000..e385e28 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/form_submit_sample.html @@ -0,0 +1,19 @@ + + + + Testing Sample Page + + + +
+ + +
+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/link_click_sample.html b/tct-suite-vs/Tizen.WebView.Tests/res/link_click_sample.html new file mode 100755 index 0000000..93eae9c --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/link_click_sample.html @@ -0,0 +1,18 @@ + + + + Testing Sample Page + + + +

Sample HTML

+

This is sample html page to be used in test suite when loading of a page is required.

+ link content + + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/sample.html b/tct-suite-vs/Tizen.WebView.Tests/res/sample.html new file mode 100755 index 0000000..abdaacd --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/sample.html @@ -0,0 +1,13 @@ + + + + Testing Sample Page + + +

Sample HTML

+

This is sample html page to be used in test suite when loading of a page is required.

+

test content

+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/sample_1.html b/tct-suite-vs/Tizen.WebView.Tests/res/sample_1.html new file mode 100755 index 0000000..d407ab1 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/sample_1.html @@ -0,0 +1,11 @@ + + + + Testing Sample Page 1 + + +

Sample HTML 1

+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/sample_2.html b/tct-suite-vs/Tizen.WebView.Tests/res/sample_2.html new file mode 100755 index 0000000..c11b4ba --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/sample_2.html @@ -0,0 +1,11 @@ + + + + Testing Sample Page 2 + + +

Sample HTML 2

+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/res/window_open_sample.html b/tct-suite-vs/Tizen.WebView.Tests/res/window_open_sample.html new file mode 100755 index 0000000..f78ba57 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/res/window_open_sample.html @@ -0,0 +1,18 @@ + + + + Testing Sample Page + + + +

Sample HTML

+

This is sample html page to be used in test suite when loading of a page is required.

+

test content

+ + diff --git a/tct-suite-vs/Tizen.WebView.Tests/shared/res/Tizen.WebView.Tests.png b/tct-suite-vs/Tizen.WebView.Tests/shared/res/Tizen.WebView.Tests.png new file mode 100755 index 0000000000000000000000000000000000000000..9765b1bda7e5bddf0925555ab204b887a873bf24 GIT binary patch literal 57662 zcmdU&2Y{Bv)wXAQhoyJerGpfaq9DE5J1S~atXN|Avn3kQ*!`l$D2ie%v3Ct9iU9$! zARxVWkS4wCvh_dLJny{>uV6_upZ~zTGjrz5nKS2}_RLfEz7vl>A}6zMrgJXms3ZHI zY~lal(^KvD>g2b^T99$|k!M`zTvj!Ff*bL4ZRavixU^rt6HmP4s_U=1?vksn&O54K zzr3rjz3Spie}9p4H!U1_%FscltgqRlVCl}j$J~4S-;TNJ8N(x+7h3`nl`#k2P&{pByWKUm|WHre-Q&QDvN|NLL>eBs{vzbanwhZioN zJGS84sb!<)^<4YLj*;(APaB_}{rHg`PwISo_N#pxR#|@M=aVL{SlzDou*{}cyWI5m zFU-HLv`K<1ysdlpgBp)d`cVb&Nq{W}Uo#k#HS@`5165LsT%de5} z>?1C(+C}&Fcb6RQ-k5&c{R7 zy7#VDF8L2`$QMnT+~ofJq^mw~`{~`c9rRZ2+SX>NC*SKnrfJs!!_G=?drjKur?+d^ za@tX~4yxYeyu|ZH^lmrd<|peMGOSbO`OD}^=eFH2 zF15Vz`RA`HTQmLjt9v`Q;`-ZWl(lL9e%;#-Prdz$vgey^PQK)vtY`nH;DL+ZtK55( zdv^W8(|25rZ3aB|@R$V))~sGV|L945&pPj`({C*sI^o>$rQvN1Z=raO>);PO5s%U;2-D zaK|ApHomX#Ut4|FY-ag|E0?t?PU^X=vwP>Vo(X?=r0pwbUy!u>m=?K%uOGj%z`5-o zU-jwimgz~iUvlS)={J^d=~a5fv(4P?7a#T4Yn(f$f75n@zIwmc=jqP%e|A{wcly-Z z`DyJo<5TN@nzH!Qtdb#J{@l0eqzQd<`(|Evd;M#Nw0h%?zAf*b`c8w^L)y>o-JsL> zlP9wA`t1$o5 zBa^E>&@}JMd#j(+_?SmJAKBsL`v>KndSrv`J+4jcde83$e)P!UU${f=D7ky=5gqMx?DE{&Z(hHo^1_FD_WS(c z@#|`*b)5A3gWFA>*!SJT+GIR>!IXC!zmfg=7-QI$QDYM*~dhkFJe z*`~?dst;9bpZkY<`%OBuY1RAs9nxaV!-+?|`;S30tIixa^U9N(tZ(z`Q=N{i+vL$N z7hZVzdud(&)+Xtyw@>iD~U1v@1noes{ zFM8sTKBvAg;^ZZ-JU6IH=ZDVh`{r|_Pk#HPdtRy5>3>FaoqA`@qmFs;&F3GRRriuw zmlRz3_PXmosH)iMDUE|Kr?;YB*&QrD1Y7eb*W9_$} zIQFGFvmU7P`JjUj?XdBQwNF-l@~Tq@w;tX4k2N0oD)X_UA8Y(m{mP8syjtLL0@>std)?Rd(nS2Jcm{`#q}jXZJVDfLbn`s(4Y-1FMdSFRe=>mRqB zQF>qM85574ctXE_ob>Fw=dKz%IWOyiI`7}qCjauB*YEzHVVx&6e|PGFKi<&#<0ncR zeEdL<*Is?DYrl?1cRc<5lXv{>;$CU1p17v)>FbZrSljaD;X7`-e`)nCtyZ?G_fn^0 z$8@;pcbC8R`0&REzkcNFC%t~e#!tGuwdv)NFMTrL<1>nfRqFHk(Jg-0;)tOSO-mWM z_LK#uEO|Ne<(kL!=(g*vcCTIjV!h`+?tkOBD_`FH#54ao=k{lgz3SzqH-ECWsQ#_( zO9z!+QS|bzBeDmlzMtJRby4=T+TB0ve9cwe8?^s?(YBNNojtL4zZcJY?7ZPC{`|<8 z8Qou)Gw^>0R(|l($-i6Gbk!A;ubBKo^VH_~&5t>5!*QEOoP6Avms-7a__2o{`}x$b zr#?S*?vtIL>d|4|A#0yn`_#OrmVGef%$v?^Gy0X$A6|6Sd#lfU>5R>z$6k5YnO)C# zaqy{Up8fv7H%GqNZ0^Tze*AKkm&Y9c=<%;VGk563ceaiGa`dYo)Olyk{M1EnjlN>^ zt>+Crzt+$XK6`88=0`ty^wy7V{om3aX*u^SsPuY+GaKA?-9N9b-tDw*OGiw5dULN^ zKim2E`u0NyPtTn`zvHUW)uyzXbm_=bo|<*U&{{*sTzBV=dmp&(m^-Gl8{V_sQ}re< z`Qnq+M_<3|nzL8jGIQ6+r`~^R!lqXiy}h~1=1Vu_SwSx1u)atpr=e2)d)pJ$% zLzf=1^o(=AK6LyCUwkm-go#%@bM9Ts`u(X%`Gw`Tl+SQ4-`*@?XwrSd`V2cOvAFP- zKjx47ORsK=F53Oxf=zuMe0EHq8hswR*juwcHXz=JuvaM>=t+3bJyv2_xj7#_YST*qr>pdH_lkx@499Ei~2v_f9X?0JDkw< z?Y2jEZr$^>c9(Tuc<4u+KI%2O-Nk2oJ!kO9!AJf6nEGAYwSKG1mB0VjvXV_Z?pZl< zW!9=c)Ow=*7iV96^K;WC?7Zvcny3_{09TwNGyAS86`kY(vBH+}v7SBoA#^yw{s zFW*#kLe&+29sT0n$DH1_!QgK{dE>IK?{&ZC=0%ySYNQ-=_i3qbbpP=F(XFqTbHeMJ zP9Of(ZJ#v1<+#g-o%88ecYHc3;qr}Hr)I9X>(-5n=WROsgu(64ST^dsqPs`d>sjNz z``@a*sMhcrf12NN@l9*$-E-AfnL*e;B*F(|2*KGPcX=YMsT9Znn=Z%>?r@_n~gHC>E?m-)msPuWGf0d2ga%0<^E;*=WtUaHYRgBt*RPm4p!|WghmSpc+V8f1c>VVG7Okmv`iG~Fc)Q!VS8TX`L-(>r zXPxl*$4`Ge;;k{iyL`;%TRs`}hl>l=*L&vBX-jr~a`U#D<#Xpe)3wKvPj=jLRl#Qk zyOz~la@(~nN~cZvc)^V=HorOcgt6!D?7gYaf__WxnbYg6vc>baEdJAF<8OR+$Be~C z6r|pD=k&5ic0E+NU&=#IJ~ZX-oVzzZb6C%=U03$Hwsd{T%l)QbIKBBZwaT6^oAOqz zn(c2ZoU?J>v>8v#cy9Ri;g62H;*T$uZWzC@&fAM7Png{BUtiwTvBNn#Pb=Q^>5YqT zY_R2pWtC4@{l~mNwJg76&%3)$`R3)~N9#QLXnAtd6FW*S=-76V?Kkr-IP&D4Mz_yQf&Wh47dMTpt?0I)agY+wM0#Qez+jqzAB7t5&&n>(x6tB{`*gQc}_( ziHV8LQd3hiGcqzOS@QdeADY`(-57430* z_7u6o!a`S2P+;kz-Nv`bc&3$`b6HuL9-!U3cY8qg>;arT9xMaH;jz7d3;|9~ zPIh=YKw4T_h0n~)^c`UPjva3IuHBAs`}Xa{CTn(SNy)fv+qORc#TQ>Nl1t1p;{Q*l z>fbb|rktkMl&J`)CsmG_KrnRVAB{!jJ)v7K#JKK+>UAuNU{0=iXz~LB` zfXAqm3)93y2VY1F1KC8UvH*HKj+-p1rfOvaYdF*}F=WDk;^fRdY7CnlZOBTHMZ^JN>j74-RR8 z5`ro|(ZnNq7>b8!Su-mJBM!(pIXSL!<;pHMH`nyo<-Xgr$!*!P*|04dZyoHRi4!J_ zH+jY88NL6tsrferY6xcEe*Mn0Dey|$@U*K{tEOXA0^%k!+_r7oDhw+SFmk*TV1(o| zas|}>8g5{C5n&$u;1SA#DdZuK5nR1`br1BW&70l&^&6Zm0W%8=3jX@ZCu3i-BL6jT zL*0CX(D%RCseGNLgr?b)zWw?SPEAX_!PdxD_3G7iSvJjW*s#HEHbY@NbPJUhND4#U z#YY~Vv}kH9p~^}=BQu`v3HBqNP>$-9{2DcCcz~Inzg@eIX?p&iJ%#s;{rKZoOa$Qm zs?&0)oAmy#f@%t|;HC8H-Mg!e$_KKtvpY3xP~Wk8UAuOz2NRuhb>QUL}A zf*pW}<8hi&mFJ1}gW&}xG?iBks8y?$v!=S$tJk>o8#b)B9o4O4$A0|0@&2NtHr^)a@~eSrmHE-xq)C%X&0Dm1 zDl;?dr2PE61iRLAD_5@ch6_g+29cAopot#R5G}gO5W>USrfHKf_t+sWvuPW*@ui1d z*`~GrdenBo?cCDl7S<|A2v4T4ToK=jG?KLtHR_z6VrgX$xMXiZ}{}MuwM>fX6_}qm0TyXR2jgCJt|T z%R^nI8%DUq{5Gz{4tI-7t)Ai{FJH3*b>XE4Ax=6F;^61hNp(Zl`VLKWbu{u-R(V{O z*$8#mA-{2cquksoAKG$srHM~9-d`RAHO9B#Km0*K+XSWe?%n5awzD15v}u!sEp~ar zW(XJGa2l`r$sT8mOFVX{OF8Tqmt>~0gMF7`qckbWoUoC}Tr-`X7`Gv57pYvM~BAZ@~v>esKI)23~^S1VPnG_Y}Ao?EeEg+B$N2%yLi zq)|o+g@%v;#KR~F4Wu$`hB#p&O_|c#Os(T;28NU!Ae7sPGGMLS_n5Z%z7_Tk8+oiu^LqE`TYt{%S*IEA4&#k3nkDex z41W<&O`#;)5LId3qUGos)vI^5%N4hH@ghGJY822w8b>3E%Mr&g&~X?;Wk?f;CSyUv zDBMxOF@lOZ9_7l8xzvx&a+_+sDC`*YeLDg0MulHSrcOMvaneh=D1?p|KcN7mocM@K zSK{y}FO5Yugv9n&hc(F6P z8DC;&Q**5G547^%8Sj4t?0*ERDUj5xS+lAQ8|96uQKM!%c9nMDu>u$jL?hK80R)Xa z8Z90g99}|Te9|&9an?^9#w@Pi$}K(eI+tw+7)ds@h9fh?2O!WxP)W!4VrZIr$&)cC&y*`elplJ$Tik7k zOEtT*yNwM+2BtatF%?jwyo^!GShY@6V)~dI*5ds+>8(70DV<4&U=qix+>h~v?V()) zoAS$-FL!x)c~srblA~;CVZ?4XzF+~7W6Zedgolb z4nr{<3dc7X#nosUg9kj($cM)Ch$F2KV{*w-0r2rxxi31N8-Zzn`b!qVQoEe7uvj!( zTS-HQ=JAfnmOg}`mtKT&)Gt6)PI-jrOgqG6*jCX90h`Xsh^=I&UDc{q?cDmH zgWkZtR^Pvc&(AIttB6DS$8vKk_v6}Y*|KF`Pa3U}20=zpgUEx14;zmWLqm!m8M^gG ze9y@@xk)v;yQ~BoHP(p*pdHQFRXn4%%(2S_%!)8ZXS`CsyZ}_1kb0pLk|r*F6_OXm z(MxGU%HVP0rL8#faiLt*3oiqMJ&9fN^y}TH&*R3LVr70dMn7x%wF=NGxnIBjSJ~45 z=Wr(6CTH9-8!qE?&h6aqvpVh!XvV{Nke>(8Hxh_8KwE4T)RK}u<>zTOe=qq`&pox#H60RdiTi4%ovuRmzQ97A1Xi$d!Op3 z@i+lXTn&&RNsEts8VU`gvHlU(ZFi`9u}WX-PR1JpG*Ud8R<$u=e6W66H$s$miX}2V zbNLgyIZh_VmO}^9p)SfJBrnuGzHG=N0K@VJiqk$hfz0KO0h_RR$&z6`di0z&apHvW z#zTmJCN4UeV*r?cLBM zxNkaNVDqp&R+3ugifn`$wg%l^#{}iK6wyHS8ziIn{{(EHY)1C_pp)v{E8&M@@T(na z7h&j>Ry)ExXaY~2L43%?QC_wo&BFpVaMG77UHWw6#*I5!K0D&Qy%44YxSs^738V!n z&6+oV%5I%C;xWqb)>f3gx95|_qqvkO#5mAVp0o^wZjvE>MihK4I(2j7wwanKHqxw9 z+gP&s&k7JXpoCp=%*GrtMANX<51;WE$#KO@{oxvBqzWfvLy!&?nHEu-pdm*9s14Ge z{7{zC)Qep4iAS>FLl$&+ctVng-)h#V*~kixusb_v7`@13(CQy_H2bHxq&|K7o|BVP z>BK5_Zn<$I570$UKq*8ayc&R#`}6R_BM*=CB~*HAO?xS`pv2B`t+CK;SIY*e*gCD> zAX&ULw$o*EWV39v>-F*2VSX$woe8CrXy}8-`0QwPP{H*wUTL1v;Ov;R07Zt{p*SN` zqZ51JNULqCpAZ+ORTewvn$mpJgxkB(GRDADHks>w;och;+0 zCxIPWIPD^u#;E~eRZpy)KGLEqR9=`St~6zk ziA_{Ld9o2Sbiq!cEm`IoG-!~pd*`lU7QSWmY_)PfI1T?Gs3rj0q%_LQd$eY)nzi&m zn3N)0U`ctU389Hjqi~d^TqJt0aiZMl7eL|5$f<1Lm{IM2q8Zz7h)iQz#58PMLd!E1 z{jN7E3j`iW1Df|OBIp4%mLKR8ubcFWr$;3tUCC4DAjAt8_>jTKW;EkMS&GwXv>J(vKXc%}H(e>&#aNA4m;C{D(oXQ$$9tdLWIloUJm> zXGiOq^rLR-#CRAPAL`?aSsUUV?NT0b%7o>R4-neu3E;3^$)rQ5yz*rS)dMd#02(!F zWH~l*=JuEdGEGa0%PF;K{cUhpOT)D{y^P2brM&vUR_aC3ZRf0MkZ+# z1vGf1pg>e!sIY_rB91bW*{or0w=>6p*|f(c7THC;X~eo}OQ`jXXtb7FJ;heWH1Xw= zEYI(DEuTpWR&sWiC%arL8yegfupjhR2c&*E(nr&i|?A$#qyRsQO z)0Jdbv-)g$-?7#0+Op9V?u^cvEJZUPGQIro&N~#g$Nm=61aVQ=->ca5IXjn7X zmDR{}Im_&Nb$0}6GzUi|Y@9?>u?LnBV{%z84NTtwVzN2yEi+J&iF_Qo$YX4b&Zr`e zBThS^bIOCOTsha5shv^c(lc`0)E&9*>+%L}?5<3=-Q<;}*}Y%uoQ*QeU7L+lotycI z+q!tRZ!2|k#lVAabRgP|eCV=)Yyu4jT{LWB4~x63?5xA=H1G6J$B%!}SoVAEx?fOD z7?w`4(Q{Mv>ecLtxYb@bMj(qyiOUgJuU1H&=xPK&OG%ZD54lf@{Hj%|xbl=NcX;z^ zuEV_DZo-;ES1r{>r4=Z3cHC$PmKsndkonv;P!nq9q#&Q(X5=^WC9s zTDp39OXce{t?rn<4)D@AqXSWjZ6 zNyMCqZi#ikCE16&w0_-P=Z-U7+QgS!!HW4_4v*b%sY0iT%)GaQQ@`vZT|)b?w%TZA zI=f2T3U)d(_1~mJ^!z7-G!qHT(Nbq zjG9(khTS4eNp_{?%V@hjN0V&RL<-Ztb*M?X2fN%;4t5=A#?Z?t|7R1+4B(v*}dc|nOM;N)Zg(y)bIG!)v5SiO3~( z>(;Hez1Px)Ib01DD1-olCoZ}`QW{0Yhgk6=4<16rm8Y_VfLf(Wt}84xgJx#Cdrxj= z#@JmHYEPX;F0+L%;iexIGk=-@7!fi&U6`d>}BU%1JraZ161?T2#o->mU|#0Kt0Cb>;X>3KCoGP3Xi|q6&`n` z9eYOCxGZtlnq9JH2#rkiL=O!DLf!@hAH&H$_hlQ5IJXbM8j@(Q;MYt}N$yi(2GUeO zna~haNJXM6uIWm2LMap)6N8CIa-qdu&G*-2j1s1%RGZ?g?beB$8-8AUH*U^Gw{Gn= zSF27XS7fURl9+ZAjVaL;xn>LBa;?hOyDU4-_1~ zU$e*$64p!Fjm^+iI--trmumJJhqLco^tR{2YR;WImo+k)pDhw0BTlnj&04iCvzL5Q z=sEivRiZH}soX1XA#w5u$rGPw3ROnsM3)NCc{Y~DF$E$k+14~%)tof<=GC2D$<_i_ zu)WYF+qA`qO)1>tDs5ZtI)3q>Ym@k$FU#?o0F`Vy9mc^cP8i0OPZ>JgMI)xUZ`T#L zI`wQVH{I9_mHIW*OlR1XgO<_hT!0mgOp6=A$32(=H_A75pO;jpkxRd3xJ&JQYK0E0 zv)Y_WZ^95@(yXmEqovfSS@SYW?t^1R!U~~Ra#CXAi5L=tsKE%KfuUE=0VJG2L=1d{ zc;&;RIHC9zl8+;gZ9CI%xUNLG&UJ5D!`*UfGq-ug77u2!=~-{n7p~{(H(g6Rte|cV z!qr(+Cv*X}KM+G2N2~BZ_Tggp^1oKP+D)tZvt|xD%9(OKsMbzPmw}x9-wR?4z&bovvG&UPOBybGt_g!b** zH&04RZn4{X3x(tq$3PMGk@2Yz8eTjqLkJyX32104BRLAWE~F7mxjZ+_D}lNbLOD73 z|9n~-H*WSuH*4xL*EV~qYmrspa_xYC>uKtf!w~2tK&6Z7Bn;zGIWEJ}+~;%GyDMIp z<0{z*O|;9EBBoith8kKnI?JuBzr}|P`^S{4sWuv|q|FAFzc)`b=&?NV&8Kzj6dy{9v&K0S{j|ej6A=k z>ss=v2NXWL-?-20B15QN((3gZm86NwlTNjB#+`P=chhs@Y`bcY(d4Asp#~$8O%dxU zQ?N#9)HVRB7^yxU0p%}mJa`d^6>F}67>!neYvoNyN~J2U&gJ*Gs>hsDp;M@L7)Mv0 zfzGX5DIqf}>l`yrg<->yYW7aH&)V!IVNg86WE_mksDg$g1Q3k^z+l>>9AyYmAar3` z@(BT)sh4+6xU>j$p*-cv?4Y5zxX`s|RKpD!GQ>Ui+;d(BMm2TEJIWvzU5FFn4iuIe zPWRq>udBOqnQNBS!R>O<5ur6CHaZC-a2c&8$OGitYH>y#WPrx+LpOrxCN7HmFh;jb zz^#4CP`7#1^M0nnuAvLVp{;hz+t16_6k}a#>s5i z!Bs!<43}K9eg&vh$Rf{rz_yz>yp)$iN%-U$!8`WEB(?xf6~* z&b4aU(w`M;=PaJE9^$kM8S>B+55rL(e&klITH{|B?v^muHD39e-&HfSX$`HojPW2E zIMzHr3M~Y*eMe*rJOS-_qG>;xt|LIBj$j>c!)mwn&EfuIA)2k!DY3siwxO-enr5rE z_Q*@FnZ;_^dySK5>)25_m2#5x78#ioqVXY^&=J(?hDZHlm{m`?-0fOA$L*T^h1)fK zqAOgz7#2S|kfo>UxrhfSWZ@KIPyhi?p73Xb#Me*4Q7WJa;oqCKFIC@svpe(5Gd*Zb zN0h|~ICwR!tE|tk9~p(TbYaK;!V51{?4H?$w@xc|IrB!iMNLn1>(g7o9f2F$^?CqV zQ$4`3(2xb(c-r0#(!RjEb<14Q+|S+a#WP%z#kqk{Xfr1IOE-nI4LXiEOQ78(NVa3u zqihL!-pHkzYpwo-p7wb-x4meaFQ6X@lOT-4)VOW-6lY7cf21VIuD7xqv~(Fqp6iO% zEO&+TzH)^#Cc2_!v;AHh1G4r~7I`|s(MZ(vZFlzl)Tv1O})LZ4%LCGVIBQD;1?zzXe4H-BNEm+^1)~V*Iu6oza-MYxlJLpt!rC@AS zS{NIl-vbh0_sIiH|1e(xYEoiSaz}0D#jGBWAPfTt2*i*(CXI4Q%?|OS)juj?orh;*f=0>f%h3(QrORAC!)30T?NXObca@8GdLXMbZs2udx!`sh`k^QFX&^~o z(rPm_Iq8PJ#I3DOEzi1=t*J&#Xn*j*O|5VSJvH7*Acb*+_+&eeEnGCiB{b_01JW)J z3{Xa`)e!+~VEZThpjD~s%DSB3$~vFm%C~KFiA$!rw3+{MDJ$ogylDMC%&rNu?PHR1 zD69I_Xwmi;UVr`d?y}1+^ZGHu7zvbrvu2*L6&Wy<4tjy6IMozm0+ zADx9WWoCh@1?yeI*>Ah5*>)+l#n#{1<6ON7e|HU+PI7rE#jZikYTjlH7RoRxnckU6 z@W@oCHYm-k2~D21h)3~|m$nxb6;HJX)4pN)1+mu2w%FRD;@d+*C;*tm5k?$gqy>EO z%t@~N*vtG$vIoxd9$=*U={Xw7jA%{Od$MY{g!X;imragv&wX&MTe|97*Ry9&$2v(5 zSEJM*=@X`*;h^>C(ZemUk7kS?Ki=z%@!6QMvyOKke)ypueHaiv^?dk{i46pT%F>~s zV*?u*&OZ3%Hroh(XVmMiR`sf`RQ$Q+ zS2;p^OvTD3&}*aTFHBIrJ=a?yM8XtOk>Uywlv-@3NvjsR(t6GO)a!x57_n)%V(K-U zn_e*>8M%093Z1KxQRHUS?c-|9ALHiCnd3JthaY~pJLHfg`aoU{Mz0GmywJ^< zF~i@^f}a_NkrFx%{6F~M1HUN?4^se)k%c^5SRcFcu3fu&-=|NXip|*e4d1#ZxoK|L zW6${STxfSsd2A>?2*MSoX1e0M_8z2Y>WzUG12Lijs7;5l&6Ee#@|lh`H3M*AZY`Jg z$us`e8`p^6e*3MPJbAKv@4fe&eFo02L!35YG#V=dD2z0Uewl8^jvec-IpOCpd)b}0Vv(U8yo~Pof{{l$%u^c()i#C7ql}#LNRyv#=K$80t+rl2$Mll|STuSHi{L%X1Mqf7|Zs7 z~>zPG#0BHaG9(YOR~&HzgQ_HH~@zgiR0+HACaNl2OLm zi{YC$Z|*w)`a)+UGFoH^?mt530$-g3K-F%(BWQQ2DyDmF3PU?c7IlOUo6rI6sLspR zwJmkwB!jxbj&UG)DnrMhOlWg2(0)`_p`T$4N2&u<7_xP(6iZk1UeXA~hf@=ZQlYPO z#&}m;tGUIa>2$xqDvw^ZPkb-HiT0Sv)>>`d9t-)X6>A;9pc@SY1nT9;5hHSG!L-Ws z4A20ZmzU?JO`GOY^3!PfYF`N*riLCik&g?@iJCeUh()mY=fTY)TvV^_wmOc z`|{{4JE<&n;*g;@JUG<q?l#FfE$OQ$KYXlmF}gT7^p-5l9mv~NlPGM z;=IXjPrr-(+u9|XPHi*-F6$=k(8x4WG*t&9*_82*qa>MP3HD^*wpuM+)%ElI8pr-8)*fnX-cZA#9r>qKC$8%H_?rL|cS+Rc}+#aC*CT zyVNU3BbY+T7r@+Qfi69{AlEKb`?q53bM>naq`MA-Di7?8Cz=|eeq?M0Rp_hNR z+HL7@oZD$ryX_Gx)=fWZ%|5&+Ox*ta2d@D$iAOyRNbh5553GFxAbrDJms}8mL~o}K zdMCY~=@(;R5Yf@eo`iJ$`t|c8mFXFN>8UmlQU*F}E@>`Xn8I<;Lyy7Y)1oQ#1?@+& z*_17}vtr2?sNzE&&f5)xm{T1-5lc(YkfyTKjhBNLv)i|n@AV_q8ee3iEd!b94({hbRI(G>f1&UHqN<_Jl$5CJg93kXtT;sF^t9f3_2?c|H$6AQ- zC*Z<3d2+}FD0E~NvBUL>vdB_7Lb*_;Xp|REd>kINA(Thwu!qA7tql)G8>NKAokq-t zSx!PpV;JSB5n;Y)8TRr>-ziVHH(FlgN(|UUdygb~*M-qZJO-*YI05hsOr~2O0=DJj z6KoW(v`+-*WY|M!yVrV_ z=?KgOY?xSE(T`arv>7@AylAp7bmHO66!M4ykWG&dkW&GqQk)um@epGX&o(uq*|kSE987e)s44iW80;Ino;uUJL<^2iii% zLB$CtoZ#Ml_gybnmmjo)wzIRw0We33fCN}?zx}owHoc+i&~&BiZF=@^TitbSUflqT z-Y?2ZXJ&}5Sy=+ufYDjdgE*mViC)x4h!dR1Q3QoNz3tk4^!XnZ^pUK+26Rs+8yPVl~;3{%5vOyyAs?s12M_|v}JCR zUHsdtVD)NeyDp9Dxo*v>xZbU++f(OzHxy+h_C$aQw(sFueNhdeK4D`O=LP^%D*6Kg zvkxOS+$2fYbIv)(KQGJ_iSgiPG|3k5(NQ_IV!fsAwYlwGc8w}-(&_>?asFa=_oyYV zeZxwwXUl5t*!HztzjpjZsa#i7xZ7pe?7}9FQLfIS8IUv{nF3IH5z-zU`S{Q&Egte> zc-f*Afok2wEr%F-F`@)?fgLXhKIOrO<2DzYkA(6fw{h&#u2ai4u4CIauGF5@Ey=8I zH0gX;FgKs7EU{L=2r>c=<6ZuQbO;?zq$gkd`5=Q4&fVT}lMrw0R;bc0`U z!W(bA(VchRd49U11F#m#@S$wt)L-7HgG)$HbG0+mT|%vF8`WiQ#->6y?Vros!(&#s zfi`llAK1VRI4Ik7Xk5#!S=+$h>*QKpQ?TR;%+RLFQz+Y#Mqkp>A3G>+WbCrc*vkA7 zlKolBde)ndR{ExTZTA4NzRxaLL2Qg*x!aKwm~Nnpp0`T1KdfLQ+P^t&uViH8*c4qY%cWD%c6tfkc-Emi@Yb;4|U^255q7I9@6#(9N&Z(X%DYW_n_L}jVZCu z%U-It%U}!}9vXtUfE0)dRfh8L&=VOw>@F+kWVyKu7Q5wZzq7|so!hw89_z4UiX?k1 z)in3Ys~*bZXb3L85uO#Hl3ni2C8e%+UWTiZR_4B* z_DzLe*h^0OE3LNv)U-MVwzjt4YG>Z-?Te}9<@Pk);*!#m0vaDyLYzt{sKQjHv_g1f zAo68Q;y4V(LtBj69lHzsMfvR6v;7ke-24W3Mgzt}htQz|@+3b@i^h`@T;t~D2>#pcg9zP+KnMrk9h#K0>xUt(WliPEX|%?FF8rMg1fSh?&B zSFNdi?$0K|(tV> z`Gox_Pi@4;<`$Xv^SO2?hH1$(6W9*rB@9j+4UVTl$0!&~`BIWJj!^mJAsa(+UzAZx zdd!$H{-U01MW#WfNG>68OoKQ9hz^QFN9KbMKInTZGXZ%x_{2*GQJc^Q9`Q*}(fGS; z7him_8$Nuv*PY86^rxO}b=tb3tmvktuOV`)>afEO^N00ZQ$iQel{vONs2j-CO-zP{of0*CG7MJwE1ET z=iUjqW$x1*iEc>$6WyFo-tl0?Mwg`dy68aYfSx#b(4G3_$b%NPi8`#T;kWNdE!(_l z(+BoNmJ$>owY}Q*Y(ixSUmGW36yH|ka@eoEW z2LL!Vma| zwc(7Ghs^{o`8W@Zg~Nso^I&U~`pj59apY4c9S4V6v;%!`((6FsJ$K#Zet+eao{w)1 zCuUai@8GL_e129fB~-KZwKaQ*)#t;{h-GKIDJ##%(T#Ogve1Wip|5E0NLTVjCoTs+ z1IaqwEPIM@i_yJGnttIcwH@%d%%qGCtV5wd3JV12q;aYUg+jo{g9lz26&em&$O|8G z*l_|VhvE1yzx>iqgFK$e2C8x6CieZJs{Tcz`)njJnpsEVN9DhaT#9KZnDNEseX|hpt#o;1-y4VA3&5TAZXO1#yk+QX8#BnU!57TT)76 zyL8!+`eiTVNe}EoTzRrLG&yD<+t`h_bj2vy2UP3z&)aKpe4EFf3*NgqB90)0$|F?9 zpi(IaT~7H*6RNxvi!aB92@tiBV$`l!zRVrb{V>;~O*8km4<`C!H?Bw3SjmmAhcxxz zciE0MHN}j_*V1CN9||dZ?X}ms$usA<`SztW|K^%aG#)q)8itL~gNE~AkO%0>D@e1? z*cySUTr-Adz<97^6Z9jG(8~|(Pg(41e-)#A=gwWvTmF7QEuTMc-a>mCZh@^)EfFl? z3gbb74oyn=nu8xdLTq}#g*@?!k}t)HGgGi;ax0AE#sv!(xtTL(xrb^ua*J#V+t}#> zn@epY5xZyWKViqIlz+rG}V zKBS8qYtM7ptAh4NVysg`kAbC87y%dMS(P!TksSeBU?$Jl^_`sw7x+B@)9-Q`>sC!<}n%Cp_FlZW{!+?1=Z zo^QGRL>7qY9upQbO9gL&P2Z{O*Vt)$bdQ&{5Jy`DB5g(|<&h5!Cp(ibXEjUA*{-C~LDqh1His=@g)Qn`G;)oOVzGSXu_kBk zSnEn{wqVmo{j`lR)J672pyHv;iQ_3#Y@emGPXCy(R!qH=+Xqx*wlA_JY_N^Wcr(ZV z3di>%3W-J>9vsHPQCWPxKq6l~PyF#T%6o;)xEL7zlBS(pV(&BkO?LPr9t#DmZGZre zO;Gf)ji_Vs5lFtffU5{&dU|5)M_|%<_?v6oisKp>hYq*~Z{6Mt%)^4jE zR0S<&h%8|`M3E>oHfEKYc2!np5540glep}G9c2^I6p}}qLr2;$9dG(>Kunmo52&$> z65CBZWTSNeT2YaJix&((`BH{-$U`|s9Lf=AgopVm7f#P=2&XRaCZ?vl;&bou7NcF> zQ%|fe)6PDWGqb>CG;7bD6~e?8PN%5b4J)EwIbXfyFK?JmBcEtfv~8lyr&?Wm>5AJEhIToVFmKX6oj=khvSk>@ zR-q>^w3*W2V+Z)-EWOVtCI5RP)r@JjNGP_E@@QgG(v$YAi|?sw9EEVCF^u8@&=X?$ ziW5rFkQN_@hY^ZgI!D4`$Jv)CI{InXV`l{-Y#4X+|0qo!0P-a=WJF&ki$cGq+P%h9 zzRPM(qk+-MG{}3Z8ll`|;4M22Lo`K(?V=M@n)s3{Yu3q?)ylJu=S4=-t{}PCQpb(Bz7KH72ahm_+5S-@u{OlCfFpAI8>!@!+Dp4H6z$o=b0JJf;(P2=U~{)51LEV`$bjWS7;>cS)ySk9c3d2he^1uwtaf(&Uj5eTfV( zZG%S|fH|kLQB*lCYO3nsT9~zS=FFM?wjIE73B{cxc%&b?$TLNAB$@K}oA?`;u@P!v zI6{eAy^P$7QCqm(KC#2MEuw=2wO6*0{Rr{YCmV-0r=yW)ooj*J-Fm@Vz0U>-GvM|M zstE>tJL508M{5!5o<^HODWOpGut)h?><1n-LbNa>pDB-!hGbp-a5NGD&KTL~AeXoW zQCw*WGK2E%T@R=km8rMLu3xil{%cf)NvXuIot#E-50(eHM~@!uM<$m|j9Ti)`MQuF z=K;2gO{d8(-{E)09=zmes%58~VsRf@+)v8}aMGL!el0~7P94T4Vn5U?51--+VUsS_ z>1>n1Sw>9Rm<$E`1vQpgYQ6Z?l9J-D!%G+`rV2u^C6rM401c1Ip@;HBgP&;^M}u?D z`GZT$@$b(XFS2}A4A2;`MuJSru=5E&Au~FS;DNP*yY`g12368rp8b`IBKw;$Tz_)8 z!U$!DtBsHVML!vxc)Ujw%2ZxsBX8EH(J1vJ)2=VAUS7fUe;6SaXSBN66Dd~V;yX8; zSWfoAZa9V5inxu|FKo~As%7mh~Ld~Z!vmI*hz__g&019hwk^tGS>6;L@ODWP(N zAy~wfR!F0CuM~c!733l-?ckm+z1wmAc_1t5K})cc9J7%J*W>49Ml`fauy=2umviES zZZVJSQu`8Uqk8tYZIX-Kf+gSDBQ=Zs8p?fKZXmD$!iNt1)HdRwgO0w0g)iLUD&@C! z2~}!ED}2Q|N@s{ll@-}d|M^o~5|6!@EZQg+pN5W&LXhE+4XtdEbtu-P1CCN;{Ln}x zpPlgJJw-)tQW5jHCt5{R22FJG!i}+Ck-F@tZ&52>`q9v%O3D`01`lY zFoD+M&?-W>AP|t}<3s>AMxd}gQgTSWG`DNxN;hrBEH`D!6#pFw9ya5&iYZ@4Q>dAR zH1TjY5)b;48omN-H8tT{6Xieo)b?F9ZC{r@f9gyV(vhoRW3e83@*gk;o z3GLg{JlEcz9|YAZqgxekSik=FCXkEViV9RwsDNlPgz~}$scJPu>nQ0u*VsC0?FiRT zK%!}k#Yi4HM0(hTlJAv19TV)QU?Tu*L9sn~P%YcFOW)`|`{HYVo;B zr*@F1HZU^rO4BBEubya!B>x;yv5qqRde8c5@siKp^VjF_Q(mEDk!E>Qs5(`j^6WjC zwe}9~4VM3dqm=SL2r3L_>@r(#Hd`6Sda;uuwY zHBY_VrRN_M1JKIHWO(3Wz%uYi`#hg7a0wxp$5}|as4&$HsA)Uat&811?CuWhCP#Ga za2XZxo}#ozBS!Hs4NY`r9e_>za+E7yHq(z(ZIT$ZNqg*-%LP*r>&y5^>__b;#3?N> zL%L;`+v(At>{4sH)%}B`6j?tCDoo}|Z43Rpf$$CqRV*M0L!|&R-V0FmJPdLN`9_Gq^y7Fhrp9j%ExMena@Rd&nH&Dee_ge1-P((d^rO?RFK9nM2~?P^5)S*f+In=M#osqW_y>nj z2BRFv(EtpJ3wcqR#X$in&Lq?r=oI>L0g)VYo92)7ctkTLO9s#Sm4|-lD<0CJgO9wB zpL{^U(|Hp}0_9#H6X1f!Rm-haa0R>e=6cBQL5C=m5r z5q>PRN*R_Z_RYYjY}0YJjDQ@xlqJMNLvh~N=BYq7Dk=6^*~M$t+Fxa==IUK_mmL;l z`Fo+fdCsTqz^KGdf{6322v0XT#r9cJfaE>bVzU@w(7ROuGl%9ED{mkNer6`a%Y*DV=UF)xKw&j(%#q6ebKSBhII2XoQTwI;%%N zHIh_b@?v!n>|+elG#t4R2}`umSIJ(X z_{fy$Oc`Xw%Oj1lfJ*Phljb@Rh4S+9_L=ga$%lFfX!4LL9y$cm9+wuJ3=xti7q5@# zKNS8@`LKRuOTI$n#?zIjk*T&w2k4^N#%Rjw)vE^DF8wE6zJ$6;-oG_cD+(thB-v40 zReKnFtc}=q&{0s05FeqG7L9b+7&VxDKu6h7VWp9+xMYQ)@EoIP%3$s0NDpLu6t^bsE(n5a2yf`FMJKTJ;Dd z(yB{&Y9DmP4==aP%^}$Q2B%*2&Bam)&c!MP5_}dWkY$&lO6&Ry7yP2&&gegBgi2S{t2E&+0;(5ez}gy{W8l7K$_@w{K|T$VF+)X&hiQ0m zG+J~TuQ+*OoHP#E(8F@#BUIfHcl3)+;wO{~`NbnZkOQyyp{pLzkRyK4lva6o$g@q+ z$98OanysNbEd8?pMTY7oF87Opia@Kt{*Z4cW6%zuM9F0}O zp@quI5SpS@=7&O+C!~Dn!g}KMA{~~cTsU=ya)?V7q3RKhe90G0`dFIl(C6%~%jI?n z^rO36WbMyM*D&uF1r@1|@bOT=FfL=M0O?Sc=#<$X zUHJ;(k$lDXSC%}1p|WA9x)dreJ`Ek3IBF8VC((5ItTEMwxg+k|%noWK3p7S<*64C@;Rufzm3YeCmvM@BpYl zjqh0ES3YUU32D$NtM*&oO1sg0p^eZ_EsHlIe(*Y!@;~HMXUOxbfJy~c8J0@27o95G zCC^hfb)IOA^Yzi_P?-b8WqcWww0Ma_S6YoyI^98#-M+l(g*@40a+YsG0bLNa^jr<=? zx5y2h+OQ7|<$i5v75h)FT5s3%*4E!ev`3XLRvC?=&9O5ZR~{Dc@Xo)ab&y4LC9i7xGCmoe0{MD!5urgm^q=g69ZU~%imq0h0 zFZ2!4Ot9BIRaYKmR{oN3@*X{2^C5O$DP8HE&8W8hI-bfv}r zLm?dqClFOubrXh8^{FoLS^1eJ>rn&qMdJs|Uwo2!1ic#Vf?b-djrddQ~P z@y7aJ0~5V)`)m9EIjE6pUO5nCT29W(%d2Uh+WEa1@I+I(nS~L$K_g`J5D3ZoPeU1s z5cx_Y*XlJ=`63J7wzuLQTfTfbkIwQS&96GmQuqE`sGIVCGoVT#LQ@oQnVOTEHf`F% zHdQ=f(Z}d*jOItM8iUb8Z}}A?4*G$d%7-CwdC7^%U_{O~AjjFw?|;~{!}Bd4Aemyn zzb!scrN07Q`iG)_lb}jLQd`!VcPK4UMIq`6?FY>(F@k_}g5RW$5yke+hYkW}9Kd?XEQzUukRQ0^7NMWv|@x zwG+T&6#DSD0;1`&kBdyQ56LC)MX~>1olS!p$pSkJiQ^PTspwbpG9e!D!m!-zBA%$k kZ}gYfNaCF}xV$|1>H6z0+kD tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "Get BackForwardList method failed"); + + Assert.AreEqual(1, backforwardlist.Count, "Fail to get BackForwardList Count"); + } + + [Test] + [Category("P1")] + [Description("Gets the Current Item of Back Forward List")] + [Property("SPEC", "Tizen.WebView.BackForwardList.CurrentItem A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task CurrentItem_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var currentItem = backforwardlist.CurrentItem; + Assert.IsInstanceOf(currentItem, "Get Current BackForwardListItem property failed"); + Assert.AreEqual(WebViewCommon.SampleHtml, currentItem.Url, "URL should be same"); + } + + [Test] + [Category("P1")] + [Description("Gets Previous Item of Back Forward List")] + [Property("SPEC", "Tizen.WebView.BackForwardList.PreviousItem A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task PreviousItem_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var previousItem = backforwardlist.PreviousItem; + Assert.IsInstanceOf(previousItem, "Get Previous BackForwardList Item property failed"); + Assert.AreEqual(WebViewCommon.SampleHtml1, previousItem.Url, "URL should be same with the first page"); + } + + [Test] + [Category("P1")] + [Description("Gets the copy of Back Items")] + [Property("SPEC", "Tizen.WebView.BackForwardList.BackItems M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task BackItems_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var backItems = backforwardlist.BackItems(-1); + Assert.AreEqual(1, backItems.Count, "The count of backItems should be 1"); + } + + [Test] + [Category("P1")] + [Description("Gets the copy of Forward Items")] + [Property("SPEC", "Tizen.WebView.BackForwardList.ForwardItems M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ForwardItems_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + + Assert.IsTrue(result, "GoBack method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var forwardItems = backforwardlist.ForwardItems(-1); + Assert.AreEqual(1, forwardItems.Count, "The count of forwardItems should be 1"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSBackForwardListItem.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSBackForwardListItem.cs new file mode 100755 index 0000000..608bb57 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSBackForwardListItem.cs @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.BackForwardListItem Tests")] + class BackForwardListItemTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.BackForwardListItem Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.BackForwardListItem Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the url of Current Back Forward List Item")] + [Property("SPEC", "Tizen.WebView.BackForwardListItem.Url A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task Url_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var currentItem = backforwardlist.CurrentItem; + Assert.IsInstanceOf(currentItem, "Get Current BackForwardListItem property failed"); + Assert.AreEqual(WebViewCommon.SampleHtml, currentItem.Url, "URL should be same"); + } + + [Test] + [Category("P1")] + [Description("Gets the original url of Current Back Forward List Item")] + [Property("SPEC", "Tizen.WebView.BackForwardListItem.OriginalUrl A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task OriginalUrl_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var currentItem = backforwardlist.CurrentItem; + Assert.IsInstanceOf(currentItem, "Get Current BackForwardListItem property failed"); + Assert.AreEqual(WebViewCommon.SampleHtml, currentItem.OriginalUrl, "Original URL should be same"); + } + + [Test] + [Category("P1")] + [Description("Gets the Title of Current Back Forward List Item")] + [Property("SPEC", "Tizen.WebView.BackForwardListItem.Title A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task Title_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var currentItem = backforwardlist.CurrentItem; + Assert.IsInstanceOf(currentItem, "Get Current BackForwardListItem property failed"); + Assert.AreEqual(WebViewCommon.SampleHtmlTitle, currentItem.Title, "Title should be same"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSChromium.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSChromium.cs new file mode 100755 index 0000000..e1229a0 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSChromium.cs @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.Chromium Tests")] + public class ChromiumTests { + private static int _init = 0; + private static int _shutdown = 0; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.Chromium Tests"); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.Chromium Tests"); + } + + [Test] + [Category("P1")] + [Description("Initializes Chromium's instance")] + [Property("SPEC", "Tizen.WebView.Chromium.Initialize M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void Initialize_RETURN_VALUE() + { + _init = Chromium.Initialize(); + Assert.IsTrue(_init > 0, "Initialize method failed, reference count: " + _init); + + _shutdown = Chromium.Shutdown(); + Assert.AreEqual(_shutdown, _init - 1, "Shutdown method failed, Initialize: " + _init + " Shutdown: " + _shutdown); + } + + [Test] + [Category("P1")] + [Description("Shutdown Chromium's instance")] + [Property("SPEC", "Tizen.WebView.Chromium.Shutdown M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void Shutdown_RETURN_VALUE() + { + /* TEST CODE */ + _init = Chromium.Initialize(); + Assert.IsTrue(_init > 0, "Initialize method failed, reference count: " + _init); + + _shutdown = Chromium.Shutdown(); + Assert.AreEqual(_shutdown, _init - 1, "Shutdown method failed, Initialize: " + _init + " Shutdown: " + _shutdown); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSContext.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSContext.cs new file mode 100755 index 0000000..274607a --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSContext.cs @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.Context Tests")] + public class ContextTests { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.Context Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.Context Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Checks default cache model for the context")] + [Property("SPEC", "Tizen.WebView.Context.CacheModel A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PDV")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void CacheModel_CHECK_DEFAULT() + { + /* TEST CODE */ + var context = _webView.GetContext(); + Assert.IsInstanceOf(context, "GetContext method failed"); + + Assert.IsInstanceOf(context.CacheModel); + Assert.AreEqual((int)CacheModel.DocumentViewer, (int)context.CacheModel, "Default cache model should be DocumentViewer"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets cache model for the context")] + [Property("SPEC", "Tizen.WebView.Context.CacheModel A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW, PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void CacheModel_GET_SET_ALL() + { + /* TEST CODE */ + var context = _webView.GetContext(); + Assert.IsInstanceOf(context, "GetContext method failed"); + + context.CacheModel = CacheModel.DocumentViewer; + Assert.IsInstanceOf(context.CacheModel); + Assert.AreEqual((int)CacheModel.DocumentViewer, (int)context.CacheModel, "CacheModel should be DocumentViewer"); + + context.CacheModel = CacheModel.DocumentBrowser; + Assert.IsInstanceOf(context.CacheModel); + Assert.AreEqual((int)CacheModel.DocumentBrowser, (int)context.CacheModel, "CacheModel should be DocumentBrowser"); + + context.CacheModel = CacheModel.PrimaryWebBrowser; + Assert.IsInstanceOf(context.CacheModel); + Assert.AreEqual((int)CacheModel.PrimaryWebBrowser, (int)context.CacheModel, "CacheModel should be PrimaryWebBrowser"); + } + + [Test] + [Category("P1")] + [Description("Gets cookie manager instance for the context")] + [Property("SPEC", "Tizen.WebView.Context.GetCookieManager M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void GetCookieManager_RETURN_VALUE() + { + /* TEST CODE */ + var context = _webView.GetContext(); + Assert.IsInstanceOf(context, "GetContext method failed"); + + var cookieManager = context.GetCookieManager(); + Assert.IsInstanceOf(cookieManager, "GetCookieManager method failed"); + } + + [Test] + [Category("P1")] + [Description("Clears the resource cache for the context")] + [Property("SPEC", "Tizen.WebView.Context.ClearResourceCache M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public void ClearResourceCache_CHANGE_STATUS() + { + /* TEST CODE */ + var context = _webView.GetContext(); + Assert.IsInstanceOf(context, "GetContext method failed"); + + try + { + context.ClearResourceCache(); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSCookieManager.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSCookieManager.cs new file mode 100755 index 0000000..1a4e8c5 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSCookieManager.cs @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + [TestFixture] + [Description("Tizen.WebView.CookieManager Tests")] + public class CookieManagerTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.CookieManager Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.CookieManager Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Sets the cookie acceptance policy")] + [Property("SPEC", "Tizen.WebView.CookieManager.SetCookieAcceptPolicy M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MAE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void SetCookieAcceptPolicy_ENUM_ALL() + { + /* TEST CODE */ + var cookieManager = _webView.GetContext().GetCookieManager(); + Assert.IsNotNull(cookieManager, "GetCookieManager returns NULL"); + Assert.IsInstanceOf(cookieManager, "GetCookieManager method failed"); + + // TODO: GetCookieAcceptPolicyAsync is not implemented yet. + // Need verification after we've implemented it. + try + { + cookieManager.SetCookieAcceptPolicy(CookieAcceptPolicy.Always); + + cookieManager.SetCookieAcceptPolicy(CookieAcceptPolicy.Never); + + cookieManager.SetCookieAcceptPolicy(CookieAcceptPolicy.NoThirdParty); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Deletes all the cookies of a manager")] + [Property("SPEC", "Tizen.WebView.CookieManager.ClearCookies M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task ClearCookies_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrl); + await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(tcs.Task.Result, "LoadUrl method failed"); + + /* TEST CODE */ + var cookieManager = _webView.GetContext().GetCookieManager(); + Assert.IsNotNull(cookieManager, "GetCookieManager returns NULL"); + Assert.IsInstanceOf(cookieManager, "GetCookieManager method failed"); + + try + { + cookieManager.ClearCookies(); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Sets the storage where non-session cookies are stored persistently")] + [Property("SPEC", "Tizen.WebView.CookieManager.SetPersistentStorage M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MAE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void SetPersistentStorage_ENUM_ALL() + { + /* TEST CODE */ + var cookieManager = _webView.GetContext().GetCookieManager(); + Assert.IsInstanceOf(cookieManager, "GetCookieManager method failed"); + string path = Applications.Application.Current.DirectoryInfo.Data + "mycookiestoragedir"; + + try + { + cookieManager.SetPersistentStorage(path, CookiePersistentStorage.Text); + + cookieManager.SetPersistentStorage(path, CookiePersistentStorage.SqlLite); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSJavaScriptMessage.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSJavaScriptMessage.cs new file mode 100755 index 0000000..6fb14cc --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSJavaScriptMessage.cs @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.JavaScriptMessage Tests")] + public class JavaScriptMessageTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.JavaScriptMessage Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.JavaScriptMessage Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the name of JavaScript message")] + [Property("SPEC", "Tizen.WebView.JavaScriptMessage.Name A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Name_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name is string && message.Name.Equals("MyJavaScriptInterfaceForName")) + { + tcsForCallback.TrySetResult(true); + } + tcsForCallback.TrySetResult(false); + }; + _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceForName", handler); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callForName();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "JavaScript handler should be invoked with valid name"); + } + + [Test] + [Category("P1")] + [Description("Gets the body of JavaScript message as integer type")] + [Property("SPEC", "Tizen.WebView.JavaScriptMessage.GetBodyAsInteger M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetBodyAsInteger_RETURN_VALUE() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name.Equals("MyJavaScriptInterfaceWithInteger")) + { + var body = message.GetBodyAsInteger(); + if (body.GetType() == typeof(int) && body == 10) + { + tcsForCallback.TrySetResult(true); + } + } + tcsForCallback.TrySetResult(false); + }; + _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceWithInteger", handler); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callWithInteger();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "GetBodyAsInteger should return valid body value"); + } + + [Test] + [Category("P1")] + [Description("Gets the body of JavaScript message as double type")] + [Property("SPEC", "Tizen.WebView.JavaScriptMessage.GetBodyAsDouble M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetBodyAsDouble_RETURN_VALUE() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name.Equals("MyJavaScriptInterfaceWithDouble")) + { + var body = message.GetBodyAsDouble(); + if (body.GetType() == typeof(double) && body == 0.1) + { + tcsForCallback.TrySetResult(true); + } + } + tcsForCallback.TrySetResult(false); + }; + _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceWithDouble", handler); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callWithDouble();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "GetBodyAsDouble should return valid body value"); + } + + [Test] + [Category("P1")] + [Description("Gets the body of JavaScript message as boolean type")] + [Property("SPEC", "Tizen.WebView.JavaScriptMessage.GetBodyAsBoolean M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetBodyAsBoolean_RETURN_VALUE() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name.Equals("MyJavaScriptInterfaceWithBoolean")) + { + var body = message.GetBodyAsBoolean(); + if (body.GetType() == typeof(bool) && body == true) + { + tcsForCallback.TrySetResult(true); + } + } + tcsForCallback.TrySetResult(false); + }; + _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceWithBoolean", handler); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callWithBoolean();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "GetBodyAsBoolean should return valid body value"); + } + + [Test] + [Category("P1")] + [Description("Gets the body of JavaScript message as string type")] + [Property("SPEC", "Tizen.WebView.JavaScriptMessage.GetBodyAsString M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetBodyAsString_RETURN_VALUE() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name.Equals("MyJavaScriptInterfaceWithString")) + { + var body = message.GetBodyAsString(); + if (body.GetType() == typeof(string) && body.Equals("Test message")) + { + tcsForCallback.TrySetResult(true); + } + } + tcsForCallback.TrySetResult(false); + }; + _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceWithString", handler); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callWithString();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "GetBodyAsString should return valid body value"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSNavigationPolicyEventArgs.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSNavigationPolicyEventArgs.cs new file mode 100755 index 0000000..d14e97c --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSNavigationPolicyEventArgs.cs @@ -0,0 +1,383 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.NavigationPolicyEventArgs Tests")] + class NavigationPolicyEventArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.NavigationPolicyEventArgs Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.NavigationPolicyEventArgs Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the Cookie of Navigation Policy event")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.Cookie A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Cookie_READ_ONLY() + { + /* TEST CODE */ + string cookie = string.Empty; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + cookie = e.Cookie; + cookie = cookie.Replace(WebViewCommon.HeaderTerminator, ""); + e.Use(); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + var httpHeaders = new Dictionary(); + httpHeaders.Add("Cookie", WebViewCommon.TestCookie); + _webView.SetUrlRequest(WebViewCommon.TestUrl, HttpMethod.Get, httpHeaders, null); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(WebViewCommon.TestCookie, cookie, "Cookie should be valid string object"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.Other")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_OTHER() + { + /* TEST CODE */ + NavigationType type = NavigationType.BackForward; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + type = e.NavigationType; + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(NavigationType.Other, type, "NavigationType should be NavigationType.Other"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.BackForward")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_BACKFOWARD() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + NavigationType type = NavigationType.Other; + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + type = e.NavigationType; + }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "GoBack method failed"); + Assert.AreEqual(NavigationType.BackForward, type, "NavigationType should be NavigationType.BackForward"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.Reload")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_RELOAD() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + NavigationType type = NavigationType.Other; + TaskCompletionSource tcsReload = new TaskCompletionSource(false); + EventHandler onLoadFinishedReload = (s, e) => { tcsReload.TrySetResult(true); }; + EventHandler onLoadErrorReload = (s, e) => { tcsReload.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + type = e.NavigationType; + }; + + _webView.LoadFinished += onLoadFinishedReload; + _webView.LoadError += onLoadErrorReload; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.Reload(); + result = await tcsReload.Task; + + _webView.LoadFinished -= onLoadFinishedReload; + _webView.LoadError -= onLoadErrorReload; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "Reload method failed"); + Assert.AreEqual(NavigationType.Reload, type, "NavigationType should be NavigationType.Reload"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.LinkClicked")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_LINKCLICKED() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onNavigationPolicyDecide = (s, e) => + { + if (e.NavigationType == NavigationType.LinkClicked) + { + tcs.TrySetResult(true); + } + }; + + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.LinkClickSampleHtml); + var result = await tcs.Task; + + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "NavigationType should be NavigationType.LinkClicked"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.FormSubmitted")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_FORMSUBMITTED() + { + /* PRECONDITION */ + TaskCompletionSource tcsForm = new TaskCompletionSource(false); + EventHandler onLoadFinishedForm = (s, e) => { tcsForm.TrySetResult(true); }; + EventHandler onLoadErrorForm = (s, e) => { tcsForm.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedForm; + _webView.LoadError += onLoadErrorForm; + + _webView.LoadUrl(WebViewCommon.FormSubmitSampleHtml); + var result = await tcsForm.Task; + + _webView.LoadFinished -= onLoadFinishedForm; + _webView.LoadError -= onLoadErrorForm; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onNavigationPolicyDecide = (s, e) => + { + if (e.NavigationType == NavigationType.FormSubmitted) + { + tcs.TrySetResult(true); + } + }; + + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.Eval("submitForm()"); + result = await tcs.Task; + + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "NavigationType should be NavigationType.FormSubmitted"); + } + + [Test] + [Category("P1")] + [Description("Checks whether the NavigationType of Navigation Policy event is NavigationType.FormResubmitted")] + [Property("SPEC", "Tizen.WebView.NavigationPolicyEventArgs.NavigationType A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRE")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task NavigationType_GET_FORMRESUBMITTED() + { + /* PRECONDITION */ + TaskCompletionSource tcsForm = new TaskCompletionSource(false); + EventHandler onLoadFinishedForm = (s, e) => { tcsForm.TrySetResult(true); }; + EventHandler onLoadErrorForm = (s, e) => { tcsForm.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedForm; + _webView.LoadError += onLoadErrorForm; + + _webView.LoadUrl(WebViewCommon.FormSubmitSampleHtml); + var result = await tcsForm.Task; + + _webView.LoadFinished -= onLoadFinishedForm; + _webView.LoadError -= onLoadErrorForm; + + Assert.IsTrue(result, "LoadUrl method failed"); + + TaskCompletionSource tcsEval = new TaskCompletionSource(false); + EventHandler onLoadFinishedEval = (s, e) => { tcsEval.TrySetResult(true); }; + EventHandler onLoadErrorEval = (s, e) => { tcsEval.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedEval; + _webView.LoadError += onLoadErrorEval; + + _webView.Eval("submitForm()"); + result = await tcsEval.Task; + + _webView.LoadFinished -= onLoadFinishedEval; + _webView.LoadError -= onLoadErrorEval; + + Assert.IsTrue(result, "Eval method failed"); + + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + + Assert.IsTrue(result, "GoBack method failed"); + + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onNavigationPolicyDecide = (s, e) => + { + Log.Debug("TCT", "NavigationType: " + e.NavigationType.ToString()); + if (e.NavigationType == NavigationType.FormResubmitted) + { + tcs.TrySetResult(true); + } + }; + + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.GoForward(); + result = await tcs.Task; + + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "NavigationType should be NavigationType.FormResubmitted"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSPolicyDecisionEventArgs.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSPolicyDecisionEventArgs.cs new file mode 100755 index 0000000..31c3f36 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSPolicyDecisionEventArgs.cs @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.PolicyDecisionEventArgs Tests")] + public class PolicyDecisionEventArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.PolicyDecisionEventArgs Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.PolicyDecisionEventArgs Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Ask to ignore the current Policy Decision event")] + [Property("SPEC", "Tizen.WebView.PolicyDecisionEventArgs.Ignore M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Ignore_CHANGE_STATUS() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + try + { + e.Ignore(); + } + catch + { + tcs.TrySetResult(false); + } + tcs.TrySetResult(true); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "Page loading should be finished without any error"); + } + + [Test] + [Category("P1")] + [Description("Ask to use the current Policy Decision event")] + [Property("SPEC", "Tizen.WebView.PolicyDecisionEventArgs.Use M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Use_CHANGE_STATUS() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + try + { + e.Use(); + } + catch + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "Page loading should be finished without any error"); + } + + [Test] + [Category("P1")] + [Description("Gets the Scheme of Policy Decision event")] + [Property("SPEC", "Tizen.WebView.PolicyDecisionEventArgs.Scheme A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Scheme_READ_ONLY() + { + /* TEST CODE */ + string scheme = string.Empty; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + scheme = e.Scheme; + e.Use(); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(WebViewCommon.FileScheme, scheme, "Scheme should be valid string object"); + } + + [Test] + [Category("P1")] + [Description("Gets the Url of Policy Decision event")] + [Property("SPEC", "Tizen.WebView.PolicyDecisionEventArgs.Url A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Url_READ_ONLY() + { + /* TEST CODE */ + string url = string.Empty; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + url = e.Url; + e.Use(); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(WebViewCommon.SampleHtml, url, "Url should be valid string object"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSResponsePolicyEventArgs.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSResponsePolicyEventArgs.cs new file mode 100755 index 0000000..af83b86 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSResponsePolicyEventArgs.cs @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.ResponsePolicyEventArgs Tests")] + class ResponsePolicyEventArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.ResponsePolicyEventArgs Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.ResponsePolicyEventArgs Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the Cookie of Response Policy event")] + [Property("SPEC", "Tizen.WebView.ResponsePolicyEventArgs.Cookie A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Cookie_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onResponsePolicyDecide = (s, e) => + { + var cookie = e.Cookie; + if (cookie.GetType() != typeof(string)) + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.ResponsePolicyDecideRequested += onResponsePolicyDecide; + + _webView.LoadUrl(WebViewCommon.TestUrl); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.ResponsePolicyDecideRequested -= onResponsePolicyDecide; + + Assert.IsTrue(result, "Cookie should be valid string object"); + } + + [Test] + [Category("P1")] + [Description("Gets the IsDownload of Response Policy event")] + [Property("SPEC", "Tizen.WebView.ResponsePolicyEventArgs.IsDownload A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task IsDownload_READ_ONLY() + { + /* TEST CODE */ + bool isDownload = true; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onResponsePolicyDecide = (s, e) => + { + isDownload = e.IsDownload; + e.Use(); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.ResponsePolicyDecideRequested += onResponsePolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.ResponsePolicyDecideRequested -= onResponsePolicyDecide; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.IsFalse(isDownload, "IsDownload should be false"); + + TaskCompletionSource tcsDownload = new TaskCompletionSource(false); + EventHandler onResponsePolicyDecideDownload = (s, e) => + { + isDownload = e.IsDownload; + e.Use(); + tcsDownload.TrySetResult(true); + }; + + _webView.ResponsePolicyDecideRequested += onResponsePolicyDecideDownload; + + _webView.LoadUrl(WebViewCommon.TestUrlForDownload); + result = await tcsDownload.Task; + + _webView.ResponsePolicyDecideRequested -= onResponsePolicyDecideDownload; + + Assert.IsTrue(result, "ResponsePolicyDecideRequested should be invoked"); + Assert.IsTrue(isDownload, "IsDownload should be true"); + } + + [Test] + [Category("P1")] + [Description("Gets the StatusCode of Response Policy event")] + [Property("SPEC", "Tizen.WebView.ResponsePolicyEventArgs.StatusCode A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task StatusCode_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onResponsePolicyDecide = (s, e) => + { + if (e.StatusCode != 200) + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.ResponsePolicyDecideRequested += onResponsePolicyDecide; + + _webView.LoadUrl(WebViewCommon.TestUrl); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.ResponsePolicyDecideRequested -= onResponsePolicyDecide; + + Assert.IsTrue(result, "StatusCode should be 200 OK"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSettings.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSettings.cs new file mode 100755 index 0000000..6158151 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSettings.cs @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.Settings Tests")] + public class SettingsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.Settings Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.Settings Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets and sets whether JavaScript can be executable")] + [Property("SPEC", "Tizen.WebView.Settings.JavaScriptEnabled A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void JavaScriptEnabled_READ_WRITE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + + + settings.JavaScriptEnabled = false; + Assert.IsFalse(settings.JavaScriptEnabled, "Fail to get/set JavaScriptEnabled as false"); + + settings.JavaScriptEnabled = true; + Assert.IsTrue(settings.JavaScriptEnabled, "Fail to get/set JavaScriptEnabled as true"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets whether images can be loaded automatically")] + [Property("SPEC", "Tizen.WebView.Settings.LoadImageAutomatically A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void LoadImageAutomatically_READ_WRITE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + + settings.LoadImageAutomatically = true; + Assert.IsTrue(settings.LoadImageAutomatically, "Fail to get/set LoadImageAutomatically"); + + settings.LoadImageAutomatically = false; + Assert.IsFalse(settings.LoadImageAutomatically, "Fail to get/set LoadImageAutomatically"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets default text encoding name")] + [Property("SPEC", "Tizen.WebView.Settings.DefaultTextEncodingName A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void DefaultTextEncodingName_READ_WRITE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + + const string encodingName = "utf-8"; + settings.DefaultTextEncodingName = encodingName; + Assert.True(settings.DefaultTextEncodingName.Length > 0, "Fail to get/set DefaultTextEncodingName"); + Assert.AreEqual(encodingName, settings.DefaultTextEncodingName, "Fail to get/set DefaultTextEncodingName"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets default font size of a pixel")] + [Property("SPEC", "Tizen.WebView.Settings.DefaultFontSize A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void DefaultFontSize_READ_WRITE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + + const int fontSize = 10; + settings.DefaultFontSize = fontSize; + Assert.AreEqual(fontSize, settings.DefaultFontSize, "Fail to get/set DefaultFontSize"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets scripts can open windows")] + [Property("SPEC", "Tizen.WebView.Settings.ScriptsCanOpenWindows A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public void ScriptsCanOpenWindows_READ_WRITE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + + settings.ScriptsCanOpenWindows = true; + Assert.IsTrue(settings.ScriptsCanOpenWindows, "Fail to get/set ScriptCanOpenWindows"); + + settings.ScriptsCanOpenWindows = false; + Assert.IsFalse(settings.ScriptsCanOpenWindows, "Fail to get/set ScriptCanOpenWindows"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackArgs.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackArgs.cs new file mode 100755 index 0000000..6438ee1 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackArgs.cs @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.SmartCallbackArgs Tests")] + public class SmartCallbackArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.SmartCallbackArgs Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.SmartCallbackArgs Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the parameter of callback as boolean type")] + [Property("SPEC", "Tizen.WebView.SmartCallbackArgs.GetAsBoolean M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetAsBoolean_RETURN_VALUE() + { + /* TEST CODE */ + bool arg = false; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onTitleChanged = (s, e) => { + arg = e.GetAsBoolean(); + }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.TitleChanged += onTitleChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.TitleChanged -= onTitleChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.IsTrue(arg, "GetAsBoolean should return valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the parameter of callback as double type")] + [Property("SPEC", "Tizen.WebView.SmartCallbackArgs.GetAsDouble M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetAsDouble_RETURN_VALUE() + { + /* TEST CODE */ + double arg = 0d; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onTitleChanged = (s, e) => { + arg = e.GetAsDouble(); + }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.TitleChanged += onTitleChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.TitleChanged -= onTitleChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreNotEqual(0d, arg, "GetAsDouble should return valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the parameter of callback as integer type")] + [Property("SPEC", "Tizen.WebView.SmartCallbackArgs.GetAsInteger M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetAsInteger_RETURN_VALUE() + { + /* TEST CODE */ + int arg = 0; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onTitleChanged = (s, e) => { + arg = e.GetAsInteger(); + }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.TitleChanged += onTitleChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.TitleChanged -= onTitleChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreNotEqual(0, arg, "GetAsInteger should return valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the parameter of callback as string type")] + [Property("SPEC", "Tizen.WebView.SmartCallbackArgs.GetAsString M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GetAsString_RETURN_VALUE() + { + /* TEST CODE */ + string arg = string.Empty; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onTitleChanged = (s, e) => { + arg = e.GetAsString(); + }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.TitleChanged += onTitleChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.TitleChanged -= onTitleChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(WebViewCommon.SampleHtmlTitle, arg, "GetAsString should return valid value"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackLoadErrorArgs.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackLoadErrorArgs.cs new file mode 100755 index 0000000..b3548f1 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSSmartCallbackLoadErrorArgs.cs @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + + [TestFixture] + [Description("Tizen.WebView.SmartCallbackLoadErrorArgs Tests")] + public class SmartCallbackLoadErrorArgsTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.SmartCallbackLoadErrorArgs Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for Tizen.WebView.SmartCallbackLoadErrorArgs Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Gets the URL of load error callback")] + [Property("SPEC", "Tizen.WebView.SmartCallbackLoadErrorArgs.Url A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Url_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => + { + var url = e.Url; + if (url is string && url.Equals(WebViewCommon.TestUrlForError)) + { + tcs.TrySetResult(true); + } + tcs.TrySetResult(false); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrlForError); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "Url should be valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the error code of load error callback")] + [Property("SPEC", "Tizen.WebView.SmartCallbackLoadErrorArgs.Code A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Code_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => + { + var code = e.Code; + if (code.GetType() == typeof(LoadErrorCode) && (code.Equals(LoadErrorCode.CantLookupHost) || code.Equals(LoadErrorCode.Unknown))) + { + tcs.TrySetResult(true); + } + tcs.TrySetResult(false); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrlForError); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "Code should be valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the description of load error callback")] + [Property("SPEC", "Tizen.WebView.SmartCallbackLoadErrorArgs.Description A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Description_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => + { + var description = e.Description; + if (description is string) + { + tcs.TrySetResult(true); + } + tcs.TrySetResult(false); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrlForError); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "Description should be valid value"); + } + + [Test] + [Category("P1")] + [Description("Gets the cancellation or not of load error callback")] + [Property("SPEC", "Tizen.WebView.SmartCallbackLoadErrorArgs.Cancellation A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Cancellation_READ_ONLY() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => + { + var cancellation = e.Cancellation; + if (cancellation.GetType() == typeof(bool)) + { + tcs.TrySetResult(true); + } + tcs.TrySetResult(false); + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrlForError); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "Cancellation should be valid value"); + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/TSWebView.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSWebView.cs new file mode 100755 index 0000000..8b1ba33 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/TSWebView.cs @@ -0,0 +1,1675 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using ElmSharp; +using NUnit.Framework; +using NUnit.Framework.TUnit; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Tizen.WebView.Tests +{ + [TestFixture] + [Description("Tizen.WebView.WebView Tests")] + public class WebViewTests + { + private WebView _webView; + + [SetUp] + public void Init() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for Tizen.WebView.WebView Tests"); + _webView = new WebView(WebViewCommon.GetMainWindow()); + } + + [TearDown] + public void Destroy() + { + LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions forTizen.WebView.WebView Tests"); + _webView = null; + } + + [Test] + [Category("P1")] + [Description("Event that occurs when load started")] + [Property("SPEC", "Tizen.WebView.WebView.LoadStarted E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task LoadStarted_CHECK_EVENT() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadStarted = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadStarted += onLoadStarted; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadStarted -= onLoadStarted; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadStarted event should be invoked"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when load finished")] + [Property("SPEC", "Tizen.WebView.WebView.LoadFinished E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task LoadFinished_CHECK_EVENT() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadFinished event should be invoked"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when load error")] + [Property("SPEC", "Tizen.WebView.WebView.LoadError E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task LoadError_CHECK_EVENT() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(true); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrlForError); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadError event should be invoked"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when title of main frame was changed")] + [Property("SPEC", "Tizen.WebView.WebView.TitleChanged E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task TitleChanged_CHECK_EVENT() + { + /* TEST CODE */ + string title = string.Empty; + EventHandler onTitleChanged = (s, e) => { + title = e.GetAsString(); + }; + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.TitleChanged += onTitleChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.TitleChanged -= onTitleChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(_webView.Title, title, "Received title should be same with WebView.Title"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when navigation policy decide requested")] + [Property("SPEC", "Tizen.WebView.WebView.NavigationPolicyDecideRequested E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task NavigationPolicyDecideRequested_CHECK_EVENT() + { + /* TEST CODE */ + bool occurred = false; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNavigationPolicyDecide = (s, e) => + { + try + { + occurred = true; + e.Use(); + } + catch + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NavigationPolicyDecideRequested += onNavigationPolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NavigationPolicyDecideRequested -= onNavigationPolicyDecide; + + Assert.IsTrue(result, "Page loading should be finished without any error"); + Assert.IsTrue(occurred, "Event should be occured"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when response policy decide requested")] + [Property("SPEC", "Tizen.WebView.WebView.ResponsePolicyDecideRequested E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ResponsePolicyDecideRequested_CHECK_EVENT() + { + /* TEST CODE */ + bool occurred = false; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onResponsePolicyDecide = (s, e) => + { + try + { + occurred = true; + e.Use(); + } + catch + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.ResponsePolicyDecideRequested += onResponsePolicyDecide; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.ResponsePolicyDecideRequested -= onResponsePolicyDecide; + + Assert.IsTrue(result, "Page loading should be finished without any error"); + Assert.IsTrue(occurred, "Event should be occured"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when new window policy decide requested")] + [Property("SPEC", "Tizen.WebView.WebView.NewWindowPolicyDecideRequested E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task NewWindowPolicyDecideRequested_CHECK_EVENT() + { + /* TEST CODE */ + bool occurred = false; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onNewWindowPolicyDecide = (s, e) => + { + try + { + occurred = true; + e.Use(); + } + catch + { + tcs.TrySetResult(false); + } + }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + _webView.NewWindowPolicyDecideRequested += onNewWindowPolicyDecide; + + _webView.LoadUrl(WebViewCommon.WindowOpenSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + _webView.NewWindowPolicyDecideRequested -= onNewWindowPolicyDecide; + + Assert.IsTrue(result, "Page loading should be finished without any error"); + Assert.IsTrue(occurred, "Event should be occured"); + } + + [Test] + [Category("P1")] + [Description("Event that occurs when URL of main frame was changed")] + [Property("SPEC", "Tizen.WebView.WebView.UrlChanged E")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "EVL")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task UrlChanged_CHECK_EVENT() + { + /* TEST CODE */ + string url = string.Empty; + EventHandler onUrlChanged = (s, e) => { + url = e.GetAsString(); + }; + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.UrlChanged += onUrlChanged; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.UrlChanged -= onUrlChanged; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + Assert.AreEqual(_webView.Url, url, "Received URL should be same with WebView.Url"); + } + + [Test] + [Category("P1")] + [Description("Gets current URL of the main frame")] + [Property("SPEC", "Tizen.WebView.WebView.Url A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Url_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var url = _webView.Url; + Assert.IsInstanceOf(url, "Get Url should return object string"); + Assert.AreEqual(WebViewCommon.SampleHtml, url, "Fail to get Url should return valid url"); + } + + [Test] + [Category("P1")] + [Description("Gets current title of the main frame")] + [Property("SPEC", "Tizen.WebView.WebView.Title A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Title_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var title = _webView.Title; + Assert.IsInstanceOf(title, "Get Title should return object string"); + Assert.AreEqual(WebViewCommon.SampleHtmlTitle, title, "Get Title should return valid title"); + } + + [Test] + [Category("P1")] + [Description("Gets and sets user agent string of this view")] + [Property("SPEC", "Tizen.WebView.WebView.UserAgent A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void UserAgent_READ_WRITE() + { + /* TEST CODE */ + _webView.UserAgent = WebViewCommon.TestUserAgent; + var userAgent = _webView.UserAgent; + Assert.IsInstanceOf(userAgent, "Get UserAgent should return object string"); + Assert.AreEqual(WebViewCommon.TestUserAgent, userAgent, "Get UserAgent should return valid user agent"); + } + + [Test] + [Category("P1")] + [Description("Checks whether a view has the focus")] + [Property("SPEC", "Tizen.WebView.WebView.HasFocus A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task HasFocus_READ_ONLY() + { + /* PRECONDITION */ + + + /* TEST CODE */ + var hasFocus = _webView.HasFocus; + Assert.IsInstanceOf(hasFocus, "Get HasFocus should return object bool"); + Assert.IsFalse(hasFocus, "HasFocus should be false before load content"); + + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => + { + _webView.SetFocus(true); + tcs.TrySetResult(true); + }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + hasFocus = _webView.HasFocus; + Assert.IsInstanceOf(hasFocus, "Get HasFocus should return object bool"); + Assert.IsTrue(hasFocus, "HasFocus should be true after load content"); + } + + [Test] + [Category("P1")] + [Description("Create a WebView object")] + [Property("SPEC", "Tizen.WebView.WebView.WebView C")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "CONSTR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void WebView_INIT_WITH_PARENT() + { + /* TEST CODE */ + var webView = new WebView(WebViewCommon.GetMainWindow()); + Assert.IsNotNull(webView, "WebView object is null after initialization"); + Assert.IsInstanceOf(webView, "Should return WebView instance"); + } + + [Test] + [Category("P1")] + [Description("Gets the Context object of this view")] + [Property("SPEC", "Tizen.WebView.WebView.GetContext M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void GetContext_RETURN_VALUE() + { + /* TEST CODE */ + var context = _webView.GetContext(); + Assert.IsInstanceOf(context, "GetContext method failed"); + } + + [Test] + [Category("P1")] + [Description("Gets the Settings object of this view")] + [Property("SPEC", "Tizen.WebView.WebView.GetSettings M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public void GetSettings_RETURN_VALUE() + { + /* TEST CODE */ + var settings = _webView.GetSettings(); + Assert.IsInstanceOf(settings, "GetSettings method failed"); + } + + [Test] + [Category("P1")] + [Description("Gets the BackForwardList object of this view")] + [Property("SPEC", "Tizen.WebView.WebView.GetBackForwardList M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task GetBackForwardList_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + var backforwardlist = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backforwardlist, "GetBackForwardList method failed"); + + var currentItem = backforwardlist.CurrentItem; + Assert.IsInstanceOf(currentItem, "Get Current BackForwardListItem property failed"); + Assert.AreEqual(WebViewCommon.SampleHtml, currentItem.Url, "URL should be same"); + } + + [Test] + [Category("P1")] + [Description("Clears the BackForwardList of this view")] + [Property("SPEC", "Tizen.WebView.WebView.ClearBackForwardList M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ClearBackForwardList_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + _webView.ClearBackForwardList(); + + var backForwardList = _webView.GetBackForwardList(); + Assert.IsInstanceOf(backForwardList, "GetBackForwardList method failed"); + Assert.AreEqual(1, backForwardList.Count, "Fail to Clear BackForwardList"); + } + + [Test] + [Category("P1")] + [Description("Asks the object to load the given URL")] + [Property("SPEC", "Tizen.WebView.WebView.LoadUrl M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task LoadUrl_CHANGE_STATUS() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + } + + [Test] + [Category("P1")] + [Description("Loads the specified html string as the content of the view")] + [Property("SPEC", "Tizen.WebView.WebView.LoadHtml M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task LoadHtml_CHANGE_STATUS() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadHtml(WebViewCommon.TestHtml, WebViewCommon.TestUrl); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadHtml method failed"); + Assert.AreEqual(WebViewCommon.TestUrl, _webView.Title, "Title should be same with base URL"); + } + + [Test] + [Category("P1")] + [Description("Asks the main frame to stop loading")] + [Property("SPEC", "Tizen.WebView.WebView.StopLoading M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task StopLoading_CHANGE_STATUS() + { + /* TEST CODE */ + var isCancellation = false; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadStarted = (s, e) => { _webView.StopLoading(); }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(false); }; + EventHandler onLoadError = (s, e) => { + isCancellation = e.Cancellation; + tcs.TrySetResult(true); + }; + + _webView.LoadStarted += onLoadStarted; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.TestUrl); + var result = await tcs.Task; + + _webView.LoadStarted -= onLoadStarted; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadError should be invoked"); + Assert.IsTrue(isCancellation, "Cancellation should be true"); + } + + [Test] + [Category("P1")] + [Description("Asks the main frame to reload the current document")] + [Property("SPEC", "Tizen.WebView.WebView.Reload M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Reload_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + TaskCompletionSource tcsReload = new TaskCompletionSource(false); + EventHandler onLoadFinishedReload = (s, e) => { tcsReload.TrySetResult(true); }; + EventHandler onLoadErrorReload = (s, e) => { tcsReload.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedReload; + _webView.LoadError += onLoadErrorReload; + + _webView.Reload(); + result = await tcsReload.Task; + + _webView.LoadFinished -= onLoadFinishedReload; + _webView.LoadError -= onLoadErrorReload; + + Assert.IsTrue(result, "Reload method failed"); + } + + [Test] + [Category("P1")] + [Description("Asks the main frame to navigate back in history")] + [Property("SPEC", "Tizen.WebView.WebView.GoBack M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GoBack_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + + Assert.IsTrue(result, "GoBack method failed"); + Assert.AreEqual(WebViewCommon.SampleHtml1, _webView.Url, "URL should be same with the first page"); + } + + [Test] + [Category("P1")] + [Description("Asks the main frame to navigate forward in history")] + [Property("SPEC", "Tizen.WebView.WebView.GoForward M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task GoForward_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + + Assert.IsTrue(result, "GoBack method failed"); + + /* TEST CODE */ + TaskCompletionSource tcsGoForward = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoForward = (s, e) => { tcsGoForward.TrySetResult(true); }; + EventHandler onLoadErrorGoForward = (s, e) => { tcsGoForward.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoForward; + _webView.LoadError += onLoadErrorGoForward; + + _webView.GoForward(); + result = await tcsGoForward.Task; + + _webView.LoadFinished -= onLoadFinishedGoForward; + _webView.LoadError -= onLoadErrorGoForward; + + Assert.IsTrue(result, "GoForward method failed"); + Assert.AreEqual(WebViewCommon.SampleHtml2, _webView.Url, "URL should be same with the second page"); + } + + [Test] + [Category("P1")] + [Description("Checks whether it is possible to navigate backwards one item in history")] + [Property("SPEC", "Tizen.WebView.WebView.CanGoBack M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task CanGoBack_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + /* TEST CODE */ + var canGoBack = _webView.CanGoBack(); + Assert.IsInstanceOf(canGoBack, "CanGoBack should return object boolean"); + Assert.IsTrue(canGoBack, "CanGoBack should return valid value"); + } + + [Test] + [Category("P1")] + [Description("Checks whether it is possible to navigate forwards one item in history")] + [Property("SPEC", "Tizen.WebView.WebView.CanGoForward M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task CanGoForward_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcsFisrt = new TaskCompletionSource(false); + EventHandler onLoadFinishedFirst = (s, e) => { tcsFisrt.TrySetResult(true); }; + EventHandler onLoadErrorFirst = (s, e) => { tcsFisrt.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedFirst; + _webView.LoadError += onLoadErrorFirst; + + _webView.LoadUrl(WebViewCommon.SampleHtml1); + var result = await tcsFisrt.Task; + + _webView.LoadFinished -= onLoadFinishedFirst; + _webView.LoadError -= onLoadErrorFirst; + + Assert.IsTrue(result, "LoadUrl method failed for the first page"); + + TaskCompletionSource tcsSecond = new TaskCompletionSource(false); + EventHandler onLoadFinishedSecond = (s, e) => { tcsSecond.TrySetResult(true); }; + EventHandler onLoadErrorSecond = (s, e) => { tcsSecond.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedSecond; + _webView.LoadError += onLoadErrorSecond; + + _webView.LoadUrl(WebViewCommon.SampleHtml2); + result = await tcsSecond.Task; + + _webView.LoadFinished -= onLoadFinishedSecond; + _webView.LoadError -= onLoadErrorSecond; + + Assert.IsTrue(result, "LoadUrl method failed for the second page"); + + TaskCompletionSource tcsGoBack = new TaskCompletionSource(false); + EventHandler onLoadFinishedGoBack = (s, e) => { tcsGoBack.TrySetResult(true); }; + EventHandler onLoadErrorGoBack = (s, e) => { tcsGoBack.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinishedGoBack; + _webView.LoadError += onLoadErrorGoBack; + + _webView.GoBack(); + result = await tcsGoBack.Task; + + _webView.LoadFinished -= onLoadFinishedGoBack; + _webView.LoadError -= onLoadErrorGoBack; + + Assert.IsTrue(result, "GoBack method failed"); + + /* TEST CODE */ + var canGoForward = _webView.CanGoForward(); + Assert.IsInstanceOf(canGoForward, "CanGoForward should return object boolean"); + Assert.IsTrue(canGoForward, "CanGoForward should return valid value"); + } + + [Test] + [Category("P1")] + [Description("Injects the supplied javascript message handler into the view")] + [Property("SPEC", "Tizen.WebView.WebView.AddJavaScriptMessageHandler M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR, MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task AddJavaScriptMessageHandler_RETURN_VALUE_CHANGE_STATUS() + { + /* TEST CODE */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + TaskCompletionSource tcsForCallback = new TaskCompletionSource(false); + JavaScriptMessageHandler handler = (message) => + { + if (message.Name.Equals("MyJavaScriptInterfaceForCommon") && message.GetBodyAsString().Equals("Test message")) + { + tcsForCallback.TrySetResult(true); + } + tcsForCallback.TrySetResult(false); + }; + var ret = _webView.AddJavaScriptMessageHandler("MyJavaScriptInterfaceForCommon", handler); + Assert.IsInstanceOf(ret, "AddJavaScriptMessageHandler should return object bool"); + Assert.IsTrue(ret, "AddJavaScriptMessageHandler method failed"); + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + _webView.Eval("callForCommon();"); + result = await tcsForCallback.Task; + + Assert.IsTrue(result, "JavaScript handler should be invoked with valid name"); + } + + [Test] + [Category("P1")] + [Description("Requests the execution of given name and result to the JavaScript runtime")] + [Property("SPEC", "Tizen.WebView.WebView.EvalWithResult M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task EvalWithResult_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.AddJavaScriptInterfaceSampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.EvalWithResult("sendResult", "Result"); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Requests the execution of the given script")] + [Property("SPEC", "Tizen.WebView.WebView.Eval M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task Eval_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.Eval(WebViewCommon.TestScript); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Requests the execution of the given script and gets the result of evaluation")] + [Property("SPEC", "Tizen.WebView.WebView.EvalAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MR")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task EvalAsync_RETURN_VALUE() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + string returnValue = ""; + try + { + returnValue = await _webView.EvalAsync(WebViewCommon.TestScript); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + + Assert.AreEqual("test content", returnValue, WebViewCommon.ReturnOfTestScript); + } + + [Test] + [Category("P2")] + [Description("Checks whether EvalAsync throws ArgumentException when script is null")] + [Property("SPEC", "Tizen.WebView.WebView.EvalAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MEX")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task EvalAsync_ARGUMENT_EXCEPTION_NULL_SCRIPT() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + Assert.ThrowsAsync(async () => await _webView.EvalAsync(null), "ArgumentException should be thrown"); + } + + [Test] + [Category("P2")] + [Description("Checks whether EvalAsync throws ArgumentException when script is empty")] + [Property("SPEC", "Tizen.WebView.WebView.EvalAsync M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MEX")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task EvalAsync_ARGUMENT_EXCEPTION_EMPTY_SCRIPT() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + Assert.ThrowsAsync(async () => await _webView.EvalAsync(""), "ArgumentException should be thrown"); + } + + [Test] + [Category("P1")] + [Description("Requests to set or unset a view as the currently focused one")] + [Property("SPEC", "Tizen.WebView.WebView.SetFocus M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task SetFocus_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + _webView.SetFocus(true); + Assert.IsTrue(_webView.HasFocus, "Fail to set focus as true"); + _webView.SetFocus(false); + Assert.IsFalse(_webView.HasFocus, "Fail to set focus as false"); + } + + [Test] + [Category("P1")] + [Description("Gets the Contents Size of this view")] + [Property("SPEC", "Tizen.WebView.WebView.ContentsSize A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ContentsSize_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + await Task.Delay(2000); + + /* TEST CODE */ + var contentSize = _webView.ContentsSize; + Assert.AreNotEqual(0, contentSize.Height, "Height of content size should be nonzero"); + Assert.AreNotEqual(0, contentSize.Width, "Width of content size should be nonzero"); + } + + [Test] + [Category("P1")] + [Description("Exits the Full Screen of this view")] + [Property("SPEC", "Tizen.WebView.WebView.ExitFullscreen M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ExitFullscreen_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.ExitFullscreen(); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Sends the orientation of the device")] + [Property("SPEC", "Tizen.WebView.WebView.SendOrientation M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MAE")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task SendOrientation_ENUM_ALL() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + + try + { + foreach(Orientation orientation in Enum.GetValues(typeof(Orientation))) + { + _webView.SendOrientation(orientation); + } + + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Suspends the operation associated with the view")] + [Property("SPEC", "Tizen.WebView.WebView.Suspend M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task Suspend_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.Suspend(); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Resumes the operation associated with the view")] + [Property("SPEC", "Tizen.WebView.WebView.Resume M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task Resume_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.Resume(); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Gets the Load Progress of this view")] + [Property("SPEC", "Tizen.WebView.WebView.LoadProgress A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task LoadProgress_READ_ONLY() + { + /* TEST CODE */ + double progress = 0; + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadStarted = (s, e) => { progress = _webView.LoadProgress; }; + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadStarted += onLoadStarted; + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadStarted -= onLoadStarted; + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + Assert.AreNotEqual(0, progress, "Fail to get Load Progress"); + } + + [Test] + [Category("P1")] + [Description("Gets the Scale of this view")] + [Property("SPEC", "Tizen.WebView.WebView.Scale A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRO")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task Scale_READ_ONLY() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + Assert.AreNotEqual(0, _webView.Scale, "Fail to get scale"); + } + + [Test] + [Category("P1")] + [Description("Sets the Scale for this view")] + [Property("SPEC", "Tizen.WebView.WebView.SetScale M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task SetScale_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + double scaleFactor = 2.0; + Point scrollTo; + scrollTo.X = 5; + scrollTo.Y = 5; + + _webView.SetScale(scaleFactor, scrollTo); + await Task.Delay(1000); + + Assert.AreEqual(2.0, _webView.Scale, "Fail to set scale"); + } + + [Test] + [Category("P1")] + [Description("Enables the visibility of this view")] + [Property("SPEC", "Tizen.WebView.WebView.SetViewVisibility M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task SetViewVisibility_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + _webView.SetViewVisibility(true); + + _webView.SetViewVisibility(false); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Gets and sets user agent string of this view")] + [Property("SPEC", "Tizen.WebView.WebView.ScrollPosition A")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "PRW")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ScrollPosition_READ_WRITE() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + Point scrollPos; + scrollPos.X = 5; + scrollPos.Y = 10; + + _webView.ScrollPosition = scrollPos; + await Task.Delay(1000); + + Assert.AreEqual(scrollPos, _webView.ScrollPosition, "Get ScrollPos should return valid scroll position"); + } + + [Test] + [Category("P1")] + [Description("Sets the Scroll By for this view")] + [Property("SPEC", "Tizen.WebView.WebView.ScrollBy M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task ScrollBy_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + Point initialPos = _webView.ScrollPosition; + Point scrollBy; + scrollBy.X = 5; + scrollBy.Y = 10; + + _webView.ScrollBy(scrollBy); + await Task.Delay(1000); + + Point scrollPos = _webView.ScrollPosition; + Assert.AreEqual(initialPos.X + scrollBy.X, scrollPos.X, "X of scroll position should be valid"); + Assert.AreEqual(initialPos.Y + scrollBy.Y, scrollPos.Y, "Y of scroll position should be valid"); + } + + [Test] + [Category("P1")] + [Description("Finds the text entered for this view")] + [Property("SPEC", "Tizen.WebView.WebView.FindText M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MAE")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public async Task FindText_ENUM_ALL() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + try + { + foreach (FindOption option in Enum.GetValues(typeof(FindOption))) + { + _webView.FindText("sample", option, 0); + } + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Sets the url request for this view")] + [Property("SPEC", "Tizen.WebView.WebView.SetUrlRequest M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MAE")] + [Property("AUTHOR", "Basavaraj P S, basavaraj.ps@samsung.com")] + public void SetUrlRequest_ENUM_ALL() + { + /* TEST CODE */ + var httpHeaders = new Dictionary(); + httpHeaders.Add("Accept", "*/*"); + try + { + foreach(HttpMethod method in Enum.GetValues(typeof(HttpMethod))) + { + _webView.SetUrlRequest(WebViewCommon.TestUrl, method, httpHeaders, null); + } + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + } + + [Test] + [Category("P1")] + [Description("Sets the delegate for context menu customization")] + [Property("SPEC", "Tizen.WebView.WebView.SetContextMenuCustomizeDelegate M")] + [Property("SPEC_URL", "-")] + [Property("CRITERIA", "MCST")] + [Property("AUTHOR", "Youngha Jung, yh106.jung@samsung.com")] + public async Task SetContextMenuCustomizeDelegate_CHANGE_STATUS() + { + /* PRECONDITION */ + TaskCompletionSource tcs = new TaskCompletionSource(false); + EventHandler onLoadFinished = (s, e) => { tcs.TrySetResult(true); }; + EventHandler onLoadError = (s, e) => { tcs.TrySetResult(false); }; + + _webView.LoadFinished += onLoadFinished; + _webView.LoadError += onLoadError; + + _webView.LoadUrl(WebViewCommon.SampleHtml); + var result = await tcs.Task; + + _webView.LoadFinished -= onLoadFinished; + _webView.LoadError -= onLoadError; + + Assert.IsTrue(result, "LoadUrl method failed"); + + /* TEST CODE */ + WebView.ContextMenuCustomize contextMenuCustomize = (ContextMenu menu) => + { + Assert.True(false, "Delegate must not be invoked in this testcase"); + }; + try + { + _webView.SetContextMenuCustomizeDelegate(contextMenuCustomize); + } + catch (Exception e) + { + Assert.True(false, e.Message); + } + + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/testcase/support/WebViewCommon.cs b/tct-suite-vs/Tizen.WebView.Tests/testcase/support/WebViewCommon.cs new file mode 100755 index 0000000..ba8aced --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/testcase/support/WebViewCommon.cs @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +using ElmSharp; + +namespace Tizen.WebView.Tests +{ + internal static class WebViewCommon + { + public const string SampleHtml = "file:///opt/usr/home/owner/share/res/sample.html"; + public const string SampleHtml1 = "file:///opt/usr/home/owner/share/res/sample_1.html"; + public const string SampleHtml2 = "file:///opt/usr/home/owner/share/res/sample_2.html"; + public const string AddJavaScriptInterfaceSampleHtml = "file:///opt/usr/home/owner/share/res/add_js_interface_sample.html"; + public const string WindowOpenSampleHtml = "file:///opt/usr/home/owner/share/res/window_open_sample.html"; + public const string LinkClickSampleHtml = "file:///opt/usr/home/owner/share/res/link_click_sample.html"; + public const string FormSubmitSampleHtml = "file:///opt/usr/home/owner/share/res/form_submit_sample.html"; + public const string SampleHtmlTitle = "Testing Sample Page"; + public const string HeaderTerminator = "\r\r"; + public const string FileScheme = "file"; + + public const string TestUrl = "https://www.tizen.org/"; + public const string TestUrlForError = "http://page_that_does_not_exist/"; + public const string TestUrlForDownload = "http://download.tizen.org/sdk/samples/online/Native/MN_app-common/MN_app-common.zip"; + public const string TestUserAgent = "Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/538.1 (KHTML, like Gecko) Version/5.0 Safari/538.1"; + public const string TestHtml = ""; + public const string TestScript = "document.getElementById('getParaContent').innerHTML"; + public const string ReturnOfTestScript = "The result of evaluation should be same with expected value"; + public const string TestCookie = "foo=bar"; + + private static Window _instance; + + public static Window GetMainWindow() + { + if (_instance == null) + { + _instance = new Window("WebView Auto Tests"); + } + return _instance; + } + } +} diff --git a/tct-suite-vs/Tizen.WebView.Tests/tizen-manifest.xml b/tct-suite-vs/Tizen.WebView.Tests/tizen-manifest.xml new file mode 100755 index 0000000..ac0f635 --- /dev/null +++ b/tct-suite-vs/Tizen.WebView.Tests/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + Tizen.WebView.Tests.png + + + + + + http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/internet + + + -- 2.7.4