public async Task AddingFileWithNewLibraryImport_DoesNotRegenerateOriginalMethod() { string source = CodeSnippets.BasicParametersAndModifiers <int>(); Compilation comp1 = await TestUtils.CreateCompilation(source); Microsoft.Interop.LibraryImportGenerator generator = new(); GeneratorDriver driver = TestUtils.CreateDriver(comp1, null, new[] { generator }, EnableIncrementalTrackingDriverOptions); driver = driver.RunGenerators(comp1); Compilation comp2 = comp1.AddSyntaxTrees(CSharpSyntaxTree.ParseText(CodeSnippets.BasicParametersAndModifiers <bool>(), new CSharpParseOptions(LanguageVersion.Preview))); GeneratorDriver driver2 = driver.RunGenerators(comp2); GeneratorRunResult runResult = driver2.GetRunResult().Results[0]; Assert.Collection(runResult.TrackedSteps[StepNames.CalculateStubInformation], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); }, step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.New, output.Reason)); }); }
public async Task ReplacingFileWithNewLibraryImport_DoesNotRegenerateStubsInOtherFiles() { Compilation comp1 = await TestUtils.CreateCompilation(new string[] { CodeSnippets.BasicParametersAndModifiers <int>(), CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.I1) }); Microsoft.Interop.LibraryImportGenerator generator = new(); GeneratorDriver driver = TestUtils.CreateDriver(comp1, null, new[] { generator }, EnableIncrementalTrackingDriverOptions); driver = driver.RunGenerators(comp1); Compilation comp2 = comp1.ReplaceSyntaxTree(comp1.SyntaxTrees.First(), CSharpSyntaxTree.ParseText(CodeSnippets.BasicParametersAndModifiers <ulong>(), new CSharpParseOptions(LanguageVersion.Preview))); GeneratorDriver driver2 = driver.RunGenerators(comp2); GeneratorRunResult runResult = driver2.GetRunResult().Results[0]; Assert.Collection(runResult.TrackedSteps[StepNames.CalculateStubInformation], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Modified, output.Reason)); }, step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); }); }
public async Task AppendingUnrelatedSource_DoesNotRegenerateSource() { string source = $"namespace NS{{{CodeSnippets.BasicParametersAndModifiers<int>()}}}"; SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview)); Compilation comp1 = await TestUtils.CreateCompilation(new[] { syntaxTree }); Microsoft.Interop.LibraryImportGenerator generator = new(); GeneratorDriver driver = TestUtils.CreateDriver(comp1, null, new[] { generator }, EnableIncrementalTrackingDriverOptions); driver = driver.RunGenerators(comp1); SyntaxTree newTree = syntaxTree.WithRootAndOptions(syntaxTree.GetCompilationUnitRoot().AddMembers(SyntaxFactory.ParseMemberDeclaration("struct Foo {}") !), syntaxTree.Options); Compilation comp2 = comp1.ReplaceSyntaxTree(comp1.SyntaxTrees.First(), newTree); GeneratorDriver driver2 = driver.RunGenerators(comp2); GeneratorRunResult runResult = driver2.GetRunResult().Results[0]; Assert.Collection(runResult.TrackedSteps[StepNames.CalculateStubInformation], step => { // The input contains symbols and Compilation objects, so it will always be different. // However, we validate that the calculated stub information is identical. Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); }); }
public static IEnumerable <object[]> CodeSnippetsToCompileMultipleSources() { yield return(new object[] { new[] { CodeSnippets.BasicParametersAndModifiers <int>(), CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.Bool) } }); yield return(new object[] { new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <int>(StringMarshalling.Utf16), CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.Bool) } }); yield return(new object[] { new[] { CodeSnippets.BasicParameterByValue("int[]", CodeSnippets.DisableRuntimeMarshalling), CodeSnippets.BasicParameterWithByRefModifier("ref", "int") } }); }
public static IEnumerable <object[]> SnippetsWithBlittableTypesButNonBlittableDataToCompile() { yield return(new[] { CodeSnippets.AllLibraryImportNamedArguments }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.SetLastErrorTrue <int>() }); }
public static IEnumerable <object[]> CodeSnippetsToValidateFallbackForwarder() { yield return(new object[] { CodeSnippets.UserDefinedEntryPoint, TestTargetFramework.Net, true }); // Confirm that all unsupported target frameworks can be generated. { string code = CodeSnippets.BasicParametersAndModifiers <byte>(CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, false }); yield return(new object[] { code, TestTargetFramework.Core, false }); yield return(new object[] { code, TestTargetFramework.Standard, false }); yield return(new object[] { code, TestTargetFramework.Framework, false }); } // Confirm that all unsupported target frameworks fall back to a forwarder. { string code = CodeSnippets.BasicParametersAndModifiers <byte[]>(CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, true }); yield return(new object[] { code, TestTargetFramework.Core, true }); yield return(new object[] { code, TestTargetFramework.Standard, true }); yield return(new object[] { code, TestTargetFramework.Framework, true }); } // Confirm that all unsupported target frameworks fall back to a forwarder. { string code = CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf16, CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, true }); yield return(new object[] { code, TestTargetFramework.Core, true }); yield return(new object[] { code, TestTargetFramework.Standard, true }); yield return(new object[] { code, TestTargetFramework.Framework, true }); } // Confirm that if support is missing for any type (like arrays), we fall back to a forwarder even if other types are supported. { string code = CodeSnippets.BasicReturnAndParameterByValue("System.Runtime.InteropServices.SafeHandle", "int[]", CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, true }); yield return(new object[] { code, TestTargetFramework.Core, true }); yield return(new object[] { code, TestTargetFramework.Standard, true }); yield return(new object[] { code, TestTargetFramework.Framework, true }); } }
public static IEnumerable <object[]> CodeSnippetsToCompileWithPreprocessorSymbols() { yield return(new object[] { CodeSnippets.PreprocessorIfAroundFullFunctionDefinition("Foo"), new string[] { "Foo" } }); yield return(new object[] { CodeSnippets.PreprocessorIfAroundFullFunctionDefinition("Foo"), Array.Empty <string>() }); yield return(new object[] { CodeSnippets.PreprocessorIfAroundFullFunctionDefinitionWithFollowingFunction("Foo"), new string[] { "Foo" } }); yield return(new object[] { CodeSnippets.PreprocessorIfAroundFullFunctionDefinitionWithFollowingFunction("Foo"), Array.Empty <string>() }); yield return(new object[] { CodeSnippets.PreprocessorIfAfterAttributeAroundFunction("Foo"), new string[] { "Foo" } }); yield return(new object[] { CodeSnippets.PreprocessorIfAfterAttributeAroundFunction("Foo"), Array.Empty <string>() }); yield return(new object[] { CodeSnippets.PreprocessorIfAfterAttributeAroundFunctionAdditionalFunctionAfter("Foo"), new string[] { "Foo" } }); yield return(new object[] { CodeSnippets.PreprocessorIfAfterAttributeAroundFunctionAdditionalFunctionAfter("Foo"), Array.Empty <string>() }); }
public static IEnumerable <object[]> CodeSnippetsToValidateFallbackForwarder() { yield return(new object[] { CodeSnippets.UserDefinedEntryPoint, TestTargetFramework.Net, true }); // Confirm that all unsupported target frameworks can be generated. { string code = CodeSnippets.BasicParametersAndModifiers <byte>(CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, false }); yield return(new object[] { code, TestTargetFramework.Core, false }); yield return(new object[] { code, TestTargetFramework.Standard, false }); yield return(new object[] { code, TestTargetFramework.Framework, false }); } // Confirm that all unsupported target frameworks fallback to a forwarder. { string code = CodeSnippets.BasicParametersAndModifiers <byte[]>(CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, true }); yield return(new object[] { code, TestTargetFramework.Core, true }); yield return(new object[] { code, TestTargetFramework.Standard, true }); yield return(new object[] { code, TestTargetFramework.Framework, true }); } // Confirm that all unsupported target frameworks fallback to a forwarder. { string code = CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf16, CodeSnippets.LibraryImportAttributeDeclaration); yield return(new object[] { code, TestTargetFramework.Net5, true }); yield return(new object[] { code, TestTargetFramework.Core, true }); yield return(new object[] { code, TestTargetFramework.Standard, true }); yield return(new object[] { code, TestTargetFramework.Framework, true }); } }
public async Task ChangingMarshallingStrategy_RegeneratesStub() { string stubSource = CodeSnippets.BasicParametersAndModifiers("CustomType"); string customTypeImpl1 = "struct CustomType { System.IntPtr handle; }"; string customTypeImpl2 = "class CustomType : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid { public CustomType():base(true){} protected override bool ReleaseHandle(){return true;} }"; Compilation comp1 = await TestUtils.CreateCompilation(stubSource); SyntaxTree customTypeImpl1Tree = CSharpSyntaxTree.ParseText(customTypeImpl1, new CSharpParseOptions(LanguageVersion.Preview)); comp1 = comp1.AddSyntaxTrees(customTypeImpl1Tree); Microsoft.Interop.LibraryImportGenerator generator = new(); GeneratorDriver driver = TestUtils.CreateDriver(comp1, null, new[] { generator }, EnableIncrementalTrackingDriverOptions); driver = driver.RunGenerators(comp1); Compilation comp2 = comp1.ReplaceSyntaxTree(customTypeImpl1Tree, CSharpSyntaxTree.ParseText(customTypeImpl2, new CSharpParseOptions(LanguageVersion.Preview))); GeneratorDriver driver2 = driver.RunGenerators(comp2); GeneratorRunResult runResult = driver2.GetRunResult().Results[0]; Assert.Collection(runResult.TrackedSteps[StepNames.CalculateStubInformation], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Modified, output.Reason)); }); Assert.Collection(runResult.TrackedSteps[StepNames.GenerateSingleStub], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Modified, output.Reason)); }); }
public async Task ChangingMarshallingAttributes_SameStrategy_DoesNotRegenerate() { string source = CodeSnippets.BasicParametersAndModifiers <int>(); SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview)); Compilation comp1 = await TestUtils.CreateCompilation(new[] { syntaxTree }); Microsoft.Interop.LibraryImportGenerator generator = new(); GeneratorDriver driver = TestUtils.CreateDriver(comp1, null, new[] { generator }, EnableIncrementalTrackingDriverOptions); driver = driver.RunGenerators(comp1); SyntaxTree newTree = syntaxTree.WithRootAndOptions( SyntaxFactory.ParseCompilationUnit( CodeSnippets.MarshalAsParametersAndModifiers <int>(System.Runtime.InteropServices.UnmanagedType.I4)), syntaxTree.Options); Compilation comp2 = comp1.ReplaceSyntaxTree(comp1.SyntaxTrees.First(), newTree); GeneratorDriver driver2 = driver.RunGenerators(comp2); GeneratorRunResult runResult = driver2.GetRunResult().Results[0]; Assert.Collection(runResult.TrackedSteps[StepNames.CalculateStubInformation], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Modified, output.Reason)); }); Assert.Collection(runResult.TrackedSteps[StepNames.GenerateSingleStub], step => { Assert.Collection(step.Outputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); }); }
public static IEnumerable <object[]> FullyBlittableSnippetsToCompile() { yield return(new[] { CodeSnippets.UserDefinedEntryPoint }); yield return(new[] { CodeSnippets.BasicParameterByValue("int") }); }
public static IEnumerable <object[]> CodeSnippetsToCompile() { yield return(new[] { CodeSnippets.TrivialClassDeclarations }); yield return(new[] { CodeSnippets.TrivialStructDeclarations }); yield return(new[] { CodeSnippets.MultipleAttributes }); yield return(new[] { CodeSnippets.NestedNamespace }); yield return(new[] { CodeSnippets.NestedTypes }); yield return(new[] { CodeSnippets.UnsafeContext }); yield return(new[] { CodeSnippets.UserDefinedEntryPoint }); yield return(new[] { CodeSnippets.AllLibraryImportNamedArguments }); yield return(new[] { CodeSnippets.DefaultParameters }); yield return(new[] { CodeSnippets.UseCSharpFeaturesForConstants }); // Parameter / return types yield return(new[] { CodeSnippets.BasicParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiers <UIntPtr>() }); // Arrays yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("byte*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("sbyte*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("short*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("ushort*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("int*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("uint*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("long*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("ulong*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("float*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("double*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("System.IntPtr*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("System.UIntPtr*", "unsafe") }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <byte>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <sbyte>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <short>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ushort>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <int>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <uint>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <long>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ulong>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <IntPtr>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <UIntPtr>(isByRef: false) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <byte>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <sbyte>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <short>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ushort>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <int>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <uint>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <long>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ulong>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <IntPtr>(isByRef: true) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <UIntPtr>(isByRef: true) }); // StringMarshalling yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Utf16) }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf16) }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf8) }); // StringMarshallingCustomType yield return(new[] { CodeSnippets.CustomStringMarshallingParametersAndModifiers <string>() }); // MarshalAs yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.Bool) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.VariantBool) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.I1) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.I2) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.U2) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <IntPtr>(UnmanagedType.SysInt) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <UIntPtr>(UnmanagedType.SysUInt) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPWStr) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPTStr) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPUTF8Str) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPStr) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.BStr) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPWStr) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPUTF8Str) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPStr) }); yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.BStr) }); // [In, Out] attributes // By value non-blittable array yield return(new [] { CodeSnippets.ByValueParameterWithModifier("S[]", "Out") + CodeSnippets.CustomStructMarshalling.NonBlittableUserDefinedType() + CodeSnippets.CustomStructMarshalling.NativeTypeRef }); yield return(new [] { CodeSnippets.ByValueParameterWithModifier("S[]", "In, Out") + CodeSnippets.CustomStructMarshalling.NonBlittableUserDefinedType() + CodeSnippets.CustomStructMarshalling.NativeTypeRef }); // Enums yield return(new[] { CodeSnippets.EnumParameters }); // Pointers yield return(new[] { CodeSnippets.PointerParameters <byte>() }); yield return(new[] { CodeSnippets.PointerParameters <sbyte>() }); yield return(new[] { CodeSnippets.PointerParameters <short>() }); yield return(new[] { CodeSnippets.PointerParameters <ushort>() }); yield return(new[] { CodeSnippets.PointerParameters <int>() }); yield return(new[] { CodeSnippets.PointerParameters <uint>() }); yield return(new[] { CodeSnippets.PointerParameters <long>() }); yield return(new[] { CodeSnippets.PointerParameters <ulong>() }); yield return(new[] { CodeSnippets.PointerParameters <float>() }); yield return(new[] { CodeSnippets.PointerParameters <double>() }); yield return(new[] { CodeSnippets.PointerParameters <bool>() }); yield return(new[] { CodeSnippets.PointerParameters <IntPtr>() }); yield return(new[] { CodeSnippets.PointerParameters <UIntPtr>() }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("void*") }); // Delegates yield return(new[] { CodeSnippets.DelegateParametersAndModifiers }); yield return(new[] { CodeSnippets.DelegateMarshalAsParametersAndModifiers }); // Function pointers yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* <void>") }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged<void>") }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged<int, int>") }); yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged[Stdcall]<int, int>") }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiersUnsafe("delegate* <int>", UnmanagedType.FunctionPtr) }); yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiersUnsafe("delegate* unmanaged<int>", UnmanagedType.FunctionPtr) }); // Structs yield return(new[] { CodeSnippets.BlittableStructParametersAndModifiers(string.Empty) }); yield return(new[] { CodeSnippets.BlittableStructParametersAndModifiers(CodeSnippets.DisableRuntimeMarshalling) }); yield return(new[] { CodeSnippets.ValidateDisableRuntimeMarshalling.TypeUsage(string.Empty) + CodeSnippets.ValidateDisableRuntimeMarshalling.NonBlittableUserDefinedTypeWithNativeType }); yield return(new[] { CodeSnippets.ValidateDisableRuntimeMarshalling.TypeUsage(CodeSnippets.DisableRuntimeMarshalling) + CodeSnippets.ValidateDisableRuntimeMarshalling.NonBlittableUserDefinedTypeWithNativeType }); // SafeHandle yield return(new[] { CodeSnippets.BasicParametersAndModifiers("Microsoft.Win32.SafeHandles.SafeFileHandle") }); yield return(new[] { CodeSnippets.BasicParameterByValue("System.Runtime.InteropServices.SafeHandle") }); yield return(new[] { CodeSnippets.SafeHandleWithCustomDefaultConstructorAccessibility(privateCtor: false) }); yield return(new[] { CodeSnippets.SafeHandleWithCustomDefaultConstructorAccessibility(privateCtor: true) }); // Custom type marshalling yield return(new[] { CodeSnippets.CustomStructMarshalling.ParametersAndModifiers }); yield return(new[] { CodeSnippets.CustomStructMarshalling.StackallocParametersAndModifiersNoRef }); yield return(new[] { CodeSnippets.CustomStructMarshalling.StackallocTwoStageParametersAndModifiersNoRef }); yield return(new[] { CodeSnippets.CustomStructMarshalling.OptionalStackallocParametersAndModifiers }); yield return(new[] { CodeSnippets.CustomStructMarshalling.TwoStageParametersAndModifiers }); yield return(new[] { CodeSnippets.CustomStructMarshalling.PinnableParametersAndModifiers }); yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeTypePinnable("byte", "byte") }); yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeTypePinnable("byte", "int") }); yield return(new[] { CodeSnippets.CustomStructMarshalling.MarshalUsingParametersAndModifiers }); yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeToManagedOnlyOutParameter }); yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeToManagedOnlyReturnValue }); yield return(new[] { CodeSnippets.ArrayMarshallingWithCustomStructElement }); yield return(new[] { CodeSnippets.ArrayMarshallingWithCustomStructElementWithValueProperty }); // Escaped C# keyword identifiers yield return(new[] { CodeSnippets.ByValueParameterWithName("Method", "@event") }); yield return(new[] { CodeSnippets.ByValueParameterWithName("Method", "@var") }); yield return(new[] { CodeSnippets.ByValueParameterWithName("@params", "i") }); //Generics yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <UIntPtr>() }); // Custom collection marshalling yield return(new[] { CodeSnippets.CollectionByValue <byte>() }); yield return(new[] { CodeSnippets.CollectionByValue <sbyte>() }); yield return(new[] { CodeSnippets.CollectionByValue <short>() }); yield return(new[] { CodeSnippets.CollectionByValue <ushort>() }); yield return(new[] { CodeSnippets.CollectionByValue <int>() }); yield return(new[] { CodeSnippets.CollectionByValue <uint>() }); yield return(new[] { CodeSnippets.CollectionByValue <long>() }); yield return(new[] { CodeSnippets.CollectionByValue <ulong>() }); yield return(new[] { CodeSnippets.CollectionByValue <float>() }); yield return(new[] { CodeSnippets.CollectionByValue <double>() }); yield return(new[] { CodeSnippets.CollectionByValue <IntPtr>() }); yield return(new[] { CodeSnippets.CollectionByValue <UIntPtr>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <byte[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <sbyte[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <short[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ushort[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <int[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <uint[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <long[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ulong[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <float[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <double[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <IntPtr[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <UIntPtr[]>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerReturnValueLength <int>() }); yield return(new[] { CodeSnippets.GenericCollectionWithCustomElementMarshalling }); yield return(new[] { CodeSnippets.CollectionsOfCollectionsStress }); }
public static IEnumerable <object[]> CodeSnippetsToCompile() { // Not LibraryImportAttribute yield return(new object[] { CodeSnippets.UserDefinedPrefixedAttributes, 0, 3 }); // No explicit marshalling for char or string yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <char>(), 5, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <string>(), 5, 0 }); yield return(new object[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <char>(), 5, 0 }); yield return(new object[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <string>(), 5, 0 }); // No explicit marshaling for bool yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <bool>(), 5, 0 }); yield return(new object[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <bool>(), 5, 0 }); // Unsupported StringMarshalling configuration yield return(new object[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Utf8), 6, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Custom), 7, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Custom), 7, 0 }); // Unsupported UnmanagedType yield return(new object[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.I1), 5, 0 }); yield return(new object[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.U1), 5, 0 }); yield return(new object[] { CodeSnippets.MarshalAsParametersAndModifiers <int[]>(UnmanagedType.SafeArray), 10, 0 }); // Unsupported MarshalAsAttribute usage // * UnmanagedType.CustomMarshaler, MarshalTypeRef, MarshalType, MarshalCookie yield return(new object[] { CodeSnippets.MarshalAsCustomMarshalerOnTypes, 16, 0 }); // Unsupported [In, Out] attributes usage // Blittable array yield return(new object[] { CodeSnippets.ByValueParameterWithModifier <int[]>("Out"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier <int[]>("In, Out"), 1, 0 }); // By ref with [In, Out] attributes yield return(new object[] { CodeSnippets.ByValueParameterWithModifier("in int", "In"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier("ref int", "In"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier("ref int", "In, Out"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier("out int", "Out"), 1, 0 }); // By value non-array with [In, Out] attributes yield return(new object[] { CodeSnippets.ByValueParameterWithModifier <byte>("In"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier <byte>("Out"), 1, 0 }); yield return(new object[] { CodeSnippets.ByValueParameterWithModifier <byte>("In, Out"), 1, 0 }); // LCIDConversion yield return(new object[] { CodeSnippets.LCIDConversionAttribute, 1, 0 }); // No size information for array marshalling from unmanaged to managed // * return, out, ref yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <byte[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <sbyte[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <short[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <ushort[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <char[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <string[]>(CodeSnippets.DisableRuntimeMarshalling), 5, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <int[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <uint[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <long[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <ulong[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <float[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <double[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <bool[]>(CodeSnippets.DisableRuntimeMarshalling), 5, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <IntPtr[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); yield return(new object[] { CodeSnippets.BasicParametersAndModifiers <UIntPtr[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 }); // Collection with non-integer size param yield return(new object[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <float>(isByRef: false), 1, 0 }); yield return(new object[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <double>(isByRef: false), 1, 0 }); yield return(new object[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <bool>(isByRef: false), 2, 0 }); yield return(new object[] { CodeSnippets.MarshalUsingArrayParameterWithSizeParam <float>(isByRef: false), 1, 0 }); yield return(new object[] { CodeSnippets.MarshalUsingArrayParameterWithSizeParam <double>(isByRef: false), 1, 0 }); yield return(new object[] { CodeSnippets.MarshalUsingArrayParameterWithSizeParam <bool>(isByRef: false), 2, 0 }); // Custom type marshalling with invalid members yield return(new object[] { CodeSnippets.CustomStructMarshallingByRefValueProperty, 3, 0 }); yield return(new object[] { CodeSnippets.CustomStructMarshallingManagedToNativeOnlyOutParameter, 1, 0 }); yield return(new object[] { CodeSnippets.CustomStructMarshallingManagedToNativeOnlyReturnValue, 1, 0 }); yield return(new object[] { CodeSnippets.CustomStructMarshallingNativeToManagedOnlyInParameter, 1, 0 }); yield return(new object[] { CodeSnippets.CustomStructMarshallingStackallocOnlyRefParameter, 1, 0 }); // Abstract SafeHandle type by reference yield return(new object[] { CodeSnippets.BasicParameterWithByRefModifier("ref", "System.Runtime.InteropServices.SafeHandle"), 1, 0 }); // Collection with constant and element size parameter yield return(new object[] { CodeSnippets.MarshalUsingCollectionWithConstantAndElementCount, 2, 0 }); // Collection with null element size parameter name yield return(new object[] { CodeSnippets.MarshalUsingCollectionWithNullElementName, 2, 0 }); // Generic collection marshaller has different arity than collection. yield return(new object[] { CodeSnippets.GenericCollectionMarshallingArityMismatch, 2, 0 }); yield return(new object[] { CodeSnippets.MarshalAsAndMarshalUsingOnReturnValue, 2, 0 }); yield return(new object[] { CodeSnippets.GenericCollectionWithCustomElementMarshallingDuplicateElementIndirectionLevel, 2, 0 }); yield return(new object[] { CodeSnippets.GenericCollectionWithCustomElementMarshallingUnusedElementIndirectionLevel, 1, 0 }); yield return(new object[] { CodeSnippets.RecursiveCountElementNameOnReturnValue, 2, 0 }); yield return(new object[] { CodeSnippets.RecursiveCountElementNameOnParameter, 2, 0 }); yield return(new object[] { CodeSnippets.MutuallyRecursiveCountElementNameOnParameter, 4, 0 }); yield return(new object[] { CodeSnippets.MutuallyRecursiveSizeParamIndexOnParameter, 4, 0 }); // Ref returns yield return(new object[] { CodeSnippets.RefReturn("int"), 2, 2 }); }
public static IEnumerable <object[]> CustomCollections() { // Custom collection marshalling yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValue <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueCallerAllocatedBuffer <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.ByValueWithPinning <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.ByValue <UIntPtr>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <byte[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <sbyte[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <short[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ushort[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <int[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <uint[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <long[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ulong[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <float[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <double[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <IntPtr[]>() }); yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <UIntPtr[]>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.DefaultMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.CustomMarshallerReturnValueLength <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.NativeToManagedOnlyOutParameter <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.NativeToManagedOnlyReturnValue <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling.Stateless.NestedMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.DefaultMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <byte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <sbyte>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <short>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <ushort>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <uint>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <long>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <ulong>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <float>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <double>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <IntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerParametersAndModifiers <UIntPtr>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.CustomMarshallerReturnValueLength <int>() }); yield return(new[] { CodeSnippets.CustomCollectionMarshalling_V1.GenericCollectionWithCustomElementMarshalling }); yield return(new[] { CodeSnippets.CollectionsOfCollectionsStress }); }