Commit 926f4dd3 authored by csharptest's avatar csharptest Committed by rogerk

merged issue-30

parents 3ede2921 947cb8f3
...@@ -9,6 +9,8 @@ _ReSharper.* ...@@ -9,6 +9,8 @@ _ReSharper.*
*.user *.user
*.suo *.suo
lib/NUnit 2.2.8.0/nunit-console.exe.config
syntax: regexp syntax: regexp
build/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,5}/ build/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,5}/
@echo off @echo off
SET BUILD_TARGET=%1 SET BUILD_TARGET=%~1
SET BUILD_CONFIG=%2 SET BUILD_CONFIG=%~2
IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild
IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj %3 %4 %5 %6 /t:%BUILD_TARGET% /p:BuildConfiguration=%BUILD_CONFIG% /p:Platform="Any CPU" /p:BuildTools=4.0 /toolsversion:4.0" CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 %3 %4 %5 %6 "/t:%BUILD_TARGET%" "/p:BuildConfiguration=%BUILD_CONFIG%;TargetVersion=2"
pause
\ No newline at end of file
@ECHO OFF @echo off
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /t:FullBuild /toolsversion:4.0 %1 %2 %3 %4 %5 %6
SET PREV_WORKING_DIR=%CD%
CD %~dp0
REM -- 3.5 Debug build, ensure this continues to work
%WINDIR%\Microsoft.NET\Framework\v3.5\MSBuild.exe build.csproj /t:Rebuild /p:BuildConfiguration=Debug /p:Platform="Any CPU" /p:BuildTools=3.5 /toolsversion:3.5"
IF ERRORLEVEL 1 GOTO ERROR
REM -- 4.0 Debug build
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild /p:BuildConfiguration=Debug /p:Platform="Any CPU"
IF ERRORLEVEL 1 GOTO ERROR
REM -- 4.0 Release build
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild /p:BuildConfiguration=Release /p:Platform="Any CPU"
IF ERRORLEVEL 1 GOTO ERROR
IF EXIST "%ProgramFiles%\MSBuild\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" GOTO SILVERLIGHT
IF EXIST "%ProgramFiles(x86)%\MSBuild\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" GOTO SILVERLIGHT
ECHO Unable to locate %ProgramFiles(x86)%\MSBuild\Microsoft\Silverlight\v2.0
GOTO ERROR
:SILVERLIGHT
REM -- 4.0 Debug_Silverlight2 build
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild /p:BuildConfiguration=Debug_Silverlight2 /p:Platform="Any CPU"
IF ERRORLEVEL 1 GOTO ERROR
REM -- 4.0 Release_Silverlight2 build
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild /p:BuildConfiguration=Release_Silverlight2 /p:Platform="Any CPU"
IF ERRORLEVEL 1 GOTO ERROR
GOTO END
:ERROR
CD %PREV_WORKING_DIR%
PAUSE
:END
CD %PREV_WORKING_DIR%
SET PREV_WORKING_DIR=
\ No newline at end of file
@echo off @echo off
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 /t:Rebuild %1 %2 %3 %4 "/p:BuildConfiguration=Debug_Silverlight;TargetVersion=2"
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Build /p:BuildConfiguration=Debug_Silverlight2 /p:Platform="Any CPU"
pause
\ No newline at end of file
This diff is collapsed.
@ECHO OFF
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:PrepareOutputDirectory
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Debug /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Debug_Silverlight2 /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Release /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Release_Silverlight2 /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:GeneratePackage /p:PackageName=AllBinariesAndSource.zip /p:Platform="Any CPU"
:END
\ No newline at end of file
@ECHO OFF
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:PrepareOutputDirectory
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Release /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:Rebuild;PreparePackageComponent /p:BuildConfiguration=Release_Silverlight2 /p:Platform="Any CPU" %PROTOBUF_KEY_FILE%
IF ERRORLEVEL 1 GOTO END
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.csproj /m /t:GeneratePackage /p:PackageName=ReleaseBinaries.zip /p:Platform="Any CPU"
:END
\ No newline at end of file
...@@ -43,16 +43,22 @@ Language Guide - http://code.google.com/apis/protocolbuffers/docs/proto.html ...@@ -43,16 +43,22 @@ Language Guide - http://code.google.com/apis/protocolbuffers/docs/proto.html
</metadata> </metadata>
<files> <files>
<!-- Release Binaries --> <!-- Release Binaries -->
<file src="..\build_output\Package\Release\Google.ProtocolBuffers.???" target="lib\net20" /> <file src="..\build_output\v2.0\Release\Google.ProtocolBuffers.???" target="lib\net20" />
<file src="..\build_output\Package\Release\Google.ProtocolBuffers.Serialization.???" target="lib\net20" /> <file src="..\build_output\v2.0\Release\Google.ProtocolBuffers.Serialization.???" target="lib\net20" />
<file src="..\build_output\v3.5\Release\Google.ProtocolBuffers.???" target="lib\net35" />
<file src="..\build_output\v3.5\Release\Google.ProtocolBuffers.Serialization.???" target="lib\net35" />
<file src="..\build_output\v4.0\Release\Google.ProtocolBuffers.???" target="lib\net40" />
<file src="..\build_output\v4.0\Release\Google.ProtocolBuffers.Serialization.???" target="lib\net40" />
<!-- Silverlight Binaries --> <!-- Silverlight Binaries -->
<file src="..\build_output\Package\Release_Silverlight2\Google.ProtocolBuffers.???" target="lib\sl20" /> <file src="..\build_output\v2.0\Release_Silverlight\Google.ProtocolBuffers.???" target="lib\sl20" />
<file src="..\build_output\Package\Release_Silverlight2\Google.ProtocolBuffers.Serialization.???" target="lib\sl20" /> <file src="..\build_output\v2.0\Release_Silverlight\Google.ProtocolBuffers.Serialization.???" target="lib\sl20" />
<file src="..\build_output\v3.5\Release_Silverlight\Google.ProtocolBuffers.???" target="lib\sl30" />
<file src="..\build_output\v3.5\Release_Silverlight\Google.ProtocolBuffers.Serialization.???" target="lib\sl30" />
<file src="..\build_output\v4.0\Release_Silverlight\Google.ProtocolBuffers.???" target="lib\sl40" />
<file src="..\build_output\v4.0\Release_Silverlight\Google.ProtocolBuffers.Serialization.???" target="lib\sl40" />
<!-- Tools --> <!-- Tools -->
<file src="..\lib\Protoc.exe" target="tools" /> <file src="..\lib\Protoc.exe" target="tools" />
<file src="..\build_output\Package\Release\Google.ProtocolBuffers.dll" target="tools" /> <file src="..\build_output\ProtoGen\*" target="tools" />
<file src="..\build_output\Package\Release\ProtoGen.exe" target="tools" />
<file src="..\build_output\Package\Release\ProtoGen.exe.config" target="tools" />
<!-- Content --> <!-- Content -->
<file src="..\CHANGES.txt" target="content"/> <file src="..\CHANGES.txt" target="content"/>
<file src="..\license.txt" target="content\licenses"/> <file src="..\license.txt" target="content\licenses"/>
......
...@@ -43,23 +43,29 @@ Language Guide - http://code.google.com/apis/protocolbuffers/docs/proto.html ...@@ -43,23 +43,29 @@ Language Guide - http://code.google.com/apis/protocolbuffers/docs/proto.html
</metadata> </metadata>
<files> <files>
<!-- Release Binaries --> <!-- Release Binaries -->
<file src="..\build_output\Package\Release\Google.ProtocolBuffersLite.???" target="lib\net20" /> <file src="..\build_output\v2.0\Release\Google.ProtocolBuffersLite.???" target="lib\net20" />
<file src="..\build_output\Package\Release\Google.ProtocolBuffersLite.Serialization.???" target="lib\net20" /> <file src="..\build_output\v2.0\Release\Google.ProtocolBuffersLite.Serialization.???" target="lib\net20" />
<file src="..\build_output\v3.5\Release\Google.ProtocolBuffersLite.???" target="lib\net35" />
<file src="..\build_output\v3.5\Release\Google.ProtocolBuffersLite.Serialization.???" target="lib\net35" />
<file src="..\build_output\v4.0\Release\Google.ProtocolBuffersLite.???" target="lib\net40" />
<file src="..\build_output\v4.0\Release\Google.ProtocolBuffersLite.Serialization.???" target="lib\net40" />
<!-- Silverlight Binaries --> <!-- Silverlight Binaries -->
<file src="..\build_output\Package\Release_Silverlight2\Google.ProtocolBuffersLite.???" target="lib\sl20" /> <file src="..\build_output\v2.0\Release_Silverlight\Google.ProtocolBuffersLite.???" target="lib\sl20" />
<file src="..\build_output\Package\Release_Silverlight2\Google.ProtocolBuffersLite.Serialization.???" target="lib\sl20" /> <file src="..\build_output\v2.0\Release_Silverlight\Google.ProtocolBuffersLite.Serialization.???" target="lib\sl20" />
<file src="..\build_output\v3.5\Release_Silverlight\Google.ProtocolBuffersLite.???" target="lib\sl30" />
<file src="..\build_output\v3.5\Release_Silverlight\Google.ProtocolBuffersLite.Serialization.???" target="lib\sl30" />
<file src="..\build_output\v4.0\Release_Silverlight\Google.ProtocolBuffersLite.???" target="lib\sl40" />
<file src="..\build_output\v4.0\Release_Silverlight\Google.ProtocolBuffersLite.Serialization.???" target="lib\sl40" />
<!-- Tools --> <!-- Tools -->
<file src="..\lib\Protoc.exe" target="tools" /> <file src="..\lib\Protoc.exe" target="tools" />
<file src="..\build_output\Package\Release\Google.ProtocolBuffers.dll" target="tools" /> <file src="..\build_output\ProtoGen\*" target="tools" />
<file src="..\build_output\Package\Release\ProtoGen.exe" target="tools" />
<file src="..\build_output\Package\Release\ProtoGen.exe.config" target="tools" />
<!-- Content --> <!-- Content -->
<file src="..\CHANGES.txt" target="content"/> <file src="..\CHANGES.txt" target="content"/>
<file src="..\license.txt" target="content\licenses"/> <file src="..\license.txt" target="content\licenses"/>
<file src="..\lib\protoc-license.txt" target="content\licenses"/> <file src="..\lib\protoc-license.txt" target="content\licenses"/>
<file src="..\protos\google\protobuf\descriptor.proto" target="content\protos\google\protobuf" /> <file src="..\protos\google\protobuf\descriptor.proto" target="content\protos\google\protobuf" />
<file src="..\protos\google\protobuf\csharp_options.proto" target="content\protos\google\protobuf" /> <file src="..\protos\google\protobuf\csharp_options.proto" target="content\protos\google\protobuf" />
<file src="..\src\ProtocolBuffers\**\*.cs" target="src\ProtocolBuffers\"/> <file src="..\src\ProtocolBuffers\**\*.cs" target="src\ProtocolBuffers\"/>
<file src="..\src\ProtocolBuffers.Serialization\**\*.cs" target="src\ProtocolBuffers.Serialization\"/> <file src="..\src\ProtocolBuffers.Serialization\**\*.cs" target="src\ProtocolBuffers.Serialization\"/>
</files> </files>
......
...@@ -22,19 +22,24 @@ CMD.exe /Q /C "CD .. && lib\StampVersion.exe /major:2 /minor:4 /build:1 /revisio ...@@ -22,19 +22,24 @@ CMD.exe /Q /C "CD .. && lib\StampVersion.exe /major:2 /minor:4 /build:1 /revisio
IF EXIST "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" SET WIN7SDK_DIR=C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\ IF EXIST "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" SET WIN7SDK_DIR=C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\
IF NOT EXIST "..\release-key" hg clone https://bitbucket.org/rknapp/protobuf-csharp-port-keyfile ..\release-key IF NOT EXIST "..\release-key" hg clone https://bitbucket.org/rknapp/protobuf-csharp-port-keyfile ..\release-key
SET PROTOBUF_KEY_FILE="/p:AssemblyOriginatorKeyFile=%~dp0..\release-key\Google.ProtocolBuffers.snk"
MD "%2" MD "%2"
CMD.exe /Q /C "GenerateCompletePackage.bat" CMD.exe /Q /C "BuildAll.bat /verbosity:minimal "/p:AssemblyOriginatorKeyFile=%~dp0..\release-key\Google.ProtocolBuffers.snk"
COPY /y ..\build_output\AllBinariesAndSource.zip %2\protobuf-csharp-port-%2-full-binaries.zip
CMD.exe /Q /C "GenerateReleasePackage.bat" COPY /y ..\build_output\Release-v2.0.zip %2\protobuf-csharp-port-%2-net20-release-binaries.zip
COPY /y ..\build_output\ReleaseBinaries.zip %2\protobuf-csharp-port-%2-release-binaries.zip COPY /y ..\build_output\Release-v3.5.zip %2\protobuf-csharp-port-%2-net35-release-binaries.zip
COPY /y ..\build_output\Release-v4.0.zip %2\protobuf-csharp-port-%2-net40-release-binaries.zip
COPY /y ..\build_output\Full-v2.0.zip %2\protobuf-csharp-port-%2-net20-full-binaries.zip
COPY /y ..\build_output\Full-v3.5.zip %2\protobuf-csharp-port-%2-net35-full-binaries.zip
COPY /y ..\build_output\Full-v4.0.zip %2\protobuf-csharp-port-%2-net40-full-binaries.zip
..\lib\NuGet.exe pack Google.ProtocolBuffers.nuspec -Symbols -Version %2 -NoPackageAnalysis -OutputDirectory %2 ..\lib\NuGet.exe pack Google.ProtocolBuffers.nuspec -Symbols -Version %2 -NoPackageAnalysis -OutputDirectory %2
..\lib\NuGet.exe pack Google.ProtocolBuffersLite.nuspec -Symbols -Version %2 -NoPackageAnalysis -OutputDirectory %2 ..\lib\NuGet.exe pack Google.ProtocolBuffersLite.nuspec -Symbols -Version %2 -NoPackageAnalysis -OutputDirectory %2
hg archive %2\protobuf-csharp-port-%2-source.zip hg archive %2\protobuf-csharp-port-%2-source.zip
SET PROTOBUF_KEY_FILE= "%WIN7SDK_DIR%sn.exe" -T ..\build_output\v2.0\Release\Google.ProtocolBuffers.dll
"%WIN7SDK_DIR%sn.exe" -T ..\build_output\Package\Release\Google.ProtocolBuffers.dll
@ECHO. @ECHO.
@ECHO *********************************************************** @ECHO ***********************************************************
@ECHO IMPORTANT: Verify the above key output is: 55f7125234beb589 @ECHO IMPORTANT: Verify the above key output is: 55f7125234beb589
...@@ -61,8 +66,12 @@ hg push ...@@ -61,8 +66,12 @@ hg push
SET GOOGLEUPLOAD=python.exe googlecode_upload.py --project protobuf-csharp-port --user "%3" --password "%4" SET GOOGLEUPLOAD=python.exe googlecode_upload.py --project protobuf-csharp-port --user "%3" --password "%4"
%GOOGLEUPLOAD% --labels Type-Source,Featured --summary "Version %2 source" %2\protobuf-csharp-port-%2-source.zip %GOOGLEUPLOAD% --labels Type-Source,Featured --summary "Version %2 source" %2\protobuf-csharp-port-%2-source.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries (all configurations)" %2\protobuf-csharp-port-%2-full-binaries.zip %GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 2.0 (all configurations)" %2\protobuf-csharp-port-%2-net20-full-binaries.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries (release only)" %2\protobuf-csharp-port-%2-release-binaries.zip %GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 3.5 (all configurations)" %2\protobuf-csharp-port-%2-net35-full-binaries.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 4.0 (all configurations)" %2\protobuf-csharp-port-%2-net40-full-binaries.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 2.0 (release only)" %2\protobuf-csharp-port-%2-net20-release-binaries.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 3.5 (release only)" %2\protobuf-csharp-port-%2-net35-release-binaries.zip
%GOOGLEUPLOAD% --labels Type-Executable,Featured --summary "Version %2 binaries for .NET 4.0 (release only)" %2\protobuf-csharp-port-%2-net40-release-binaries.zip
@SET GOOGLEUPLOAD= @SET GOOGLEUPLOAD=
@ECHO. @ECHO.
......
@echo off @echo off
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 /t:RunBenchmarks %1 %2 %3 %4 "/p:BuildConfiguration=Release;TargetVersion=2"
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild %~dp0\build.csproj /m /t:RunBenchmarks /p:BuildConfiguration=Release /p:Platform="Any CPU"
pause
\ No newline at end of file
This diff is collapsed.
@echo off @echo off
SET BUILD_TARGET=%1 SET BUILD_TARGET=%~1
SET BUILD_CONFIG=%2 SET BUILD_CONFIG=%~2
IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild
IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v3.5\MSBuild.exe build.csproj %3 %4 %5 %6 /t:%BUILD_TARGET% /p:BuildConfiguration=%BUILD_CONFIG% /p:Platform="Any CPU" /p:BuildTools=3.5 /toolsversion:3.5" CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 %3 %4 %5 %6 "/t:%BUILD_TARGET%" "/p:BuildConfiguration=%BUILD_CONFIG%;TargetVersion=3"
@echo off
SET BUILD_TARGET=%~1
SET BUILD_CONFIG=%~2
IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild
IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug
CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build.csproj /toolsversion:4.0 %3 %4 %5 %6 "/t:%BUILD_TARGET%" "/p:BuildConfiguration=%BUILD_CONFIG%;TargetVersion=4"
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<configuration> <configuration>
<startup>
<requiredRuntime version="v2.0.50727" />
</startup>
<!-- <!--
Application settings for NUnit-console.exe. Do NOT put settings Application settings for NUnit-console.exe. Do NOT put settings
for use by your tests here. for use by your tests here.
......
<?xml version="1.0" encoding="Windows-1252"?>
<configuration>
<startup>
<requiredRuntime version="v2.0.50727" />
</startup>
<!--
Application settings for NUnit-console.exe. Do NOT put settings
for use by your tests here.
-->
<appSettings>
<!--
Specify the location to be used by .NET for the cache
-->
<add key="shadowfiles.path" value="%temp%\nunit20\ShadowCopyCache" />
</appSettings>
<!--
The startup section may be used to specify the runtime versions
supported in the order that they will be used if more than one
is present. As supplied, this section is commented out, which
causes nunit-console to use the version of the framework with
which it was built.
Since .NET 1.0 does not recognize the <supportedRuntime> elements,
a <requiredRuntime> element is used in case it is the only version
of the framework that is installed.
-->
<!--
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v2.0.50215" />
<supportedRuntime version="v2.0.40607" />
<supportedRuntime version="v1.1.4322" />
<supportedRuntime version="v1.0.3705" />
<requiredRuntime version="v1.0.3705" />
</startup>
-->
<!--
The following <runtime> section allows running nunit under
.NET 1.0 by redirecting assemblies. The appliesTo attribute
causes the section to be ignored except under .NET 1.0version 1
on a machine with only the .NET version 1.0 runtime installed.
If application and its tests were built for .NET 1.1 you will
also need to redirect system assemblies in the test config file.
-->
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"
appliesTo="v1.0.3705">
<dependentAssembly>
<assemblyIdentity name="System"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Data"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Drawing"
publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Forms"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="Windows-1252"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<requiredRuntime version="v4.0.30319" safemode="true"/>
</startup>
<!--
Application settings for NUnit-console.exe. Do NOT put settings
for use by your tests here.
-->
<appSettings>
<!--
Specify the location to be used by .NET for the cache
-->
<add key="shadowfiles.path" value="%temp%\nunit20\ShadowCopyCache" />
</appSettings>
<!--
The startup section may be used to specify the runtime versions
supported in the order that they will be used if more than one
is present. As supplied, this section is commented out, which
causes nunit-console to use the version of the framework with
which it was built.
Since .NET 1.0 does not recognize the <supportedRuntime> elements,
a <requiredRuntime> element is used in case it is the only version
of the framework that is installed.
-->
<!--
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v2.0.50215" />
<supportedRuntime version="v2.0.40607" />
<supportedRuntime version="v1.1.4322" />
<supportedRuntime version="v1.0.3705" />
<requiredRuntime version="v1.0.3705" />
</startup>
-->
<!--
The following <runtime> section allows running nunit under
.NET 1.0 by redirecting assemblies. The appliesTo attribute
causes the section to be ignored except under .NET 1.0version 1
on a machine with only the .NET version 1.0 runtime installed.
If application and its tests were built for .NET 1.1 you will
also need to redirect system assemblies in the test config file.
-->
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"
appliesTo="v1.0.3705">
<dependentAssembly>
<assemblyIdentity name="System"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Data"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Drawing"
publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Forms"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml"
publicKeyToken="b77a5c561934e089"
culture="neutral"/>
<bindingRedirect oldVersion="1.0.5000.0"
newVersion="1.0.3300.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
...@@ -62,6 +62,15 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -62,6 +62,15 @@ namespace Google.ProtocolBuffers.ProtoBench
private static BenchmarkTest RunBenchmark; private static BenchmarkTest RunBenchmark;
private static string _logFile;
static void WriteLine(string format, params object[] arg)
{
if (arg.Length > 0) format = String.Format(format, arg);
Console.Out.WriteLine(format);
if (!String.IsNullOrEmpty(_logFile))
File.AppendAllText(_logFile, format + Environment.NewLine);
}
[STAThread] [STAThread]
public static int Main(string[] args) public static int Main(string[] args)
{ {
...@@ -70,6 +79,18 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -70,6 +79,18 @@ namespace Google.ProtocolBuffers.ProtoBench
Verbose = temp.Remove("/verbose") || temp.Remove("-verbose"); Verbose = temp.Remove("/verbose") || temp.Remove("-verbose");
OtherFormats = temp.Remove("/formats") || temp.Remove("-formats"); OtherFormats = temp.Remove("/formats") || temp.Remove("-formats");
foreach (string arg in temp)
{
if (arg.StartsWith("/log:", StringComparison.OrdinalIgnoreCase) || arg.StartsWith("-log:", StringComparison.OrdinalIgnoreCase))
{
_logFile = arg.Substring(5);
if (!String.IsNullOrEmpty(_logFile))
File.AppendAllText(_logFile, Environment.NewLine + "Started benchmarks at " + DateTime.Now + Environment.NewLine);
temp.Remove(arg);
break;
}
}
if (true == (FastTest = (temp.Remove("/fast") || temp.Remove("-fast")))) if (true == (FastTest = (temp.Remove("/fast") || temp.Remove("-fast"))))
{ {
TargetTime = TimeSpan.FromSeconds(10); TargetTime = TimeSpan.FromSeconds(10);
...@@ -120,7 +141,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -120,7 +141,7 @@ namespace Google.ProtocolBuffers.ProtoBench
/// </summary> /// </summary>
public static bool RunTest(string typeName, string file, byte[] inputData) public static bool RunTest(string typeName, string file, byte[] inputData)
{ {
Console.WriteLine("Benchmarking {0} with file {1}", typeName, file); WriteLine("Benchmarking {0} with file {1}", typeName, file);
IMessage defaultMessage; IMessage defaultMessage;
try try
{ {
...@@ -238,7 +259,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -238,7 +259,7 @@ namespace Google.ProtocolBuffers.ProtoBench
new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()). new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).
WeakBuild()); WeakBuild());
} }
Console.WriteLine(); WriteLine(String.Empty);
return true; return true;
} }
catch (Exception e) catch (Exception e)
...@@ -281,7 +302,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -281,7 +302,7 @@ namespace Google.ProtocolBuffers.ProtoBench
double first = (iterations*dataSize)/(elapsed.TotalSeconds*1024*1024); double first = (iterations*dataSize)/(elapsed.TotalSeconds*1024*1024);
if (Verbose) if (Verbose)
{ {
Console.WriteLine("Round ---: Count = {1,6}, Bps = {2,8:f3}", 0, iterations, first); WriteLine("Round ---: Count = {1,6}, Bps = {2,8:f3}", 0, iterations, first);
} }
elapsed = TimeSpan.Zero; elapsed = TimeSpan.Zero;
int max = (int) TargetTime.TotalSeconds; int max = (int) TargetTime.TotalSeconds;
...@@ -294,7 +315,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -294,7 +315,7 @@ namespace Google.ProtocolBuffers.ProtoBench
double bps = (iterations*dataSize)/(cycle.TotalSeconds*1024*1024); double bps = (iterations*dataSize)/(cycle.TotalSeconds*1024*1024);
if (Verbose) if (Verbose)
{ {
Console.WriteLine("Round {1,3}: Count = {2,6}, Bps = {3,8:f3}", WriteLine("Round {1,3}: Count = {2,6}, Bps = {3,8:f3}",
0, runs, iterations, bps); 0, runs, iterations, bps);
} }
...@@ -308,7 +329,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -308,7 +329,7 @@ namespace Google.ProtocolBuffers.ProtoBench
} }
Thread.EndThreadAffinity(); Thread.EndThreadAffinity();
Console.WriteLine( WriteLine(
"{1}: averages {2} per {3:f3}s for {4} runs; avg: {5:f3}mbps; best: {6:f3}mbps; worst: {7:f3}mbps", "{1}: averages {2} per {3:f3}s for {4} runs; avg: {5:f3}mbps; best: {6:f3}mbps; worst: {7:f3}mbps",
0, name, totalCount/runs, elapsed.TotalSeconds/runs, runs, 0, name, totalCount/runs, elapsed.TotalSeconds/runs, runs,
(totalCount*dataSize)/(elapsed.TotalSeconds*1024*1024), best, worst); (totalCount*dataSize)/(elapsed.TotalSeconds*1024*1024), best, worst);
...@@ -331,7 +352,7 @@ namespace Google.ProtocolBuffers.ProtoBench ...@@ -331,7 +352,7 @@ namespace Google.ProtocolBuffers.ProtoBench
// to avoid overflow issues. // to avoid overflow issues.
iterations = (int) ((TargetTime.Ticks/(double) elapsed.Ticks)*iterations); iterations = (int) ((TargetTime.Ticks/(double) elapsed.Ticks)*iterations);
elapsed = TimeAction(action, iterations); elapsed = TimeAction(action, iterations);
Console.WriteLine("{0}: {1} iterations in {2:f3}s; {3:f3}MB/s", WriteLine("{0}: {1} iterations in {2:f3}s; {3:f3}MB/s",
name, iterations, elapsed.TotalSeconds, name, iterations, elapsed.TotalSeconds,
(iterations*dataSize)/(elapsed.TotalSeconds*1024*1024)); (iterations*dataSize)/(elapsed.TotalSeconds*1024*1024));
} }
......
...@@ -3,6 +3,7 @@ using System.Text; ...@@ -3,6 +3,7 @@ using System.Text;
using System.IO; using System.IO;
using System.Xml; using System.Xml;
using Google.ProtocolBuffers.Serialization; using Google.ProtocolBuffers.Serialization;
using Google.ProtocolBuffers.Serialization.Http;
namespace Google.ProtocolBuffers namespace Google.ProtocolBuffers
{ {
...@@ -16,7 +17,11 @@ namespace Google.ProtocolBuffers ...@@ -16,7 +17,11 @@ namespace Google.ProtocolBuffers
/// Serializes the message to JSON text. This is a trivial wrapper /// Serializes the message to JSON text. This is a trivial wrapper
/// around Serialization.JsonFormatWriter.WriteMessage. /// around Serialization.JsonFormatWriter.WriteMessage.
/// </summary> /// </summary>
public static string ToJson(this IMessageLite message) public static string ToJson(
#if !NET20
this
#endif
IMessageLite message)
{ {
JsonFormatWriter w = JsonFormatWriter.CreateInstance(); JsonFormatWriter w = JsonFormatWriter.CreateInstance();
w.WriteMessage(message); w.WriteMessage(message);
...@@ -26,7 +31,11 @@ namespace Google.ProtocolBuffers ...@@ -26,7 +31,11 @@ namespace Google.ProtocolBuffers
/// Serializes the message to XML text. This is a trivial wrapper /// Serializes the message to XML text. This is a trivial wrapper
/// around Serialization.XmlFormatWriter.WriteMessage. /// around Serialization.XmlFormatWriter.WriteMessage.
/// </summary> /// </summary>
public static string ToXml(this IMessageLite message) public static string ToXml(
#if !NET20
this
#endif
IMessageLite message)
{ {
StringWriter w = new StringWriter(new StringBuilder(4096)); StringWriter w = new StringWriter(new StringBuilder(4096));
XmlFormatWriter.CreateInstance(w).WriteMessage(message); XmlFormatWriter.CreateInstance(w).WriteMessage(message);
...@@ -36,19 +45,53 @@ namespace Google.ProtocolBuffers ...@@ -36,19 +45,53 @@ namespace Google.ProtocolBuffers
/// Serializes the message to XML text using the element name provided. /// Serializes the message to XML text using the element name provided.
/// This is a trivial wrapper around Serialization.XmlFormatWriter.WriteMessage. /// This is a trivial wrapper around Serialization.XmlFormatWriter.WriteMessage.
/// </summary> /// </summary>
public static string ToXml(this IMessageLite message, string rootElementName) public static string ToXml(
#if !NET20
this
#endif
IMessageLite message, string rootElementName)
{ {
StringWriter w = new StringWriter(new StringBuilder(4096)); StringWriter w = new StringWriter(new StringBuilder(4096));
XmlFormatWriter.CreateInstance(w).WriteMessage(rootElementName, message); XmlFormatWriter.CreateInstance(w).WriteMessage(rootElementName, message);
return w.ToString(); return w.ToString();
} }
/// <summary>
/// Writes the message instance to the stream using the content type provided
/// </summary>
/// <param name="message">An instance of a message</param>
/// <param name="options">Options specific to writing this message and/or content type</param>
/// <param name="contentType">The mime type of the content to be written</param>
/// <param name="output">The stream to write the message to</param>
public static void WriteTo(
#if !NET20
this
#endif
IMessageLite message, MessageFormatOptions options, string contentType, Stream output)
{
ICodedOutputStream codedOutput = MessageFormatFactory.CreateOutputStream(options, contentType, output);
// Output the appropriate message preamble
codedOutput.WriteMessageStart();
// Write the message content to the output
message.WriteTo(codedOutput);
// Write the closing message fragment
codedOutput.WriteMessageEnd();
codedOutput.Flush();
}
#endregion #endregion
#region IBuilderLite Extensions #region IBuilderLite Extensions
/// <summary> /// <summary>
/// Merges a JSON object into this builder and returns /// Merges a JSON object into this builder and returns
/// </summary> /// </summary>
public static TBuilder MergeFromJson<TBuilder>(this TBuilder builder, string jsonText) where TBuilder : IBuilderLite public static TBuilder MergeFromJson<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, string jsonText) where TBuilder : IBuilderLite
{ {
return JsonFormatReader.CreateInstance(jsonText) return JsonFormatReader.CreateInstance(jsonText)
.Merge(builder); .Merge(builder);
...@@ -56,14 +99,22 @@ namespace Google.ProtocolBuffers ...@@ -56,14 +99,22 @@ namespace Google.ProtocolBuffers
/// <summary> /// <summary>
/// Merges a JSON object into this builder and returns /// Merges a JSON object into this builder and returns
/// </summary> /// </summary>
public static TBuilder MergeFromJson<TBuilder>(this TBuilder builder, TextReader reader) where TBuilder : IBuilderLite public static TBuilder MergeFromJson<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, TextReader reader) where TBuilder : IBuilderLite
{ {
return MergeFromJson(builder, reader, ExtensionRegistry.Empty); return MergeFromJson(builder, reader, ExtensionRegistry.Empty);
} }
/// <summary> /// <summary>
/// Merges a JSON object into this builder using the extensions provided and returns /// Merges a JSON object into this builder using the extensions provided and returns
/// </summary> /// </summary>
public static TBuilder MergeFromJson<TBuilder>(this TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite public static TBuilder MergeFromJson<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite
{ {
return JsonFormatReader.CreateInstance(reader) return JsonFormatReader.CreateInstance(reader)
.Merge(builder, extensionRegistry); .Merge(builder, extensionRegistry);
...@@ -72,7 +123,11 @@ namespace Google.ProtocolBuffers ...@@ -72,7 +123,11 @@ namespace Google.ProtocolBuffers
/// <summary> /// <summary>
/// Merges an XML object into this builder and returns /// Merges an XML object into this builder and returns
/// </summary> /// </summary>
public static TBuilder MergeFromXml<TBuilder>(this TBuilder builder, XmlReader reader) where TBuilder : IBuilderLite public static TBuilder MergeFromXml<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, XmlReader reader) where TBuilder : IBuilderLite
{ {
return MergeFromXml(builder, XmlFormatReader.DefaultRootElementName, reader, ExtensionRegistry.Empty); return MergeFromXml(builder, XmlFormatReader.DefaultRootElementName, reader, ExtensionRegistry.Empty);
} }
...@@ -80,7 +135,11 @@ namespace Google.ProtocolBuffers ...@@ -80,7 +135,11 @@ namespace Google.ProtocolBuffers
/// <summary> /// <summary>
/// Merges an XML object into this builder and returns /// Merges an XML object into this builder and returns
/// </summary> /// </summary>
public static TBuilder MergeFromXml<TBuilder>(this TBuilder builder, string rootElementName, XmlReader reader) where TBuilder : IBuilderLite public static TBuilder MergeFromXml<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, string rootElementName, XmlReader reader) where TBuilder : IBuilderLite
{ {
return MergeFromXml(builder, rootElementName, reader, ExtensionRegistry.Empty); return MergeFromXml(builder, rootElementName, reader, ExtensionRegistry.Empty);
} }
...@@ -88,13 +147,67 @@ namespace Google.ProtocolBuffers ...@@ -88,13 +147,67 @@ namespace Google.ProtocolBuffers
/// <summary> /// <summary>
/// Merges an XML object into this builder using the extensions provided and returns /// Merges an XML object into this builder using the extensions provided and returns
/// </summary> /// </summary>
public static TBuilder MergeFromXml<TBuilder>(this TBuilder builder, string rootElementName, XmlReader reader, public static TBuilder MergeFromXml<TBuilder>(
ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite #if !NET20
this
#endif
TBuilder builder, string rootElementName, XmlReader reader,
ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite
{ {
return XmlFormatReader.CreateInstance(reader) return XmlFormatReader.CreateInstance(reader)
.Merge(rootElementName, builder, extensionRegistry); .Merge(rootElementName, builder, extensionRegistry);
} }
/// <summary>
/// Merges the message from the input stream based on the contentType provided
/// </summary>
/// <typeparam name="TBuilder">A type derived from IBuilderLite</typeparam>
/// <param name="builder">An instance of a message builder</param>
/// <param name="options">Options specific to reading this message and/or content type</param>
/// <param name="contentType">The mime type of the input stream content</param>
/// <param name="input">The stream to read the message from</param>
/// <returns>The same builder instance that was supplied in the builder parameter</returns>
public static TBuilder MergeFrom<TBuilder>(
#if !NET20
this
#endif
TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite
{
ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
codedInput.ReadMessageStart();
builder.WeakMergeFrom(codedInput, options.ExtensionRegistry);
codedInput.ReadMessageEnd();
return builder;
}
#endregion
#region IRpcServerStub Extensions
/// <summary>
/// Used to implement a service endpoint on an HTTP server. This works with services generated with the
/// service_generator_type option set to IRPCDISPATCH.
/// </summary>
/// <param name="stub">The service execution stub</param>
/// <param name="methodName">The name of the method being invoked</param>
/// <param name="options">optional arguments for the format reader/writer</param>
/// <param name="contentType">The mime type for the input stream</param>
/// <param name="input">The input stream</param>
/// <param name="responseType">The mime type for the output stream</param>
/// <param name="output">The output stream</param>
public static void HttpCallMethod(
#if !NET20
this
#endif
IRpcServerStub stub, string methodName, MessageFormatOptions options,
string contentType, Stream input, string responseType, Stream output)
{
ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
codedInput.ReadMessageStart();
IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry);
codedInput.ReadMessageEnd();
WriteTo(response, options, responseType, output);
}
#endregion #endregion
} }
} }
...@@ -30,24 +30,6 @@ namespace Google.ProtocolBuffers.Serialization.Http ...@@ -30,24 +30,6 @@ namespace Google.ProtocolBuffers.Serialization.Http
return codedInput; return codedInput;
} }
/// <summary>
/// Merges the message from the input stream based on the contentType provided
/// </summary>
/// <typeparam name="TBuilder">A type derived from IBuilderLite</typeparam>
/// <param name="builder">An instance of a message builder</param>
/// <param name="options">Options specific to reading this message and/or content type</param>
/// <param name="contentType">The mime type of the input stream content</param>
/// <param name="input">The stream to read the message from</param>
/// <returns>The same builder instance that was supplied in the builder parameter</returns>
public static TBuilder MergeFrom<TBuilder>(this TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite
{
ICodedInputStream codedInput = CreateInputStream(options, contentType, input);
codedInput.ReadMessageStart();
builder.WeakMergeFrom(codedInput, options.ExtensionRegistry);
codedInput.ReadMessageEnd();
return builder;
}
/// <summary> /// <summary>
/// Writes the message instance to the stream using the content type provided /// Writes the message instance to the stream using the content type provided
...@@ -93,28 +75,6 @@ namespace Google.ProtocolBuffers.Serialization.Http ...@@ -93,28 +75,6 @@ namespace Google.ProtocolBuffers.Serialization.Http
return codedOutput; return codedOutput;
} }
/// <summary>
/// Writes the message instance to the stream using the content type provided
/// </summary>
/// <param name="message">An instance of a message</param>
/// <param name="options">Options specific to writing this message and/or content type</param>
/// <param name="contentType">The mime type of the content to be written</param>
/// <param name="output">The stream to write the message to</param>
public static void WriteTo(this IMessageLite message, MessageFormatOptions options, string contentType, Stream output)
{
ICodedOutputStream codedOutput = CreateOutputStream(options, contentType, output);
// Output the appropriate message preamble
codedOutput.WriteMessageStart();
// Write the message content to the output
message.WriteTo(codedOutput);
// Write the closing message fragment
codedOutput.WriteMessageEnd();
codedOutput.Flush();
}
private static ICodedInputStream ContentTypeToInputStream(string contentType, MessageFormatOptions options, Stream input) private static ICodedInputStream ContentTypeToInputStream(string contentType, MessageFormatOptions options, Stream input)
{ {
contentType = (contentType ?? String.Empty).Split(';')[0].Trim(); contentType = (contentType ?? String.Empty).Split(';')[0].Trim();
......
using System.Collections.Generic;
using System.Text;
using Google.ProtocolBuffers;
using System.IO;
namespace Google.ProtocolBuffers.Serialization.Http
{
/// <summary>
/// Extensions for the IRpcServerStub
/// </summary>
public static class ServiceExtensions
{
/// <summary>
/// Used to implement a service endpoint on an HTTP server. This works with services generated with the
/// service_generator_type option set to IRPCDISPATCH.
/// </summary>
/// <param name="stub">The service execution stub</param>
/// <param name="methodName">The name of the method being invoked</param>
/// <param name="options">optional arguments for the format reader/writer</param>
/// <param name="contentType">The mime type for the input stream</param>
/// <param name="input">The input stream</param>
/// <param name="responseType">The mime type for the output stream</param>
/// <param name="output">The output stream</param>
public static void HttpCallMethod(this IRpcServerStub stub, string methodName, MessageFormatOptions options,
string contentType, Stream input, string responseType, Stream output)
{
ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);
codedInput.ReadMessageStart();
IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry);
codedInput.ReadMessageEnd();
response.WriteTo(options, responseType, output);
}
}
}
...@@ -100,7 +100,7 @@ namespace Google.ProtocolBuffers.Serialization ...@@ -100,7 +100,7 @@ namespace Google.ProtocolBuffers.Serialization
private class JsonStreamWriter : JsonFormatWriter private class JsonStreamWriter : JsonFormatWriter
{ {
#if SILVERLIGHT2 || COMPACT_FRAMEWORK_35 #if SILVERLIGHT || COMPACT_FRAMEWORK_35
static readonly Encoding Encoding = new UTF8Encoding(false); static readonly Encoding Encoding = new UTF8Encoding(false);
#else #else
private static readonly Encoding Encoding = Encoding.ASCII; private static readonly Encoding Encoding = Encoding.ASCII;
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
<IsWebBootstrapper>false</IsWebBootstrapper> <IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
<SilverlightVersion Condition=" '$(SilverlightVersion)' == '' ">v2.0</SilverlightVersion>
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v2.0' ">NET20;</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
...@@ -42,7 +44,7 @@ ...@@ -42,7 +44,7 @@
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -54,32 +56,32 @@ ...@@ -54,32 +56,32 @@
<OutputPath>bin\Release\</OutputPath> <OutputPath>bin\Release\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight|AnyCPU'">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug_Silverlight2\</OutputPath> <OutputPath>bin\Debug_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;DEBUG;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight|AnyCPU'">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release_Silverlight2\</OutputPath> <OutputPath>bin\Release_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -89,19 +91,13 @@ ...@@ -89,19 +91,13 @@
<Reference Include="mscorlib" /> <Reference Include="mscorlib" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<!-- Only for 2.x compatibility of extension methods --> <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
<Reference Include="System.Core">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\System.Core\System.Core.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Extensions.cs" /> <Compile Include="Extensions.cs" />
<Compile Include="Http\FormUrlEncodedReader.cs" /> <Compile Include="Http\FormUrlEncodedReader.cs" />
<Compile Include="Http\MessageFormatFactory.cs" /> <Compile Include="Http\MessageFormatFactory.cs" />
<Compile Include="Http\MessageFormatOptions.cs" /> <Compile Include="Http\MessageFormatOptions.cs" />
<Compile Include="Http\ServiceExtensions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="AbstractReader.cs" /> <Compile Include="AbstractReader.cs" />
<Compile Include="AbstractTextReader.cs" /> <Compile Include="AbstractTextReader.cs" />
...@@ -144,8 +140,8 @@ ...@@ -144,8 +140,8 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
<IsWebBootstrapper>false</IsWebBootstrapper> <IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
<SilverlightVersion Condition=" '$(SilverlightVersion)' == '' ">v2.0</SilverlightVersion>
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v2.0' ">NET20;</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
...@@ -42,7 +44,7 @@ ...@@ -42,7 +44,7 @@
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -54,32 +56,32 @@ ...@@ -54,32 +56,32 @@
<OutputPath>bin\Release\</OutputPath> <OutputPath>bin\Release\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight|AnyCPU'">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug_Silverlight2\</OutputPath> <OutputPath>bin\Debug_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;DEBUG;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight|AnyCPU'">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release_Silverlight2\</OutputPath> <OutputPath>bin\Release_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>$(DefineConstants)TRACE;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -89,19 +91,13 @@ ...@@ -89,19 +91,13 @@
<Reference Include="mscorlib" /> <Reference Include="mscorlib" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<!-- Only for 2.x compatibility of extension methods --> <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />
<Reference Include="System.Core">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\System.Core\System.Core.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Extensions.cs" /> <Compile Include="Extensions.cs" />
<Compile Include="Http\FormUrlEncodedReader.cs" /> <Compile Include="Http\FormUrlEncodedReader.cs" />
<Compile Include="Http\MessageFormatFactory.cs" /> <Compile Include="Http\MessageFormatFactory.cs" />
<Compile Include="Http\MessageFormatOptions.cs" /> <Compile Include="Http\MessageFormatOptions.cs" />
<Compile Include="Http\ServiceExtensions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="AbstractReader.cs" /> <Compile Include="AbstractReader.cs" />
<Compile Include="AbstractTextReader.cs" /> <Compile Include="AbstractTextReader.cs" />
...@@ -144,8 +140,8 @@ ...@@ -144,8 +140,8 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
......
...@@ -7,7 +7,7 @@ namespace Google.ProtocolBuffers.Serialization ...@@ -7,7 +7,7 @@ namespace Google.ProtocolBuffers.Serialization
/// <summary> /// <summary>
/// The exception raised when a recursion limit is reached while parsing input. /// The exception raised when a recursion limit is reached while parsing input.
/// </summary> /// </summary>
#if !SILVERLIGHT2 #if !SILVERLIGHT
[Serializable] [Serializable]
#endif #endif
public sealed class RecursionLimitExceededException : FormatException public sealed class RecursionLimitExceededException : FormatException
...@@ -18,7 +18,7 @@ namespace Google.ProtocolBuffers.Serialization ...@@ -18,7 +18,7 @@ namespace Google.ProtocolBuffers.Serialization
{ {
} }
#if !SILVERLIGHT2 #if !SILVERLIGHT
private RecursionLimitExceededException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) private RecursionLimitExceededException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
: base(info, context) : base(info, context)
{ {
......
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.5446
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Google.ProtocolBuffers.Compatibility {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class TestResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal TestResources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Google.ProtocolBuffers.Compatibility.TestResources", typeof(TestResources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static byte[] google_message1 {
get {
object obj = ResourceManager.GetObject("google_message1", resourceCulture);
return ((byte[])(obj));
}
}
internal static byte[] google_message2 {
get {
object obj = ResourceManager.GetObject("google_message2", resourceCulture);
return ((byte[])(obj));
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using NUnit.Framework;
namespace Google.ProtocolBuffers.Compatibility
{
static class TestResources
{
public static byte[] google_message1
{
get
{
Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(
typeof(TestResources).Namespace + ".google_message1.dat");
Assert.IsNotNull(resource, "Unable to the locate resource: google_message1");
byte[] bytes = new byte[resource.Length];
int amtRead = resource.Read(bytes, 0, bytes.Length);
Assert.AreEqual(bytes.Length, amtRead);
return bytes;
}
}
public static byte[] google_message2
{
get
{
Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(
typeof(TestResources).Namespace + ".google_message2.dat");
Assert.IsNotNull(resource, "Unable to the locate resource: google_message2");
byte[] bytes = new byte[resource.Length];
int amtRead = resource.Read(bytes, 0, bytes.Length);
Assert.AreEqual(bytes.Length, amtRead);
return bytes;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="google_message1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>google_message1.dat;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="google_message2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>google_message2.dat;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
\ No newline at end of file
...@@ -81,11 +81,7 @@ ...@@ -81,11 +81,7 @@
<Compile Include="Compatibility\CompatibilityTests.cs" /> <Compile Include="Compatibility\CompatibilityTests.cs" />
<Compile Include="Compatibility\DictionaryCompatibilityTests.cs" /> <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />
<Compile Include="Compatibility\JsonCompatibilityTests.cs" /> <Compile Include="Compatibility\JsonCompatibilityTests.cs" />
<Compile Include="Compatibility\TestResources.Designer.cs"> <Compile Include="Compatibility\TestResources.cs" />
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>TestResources.resx</DependentUpon>
</Compile>
<Compile Include="Compatibility\TextCompatibilityTests.cs" /> <Compile Include="Compatibility\TextCompatibilityTests.cs" />
<Compile Include="Compatibility\XmlCompatibilityTests.cs" /> <Compile Include="Compatibility\XmlCompatibilityTests.cs" />
<Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" /> <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />
...@@ -163,14 +159,8 @@ ...@@ -163,14 +159,8 @@
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Compatibility\google_message1.dat" /> <EmbeddedResource Include="Compatibility\google_message1.dat" />
<None Include="Compatibility\google_message2.dat" /> <EmbeddedResource Include="Compatibility\google_message2.dat" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Compatibility\TestResources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>TestResources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
......
...@@ -90,8 +90,8 @@ namespace Google.ProtocolBuffers ...@@ -90,8 +90,8 @@ namespace Google.ProtocolBuffers
TestAllTypes m2 = b1.Build(); TestAllTypes m2 = b1.Build();
Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", m1.ToJson()); Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", Extensions.ToJson(m1));
Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", m2.ToJson()); Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", Extensions.ToJson(m2));
} }
[Test] [Test]
......
...@@ -98,9 +98,9 @@ namespace Google.ProtocolBuffers ...@@ -98,9 +98,9 @@ namespace Google.ProtocolBuffers
[Test] [Test]
public void TestMergeFromJsonType() public void TestMergeFromJsonType()
{ {
TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
new MessageFormatOptions(), "application/json", new MemoryStream(Encoding.ASCII.GetBytes( new MessageFormatOptions(), "application/json", new MemoryStream(Encoding.ASCII.GetBytes(
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToJson() Extensions.ToJson(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
))) )))
.Build(); .Build();
Assert.AreEqual("a", msg.Text); Assert.AreEqual("a", msg.Text);
...@@ -109,9 +109,9 @@ namespace Google.ProtocolBuffers ...@@ -109,9 +109,9 @@ namespace Google.ProtocolBuffers
[Test] [Test]
public void TestMergeFromXmlType() public void TestMergeFromXmlType()
{ {
TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
new MessageFormatOptions(), "application/xml", new MemoryStream(Encoding.ASCII.GetBytes( new MessageFormatOptions(), "application/xml", new MemoryStream(Encoding.ASCII.GetBytes(
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToXml() Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
))) )))
.Build(); .Build();
Assert.AreEqual("a", msg.Text); Assert.AreEqual("a", msg.Text);
...@@ -120,7 +120,7 @@ namespace Google.ProtocolBuffers ...@@ -120,7 +120,7 @@ namespace Google.ProtocolBuffers
[Test] [Test]
public void TestMergeFromProtoType() public void TestMergeFromProtoType()
{ {
TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
new MessageFormatOptions(), "application/vnd.google.protobuf", new MemoryStream( new MessageFormatOptions(), "application/vnd.google.protobuf", new MemoryStream(
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray() TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray()
)) ))
...@@ -132,8 +132,8 @@ namespace Google.ProtocolBuffers ...@@ -132,8 +132,8 @@ namespace Google.ProtocolBuffers
public void TestWriteToJsonType() public void TestWriteToJsonType()
{ {
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(new MessageFormatOptions(), "application/json", ms); new MessageFormatOptions(), "application/json", ms);
Assert.AreEqual(@"{""text"":""a"",""number"":1}", Encoding.UTF8.GetString(ms.ToArray())); Assert.AreEqual(@"{""text"":""a"",""number"":1}", Encoding.UTF8.GetString(ms.ToArray()));
} }
...@@ -141,8 +141,8 @@ namespace Google.ProtocolBuffers ...@@ -141,8 +141,8 @@ namespace Google.ProtocolBuffers
public void TestWriteToXmlType() public void TestWriteToXmlType()
{ {
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(new MessageFormatOptions(), "application/xml", ms); new MessageFormatOptions(), "application/xml", ms);
Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray())); Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray()));
} }
...@@ -150,8 +150,8 @@ namespace Google.ProtocolBuffers ...@@ -150,8 +150,8 @@ namespace Google.ProtocolBuffers
public void TestWriteToProtoType() public void TestWriteToProtoType()
{ {
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(new MessageFormatOptions(), "application/vnd.google.protobuf", ms); new MessageFormatOptions(), "application/vnd.google.protobuf", ms);
byte[] bytes = TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray(); byte[] bytes = TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray();
Assert.AreEqual(bytes, ms.ToArray()); Assert.AreEqual(bytes, ms.ToArray());
...@@ -171,7 +171,7 @@ namespace Google.ProtocolBuffers ...@@ -171,7 +171,7 @@ namespace Google.ProtocolBuffers
XmlReaderRootElementName = "my-root-node" XmlReaderRootElementName = "my-root-node"
}; };
TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
options, "application/xml", ms) options, "application/xml", ms)
.Build(); .Build();
...@@ -191,7 +191,7 @@ namespace Google.ProtocolBuffers ...@@ -191,7 +191,7 @@ namespace Google.ProtocolBuffers
}; };
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
message.WriteTo(options, "application/xml", ms); Extensions.WriteTo(message, options, "application/xml", ms);
ms.Position = 0; ms.Position = 0;
TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
...@@ -207,8 +207,8 @@ namespace Google.ProtocolBuffers ...@@ -207,8 +207,8 @@ namespace Google.ProtocolBuffers
public void TestJsonFormatted() public void TestJsonFormatted()
{ {
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms); new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms);
Assert.AreEqual("{\r\n \"text\": \"a\",\r\n \"number\": 1\r\n}", Encoding.UTF8.GetString(ms.ToArray())); Assert.AreEqual("{\r\n \"text\": \"a\",\r\n \"number\": 1\r\n}", Encoding.UTF8.GetString(ms.ToArray()));
} }
...@@ -216,8 +216,8 @@ namespace Google.ProtocolBuffers ...@@ -216,8 +216,8 @@ namespace Google.ProtocolBuffers
public void TestXmlFormatted() public void TestXmlFormatted()
{ {
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms); new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms);
Assert.AreEqual("<root>\r\n <text>a</text>\r\n <number>1</number>\r\n</root>", Encoding.UTF8.GetString(ms.ToArray())); Assert.AreEqual("<root>\r\n <text>a</text>\r\n <number>1</number>\r\n</root>", Encoding.UTF8.GetString(ms.ToArray()));
} }
...@@ -233,10 +233,10 @@ namespace Google.ProtocolBuffers ...@@ -233,10 +233,10 @@ namespace Google.ProtocolBuffers
Assert.AreEqual(1, options.MimeInputTypes.Count); Assert.AreEqual(1, options.MimeInputTypes.Count);
Stream xmlStream = new MemoryStream(Encoding.ASCII.GetBytes( Stream xmlStream = new MemoryStream(Encoding.ASCII.GetBytes(
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToXml() Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
)); ));
TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
options, "-custom-XML-mime-type-", xmlStream) options, "-custom-XML-mime-type-", xmlStream)
.Build(); .Build();
Assert.AreEqual("a", msg.Text); Assert.AreEqual("a", msg.Text);
...@@ -255,8 +255,8 @@ namespace Google.ProtocolBuffers ...@@ -255,8 +255,8 @@ namespace Google.ProtocolBuffers
Assert.AreEqual(1, options.MimeOutputTypes.Count); Assert.AreEqual(1, options.MimeOutputTypes.Count);
MemoryStream ms = new MemoryStream(); MemoryStream ms = new MemoryStream();
TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
.WriteTo(options, "-custom-XML-mime-type-", ms); options, "-custom-XML-mime-type-", ms);
Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray())); Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray()));
} }
......
...@@ -123,8 +123,8 @@ namespace Google.ProtocolBuffers ...@@ -123,8 +123,8 @@ namespace Google.ProtocolBuffers
void IHttpTransfer.Execute(string method, string contentType, Stream input, string acceptType, Stream output) void IHttpTransfer.Execute(string method, string contentType, Stream input, string acceptType, Stream output)
{ {
//Extension for: Google.ProtocolBuffers.Serialization.Http.ServiceExtensions.HttpCallMethod(_stub, //3.5: _stub.HttpCallMethod(
_stub.HttpCallMethod( Extensions.HttpCallMethod(_stub,
method, Options, method, Options,
contentType, input, contentType, input,
acceptType, output acceptType, output
...@@ -165,14 +165,14 @@ namespace Google.ProtocolBuffers ...@@ -165,14 +165,14 @@ namespace Google.ProtocolBuffers
MemoryStream output = new MemoryStream(); MemoryStream output = new MemoryStream();
//Write to _mimeType format //Write to _mimeType format
request.WriteTo(Options, _mimeType, input); Extensions.WriteTo(request, Options, _mimeType, input);
input.Position = 0; input.Position = 0;
_wire.Execute(method, _mimeType, input, _mimeType, output); _wire.Execute(method, _mimeType, input, _mimeType, output);
//Read from _mimeType format //Read from _mimeType format
output.Position = 0; output.Position = 0;
response.MergeFrom(Options, _mimeType, output); Extensions.MergeFrom(response, Options, _mimeType, output);
return response.Build(); return response.Build();
} }
......
...@@ -15,7 +15,8 @@ namespace Google.ProtocolBuffers ...@@ -15,7 +15,8 @@ namespace Google.ProtocolBuffers
{ {
TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
builder.MergeFromJson(@"{""valid"":true}"); //3.5: builder.MergeFromJson(@"{""valid"":true}");
Extensions.MergeFromJson(builder, @"{""valid"":true}");
TestXmlMessage message = builder.Build(); TestXmlMessage message = builder.Build();
Assert.AreEqual(true, message.Valid); Assert.AreEqual(true, message.Valid);
...@@ -29,7 +30,8 @@ namespace Google.ProtocolBuffers ...@@ -29,7 +30,8 @@ namespace Google.ProtocolBuffers
.SetValid(true) .SetValid(true)
.Build(); .Build();
string json = message.ToJson(); //3.5: string json = message.ToJson();
string json = Extensions.ToJson(message);
Assert.AreEqual(@"{""valid"":true}", json); Assert.AreEqual(@"{""valid"":true}", json);
} }
...@@ -100,9 +102,9 @@ namespace Google.ProtocolBuffers ...@@ -100,9 +102,9 @@ namespace Google.ProtocolBuffers
public void TestToJsonParseFromJson() public void TestToJsonParseFromJson()
{ {
TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
string json = msg.ToJson(); string json = Extensions.ToJson(msg);
Assert.AreEqual("{\"default_bool\":true}", json); Assert.AreEqual("{\"default_bool\":true}", json);
TestAllTypes copy = new TestAllTypes.Builder().MergeFromJson(json).Build(); TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), json).Build();
Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
Assert.AreEqual(msg, copy); Assert.AreEqual(msg, copy);
} }
...@@ -111,9 +113,9 @@ namespace Google.ProtocolBuffers ...@@ -111,9 +113,9 @@ namespace Google.ProtocolBuffers
public void TestToJsonParseFromJsonReader() public void TestToJsonParseFromJsonReader()
{ {
TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
string json = msg.ToJson(); string json = Extensions.ToJson(msg);
Assert.AreEqual("{\"default_bool\":true}", json); Assert.AreEqual("{\"default_bool\":true}", json);
TestAllTypes copy = new TestAllTypes.Builder().MergeFromJson(new StringReader(json)).Build(); TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), new StringReader(json)).Build();
Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
Assert.AreEqual(msg, copy); Assert.AreEqual(msg, copy);
} }
...@@ -429,7 +431,7 @@ namespace Google.ProtocolBuffers ...@@ -429,7 +431,7 @@ namespace Google.ProtocolBuffers
StringBuilder sb = new StringBuilder(8192); StringBuilder sb = new StringBuilder(8192);
for (int i = 0; i < 80; i++) for (int i = 0; i < 80; i++)
sb.Append("{\"child\":"); sb.Append("{\"child\":");
TestXmlRescursive msg = new TestXmlRescursive.Builder().MergeFromJson(sb.ToString()).Build(); TestXmlRescursive msg = Extensions.MergeFromJson(new TestXmlRescursive.Builder(), sb.ToString()).Build();
} }
[Test, ExpectedException(typeof(FormatException))] [Test, ExpectedException(typeof(FormatException))]
public void FailWithEmptyText() public void FailWithEmptyText()
......
...@@ -18,7 +18,8 @@ namespace Google.ProtocolBuffers ...@@ -18,7 +18,8 @@ namespace Google.ProtocolBuffers
TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
XmlReader rdr = XmlReader.Create(new StringReader(@"<root><valid>true</valid></root>")); XmlReader rdr = XmlReader.Create(new StringReader(@"<root><valid>true</valid></root>"));
builder.MergeFromXml(rdr); //3.5: builder.MergeFromXml(rdr);
Extensions.MergeFromXml(builder, rdr);
TestXmlMessage message = builder.Build(); TestXmlMessage message = builder.Build();
Assert.AreEqual(true, message.Valid); Assert.AreEqual(true, message.Valid);
...@@ -32,7 +33,8 @@ namespace Google.ProtocolBuffers ...@@ -32,7 +33,8 @@ namespace Google.ProtocolBuffers
.SetValid(true) .SetValid(true)
.Build(); .Build();
string Xml = message.ToXml(); //3.5: string Xml = message.ToXml();
string Xml = Extensions.ToXml(message);
Assert.AreEqual(@"<root><valid>true</valid></root>", Xml); Assert.AreEqual(@"<root><valid>true</valid></root>", Xml);
} }
...@@ -75,9 +77,9 @@ namespace Google.ProtocolBuffers ...@@ -75,9 +77,9 @@ namespace Google.ProtocolBuffers
public void TestToXmlParseFromXml() public void TestToXmlParseFromXml()
{ {
TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
string xml = msg.ToXml(); string xml = Extensions.ToXml(msg);
Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml); Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml);
TestAllTypes copy = new TestAllTypes.Builder().MergeFromXml(XmlReader.Create(new StringReader(xml))).Build(); TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), XmlReader.Create(new StringReader(xml))).Build();
Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
Assert.AreEqual(msg, copy); Assert.AreEqual(msg, copy);
} }
...@@ -86,9 +88,9 @@ namespace Google.ProtocolBuffers ...@@ -86,9 +88,9 @@ namespace Google.ProtocolBuffers
public void TestToXmlParseFromXmlWithRootName() public void TestToXmlParseFromXmlWithRootName()
{ {
TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
string xml = msg.ToXml("message"); string xml = Extensions.ToXml(msg, "message");
Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml); Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml);
TestAllTypes copy = new TestAllTypes.Builder().MergeFromXml("message", XmlReader.Create(new StringReader(xml))).Build(); TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), "message", XmlReader.Create(new StringReader(xml))).Build();
Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
Assert.AreEqual(msg, copy); Assert.AreEqual(msg, copy);
} }
...@@ -447,7 +449,7 @@ namespace Google.ProtocolBuffers ...@@ -447,7 +449,7 @@ namespace Google.ProtocolBuffers
StringBuilder sb = new StringBuilder(8192); StringBuilder sb = new StringBuilder(8192);
for (int i = 0; i < 80; i++) for (int i = 0; i < 80; i++)
sb.Append("<child>"); sb.Append("<child>");
TestXmlRescursive msg = new TestXmlRescursive.Builder().MergeFromXml("child", XmlReader.Create(new StringReader(sb.ToString()))).Build(); TestXmlRescursive msg = Extensions.MergeFromXml(new TestXmlRescursive.Builder(), "child", XmlReader.Create(new StringReader(sb.ToString()))).Build();
} }
} }
} }
This diff is collapsed.
...@@ -231,7 +231,7 @@ namespace Google.ProtocolBuffers ...@@ -231,7 +231,7 @@ namespace Google.ProtocolBuffers
/// </summary> /// </summary>
public bool ReadDouble(ref double value) public bool ReadDouble(ref double value)
{ {
#if SILVERLIGHT2 || COMPACT_FRAMEWORK_35 #if SILVERLIGHT || COMPACT_FRAMEWORK_35
if (BitConverter.IsLittleEndian && 8 <= bufferSize - bufferPos) if (BitConverter.IsLittleEndian && 8 <= bufferSize - bufferPos)
{ {
value = BitConverter.ToDouble(buffer, bufferPos); value = BitConverter.ToDouble(buffer, bufferPos);
......
...@@ -496,7 +496,7 @@ namespace Google.ProtocolBuffers ...@@ -496,7 +496,7 @@ namespace Google.ProtocolBuffers
/// </summary> /// </summary>
public void WriteDoubleNoTag(double value) public void WriteDoubleNoTag(double value)
{ {
#if SILVERLIGHT2 || COMPACT_FRAMEWORK_35 #if SILVERLIGHT || COMPACT_FRAMEWORK_35
byte[] rawBytes = BitConverter.GetBytes(value); byte[] rawBytes = BitConverter.GetBytes(value);
if (!BitConverter.IsLittleEndian) if (!BitConverter.IsLittleEndian)
ByteArray.Reverse(rawBytes); ByteArray.Reverse(rawBytes);
......
...@@ -40,7 +40,7 @@ using System.Runtime.Serialization; ...@@ -40,7 +40,7 @@ using System.Runtime.Serialization;
/* /*
* This entire source file is not supported on the Silverlight platform * This entire source file is not supported on the Silverlight platform
*/ */
#if !SILVERLIGHT2 #if !SILVERLIGHT
namespace Google.ProtocolBuffers namespace Google.ProtocolBuffers
{ {
/* /*
......
...@@ -98,7 +98,7 @@ namespace Google.ProtocolBuffers ...@@ -98,7 +98,7 @@ namespace Google.ProtocolBuffers
public EnumLiteMap() public EnumLiteMap()
{ {
items = new SortedList<int, IEnumLite>(); items = new SortedList<int, IEnumLite>();
#if SILVERLIGHT2 #if SILVERLIGHT
// Silverlight doesn't support Enum.GetValues // Silverlight doesn't support Enum.GetValues
// TODO(jonskeet): Validate that this reflection is permitted, e.g. in Windows Phone 7 // TODO(jonskeet): Validate that this reflection is permitted, e.g. in Windows Phone 7
foreach (System.Reflection.FieldInfo fi in typeof(TEnum).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public)) foreach (System.Reflection.FieldInfo fi in typeof(TEnum).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public))
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
<IsWebBootstrapper>false</IsWebBootstrapper> <IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
<SilverlightVersion Condition=" '$(SilverlightVersion)' == '' ">v2.0</SilverlightVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
...@@ -60,26 +61,26 @@ ...@@ -60,26 +61,26 @@
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight|AnyCPU'">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug_Silverlight2\</OutputPath> <OutputPath>bin\Debug_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>DEBUG;TRACE;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight|AnyCPU'">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release_Silverlight2\</OutputPath> <OutputPath>bin\Release_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE;SILVERLIGHT2</DefineConstants> <DefineConstants>TRACE;SILVERLIGHT</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -211,8 +212,8 @@ ...@@ -211,8 +212,8 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight2' " /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
</FileUpgradeFlags> </FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion> <OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation /> <UpgradeBackupLocation />
<SilverlightVersion Condition=" '$(SilverlightVersion)' == '' ">v2.0</SilverlightVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
...@@ -42,26 +43,26 @@ ...@@ -42,26 +43,26 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight|AnyCPU'">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug_Silverlight2\</OutputPath> <OutputPath>bin\Debug_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>DEBUG;TRACE;SILVERLIGHT2;LITE</DefineConstants> <DefineConstants>DEBUG;TRACE;SILVERLIGHT;LITE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight|AnyCPU'">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release_Silverlight2\</OutputPath> <OutputPath>bin\Release_Silverlight\</OutputPath>
<DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile> <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
<NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn> <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
<DefineConstants>TRACE;SILVERLIGHT2;LITE</DefineConstants> <DefineConstants>TRACE;SILVERLIGHT;LITE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoStdLib>true</NoStdLib> <NoStdLib>true</NoStdLib>
...@@ -70,7 +71,6 @@ ...@@ -70,7 +71,6 @@
<ItemGroup> <ItemGroup>
<Reference Include="mscorlib" /> <Reference Include="mscorlib" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
...@@ -115,8 +115,10 @@ ...@@ -115,8 +115,10 @@
<Compile Include="UninitializedMessageException.cs" /> <Compile Include="UninitializedMessageException.cs" />
<Compile Include="WireFormat.cs" /> <Compile Include="WireFormat.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' != 'Silverlight2' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Debug' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Silverlight2' " /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' == 'Release' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Debug_Silverlight' " />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Release_Silverlight' " />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
......
...@@ -43,7 +43,7 @@ namespace Google.ProtocolBuffers ...@@ -43,7 +43,7 @@ namespace Google.ProtocolBuffers
/// </summary> /// </summary>
internal static class SilverlightCompatibility internal static class SilverlightCompatibility
{ {
#if SILVERLIGHT2 #if SILVERLIGHT
internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.None; internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.None;
#else #else
internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.Compiled; internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.Compiled;
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#endregion #endregion
#if SILVERLIGHT2 #if SILVERLIGHT
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
......
This diff is collapsed.
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
<Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs"> <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">
<Link>Properties\AssemblyInfo.cs</Link> <Link>Properties\AssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">
<Link>TestRpcForMimeTypes.cs</Link>
</Compile>
<Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">
<Link>TestRpcGenerator.cs</Link>
</Compile>
<Compile Include="AbstractBuilderLiteTest.cs" /> <Compile Include="AbstractBuilderLiteTest.cs" />
<Compile Include="AbstractMessageLiteTest.cs" /> <Compile Include="AbstractMessageLiteTest.cs" />
<Compile Include="ExtendableBuilderLiteTest.cs" /> <Compile Include="ExtendableBuilderLiteTest.cs" />
...@@ -67,8 +73,6 @@ ...@@ -67,8 +73,6 @@
<Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" /> <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />
<Compile Include="TestProtos\UnitTestLiteProtoFile.cs" /> <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />
<Compile Include="TestProtos\UnitTestRpcInteropLite.cs" /> <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />
<Compile Include="TestRpcForMimeTypes.cs" />
<Compile Include="TestRpcGenerator.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj"> <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj">
......
This diff is collapsed.
#region Copyright notice and license
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// http://github.com/jskeet/dotnet-protobufs/
// Original C++/Java/Python code:
// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endregion
using System;
using Google.ProtocolBuffers;
using Google.ProtocolBuffers.TestProtos;
using NUnit.Framework;
namespace Google.ProtocolBuffers
{
/// <summary>
/// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration
/// of using the new IRpcDispatch to write a client/server
/// </summary>
[TestFixture]
public class TestRpcGenerator
{
/// <summary>
/// A sample implementation of the ISearchService for testing
/// </summary>
private class ExampleSearchImpl : ISearchService
{
SearchResponse ISearchService.Search(SearchRequest searchRequest)
{
if (searchRequest.CriteriaCount == 0)
{
throw new ArgumentException("No criteria specified.", new InvalidOperationException());
}
SearchResponse.Builder resp = SearchResponse.CreateBuilder();
foreach (string criteria in searchRequest.CriteriaList)
{
resp.AddResults(
SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://search.com").
Build());
}
return resp.Build();
}
SearchResponse ISearchService.RefineSearch(RefineSearchRequest refineSearchRequest)
{
SearchResponse.Builder resp = refineSearchRequest.PreviousResults.ToBuilder();
foreach (string criteria in refineSearchRequest.CriteriaList)
{
resp.AddResults(
SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://refine.com").
Build());
}
return resp.Build();
}
}
/// <summary>
/// An example extraction of the wire protocol
/// </summary>
private interface IWireTransfer
{
byte[] Execute(string method, byte[] message);
}
/// <summary>
/// An example of a server responding to a wire request
/// </summary>
private class ExampleServerHost : IWireTransfer
{
private readonly IRpcServerStub _stub;
public ExampleServerHost(ISearchService implementation)
{
//on the server, we create a dispatch to call the appropriate method by name
IRpcDispatch dispatch = new SearchService.Dispatch(implementation);
//we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message
//type appropriate for the method name being invoked.
_stub = new SearchService.ServerStub(dispatch);
}
byte[] IWireTransfer.Execute(string method, byte[] message)
{
//now when we recieve a wire transmission to invoke a method by name with a byte[] or stream payload
//we just simply call the sub:
IMessageLite response = _stub.CallMethod(method, CodedInputStream.CreateInstance(message),
ExtensionRegistry.Empty);
//now we return the expected response message:
return response.ToByteArray();
}
}
/// <summary>
/// An example of a client sending a wire request
/// </summary>
private class ExampleClient : IRpcDispatch
{
private readonly IWireTransfer _wire;
public ExampleClient(IWireTransfer wire)
{
_wire = wire;
}
TMessage IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, IMessageLite request,
IBuilderLite<TMessage, TBuilder> response)
{
byte[] rawResponse = _wire.Execute(method, request.ToByteArray());
response.MergeFrom(rawResponse);
return response.Build();
}
}
/// <summary>
/// Put it all together to create one seamless client/server experience full of rich-type goodness ;)
/// All you need to do is send/recieve the method name and message bytes across the wire.
/// </summary>
[Test]
public void TestClientServerDispatch()
{
ExampleServerHost server = new ExampleServerHost(new ExampleSearchImpl());
//obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting
IWireTransfer wire = server;
ISearchService client = new SearchService(new ExampleClient(wire));
//now the client has a real, typed, interface to work with:
SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());
Assert.AreEqual(1, result.ResultsCount);
Assert.AreEqual("Test", result.ResultsList[0].Name);
Assert.AreEqual("http://search.com", result.ResultsList[0].Url);
//The test part of this, call the only other method
result =
client.RefineSearch(
RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());
Assert.AreEqual(2, result.ResultsCount);
Assert.AreEqual("Test", result.ResultsList[0].Name);
Assert.AreEqual("http://search.com", result.ResultsList[0].Url);
Assert.AreEqual("Refine", result.ResultsList[1].Name);
Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment