[Tizen.Applications.RPCPort][TCSACR-159] Add TCs for RPCPort 97/184597/34
authorJunghoon Park <jh9216.park@samsung.com>
Thu, 19 Jul 2018 06:12:20 +0000 (15:12 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Tue, 21 Aug 2018 06:55:25 +0000 (15:55 +0900)
Change-Id: I039d8a22723a31ea0f082f609e855f0233fdd205
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
29 files changed:
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy.sln [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy.csproj [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy_App.cs [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/shared/res/RpcPortProxy.png [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/tizen-manifest.xml [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2.sln [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2.csproj [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2_App.cs [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/shared/res/RpcPortProxy2.png [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/tizen-manifest.xml [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub.sln [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub.csproj [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub_App.cs [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/shared/res/RpcPortStub.png [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/tizen-manifest.xml [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2.sln [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2.csproj [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2_App.cs [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/shared/res/RpcPortStub2.png [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/tizen-manifest.xml [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy-1.0.0.tpk [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy2-1.0.0.tpk [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub-1.0.0.tpk [new file with mode: 0755]
tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub2-1.0.0.tpk [new file with mode: 0755]
tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Exceptions.cs [new file with mode: 0755]
tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Parcel.cs [new file with mode: 0755]
tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.ProxyBase.cs [new file with mode: 0755]
tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.StubBase.cs [new file with mode: 0755]
tct-suite-vs/Tizen.Applications.Tests/tizen-manifest.xml

diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy.sln b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy.sln
new file mode 100755 (executable)
index 0000000..c937842
--- /dev/null
@@ -0,0 +1,25 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 15\r
+VisualStudioVersion = 15.0.27703.2035\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpcPortProxy", "RpcPortProxy\RpcPortProxy.csproj", "{B4C8261C-D74F-43D1-A075-B9E242851D31}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Release|Any CPU = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {B4C8261C-D74F-43D1-A075-B9E242851D31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B4C8261C-D74F-43D1-A075-B9E242851D31}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B4C8261C-D74F-43D1-A075-B9E242851D31}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B4C8261C-D74F-43D1-A075-B9E242851D31}.Release|Any CPU.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {3E5007AD-1998-4272-8437-26CDC3729698}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy.csproj b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy.csproj
new file mode 100755 (executable)
index 0000000..bfbbbf8
--- /dev/null
@@ -0,0 +1,44 @@
+<Project>\r
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />\r
+\r
+  <!-- Setting Tizen Extension Path -->\r
+  <PropertyGroup Label="Globals">\r
+    <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>\r
+  </PropertyGroup>\r
+\r
+  <!-- Import Tizen property in Tizen.NET SDK -->\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />\r
+\r
+  <!-- Property Group for .NET Core Project -->\r
+  <PropertyGroup>\r
+    <OutputType>Exe</OutputType>\r
+    <TargetFramework>netcoreapp2.0</TargetFramework>\r
+  </PropertyGroup>\r
+\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugType>portable</DebugType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>None</DebugType>\r
+  </PropertyGroup>\r
+\r
+  <ItemGroup>\r
+    <Folder Include="lib\" />\r
+    <Folder Include="res\" />\r
+  </ItemGroup>\r
+\r
+  <!-- Include Nuget Package for Tizen Project building -->\r
+  <ItemGroup>\r
+    <PackageReference Include="Tizen.NET.API5" Version="5.0.0.14439" />\r
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.1" />\r
+  </ItemGroup>\r
+\r
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />\r
+\r
+  <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->\r
+  <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+  </Target>\r
+</Project>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy_App.cs b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/RpcPortProxy_App.cs
new file mode 100755 (executable)
index 0000000..552e0ca
--- /dev/null
@@ -0,0 +1,125 @@
+using System.Threading;\r
+using Tizen;\r
+using Tizen.Applications;\r
+using Tizen.Applications.RPCPort;\r
+\r
+namespace RpcPortProxy\r
+{\r
+    class App : ServiceApplication\r
+    {\r
+        private Proxy _proxy;\r
+\r
+        class Proxy : ProxyBase\r
+        {\r
+            private Timer _timer;\r
+            private bool _send;\r
+\r
+            public Proxy(bool send)\r
+            {\r
+                _timer = new Timer(new TimerCallback(OnTimeout));\r
+                _timer.Change(100, 0);\r
+                _send = send;\r
+            }\r
+\r
+            private void OnTimeout(object state)\r
+            {\r
+                Connect("Tizen.Applications.Tests", "Test");\r
+                _timer.Dispose();\r
+                _timer = null;\r
+            }\r
+\r
+            protected override void OnConnectedEvent(string endPoint, string portName, Port port)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnConnectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+                if (_send)\r
+                {\r
+                    using (var p = new Parcel())\r
+                    {\r
+                        p.WriteString("hello");\r
+                        p.Send(port);\r
+                    }\r
+                }\r
+            }\r
+\r
+            protected override void OnDisconnectedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnDisconnectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+\r
+            protected override void OnReceivedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnReceivedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+\r
+            protected override void OnRejectedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnRejectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+        }\r
+\r
+        protected override void OnCreate()\r
+        {\r
+            base.OnCreate();\r
+        }\r
+\r
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)\r
+        {\r
+            base.OnAppControlReceived(e);\r
+            if (e.ReceivedAppControl.ExtraData.TryGet("Test", out string val))\r
+            {\r
+                if (val.Equals("finish"))\r
+                {\r
+                    Log.Debug("RPCPortProxy", "Finish");\r
+                    Exit();\r
+                }\r
+            }\r
+            else\r
+            {\r
+                Log.Debug("RPCPortProxy", "Connecting");\r
+                _proxy?.Dispose();\r
+                if (e.ReceivedAppControl.ExtraData.TryGet("send", out string v))\r
+                    _proxy = new Proxy(true);\r
+                else\r
+                    _proxy = new Proxy(false);\r
+            }\r
+        }\r
+\r
+        protected override void OnDeviceOrientationChanged(DeviceOrientationEventArgs e)\r
+        {\r
+            base.OnDeviceOrientationChanged(e);\r
+        }\r
+\r
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)\r
+        {\r
+            base.OnLocaleChanged(e);\r
+        }\r
+\r
+        protected override void OnLowBattery(LowBatteryEventArgs e)\r
+        {\r
+            base.OnLowBattery(e);\r
+        }\r
+\r
+        protected override void OnLowMemory(LowMemoryEventArgs e)\r
+        {\r
+            base.OnLowMemory(e);\r
+        }\r
+\r
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)\r
+        {\r
+            base.OnRegionFormatChanged(e);\r
+        }\r
+\r
+        protected override void OnTerminate()\r
+        {\r
+            _proxy?.Dispose();\r
+            _proxy = null;\r
+            base.OnTerminate();\r
+        }\r
+\r
+        static void Main(string[] args)\r
+        {\r
+            App app = new App();\r
+            app.Run(args);\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/shared/res/RpcPortProxy.png b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/shared/res/RpcPortProxy.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/shared/res/RpcPortProxy.png differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/tizen-manifest.xml b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy/RpcPortProxy/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..14e26a9
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<manifest package="org.tizen.example.RpcPortProxy" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">\r
+    <profile name="common" />\r
+    <service-application appid="org.tizen.example.RpcPortProxy" exec="RpcPortProxy.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="true" type="dotnet">\r
+        <label>RpcPortProxy</label>\r
+        <icon>RpcPortProxy.png</icon>\r
+        <metadata key="http://tizen.org/metadata/allowedappid" value="Tizen.Applications.Tests" />\r
+        <splash-screens />\r
+    </service-application>\r
+    <shortcut-list />\r
+    <privileges>\r
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>\r
+        <privilege>http://tizen.org/privilege/datasharing</privilege>\r
+    </privileges>\r
+    <provides-appdefined-privileges />\r
+</manifest>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2.sln b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2.sln
new file mode 100755 (executable)
index 0000000..df07963
--- /dev/null
@@ -0,0 +1,25 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 15\r
+VisualStudioVersion = 15.0.27703.2035\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpcPortProxy2", "RpcPortProxy2\RpcPortProxy2.csproj", "{E877EB41-209D-417B-9E72-7095BBBF7604}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Release|Any CPU = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {E877EB41-209D-417B-9E72-7095BBBF7604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {E877EB41-209D-417B-9E72-7095BBBF7604}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {E877EB41-209D-417B-9E72-7095BBBF7604}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {E877EB41-209D-417B-9E72-7095BBBF7604}.Release|Any CPU.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {E8C497F1-5425-439D-8021-3A6D9BF04ED4}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2.csproj b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2.csproj
new file mode 100755 (executable)
index 0000000..490b33f
--- /dev/null
@@ -0,0 +1,44 @@
+<Project>\r
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />\r
+\r
+  <!-- Setting Tizen Extension Path -->\r
+  <PropertyGroup Label="Globals">\r
+    <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>\r
+  </PropertyGroup>\r
+\r
+  <!-- Import Tizen property in Tizen.NET SDK -->\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />\r
+\r
+  <!-- Property Group for .NET Core Project -->\r
+  <PropertyGroup>\r
+    <OutputType>Exe</OutputType>\r
+    <TargetFramework>netcoreapp2.0</TargetFramework>\r
+  </PropertyGroup>\r
+\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugType>portable</DebugType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>None</DebugType>\r
+  </PropertyGroup>\r
+\r
+  <ItemGroup>\r
+    <Folder Include="lib\" />\r
+    <Folder Include="res\" />\r
+  </ItemGroup>\r
+\r
+  <!-- Include Nuget Package for Tizen Project building -->\r
+  <ItemGroup>\r
+    <PackageReference Include="Tizen.NET.API5" Version="5.0.0.14450" />\r
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.1" />\r
+  </ItemGroup>\r
+\r
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />\r
+\r
+  <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->\r
+  <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+  </Target>\r
+</Project>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2_App.cs b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/RpcPortProxy2_App.cs
new file mode 100755 (executable)
index 0000000..0d79ff4
--- /dev/null
@@ -0,0 +1,116 @@
+using System;\r
+using System.Threading;\r
+using Tizen;\r
+using Tizen.Applications;\r
+using Tizen.Applications.RPCPort;\r
+\r
+namespace RpcPortProxy\r
+{\r
+    class App : ServiceApplication\r
+    {\r
+        private Proxy _proxy;\r
+\r
+        class Proxy : ProxyBase\r
+        {\r
+            public Proxy()\r
+            {\r
+                Connect("org.tizen.example.RpcPortStub", "Test");\r
+            }\r
+\r
+            protected override void OnConnectedEvent(string endPoint, string portName, Port port)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnConnectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+\r
+            protected override void OnDisconnectedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnDisconnectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+\r
+            protected override void OnReceivedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnReceivedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+\r
+            protected override void OnRejectedEvent(string endPoint, string portName)\r
+            {\r
+                Log.Debug("RPCPortProxy", "OnRejectedEvent: endPoint:" + endPoint + " port:" + portName);\r
+            }\r
+        }\r
+\r
+        protected override void OnCreate()\r
+        {\r
+            base.OnCreate();\r
+        }\r
+\r
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)\r
+        {\r
+            base.OnAppControlReceived(e);\r
+            if (e.ReceivedAppControl.ExtraData.TryGet("Test", out string val))\r
+            {\r
+                if (val.Equals("finish"))\r
+                {\r
+                    Log.Debug("RPCPortProxy", "Finish");\r
+                    Exit();\r
+                }\r
+            }\r
+            else\r
+            {\r
+                Log.Debug("RPCPortProxy", "Connecting");\r
+                _proxy?.Dispose();\r
+\r
+                try\r
+                {\r
+                    _proxy = new Proxy();\r
+                }\r
+                catch (PermissionDeniedException)\r
+                {\r
+                    Log.Debug("RPCPortProxy", "PermissionDeniedException happened");\r
+                    e.ReceivedAppControl.ReplyToLaunchRequest(new AppControl(), AppControlReplyResult.Succeeded);\r
+                }\r
+                catch (Exception ex)\r
+                {\r
+                    Log.Debug("RPCPortProxy", "Uncatched exception " + ex.ToString());\r
+                }\r
+            }\r
+        }\r
+\r
+        protected override void OnDeviceOrientationChanged(DeviceOrientationEventArgs e)\r
+        {\r
+            base.OnDeviceOrientationChanged(e);\r
+        }\r
+\r
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)\r
+        {\r
+            base.OnLocaleChanged(e);\r
+        }\r
+\r
+        protected override void OnLowBattery(LowBatteryEventArgs e)\r
+        {\r
+            base.OnLowBattery(e);\r
+        }\r
+\r
+        protected override void OnLowMemory(LowMemoryEventArgs e)\r
+        {\r
+            base.OnLowMemory(e);\r
+        }\r
+\r
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)\r
+        {\r
+            base.OnRegionFormatChanged(e);\r
+        }\r
+\r
+        protected override void OnTerminate()\r
+        {\r
+            _proxy?.Dispose();\r
+            _proxy = null;\r
+            base.OnTerminate();\r
+        }\r
+\r
+        static void Main(string[] args)\r
+        {\r
+            App app = new App();\r
+            app.Run(args);\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/shared/res/RpcPortProxy2.png b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/shared/res/RpcPortProxy2.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/shared/res/RpcPortProxy2.png differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/tizen-manifest.xml b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortProxy2/RpcPortProxy2/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..d597d54
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<manifest package="org.tizen.example.RpcPortProxy2" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">\r
+    <profile name="common" />\r
+    <service-application appid="org.tizen.example.RpcPortProxy2" exec="RpcPortProxy2.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="true" type="dotnet">\r
+        <label>RpcPortProxy2</label>\r
+        <icon>RpcPortProxy2.png</icon>\r
+        <metadata key="http://tizen.org/metadata/allowedappid" value="Tizen.Applications.Tests" />\r
+        <splash-screens />\r
+    </service-application>\r
+    <shortcut-list />\r
+    <privileges>\r
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>\r
+    </privileges>\r
+    <provides-appdefined-privileges />\r
+</manifest>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub.sln b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub.sln
new file mode 100755 (executable)
index 0000000..4d59ee9
--- /dev/null
@@ -0,0 +1,25 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 15\r
+VisualStudioVersion = 15.0.27703.2035\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpcPortStub", "RpcPortStub\RpcPortStub.csproj", "{FE0280FD-12A8-4B3D-A035-D73CFF4C2ECF}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Release|Any CPU = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {FE0280FD-12A8-4B3D-A035-D73CFF4C2ECF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {FE0280FD-12A8-4B3D-A035-D73CFF4C2ECF}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {FE0280FD-12A8-4B3D-A035-D73CFF4C2ECF}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {FE0280FD-12A8-4B3D-A035-D73CFF4C2ECF}.Release|Any CPU.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {C6927ABD-FBB9-450E-BD87-9152B5AD5C22}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub.csproj b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub.csproj
new file mode 100755 (executable)
index 0000000..bfbbbf8
--- /dev/null
@@ -0,0 +1,44 @@
+<Project>\r
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />\r
+\r
+  <!-- Setting Tizen Extension Path -->\r
+  <PropertyGroup Label="Globals">\r
+    <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>\r
+  </PropertyGroup>\r
+\r
+  <!-- Import Tizen property in Tizen.NET SDK -->\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />\r
+\r
+  <!-- Property Group for .NET Core Project -->\r
+  <PropertyGroup>\r
+    <OutputType>Exe</OutputType>\r
+    <TargetFramework>netcoreapp2.0</TargetFramework>\r
+  </PropertyGroup>\r
+\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugType>portable</DebugType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>None</DebugType>\r
+  </PropertyGroup>\r
+\r
+  <ItemGroup>\r
+    <Folder Include="lib\" />\r
+    <Folder Include="res\" />\r
+  </ItemGroup>\r
+\r
+  <!-- Include Nuget Package for Tizen Project building -->\r
+  <ItemGroup>\r
+    <PackageReference Include="Tizen.NET.API5" Version="5.0.0.14439" />\r
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.1" />\r
+  </ItemGroup>\r
+\r
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />\r
+\r
+  <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->\r
+  <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+  </Target>\r
+</Project>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub_App.cs b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/RpcPortStub_App.cs
new file mode 100755 (executable)
index 0000000..e1a8e4a
--- /dev/null
@@ -0,0 +1,105 @@
+using Tizen;\r
+using Tizen.Applications;\r
+using Tizen.Applications.RPCPort;\r
+\r
+namespace RpcPortStub\r
+{\r
+    class App : ServiceApplication\r
+    {\r
+        private Stub _stub;\r
+\r
+        private class Stub : StubBase\r
+        {\r
+            public Stub(string portName) : base(portName)\r
+            {\r
+                Listen();\r
+            }\r
+\r
+            protected override void OnConnectedEvent(string sender, string instance)\r
+            {\r
+                Log.Debug("RPCPortStub", "OnConnectedEvent: sender::" + sender + " instance::" + instance);\r
+            }\r
+\r
+            protected override void OnDisconnectedEvent(string sender, string instance)\r
+            {\r
+                Log.Debug("RPCPortStub", "OnDisconnectedEvent: sender::" + sender + " instance::" + instance);\r
+            }\r
+\r
+            protected override bool OnReceivedEvent(string sender, string instance, Port port)\r
+            {\r
+                Log.Debug("RPCPortStub", "OnReceivedEvent: sender::" + sender + " instance::" + instance);\r
+                using (Parcel p = new Parcel(port))\r
+                {\r
+                    string str = p.ReadString();\r
+                    using (Parcel ret = new Parcel())\r
+                    {\r
+                        ret.WriteString(str);\r
+                        ret.Send(GetPort(Port.Type.Callback, instance));\r
+                    }\r
+                }\r
+\r
+                return true;\r
+            }\r
+\r
+            protected override void OnTerminatedEvent()\r
+            {\r
+                Log.Debug("RPCPortStub", "OnTerminatedEvent");\r
+            }\r
+        }\r
+\r
+        protected override void OnCreate()\r
+        {\r
+            base.OnCreate();\r
+            _stub = new Stub("Test");\r
+        }\r
+\r
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)\r
+        {\r
+            base.OnAppControlReceived(e);\r
+            if (e.ReceivedAppControl.ExtraData.TryGet("Test", out string val))\r
+            {\r
+                if (val.Equals("finish")) {\r
+                    Log.Debug("RPCPortStub", "Finish");\r
+                    Exit();\r
+                }\r
+            }\r
+        }\r
+\r
+        protected override void OnDeviceOrientationChanged(DeviceOrientationEventArgs e)\r
+        {\r
+            base.OnDeviceOrientationChanged(e);\r
+        }\r
+\r
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)\r
+        {\r
+            base.OnLocaleChanged(e);\r
+        }\r
+\r
+        protected override void OnLowBattery(LowBatteryEventArgs e)\r
+        {\r
+            base.OnLowBattery(e);\r
+        }\r
+\r
+        protected override void OnLowMemory(LowMemoryEventArgs e)\r
+        {\r
+            base.OnLowMemory(e);\r
+        }\r
+\r
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)\r
+        {\r
+            base.OnRegionFormatChanged(e);\r
+        }\r
+\r
+        protected override void OnTerminate()\r
+        {\r
+            base.OnTerminate();\r
+            _stub?.Dispose();\r
+        }\r
+\r
+        static void Main(string[] args)\r
+        {\r
+            App app = new App();\r
+            app.Run(args);\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/shared/res/RpcPortStub.png b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/shared/res/RpcPortStub.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/shared/res/RpcPortStub.png differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/tizen-manifest.xml b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub/RpcPortStub/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..8c3e00c
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<manifest package="org.tizen.example.RpcPortStub" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">\r
+    <profile name="common" />\r
+    <service-application appid="org.tizen.example.RpcPortStub" exec="RpcPortStub.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="true" type="dotnet">\r
+        <label>RpcPortStub</label>\r
+        <icon>RpcPortStub.png</icon>\r
+        <metadata key="http://tizen.org/metadata/allowedappid" value="Tizen.Applications.Tests" />\r
+        <splash-screens />\r
+    </service-application>\r
+    <shortcut-list />\r
+    <provides-appdefined-privileges />\r
+</manifest>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2.sln b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2.sln
new file mode 100755 (executable)
index 0000000..dc36126
--- /dev/null
@@ -0,0 +1,25 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 15\r
+VisualStudioVersion = 15.0.27703.2035\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RpcPortStub2", "RpcPortStub2\RpcPortStub2.csproj", "{D84E03B5-7EFF-40B6-981A-BC0316180DAE}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Release|Any CPU = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {D84E03B5-7EFF-40B6-981A-BC0316180DAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D84E03B5-7EFF-40B6-981A-BC0316180DAE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {D84E03B5-7EFF-40B6-981A-BC0316180DAE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D84E03B5-7EFF-40B6-981A-BC0316180DAE}.Release|Any CPU.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {934AC992-DE63-472C-AD51-4386E224BCD4}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2.csproj b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2.csproj
new file mode 100755 (executable)
index 0000000..e6d2acd
--- /dev/null
@@ -0,0 +1,44 @@
+<Project>\r
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />\r
+\r
+  <!-- Setting Tizen Extension Path -->\r
+  <PropertyGroup Label="Globals">\r
+    <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>\r
+  </PropertyGroup>\r
+\r
+  <!-- Import Tizen property in Tizen.NET SDK -->\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />\r
+\r
+  <!-- Property Group for .NET Core Project -->\r
+  <PropertyGroup>\r
+    <OutputType>Exe</OutputType>\r
+    <TargetFramework>netcoreapp2.0</TargetFramework>\r
+  </PropertyGroup>\r
+\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugType>portable</DebugType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>None</DebugType>\r
+  </PropertyGroup>\r
+\r
+  <ItemGroup>\r
+    <Folder Include="lib\" />\r
+    <Folder Include="res\" />\r
+  </ItemGroup>\r
+\r
+  <!-- Include Nuget Package for Tizen Project building -->\r
+  <ItemGroup>\r
+    <PackageReference Include="Tizen.NET.API5" Version="5.0.0.14444" />\r
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.1" />\r
+  </ItemGroup>\r
+\r
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />\r
+  <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" />\r
+\r
+  <!-- Install Check 'Visual Studio for Tizen' for developing on Visual Studio -->\r
+  <Target Name="TizenVsixInstallCheck" BeforeTargets="CompileDesignTime">\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props is not exist.&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+    <Warning Condition="!Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets')" Text="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.targets is not exist.\&#xA; you need to check if 'Visual Studio for Tizen' is installed" />\r
+  </Target>\r
+</Project>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2_App.cs b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/RpcPortStub2_App.cs
new file mode 100755 (executable)
index 0000000..ba8a2b5
--- /dev/null
@@ -0,0 +1,101 @@
+using Tizen;\r
+using Tizen.Applications;\r
+using Tizen.Applications.RPCPort;\r
+\r
+namespace RpcPortStub\r
+{\r
+    class App : ServiceApplication\r
+    {\r
+        private Stub _stub;\r
+\r
+        private class Stub : StubBase\r
+        {\r
+            public Stub(string portName) : base(portName)\r
+            {\r
+                AddPrivilege("my.privilege");\r
+                Listen();\r
+            }\r
+\r
+            protected override void OnConnectedEvent(string sender, string instance)\r
+            {\r
+                Log.Debug("RPCPortStub2", "OnConnectedEvent: sender::" + sender + " instance::" + instance);\r
+            }\r
+\r
+            protected override void OnDisconnectedEvent(string sender, string instance)\r
+            {\r
+                Log.Debug("RPCPortStub2", "OnDisconnectedEvent: sender::" + sender + " instance::" + instance);\r
+            }\r
+\r
+            protected override bool OnReceivedEvent(string sender, string instance, Port port)\r
+            {\r
+                Log.Debug("RPCPortStub2", "OnReceivedEvent: sender::" + sender + " instance::" + instance);\r
+                using (Parcel p = new Parcel(port))\r
+                {\r
+                }\r
+\r
+                return true;\r
+            }\r
+\r
+            protected override void OnTerminatedEvent()\r
+            {\r
+                Log.Debug("RPCPortStub2", "OnTerminatedEvent");\r
+            }\r
+        }\r
+\r
+        protected override void OnCreate()\r
+        {\r
+            base.OnCreate();\r
+            _stub = new Stub("Test");\r
+        }\r
+\r
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)\r
+        {\r
+            base.OnAppControlReceived(e);\r
+            if (e.ReceivedAppControl.ExtraData.TryGet("Test", out string val))\r
+            {\r
+                if (val.Equals("finish"))\r
+                {\r
+                    Log.Debug("RPCPortStub2", "Finish");\r
+                    Exit();\r
+                }\r
+            }\r
+        }\r
+\r
+        protected override void OnDeviceOrientationChanged(DeviceOrientationEventArgs e)\r
+        {\r
+            base.OnDeviceOrientationChanged(e);\r
+        }\r
+\r
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)\r
+        {\r
+            base.OnLocaleChanged(e);\r
+        }\r
+\r
+        protected override void OnLowBattery(LowBatteryEventArgs e)\r
+        {\r
+            base.OnLowBattery(e);\r
+        }\r
+\r
+        protected override void OnLowMemory(LowMemoryEventArgs e)\r
+        {\r
+            base.OnLowMemory(e);\r
+        }\r
+\r
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)\r
+        {\r
+            base.OnRegionFormatChanged(e);\r
+        }\r
+\r
+        protected override void OnTerminate()\r
+        {\r
+            base.OnTerminate();\r
+            _stub?.Dispose();\r
+        }\r
+\r
+        static void Main(string[] args)\r
+        {\r
+            App app = new App();\r
+            app.Run(args);\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/shared/res/RpcPortStub2.png b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/shared/res/RpcPortStub2.png
new file mode 100755 (executable)
index 0000000..9f3cb98
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/shared/res/RpcPortStub2.png differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/tizen-manifest.xml b/tct-suite-vs/Resource/Tizen.Applications.Tests/code/org.tizen.example.RpcPortStub2/RpcPortStub2/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..19d1292
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<manifest package="org.tizen.example.RpcPortStub2" version="1.0.0" api-version="4" xmlns="http://tizen.org/ns/packages">\r
+    <profile name="common" />\r
+    <service-application appid="org.tizen.example.RpcPortStub2" exec="RpcPortStub2.dll" multiple="false" nodisplay="true" taskmanage="false" splash-screen-display="true" type="dotnet">\r
+        <label>RpcPortStub2</label>\r
+        <icon>RpcPortStub2.png</icon>\r
+        <metadata key="http://tizen.org/metadata/allowedappid" value="Tizen.Applications.Tests" />\r
+        <splash-screens />\r
+    </service-application>\r
+    <shortcut-list />\r
+    <provides-appdefined-privileges />\r
+</manifest>\r
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy-1.0.0.tpk b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy-1.0.0.tpk
new file mode 100755 (executable)
index 0000000..13c3956
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy-1.0.0.tpk differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy2-1.0.0.tpk b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy2-1.0.0.tpk
new file mode 100755 (executable)
index 0000000..156e826
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortProxy2-1.0.0.tpk differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub-1.0.0.tpk b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub-1.0.0.tpk
new file mode 100755 (executable)
index 0000000..8ab0bd2
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub-1.0.0.tpk differ
diff --git a/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub2-1.0.0.tpk b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub2-1.0.0.tpk
new file mode 100755 (executable)
index 0000000..393e8e3
Binary files /dev/null and b/tct-suite-vs/Resource/Tizen.Applications.Tests/org.tizen.example.RpcPortStub2-1.0.0.tpk differ
diff --git a/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Exceptions.cs b/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Exceptions.cs
new file mode 100755 (executable)
index 0000000..1d824f0
--- /dev/null
@@ -0,0 +1,121 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Threading.Tasks;
+using Tizen.Applications.RPCPort;
+
+namespace Tizen.Applications.Tests
+{
+    [TestFixture]
+    [Description("Tizen.Application.RPCPort.Exceptions Tests")]
+    public class ExceptionTests
+    {
+        [SetUp]
+        public static void Init()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for each TEST");
+        }
+
+        [TearDown]
+        public static void Destroy()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for each TEST");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test InvalidIOException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.InvalidIOException.InvalidIOException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void InvalidIOException_INIT()
+        {
+            /* TEST CODE */
+            var e = new InvalidIOException();
+
+            Assert.IsNotNull(e, "InvalidIOException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test InvalidIDException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.InvalidIDException.InvalidIDException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void InvalidIDException_INIT()
+        {
+            /* TEST CODE */
+            var e = new InvalidIDException();
+
+            Assert.IsNotNull(e, "InvalidIDException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test PermissionDeniedException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.PermissionDeniedException.PermissionDeniedException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void PermissionDeniedException_INIT()
+        {
+            /* TEST CODE */
+            var e = new PermissionDeniedException();
+
+            Assert.IsNotNull(e, "PermissionDeniedException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test InvalidProtocolException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.InvalidProtocolException.InvalidProtocolException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void InvalidProtocolException_INIT()
+        {
+            /* TEST CODE */
+            var e = new InvalidProtocolException();
+
+            Assert.IsNotNull(e, "InvalidProtocolException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test NotConnectedSocketException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.NotConnectedSocketException.NotConnectedSocketException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void NotConnectedSocketException_INIT()
+        {
+            /* TEST CODE */
+            var e = new NotConnectedSocketException();
+
+            Assert.IsNotNull(e, "NotConnectedSocketException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test InvalidCallbackException initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.InvalidCallbackException.InvalidCallbackException C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void InvalidCallbackException_INIT()
+        {
+            /* TEST CODE */
+            var e = new InvalidCallbackException();
+
+            Assert.IsNotNull(e, "InvalidCallbackException shouldn't be null after init");
+            Assert.IsInstanceOf<InvalidOperationException>(e);
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Parcel.cs b/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.Parcel.cs
new file mode 100755 (executable)
index 0000000..e89da0e
--- /dev/null
@@ -0,0 +1,699 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Threading.Tasks;
+using Tizen.Applications.RPCPort;
+
+namespace Tizen.Applications.Tests
+{
+    public class Proxy : ProxyBase
+    {
+        public bool Connected { get; set; }
+
+        public bool Received { get; set; }
+
+        public void SendTestMessage()
+        {
+            using (var p = new Parcel())
+            {
+                p.WriteString("test");
+                p.Send(Port);
+            }
+        }
+
+        protected override void OnConnectedEvent(string endPoint, string portName, Port port)
+        {
+            Connected = true;
+        }
+
+        protected override void OnDisconnectedEvent(string endPoint, string portName)
+        {
+        }
+
+        protected override void OnReceivedEvent(string endPoint, string portName)
+        {
+            using (var p = new Parcel(CallbackPort))
+            {
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+            }
+            Received = true;
+        }
+
+        protected override void OnRejectedEvent(string endPoint, string portName)
+        {
+        }
+
+        public void TestConnect()
+        {
+            Connect("org.tizen.example.RpcPortStub", "Test");
+        }
+    }
+
+
+    [TestFixture]
+    [Description("Tizen.Application.RPCPort.Parcel Tests")]
+    public class ParcelTests
+    {
+        private static Proxy _proxy;
+
+        [SetUp]
+        public static void Init()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for each TEST");
+            _proxy = new Proxy();
+            _proxy.TestConnect();
+        }
+
+        [TearDown]
+        public static void Destroy()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for each TEST");
+            _proxy.Dispose();
+            _proxy = null;
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Parcel initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Parcel C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Parcel_INIT()
+        {
+            /* TEST CODE */
+            using (var p = new Parcel())
+            {
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Parcel initialization with port")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Parcel C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "Port")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Parcel_INIT_WITH_PARAMETER()
+        {
+            /* PRECONDITION
+             * */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+            _proxy.SendTestMessage();
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.True(_proxy.Received);
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test constructor with null argument")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Parcel C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTN")]
+        [Property("COVPARAM", "Port")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Parcel_NULL_ARGUMENTS()
+        {
+            /* PRECONDITION */
+
+            /* TEST CODE */
+            try
+            {
+                var p = new Parcel(null);
+            }
+            catch (InvalidIOException)
+            {
+                Assert.Pass();
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Send parcel to the other application which has been connected before")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Send M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Send_CHECK_WITHOUT_EXCEPTION()
+        {
+            try
+            {
+                /* PRECONDITION */
+                await Task.Delay(2000);
+                Assert.True(_proxy.Connected);
+
+                /* TEST CODE */
+                _proxy.SendTestMessage();
+            }
+            catch (Exception e)
+            {
+                Assert.Fail(e.ToString());
+            }
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Send parcel with null Port object")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Send M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Send_WITH_NULL_ARGUMENTS()
+        {
+            /* PRECONDITION */
+            using (var p = new Parcel())
+            {
+                /* TEST CODE */
+                try
+                {
+                    p.Send(null);
+                }
+                catch (InvalidIOException)
+                {
+                    Assert.Pass();
+                }
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read a byte from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadByte M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadByte_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteByte(0x33);
+
+                /* TEST CODE */
+                byte b = p.ReadByte();
+                Assert.IsTrue((b == 0x33), "ReadByte failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'short' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadShort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadShort_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteShort(100);
+
+                /* TEST CODE */
+                short b = p.ReadShort();
+                Assert.IsTrue((b == 100), "ReadShort failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'int' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadInt M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadInt_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteInt(100);
+
+                /* TEST CODE */
+                int b = p.ReadInt();
+                Assert.IsTrue((b == 100), "ReadInt failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'long' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadLong M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadLong_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteLong(100);
+
+                /* TEST CODE */
+                long b = p.ReadLong();
+                Assert.IsTrue((b == 100), "ReadLong failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'float' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadFloat M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadFloat_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteFloat(1.0f);
+
+                /* TEST CODE */
+                float b = p.ReadFloat();
+                Assert.IsTrue((b == 1.0f), "ReadFloat failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'double' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadDouble M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadDouble_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteDouble(1.0);
+
+                /* TEST CODE */
+                double b = p.ReadDouble();
+                Assert.IsTrue((b == 1.0), "ReadDouble failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'string' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadString M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadString_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteString("test");
+
+                /* TEST CODE */
+                string b = p.ReadString();
+                Assert.IsTrue((b == "test"), "ReadString failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'bool' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadBool M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadBool_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteBool(true);
+
+                /* TEST CODE */
+                bool b = p.ReadBool();
+                Assert.IsTrue(b, "ReadBool failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read 'Bundle' type value from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadBundle M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadBundle_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                using (var b = new Bundle())
+                {
+                    b.AddItem("key", "value");
+                    p.WriteBundle(b);
+                }
+
+                /* TEST CODE */
+                using (Bundle b = p.ReadBundle())
+                {
+                    Assert.IsNotNull(b, "Bundle shouldn't be null");
+                    string val = b.GetItem<string>("key");
+                    Assert.IsTrue(val == "value", "ReadBundle failed");
+                }
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read array count from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.ReadArrayCount M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ReadArrayCount_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                p.WriteArrayCount(10);
+
+                /* TEST CODE */
+                int b = p.ReadArrayCount();
+                Assert.IsTrue(b == 10, "ReadArrayCount failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Read bytes from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Read M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Read_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                var bts = new byte[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+                p.Write(bts);
+
+                /* TEST CODE */
+                var b = p.Read(10);
+                for (int i = 0; i < 10; i++)
+                {
+                    Assert.IsTrue(b[i] == i, "Read failed");
+                }
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write a byte to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteByte M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteByte_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteByte(0x33);
+                byte b = p.ReadByte();
+                Assert.IsTrue((b == 0x33), "WriteByte failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'short' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteShort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteShort_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteShort(100);
+                short b = p.ReadShort();
+                Assert.IsTrue((b == 100), "WriteShort failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'int' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteInt M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteInt_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteInt(100);
+                int b = p.ReadInt();
+                Assert.IsTrue((b == 100), "WriteInt failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'long' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteLong M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteLong_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteLong(100);
+                long b = p.ReadLong();
+                Assert.IsTrue((b == 100), "WriteLong failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'float' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteFloat M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteFloat_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteFloat(1.0f);
+                float b = p.ReadFloat();
+                Assert.IsTrue((b == 1.0f), "WriteFloat failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'double' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteDouble M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteDouble_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteDouble(1.0);
+                double b = p.ReadDouble();
+                Assert.IsTrue((b == 1.0), "WriteDouble failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Wrtie 'string' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteString M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteString_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteString("test");
+                string b = p.ReadString();
+                Assert.IsTrue((b == "test"), "WriteString failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'bool' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteBool M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteBool_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteBool(true);
+                bool b = p.ReadBool();
+                Assert.IsTrue(b, "WriteBool failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write 'Bundle' type value to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteBundle M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteBundle_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                using (var b = new Bundle())
+                {
+                    b.AddItem("key", "value");
+
+                    /* TEST CODE */
+                    p.WriteBundle(b);
+                }
+
+                using (Bundle b = p.ReadBundle())
+                {
+                    Assert.IsNotNull(b, "Bundle shouldn't be null");
+                    string val = b.GetItem<string>("key");
+                    Assert.IsTrue(val == "value", "WriteBundle failed");
+                }
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write array count from parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.WriteArrayCount M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void WriteArrayCount_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+
+                /* TEST CODE */
+                p.WriteArrayCount(10);
+                int b = p.ReadArrayCount();
+                Assert.IsTrue(b == 10, "WriteArrayCount failed");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Write bytes to parcel")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.Parcel.Write M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Write_RETURN()
+        {
+            using (var p = new Parcel())
+            {
+                /* PRECONDITION */
+                Assert.IsInstanceOf<RPCPort.Parcel>(p);
+                Assert.IsNotNull(p, "Parcel shouldn't be null after init.");
+                var bts = new byte[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+
+                /* TEST CODE */
+                p.Write(bts);
+                var b = p.Read(10);
+                for (int i = 0; i < 10; i++)
+                {
+                    Assert.IsTrue(b[i] == i, "Write failed");
+                }
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.ProxyBase.cs b/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.ProxyBase.cs
new file mode 100755 (executable)
index 0000000..803871e
--- /dev/null
@@ -0,0 +1,400 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System.Threading.Tasks;
+using Tizen.Applications.RPCPort;
+
+namespace Tizen.Applications.Tests
+{
+
+    [TestFixture]
+    [Description("Tizen.Application.RPCPort.ProxyBase Tests")]
+    public class ProxyBaseTests
+    {
+        private static Proxy _proxy;
+
+        public class Proxy : ProxyBase
+        {
+            public bool Connected { get; set; }
+            public bool Disconnected { get; set; }
+            public bool Rejected { get; set; }
+
+            public string Result { get; set; }
+
+            private Port _port;
+
+            public void SendHello()
+            {
+                using (Parcel p = new Parcel())
+                {
+                    p.WriteString("hello");
+                    p.Send(_port);
+                }
+            }
+
+            protected override void OnConnectedEvent(string endPoint, string portName, Port port)
+            {
+                Connected = true;
+                _port = port;
+            }
+
+            protected override void OnDisconnectedEvent(string endPoint, string portName)
+            {
+                Disconnected = true;
+            }
+
+            protected override void OnReceivedEvent(string endPoint, string portName)
+            {
+                using (Parcel p = new Parcel(GetPort(Port.Type.Callback)))
+                {
+                    Result = p.ReadString();
+                }
+            }
+
+            protected override void OnRejectedEvent(string endPoint, string portName)
+            {
+                Rejected = true;
+            }
+
+            public void TestConnect()
+            {
+                Connect("org.tizen.example.RpcPortStub", "Test");
+            }
+
+            public void ConnectForInvalidIOException()
+            {
+                Connect("invalid.app", "Test");
+            }
+            public void ConnectForRejectedEvent()
+            {
+                Connect("org.tizen.example.RpcPortStub2", "Test");
+            }
+
+            public void TestGetPort()
+            {
+                Port p = GetPort(Port.Type.Main);
+                Assert.NotNull(p);
+
+                p = GetPort(Port.Type.Callback);
+                Assert.NotNull(p);
+            }
+
+            public Port GetPort()
+            {
+                return Port;
+            }
+
+            public Port GetCallbackPort()
+            {
+                return CallbackPort;
+            }
+        }
+
+        [SetUp]
+        public static void Init()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for each TEST");
+            _proxy = new Proxy();
+            _proxy.TestConnect();
+        }
+
+        [TearDown]
+        public static void Destroy()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for each TEST");
+            _proxy.Dispose();
+            _proxy = null;
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ProxyBase initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.ProxyBase.ProxyBase C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void ProxyBase_INIT()
+        {
+            var p = new Proxy();
+
+            Assert.IsInstanceOf<ProxyBase>(p);
+            Assert.IsNotNull(p, "Proxy shouldn't be null");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Connect to stub application")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.Connect M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Connect_RETURN()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.True(_proxy.Connected);
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : Try to reconnect to app without disposing")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.Connect M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Connect_CHECK_INVALID_ID_EXCEPTION()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+
+            try
+            {
+                /* TEST CODE */
+                _proxy.TestConnect();
+            }
+            catch (InvalidIDException)
+            {
+                Assert.Pass();
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : Connect to invalid stub application")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.Connect M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Connect_CHECK_INVALID_IO_EXCEPTION()
+        {
+            /* PRECONDITION */
+            _proxy?.Dispose();
+            _proxy = new Proxy();
+
+            try
+            {
+                /* TEST CODE */
+                _proxy.ConnectForInvalidIOException();
+            }
+            catch (InvalidIOException)
+            {
+                Assert.Pass();
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : Connect to stub application with invalid permission")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.Connect M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Connect_CHECK_PERMISSION_DENIED_EXCEPTION()
+        {
+            /* PRECONDITION */
+            _proxy?.Dispose();
+            _proxy = null;
+            AppControlReplyResult ret = AppControlReplyResult.Failed;
+
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy2"
+            };
+
+            AppControl.SendLaunchRequest(c, (AppControl launchRequest, AppControl replyRequest, AppControlReplyResult result) =>
+            {
+                ret = result;
+            });
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.True(ret == AppControlReplyResult.Succeeded);
+
+            /* POSTCONDITION */
+            c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy2"
+            };
+
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnConnected events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.OnConnectedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnConnectedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.True(_proxy.Connected);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnDisconnected events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.OnDisconnectedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnDisconnectedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortStub"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.True(_proxy.Disconnected);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnRejected events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.OnRejectedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnRejectedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            _proxy?.Dispose();
+            _proxy = new Proxy();
+            _proxy.ConnectForRejectedEvent();
+            await Task.Delay(4000);
+
+            /* TEST CODE */
+            Assert.True(_proxy.Rejected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortStub2"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnReceived events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.OnReceivedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnReceivedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+            _proxy.SendHello();
+            await Task.Delay(2000);
+
+            /* TEST CODE */
+            Assert.NotNull(_proxy.Result);
+            Assert.True(_proxy.Result.Equals("hello"));
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : GetPort from disconnected object")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.GetPort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task GetPort_CHECK_EXCEPTION()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+            _proxy.Dispose();
+
+            /* TEST CODE */
+            try
+            {
+                _proxy.TestGetPort();
+            }
+            catch (InvalidIOException)
+            {
+                Assert.Pass();
+            }
+            finally
+            {
+                _proxy = null;
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : GetPort from proxy object")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.ProxyBase.GetPort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task GetPort_RETURN()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+
+            /* TEST CODE */
+            _proxy.TestGetPort();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Port Property")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.ProxyBase.Port A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Port_PROPERTY_GET()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+
+            /* TEST CODE */
+            Assert.NotNull(_proxy.GetPort());
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : CallbackPort Property")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.ProxyBase.CallbackPort A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task CallbackPort_PROPERTY_GET()
+        {
+            /* PRECONDITION */
+            await Task.Delay(2000);
+            Assert.True(_proxy.Connected);
+
+            /* TEST CODE */
+            Assert.NotNull(_proxy.GetCallbackPort());
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.StubBase.cs b/tct-suite-vs/Tizen.Applications.Tests/testcase/TSRPCPort.StubBase.cs
new file mode 100755 (executable)
index 0000000..ddae7b5
--- /dev/null
@@ -0,0 +1,554 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Tizen.Applications.RPCPort;
+
+namespace Tizen.Applications.Tests
+{
+    [TestFixture]
+    [Description("Tizen.Application.RPCPort.StubBase Tests")]
+    public class StubBaseTests
+    {
+        private static Stub _stub;
+        private static bool _disposed;
+
+        public class Stub : StubBase
+        {
+            public bool Connected { get; set; }
+            public bool Disconnected { get; set; }
+            public bool Received { get; set; }
+            public string Instance { get; set; }
+
+            public Stub(string portName) : base(portName)
+            {
+            }
+
+            protected override void OnConnectedEvent(string sender, string instance)
+            {
+                Connected = true;
+                Instance = instance;
+            }
+
+            protected override void OnDisconnectedEvent(string sender, string instance)
+            {
+                Disconnected = true;
+            }
+
+            protected override bool OnReceivedEvent(string sender, string instance, Port port)
+            {
+                Received = true;
+                using (var p = new Parcel(port))
+                {
+
+                }
+                return true;
+            }
+
+            protected override void OnTerminatedEvent()
+            {
+                _disposed = true;
+            }
+
+            public void TestListen()
+            {
+                Listen();
+            }
+
+            public void TestGetPort(string inst)
+            {
+                Port p = GetPort(Port.Type.Main, inst);
+                Assert.NotNull(p);
+
+                p = GetPort(Port.Type.Callback, inst);
+                Assert.NotNull(p);
+            }
+
+            public void TestAddPrivilege()
+            {
+                AddPrivilege("test.privilege");
+            }
+
+            public void TestAddPrivilegeWithNull()
+            {
+                AddPrivilege(null);
+            }
+
+            public void TestSetTrusted(bool trusted)
+            {
+                SetTrusted(trusted);
+            }
+        }
+
+        [SetUp]
+        public static void Init()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Preconditions for each TEST");
+            _stub = new Stub("Test");
+        }
+
+        [TearDown]
+        public static void Destroy()
+        {
+            LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Postconditions for each TEST");
+            _stub?.Dispose();
+            _stub = null;
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test StubBase initialization")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.StubBase C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void StubBase_INIT()
+        {
+            Assert.IsInstanceOf<StubBase>(_stub);
+            Assert.IsNotNull(_stub, "Stub shouldn't be null");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Listen to proxy application")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.Listen M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task Listen_CHECK_RETURN()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+
+            await Task.Delay(4000);
+
+            /* TEST CODE */
+            Assert.True(_stub.Connected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : Listen to proxy application after being disposed")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.Listen M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void Listen_CHECK_WITH_EXCEPTION()
+        {
+            /* PRECONDITION */
+            _stub?.Dispose();
+
+            try
+            {
+                /* TEST CODE */
+                _stub.TestListen();
+            }
+            catch (InvalidIOException)
+            {
+                Assert.Pass();
+            }
+            finally
+            {
+                _stub = null;
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnConnected events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.OnConnectedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnConnectedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+
+            /* TEST CODE */
+            Assert.True(_stub.Connected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnDisconnected events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.OnDisconnectedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnDisconnectedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+            Assert.True(_stub.Connected);
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(3000);
+
+            /* TEST CODE */
+            Assert.True(_stub.Disconnected);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnReceived events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.OnReceivedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnReceivedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            ctrl.ExtraData.Add("send", "hello");
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+            Assert.True(_stub.Connected);
+
+            /* TEST CODE */
+            Assert.True(_stub.Received);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(3000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : OnTerminated events")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.OnTerminatedEvent E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task OnTerminatedEvent_CHECK_CB()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+            Assert.True(_stub.Connected);
+            _disposed = false;
+
+            /* TEST CODE */
+            _stub.Dispose();
+            Assert.True(_disposed);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(3000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : GetPort from stub object")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.GetPort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task GetPort_RETURN()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+
+            await Task.Delay(4000);
+            Assert.True(_stub.Connected);
+            Assert.NotNull(_stub.Instance);
+
+            /* TEST CODE */
+            _stub.TestGetPort(_stub.Instance);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : GetPort from wrong instance")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.GetPort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task GetPort_CHECK_INVALID_IO_EXCEPTION()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+
+            Assert.True(_stub.Connected);
+            Assert.NotNull(_stub.Instance);
+
+            try
+            {
+                /* TEST CODE */
+                _stub.TestGetPort("wrong_inst");
+
+            }
+            catch (InvalidIOException)
+            {
+                Assert.Pass();
+            }
+            finally
+            {
+                /* POSTCONDITION */
+                var c = new AppControl()
+                {
+                    ApplicationId = "org.tizen.example.RpcPortProxy"
+                };
+                c.ExtraData.Add("Test", "finish");
+                AppControl.SendLaunchRequest(c);
+                await Task.Delay(2000);
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : GetPort from wrong stub object")]
+        [Property("SPEC", " Tizen.Applications.RPCPort.StubBase.GetPort M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void GetPort_CHECK_INVALID_ID_EXCEPTION()
+        {
+            /* PRECONDITION */
+            _stub.TestListen();
+            _stub.Dispose();
+
+            try
+            {
+                /* TEST CODE */
+                _stub.TestGetPort("wrong_instance");
+            }
+            catch (InvalidIDException)
+            {
+                Assert.Pass();
+            }
+            finally
+            {
+                _stub = null;
+            }
+
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Add privilege to stub object")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.AddPrivilege M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task AddPrivilege_RETURN()
+        {
+            /* PRECONDITION */
+
+            /* TEST CODE */
+            _stub.TestAddPrivilege();
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+
+            await Task.Delay(4000);
+            Assert.False(_stub.Connected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test : Add privilege with null argument")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.AddPrivilege M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void AddPrivilege_CHECK_WITH_EXCEPTION()
+        {
+            /* PRECONDITION */
+
+            /* TEST CODE */
+            try
+            {
+                _stub.TestAddPrivilegeWithNull();
+            }
+            catch (ArgumentNullException)
+            {
+                Assert.Pass();
+            }
+            Assert.Fail();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Set trusted flag as true")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.SetTrusted M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task SetTrusted_RETURN1()
+        {
+            /* PRECONDITION */
+
+            /* TEST CODE */
+            _stub.TestSetTrusted(true);
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+            Assert.False(_stub.Connected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : Set trusted flag as false")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.SetTrusted M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static async Task SetTrusted_RETURN2()
+        {
+            /* PRECONDITION */
+
+            /* TEST CODE */
+            _stub.TestSetTrusted(false);
+            _stub.TestListen();
+            var ctrl = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+
+            AppControl.SendLaunchRequest(ctrl);
+            await Task.Delay(4000);
+            Assert.True(_stub.Connected);
+
+            /* POSTCONDITION */
+            var c = new AppControl()
+            {
+                ApplicationId = "org.tizen.example.RpcPortProxy"
+            };
+            c.ExtraData.Add("Test", "finish");
+            AppControl.SendLaunchRequest(c);
+            await Task.Delay(2000);
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test : PortName Property")]
+        [Property("SPEC", "Tizen.Applications.RPCPort.StubBase.PortName A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "Junghoon Park, jh9216.park@samsung.com")]
+        public static void PortName_PROPERTY_GET()
+        {
+            Assert.NotNull(_stub.PortName);
+            Assert.True(_stub.PortName.Equals("Test"));
+        }
+    }
+}
index 04e10fb..8a92d2b 100755 (executable)
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="5" package="Tizen.Applications.Tests" version="1.0.0">
-  <profile name="common" />
-  <ui-application appid="Tizen.Applications.Tests"
-                  exec="Tizen.Applications.Tests.dll"
-                  type="dotnet"
-                  multiple="false"
-                  taskmanage="true"
-                  launch_mode="single">
-    <icon>Tizen.Applications.Tests.png</icon>
-    <label>Tizen.Applications.Tests</label>
-  </ui-application>
-  <privileges>
-    <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
-    <privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
-  </privileges>
+<manifest package="Tizen.Applications.Tests" version="1.0.0" api-version="5" xmlns="http://tizen.org/ns/packages">
+    <profile name="common" />
+    <ui-application appid="Tizen.Applications.Tests" exec="Tizen.Applications.Tests.dll" multiple="false" taskmanage="true" splash-screen-display="true" type="dotnet" launch_mode="single">
+        <icon>Tizen.Applications.Tests.png</icon>
+        <label>Tizen.Applications.Tests</label>
+        <splash-screens />
+    </ui-application>
+    <shortcut-list />
+    <privileges>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+        <privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
+        <privilege>http://tizen.org/privilege/datasharing</privilege>
+    </privileges>
+    <provides-appdefined-privileges />
 </manifest>