--- /dev/null
+\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
--- /dev/null
+<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.
 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.\
 you need to check if 'Visual Studio for Tizen' is installed" />\r
+ </Target>\r
+</Project>\r
--- /dev/null
+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
--- /dev/null
+<?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
--- /dev/null
+\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
--- /dev/null
+<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.
 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.\
 you need to check if 'Visual Studio for Tizen' is installed" />\r
+ </Target>\r
+</Project>\r
--- /dev/null
+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
--- /dev/null
+<?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
--- /dev/null
+\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
--- /dev/null
+<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.
 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.\
 you need to check if 'Visual Studio for Tizen' is installed" />\r
+ </Target>\r
+</Project>\r
--- /dev/null
+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
--- /dev/null
+<?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
--- /dev/null
+\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
--- /dev/null
+<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.
 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.\
 you need to check if 'Visual Studio for Tizen' is installed" />\r
+ </Target>\r
+</Project>\r
--- /dev/null
+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
--- /dev/null
+<?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
--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+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");
+ }
+ }
+ }
+ }
+}
--- /dev/null
+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());
+ }
+ }
+}
--- /dev/null
+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"));
+ }
+ }
+}
<?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>