diff --git a/src/idl_gen_csharp.cpp b/src/idl_gen_csharp.cpp index 369460d73..4e1c87459 100644 --- a/src/idl_gen_csharp.cpp +++ b/src/idl_gen_csharp.cpp @@ -431,6 +431,10 @@ class CSharpGenerator : public BaseGenerator { if (opts.generate_object_based_api) { GenEnum_ObjectAPI(enum_def, code_ptr, opts); } + + if (enum_def.is_union) { + code += GenUnionVerify(enum_def.underlying_type); + } } bool HasUnionStringValue(const EnumDef &enum_def) const { @@ -1755,8 +1759,6 @@ class CSharpGenerator : public BaseGenerator { code += " }\n"; code += "}\n\n"; - code += GenUnionVerify(enum_def.underlying_type); - // JsonConverter if (opts.cs_gen_json_serializer) { if (enum_def.attributes.Lookup("private")) { diff --git a/tests/FlatBuffers.Test/Assert.cs b/tests/FlatBuffers.Test/Assert.cs index 7bb800402..b0ecb59dc 100644 --- a/tests/FlatBuffers.Test/Assert.cs +++ b/tests/FlatBuffers.Test/Assert.cs @@ -99,6 +99,26 @@ namespace Google.FlatBuffers.Test } } + public static void ArrayEqual(ArraySegment expected, T[] actual) + { +#if NETCOREAPP + ArrayEqual(expected.ToArray(), actual); +#else + if (expected.Count != actual.Length) + { + throw new AssertFailedException(expected, actual); + } + + for (var i = 0; i < expected.Count; ++i) + { + if (!expected.Array[expected.Offset + i].Equals(actual[i])) + { + throw new AssertArrayFailedException(i, expected, actual); + } + } +#endif + } + public static void IsTrue(bool value) { if (!value) diff --git a/tests/FlatBuffers.Test/ByteBufferTests.cs b/tests/FlatBuffers.Test/ByteBufferTests.cs index 6bff2ac54..f01c7cad7 100644 --- a/tests/FlatBuffers.Test/ByteBufferTests.cs +++ b/tests/FlatBuffers.Test/ByteBufferTests.cs @@ -422,7 +422,7 @@ namespace Google.FlatBuffers.Test // Get the full array back out and ensure they are equivalent var bbArray = uut.ToArray(nOffset, data.Count); - Assert.ArrayEqual(data.ToArray(), bbArray); + Assert.ArrayEqual(data, bbArray); } public unsafe void ByteBuffer_Put_IntPtr_Helper(T[] data, int typeSize) @@ -643,7 +643,7 @@ namespace Google.FlatBuffers.Test float[] data = null; Assert.Throws(() => uut.Put(1024, data)); - ArraySegment dataArraySegment = default; + ArraySegment dataArraySegment = default(ArraySegment); Assert.Throws(() => uut.Put(1024, dataArraySegment)); IntPtr dataPtr = IntPtr.Zero; diff --git a/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs b/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs index 7fe974030..71fd1d04d 100644 --- a/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs +++ b/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs @@ -15,6 +15,7 @@ */ using System; +using System.Diagnostics; namespace Google.FlatBuffers.Test { @@ -586,12 +587,14 @@ namespace Google.FlatBuffers.Test [FlatBuffersTestMethod] public void FlatBufferBuilder_Add_ArraySegment_Default_Throws() { - var fbb = CreateBuffer(false); +#if NETCOREAPP + var fbb = CreateBuffer(false); // Construct the data array - ArraySegment data = default; + ArraySegment data = default(ArraySegment); Assert.Throws(() => fbb.Add(data)); +#endif } [FlatBuffersTestMethod] diff --git a/tests/FlatBuffers.Test/FlatBuffers.Test.csproj b/tests/FlatBuffers.Test/FlatBuffers.Test.csproj index 0f683cbaa..de129e14d 100644 --- a/tests/FlatBuffers.Test/FlatBuffers.Test.csproj +++ b/tests/FlatBuffers.Test/FlatBuffers.Test.csproj @@ -66,6 +66,9 @@ FlatBuffers\FlatBufferConstants.cs + + FlatBuffers\FlatBufferVerify.cs + FlatBuffers\Struct.cs @@ -120,6 +123,9 @@ MyGame\Example\ArrayStruct.cs + + MyGame\Example\LongEnum.cs + MyGame\Example\NestedStruct.cs @@ -220,4 +226,4 @@ --> - \ No newline at end of file + diff --git a/tests/KeywordTest/KeywordsInUnion.cs b/tests/KeywordTest/KeywordsInUnion.cs index d8a870f41..3fccb13be 100644 --- a/tests/KeywordTest/KeywordsInUnion.cs +++ b/tests/KeywordTest/KeywordsInUnion.cs @@ -37,28 +37,6 @@ public class KeywordsInUnionUnion { } } - - -static public class KeywordsInUnionVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((KeywordsInUnion)typeId) - { - case KeywordsInUnion.@static: - result = KeywordTest.KeywordsInTableVerify.Verify(verifier, tablePos); - break; - case KeywordsInUnion.@internal: - result = KeywordTest.KeywordsInTableVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class KeywordsInUnionUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(KeywordsInUnionUnion) || objectType == typeof(System.Collections.Generic.List); @@ -102,4 +80,26 @@ public class KeywordsInUnionUnion_JsonConverter : Newtonsoft.Json.JsonConverter } + +static public class KeywordsInUnionVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((KeywordsInUnion)typeId) + { + case KeywordsInUnion.@static: + result = KeywordTest.KeywordsInTableVerify.Verify(verifier, tablePos); + break; + case KeywordsInUnion.@internal: + result = KeywordTest.KeywordsInTableVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + + } diff --git a/tests/MyGame/Example/Any.cs b/tests/MyGame/Example/Any.cs index 021faa626..ce583f0f3 100644 --- a/tests/MyGame/Example/Any.cs +++ b/tests/MyGame/Example/Any.cs @@ -41,31 +41,6 @@ public class AnyUnion { } } - - -static public class AnyVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((Any)typeId) - { - case Any.Monster: - result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); - break; - case Any.TestSimpleTableWithEnum: - result = MyGame.Example.TestSimpleTableWithEnumVerify.Verify(verifier, tablePos); - break; - case Any.MyGame_Example2_Monster: - result = MyGame.Example2.MonsterVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class AnyUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(AnyUnion) || objectType == typeof(System.Collections.Generic.List); @@ -110,4 +85,29 @@ public class AnyUnion_JsonConverter : Newtonsoft.Json.JsonConverter { } + +static public class AnyVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((Any)typeId) + { + case Any.Monster: + result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); + break; + case Any.TestSimpleTableWithEnum: + result = MyGame.Example.TestSimpleTableWithEnumVerify.Verify(verifier, tablePos); + break; + case Any.MyGame_Example2_Monster: + result = MyGame.Example2.MonsterVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + + } diff --git a/tests/MyGame/Example/AnyAmbiguousAliases.cs b/tests/MyGame/Example/AnyAmbiguousAliases.cs index 3fb3d779d..e85b055c6 100644 --- a/tests/MyGame/Example/AnyAmbiguousAliases.cs +++ b/tests/MyGame/Example/AnyAmbiguousAliases.cs @@ -41,31 +41,6 @@ public class AnyAmbiguousAliasesUnion { } } - - -static public class AnyAmbiguousAliasesVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((AnyAmbiguousAliases)typeId) - { - case AnyAmbiguousAliases.M1: - result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); - break; - case AnyAmbiguousAliases.M2: - result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); - break; - case AnyAmbiguousAliases.M3: - result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class AnyAmbiguousAliasesUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(AnyAmbiguousAliasesUnion) || objectType == typeof(System.Collections.Generic.List); @@ -110,4 +85,29 @@ public class AnyAmbiguousAliasesUnion_JsonConverter : Newtonsoft.Json.JsonConver } + +static public class AnyAmbiguousAliasesVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((AnyAmbiguousAliases)typeId) + { + case AnyAmbiguousAliases.M1: + result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); + break; + case AnyAmbiguousAliases.M2: + result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); + break; + case AnyAmbiguousAliases.M3: + result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + + } diff --git a/tests/MyGame/Example/AnyUniqueAliases.cs b/tests/MyGame/Example/AnyUniqueAliases.cs index 629edb69f..099046de5 100644 --- a/tests/MyGame/Example/AnyUniqueAliases.cs +++ b/tests/MyGame/Example/AnyUniqueAliases.cs @@ -41,31 +41,6 @@ public class AnyUniqueAliasesUnion { } } - - -static public class AnyUniqueAliasesVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((AnyUniqueAliases)typeId) - { - case AnyUniqueAliases.M: - result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); - break; - case AnyUniqueAliases.TS: - result = MyGame.Example.TestSimpleTableWithEnumVerify.Verify(verifier, tablePos); - break; - case AnyUniqueAliases.M2: - result = MyGame.Example2.MonsterVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class AnyUniqueAliasesUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(AnyUniqueAliasesUnion) || objectType == typeof(System.Collections.Generic.List); @@ -110,4 +85,29 @@ public class AnyUniqueAliasesUnion_JsonConverter : Newtonsoft.Json.JsonConverter } + +static public class AnyUniqueAliasesVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((AnyUniqueAliases)typeId) + { + case AnyUniqueAliases.M: + result = MyGame.Example.MonsterVerify.Verify(verifier, tablePos); + break; + case AnyUniqueAliases.TS: + result = MyGame.Example.TestSimpleTableWithEnumVerify.Verify(verifier, tablePos); + break; + case AnyUniqueAliases.M2: + result = MyGame.Example2.MonsterVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + + } diff --git a/tests/namespace_test/NamespaceA/NamespaceB/UnionInNestedNS.cs b/tests/namespace_test/NamespaceA/NamespaceB/UnionInNestedNS.cs index 8105c3b0e..f44cd9076 100644 --- a/tests/namespace_test/NamespaceA/NamespaceB/UnionInNestedNS.cs +++ b/tests/namespace_test/NamespaceA/NamespaceB/UnionInNestedNS.cs @@ -33,25 +33,6 @@ public class UnionInNestedNSUnion { } } - - -static public class UnionInNestedNSVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((UnionInNestedNS)typeId) - { - case UnionInNestedNS.TableInNestedNS: - result = NamespaceA.NamespaceB.TableInNestedNSVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class UnionInNestedNSUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(UnionInNestedNSUnion) || objectType == typeof(System.Collections.Generic.List); @@ -94,4 +75,23 @@ public class UnionInNestedNSUnion_JsonConverter : Newtonsoft.Json.JsonConverter } + +static public class UnionInNestedNSVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((UnionInNestedNS)typeId) + { + case UnionInNestedNS.TableInNestedNS: + result = NamespaceA.NamespaceB.TableInNestedNSVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + + } diff --git a/tests/union_value_collsion/union_value_collision_generated.cs b/tests/union_value_collsion/union_value_collision_generated.cs index 7a38e8620..e741e9afb 100644 --- a/tests/union_value_collsion/union_value_collision_generated.cs +++ b/tests/union_value_collsion/union_value_collision_generated.cs @@ -37,25 +37,6 @@ public class ValueUnion { } } - - -static public class ValueVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((Value)typeId) - { - case Value.IntValue: - result = union_value_collsion.IntValueVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class ValueUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(ValueUnion) || objectType == typeof(System.Collections.Generic.List); @@ -97,6 +78,25 @@ public class ValueUnion_JsonConverter : Newtonsoft.Json.JsonConverter { } } + + +static public class ValueVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((Value)typeId) + { + case Value.IntValue: + result = union_value_collsion.IntValueVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public enum Other : byte { @@ -125,25 +125,6 @@ public class OtherUnion { } } - - -static public class OtherVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((Other)typeId) - { - case Other.IntValue: - result = union_value_collsion.IntValueVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class OtherUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(OtherUnion) || objectType == typeof(System.Collections.Generic.List); @@ -185,6 +166,25 @@ public class OtherUnion_JsonConverter : Newtonsoft.Json.JsonConverter { } } + + +static public class OtherVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((Other)typeId) + { + case Other.IntValue: + result = union_value_collsion.IntValueVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} + public struct IntValue : IFlatbufferObject { private Table __p; diff --git a/tests/union_vector/Character.cs b/tests/union_vector/Character.cs index f6e7c88a7..f2e733986 100644 --- a/tests/union_vector/Character.cs +++ b/tests/union_vector/Character.cs @@ -50,40 +50,6 @@ public class CharacterUnion { } } - - -static public class CharacterVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((Character)typeId) - { - case Character.MuLan: - result = AttackerVerify.Verify(verifier, tablePos); - break; - case Character.Rapunzel: - result = verifier.VerifyUnionData(tablePos, 4, 4); - break; - case Character.Belle: - result = verifier.VerifyUnionData(tablePos, 4, 4); - break; - case Character.BookFan: - result = verifier.VerifyUnionData(tablePos, 4, 4); - break; - case Character.Other: - result = verifier.VerifyUnionString(tablePos); - break; - case Character.Unused: - result = verifier.VerifyUnionString(tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class CharacterUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(CharacterUnion) || objectType == typeof(System.Collections.Generic.List); @@ -130,3 +96,37 @@ public class CharacterUnion_JsonConverter : Newtonsoft.Json.JsonConverter { } } + + +static public class CharacterVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((Character)typeId) + { + case Character.MuLan: + result = AttackerVerify.Verify(verifier, tablePos); + break; + case Character.Rapunzel: + result = verifier.VerifyUnionData(tablePos, 4, 4); + break; + case Character.Belle: + result = verifier.VerifyUnionData(tablePos, 4, 4); + break; + case Character.BookFan: + result = verifier.VerifyUnionData(tablePos, 4, 4); + break; + case Character.Other: + result = verifier.VerifyUnionString(tablePos); + break; + case Character.Unused: + result = verifier.VerifyUnionString(tablePos); + break; + default: result = true; + break; + } + return result; + } +} + diff --git a/tests/union_vector/Gadget.cs b/tests/union_vector/Gadget.cs index 32f0d8131..883596ebc 100644 --- a/tests/union_vector/Gadget.cs +++ b/tests/union_vector/Gadget.cs @@ -34,28 +34,6 @@ public class GadgetUnion { } } - - -static public class GadgetVerify -{ - static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) - { - bool result = true; - switch((Gadget)typeId) - { - case Gadget.FallingTub: - result = verifier.VerifyUnionData(tablePos, 4, 4); - break; - case Gadget.HandFan: - result = HandFanVerify.Verify(verifier, tablePos); - break; - default: result = true; - break; - } - return result; - } -} - public class GadgetUnion_JsonConverter : Newtonsoft.Json.JsonConverter { public override bool CanConvert(System.Type objectType) { return objectType == typeof(GadgetUnion) || objectType == typeof(System.Collections.Generic.List); @@ -98,3 +76,25 @@ public class GadgetUnion_JsonConverter : Newtonsoft.Json.JsonConverter { } } + + +static public class GadgetVerify +{ + static public bool Verify(Google.FlatBuffers.Verifier verifier, byte typeId, uint tablePos) + { + bool result = true; + switch((Gadget)typeId) + { + case Gadget.FallingTub: + result = verifier.VerifyUnionData(tablePos, 4, 4); + break; + case Gadget.HandFan: + result = HandFanVerify.Verify(verifier, tablePos); + break; + default: result = true; + break; + } + return result; + } +} +