diff options
Diffstat (limited to 'tests/FlatBuffers.Test')
-rw-r--r-- | tests/FlatBuffers.Test/Assert.cs | 77 | ||||
-rw-r--r-- | tests/FlatBuffers.Test/ByteBufferTests.cs | 244 | ||||
-rw-r--r-- | tests/FlatBuffers.Test/FlatBuffers.Test.csproj | 82 | ||||
-rw-r--r-- | tests/FlatBuffers.Test/FlatBuffersExampleTests.cs | 145 | ||||
-rw-r--r-- | tests/FlatBuffers.Test/Program.cs | 46 | ||||
-rw-r--r-- | tests/FlatBuffers.Test/Properties/AssemblyInfo.cs | 36 |
6 files changed, 630 insertions, 0 deletions
diff --git a/tests/FlatBuffers.Test/Assert.cs b/tests/FlatBuffers.Test/Assert.cs new file mode 100644 index 00000000..9e410823 --- /dev/null +++ b/tests/FlatBuffers.Test/Assert.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FlatBuffers.Test +{ + + public class AssertFailedException : Exception + { + private readonly object _expected; + private readonly object _actual; + + public AssertFailedException(object expected, object actual) + { + _expected = expected; + _actual = actual; + } + + public override string Message + { + get { return string.Format("Expected {0} but saw {1}", _expected, _actual); } + } + } + + public class AssertUnexpectedThrowException : Exception + { + private readonly object _expected; + + public AssertUnexpectedThrowException(object expected) + { + _expected = expected; + } + + public override string Message + { + get { return string.Format("Expected exception of type {0}", _expected); } + } + } + + public static class Assert + { + public static void AreEqual<T>(T expected, T actual) + { + if (!expected.Equals(actual)) + { + throw new AssertFailedException(expected, actual); + } + } + + public static void IsTrue(bool value) + { + if (!value) + { + throw new AssertFailedException(true, value); + } + } + + public static void Throws<T>(Action action) where T : Exception + { + var caught = false; + try + { + action(); + } + catch (T ex) + { + caught = true; + } + + if (!caught) + { + throw new AssertUnexpectedThrowException(typeof (T)); + } + } + } +} diff --git a/tests/FlatBuffers.Test/ByteBufferTests.cs b/tests/FlatBuffers.Test/ByteBufferTests.cs new file mode 100644 index 00000000..b3c1811c --- /dev/null +++ b/tests/FlatBuffers.Test/ByteBufferTests.cs @@ -0,0 +1,244 @@ +/* + * Copyright 2014 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; + +namespace FlatBuffers.Test +{ + public class ByteBufferTests + { + + public void ByteBuffer_Length_MatchesBufferLength() + { + var buffer = new byte[1000]; + var uut = new ByteBuffer(buffer); + Assert.AreEqual(buffer.Length, uut.Length); + } + + public void ByteBuffer_PutBytePopulatesBufferAtZeroOffset() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + uut.PutByte(0, (byte)99); + + Assert.AreEqual((byte)99, buffer[0]); + } + + public void ByteBuffer_PutByteCannotPutAtOffsetPastLength() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutByte(1, 99)); + } + + public void ByteBuffer_PutShortPopulatesBufferCorrectly() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + uut.PutShort(0, (short)1); + + // Ensure Endianness was written correctly + Assert.AreEqual((byte)1, buffer[0]); + Assert.AreEqual((byte)0, buffer[1]); + } + + public void ByteBuffer_PutShortCannotPutAtOffsetPastLength() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(2, 99)); + } + + public void ByteBuffer_PutShortChecksLength() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(0, 99)); + } + + public void ByteBuffer_PutShortChecksLengthAndOffset() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(1, 99)); + } + + public void ByteBuffer_PutIntPopulatesBufferCorrectly() + { + var buffer = new byte[4]; + var uut = new ByteBuffer(buffer); + uut.PutInt(0, 0x0A0B0C0D); + + // Ensure Endianness was written correctly + Assert.AreEqual(0x0D, buffer[0]); + Assert.AreEqual(0x0C, buffer[1]); + Assert.AreEqual(0x0B, buffer[2]); + Assert.AreEqual(0x0A, buffer[3]); + } + + public void ByteBuffer_PutIntCannotPutAtOffsetPastLength() + { + var buffer = new byte[4]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D)); + } + + public void ByteBuffer_PutIntChecksLength() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(0, 0x0A0B0C0D)); + } + + public void ByteBuffer_PutIntChecksLengthAndOffset() + { + var buffer = new byte[4]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D)); + } + + public void ByteBuffer_PutLongPopulatesBufferCorrectly() + { + var buffer = new byte[8]; + var uut = new ByteBuffer(buffer); + uut.PutLong(0, 0x010203040A0B0C0D); + + // Ensure Endianness was written correctly + Assert.AreEqual(0x0D, buffer[0]); + Assert.AreEqual(0x0C, buffer[1]); + Assert.AreEqual(0x0B, buffer[2]); + Assert.AreEqual(0x0A, buffer[3]); + Assert.AreEqual(0x04, buffer[4]); + Assert.AreEqual(0x03, buffer[5]); + Assert.AreEqual(0x02, buffer[6]); + Assert.AreEqual(0x01, buffer[7]); + } + + public void ByteBuffer_PutLongCannotPutAtOffsetPastLength() + { + var buffer = new byte[8]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D)); + } + + public void ByteBuffer_PutLongChecksLength() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(0, 0x010203040A0B0C0D)); + } + + public void ByteBuffer_PutLongChecksLengthAndOffset() + { + var buffer = new byte[8]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D)); + } + + public void ByteBuffer_GetByteReturnsCorrectData() + { + var buffer = new byte[1]; + buffer[0] = 99; + var uut = new ByteBuffer(buffer); + Assert.AreEqual((byte)99, uut.Get(0)); + } + + public void ByteBuffer_GetByteChecksOffset() + { + var buffer = new byte[1]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(()=>uut.Get(1)); + } + + public void ByteBuffer_GetShortReturnsCorrectData() + { + var buffer = new byte[2]; + buffer[0] = 1; + buffer[1] = 0; + var uut = new ByteBuffer(buffer); + Assert.AreEqual(1, uut.GetShort(0)); + } + + public void ByteBuffer_GetShortChecksOffset() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(2)); + } + + public void ByteBuffer_GetShortChecksLength() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(1)); + } + + public void ByteBuffer_GetIntReturnsCorrectData() + { + var buffer = new byte[4]; + buffer[0] = 0x0D; + buffer[1] = 0x0C; + buffer[2] = 0x0B; + buffer[3] = 0x0A; + var uut = new ByteBuffer(buffer); + Assert.AreEqual(0x0A0B0C0D, uut.GetInt(0)); + } + + public void ByteBuffer_GetIntChecksOffset() + { + var buffer = new byte[4]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(4)); + } + + public void ByteBuffer_GetIntChecksLength() + { + var buffer = new byte[2]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(0)); + } + + public void ByteBuffer_GetLongReturnsCorrectData() + { + var buffer = new byte[8]; + buffer[0] = 0x0D; + buffer[1] = 0x0C; + buffer[2] = 0x0B; + buffer[3] = 0x0A; + buffer[4] = 0x04; + buffer[5] = 0x03; + buffer[6] = 0x02; + buffer[7] = 0x01; + var uut = new ByteBuffer(buffer); + Assert.AreEqual(0x010203040A0B0C0D, uut.GetLong(0)); + } + + public void ByteBuffer_GetLongChecksOffset() + { + var buffer = new byte[8]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(8)); + } + + public void ByteBuffer_GetLongChecksLength() + { + var buffer = new byte[7]; + var uut = new ByteBuffer(buffer); + Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(0)); + } + + } +} diff --git a/tests/FlatBuffers.Test/FlatBuffers.Test.csproj b/tests/FlatBuffers.Test/FlatBuffers.Test.csproj new file mode 100644 index 00000000..6d7a8def --- /dev/null +++ b/tests/FlatBuffers.Test/FlatBuffers.Test.csproj @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{9DB0B5E7-757E-4BD1-A5F6-279390331254}</ProjectGuid> + <OutputType>Exe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>FlatBuffers.Test</RootNamespace> + <AssemblyName>FlatBuffers.Test</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup> + <StartupObject /> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="..\MyGame\Example\Any.cs"> + <Link>MyGame\Example\Any.cs</Link> + </Compile> + <Compile Include="..\MyGame\Example\Color.cs"> + <Link>MyGame\Example\Color.cs</Link> + </Compile> + <Compile Include="..\MyGame\Example\Monster.cs"> + <Link>MyGame\Example\Monster.cs</Link> + </Compile> + <Compile Include="..\MyGame\Example\Test.cs"> + <Link>MyGame\Example\Test.cs</Link> + </Compile> + <Compile Include="..\MyGame\Example\Vec3.cs"> + <Link>MyGame\Example\Vec3.cs</Link> + </Compile> + <Compile Include="Assert.cs" /> + <Compile Include="ByteBufferTests.cs" /> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="FlatBuffersExampleTests.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\net\FlatBuffers\FlatBuffers.csproj"> + <Project>{28C00774-1E73-4A75-AD8F-844CD21A064D}</Project> + <Name>FlatBuffers</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="..\monsterdata_test.bin"> + <Link>Resources\monsterdata_test.bin</Link> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- 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. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project>
\ No newline at end of file diff --git a/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs new file mode 100644 index 00000000..ed946b16 --- /dev/null +++ b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs @@ -0,0 +1,145 @@ +/* + * Copyright 2014 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.IO; +using MyGame.Example; + +namespace FlatBuffers.Test +{ + public class FlatBuffersExampleTests + { + public void RunTests() + { + CanCreateNewFlatBufferFromScratch(); + CanReadCppGeneratedWireFile(); + } + + public void CanCreateNewFlatBufferFromScratch() + { + // Second, let's create a FlatBuffer from scratch in C#, and test it also. + // We use an initial size of 1 to exercise the reallocation algorithm, + // normally a size larger than the typical FlatBuffer you generate would be + // better for performance. + var fbb = new FlatBufferBuilder(1); + + // We set up the same values as monsterdata.json: + + var str = fbb.CreateString("MyMonster"); + var test1 = fbb.CreateString("test1"); + var test2 = fbb.CreateString("test2"); + + + Monster.StartInventoryVector(fbb, 5); + for (int i = 4; i >= 0; i--) + { + fbb.AddByte((byte)i); + } + var inv = fbb.EndVector(); + + Monster.StartMonster(fbb); + Monster.AddHp(fbb, (short)20); + var mon2 = Monster.EndMonster(fbb); + + Monster.StartTest4Vector(fbb, 2); + MyGame.Example.Test.CreateTest(fbb, (short)10, (byte)20); + MyGame.Example.Test.CreateTest(fbb, (short)30, (byte)40); + var test4 = fbb.EndVector(); + + Monster.StartTestarrayofstringVector(fbb, 2); + fbb.AddOffset(test2); + fbb.AddOffset(test1); + var testArrayOfString = fbb.EndVector(); + + + Monster.StartMonster(fbb); + Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, + (byte)4, (short)5, (byte)6)); + Monster.AddHp(fbb, (short)80); + Monster.AddName(fbb, str); + Monster.AddInventory(fbb, inv); + Monster.AddTestType(fbb, (byte)1); + Monster.AddTest(fbb, mon2); + Monster.AddTest4(fbb, test4); + Monster.AddTestarrayofstring(fbb, testArrayOfString); + var mon = Monster.EndMonster(fbb); + + fbb.Finish(mon); + + // Dump to output directory so we can inspect later, if needed + using (var ms= new MemoryStream(fbb.Data.Data, fbb.DataStart, fbb.Offset)) + { + var data = ms.ToArray(); + File.WriteAllBytes(@"Resources/monsterdata_cstest.bin",data); + } + + // Now assert the buffer + TestBuffer(fbb.Data, fbb.DataStart); + } + + private void TestBuffer(ByteBuffer bb, int start) + { + var monster = Monster.GetRootAsMonster(bb, start); + + Assert.AreEqual(80, monster.Hp()); + Assert.AreEqual(150, monster.Mana()); + Assert.AreEqual("MyMonster", monster.Name()); + + var pos = monster.Pos(); + Assert.AreEqual(1.0f, pos.X()); + Assert.AreEqual(2.0f, pos.Y()); + Assert.AreEqual(3.0f, pos.Z()); + + Assert.AreEqual(3.0f, pos.Test1()); + Assert.AreEqual((byte)4, pos.Test2()); + var t = pos.Test3(); + Assert.AreEqual((short)5, t.A()); + Assert.AreEqual((byte)6, t.B()); + + Assert.AreEqual((byte)Any.Monster, monster.TestType()); + + var monster2 = new Monster(); + Assert.IsTrue(monster.Test(monster2) != null); + Assert.AreEqual(20, monster2.Hp()); + + + Assert.AreEqual(5, monster.InventoryLength()); + var invsum = 0; + for (var i = 0; i < monster.InventoryLength(); i++) + { + invsum += monster.Inventory(i); + } + Assert.AreEqual(10, invsum); + + var test0 = monster.Test4(0); + var test1 = monster.Test4(1); + Assert.AreEqual(2, monster.Test4Length()); + + Assert.AreEqual(100, test0.A() + test0.B() + test1.A() + test1.B()); + + + Assert.AreEqual(2, monster.TestarrayofstringLength()); + Assert.AreEqual("test1", monster.Testarrayofstring(0)); + Assert.AreEqual("test2", monster.Testarrayofstring(1)); + } + + public void CanReadCppGeneratedWireFile() + { + var data = File.ReadAllBytes(@"Resources/monsterdata_test.bin"); + var bb = new ByteBuffer(data); + TestBuffer(bb, 0); + } + } +} diff --git a/tests/FlatBuffers.Test/Program.cs b/tests/FlatBuffers.Test/Program.cs new file mode 100644 index 00000000..2662b2a3 --- /dev/null +++ b/tests/FlatBuffers.Test/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace FlatBuffers.Test +{ + static class Program + { + public static int Main(string[] args) + { + var tests = new FlatBuffersExampleTests(); + try + { + tests.RunTests(); + } + catch (Exception ex) + { + Console.WriteLine("FlatBuffersExampleTests FAILED - {0}", ex.GetBaseException()); + return -1; + } + + // Run ByteBuffers Tests + var testClass = new ByteBufferTests(); + + var methods = testClass.GetType().GetMethods(BindingFlags.Public | + BindingFlags.Instance) + .Where(m => m.Name.StartsWith("ByteBuffer_")); + foreach (var method in methods) + { + try + { + method.Invoke(testClass, new object[] { }); + } + catch (Exception ex) + { + Console.WriteLine("ByteBufferTests FAILED when invoking {0} with error {1}", + method.Name, ex.GetBaseException()); + return -1; + } + + } + + return 0; + } + } +} diff --git a/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs b/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ee3b831c --- /dev/null +++ b/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FlatBuffers.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FlatBuffers.Test")] +[assembly: AssemblyCopyright("Copyright © 2014 Google Inc")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a1d58a51-3e74-4ae9-aac7-5a399c9eed1a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] |