fsprojects / FSharp.TypeProviders.SDK

The SDK for creating F# type providers
https://fsprojects.github.io/FSharp.TypeProviders.SDK/
MIT License
298 stars 94 forks source link

Add failing test cases for generative interfaces and abstract classes #211 #213

Closed panesofglass closed 4 years ago

panesofglass commented 6 years ago

Add test cases for #211:

sergey-tihon commented 6 years ago

There is a small chance that we have to manually set attributes like hidebysig,newslot, auto, ansi

2018-03-15_0950
dsyme commented 6 years ago

@panesofglass These are good tests, thanks. I think I can look after #212 from here and get these tests passing

panesofglass commented 6 years ago

Thank you, @dsyme!

dsyme commented 6 years ago

@panesofglass I know I've promised you to get to this, but I won't be able to get to it until the perf problem in #220 is fixed, which may take me a while

7sharp9 commented 6 years ago

Whats the current issue with generated interfaces?

panesofglass commented 5 years ago

@7sharp9 it seems the metadata is not currently generated correctly.

panesofglass commented 5 years ago

I just updated and tried again. This seems to be reporting better than what I recall:

[xUnit.net 00:00:04.4116552]     FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.Abstract classes are generated correctly [FAIL]
[xUnit.net 00:00:04.4329294]     FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.Interfaces are generated correctly [FAIL]
Failed   FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.Abstract classes are generated correctly
Error Message:
 System.Exception : The provided method is marked as an abstract method; therefore, it should not define an implementation.
Stack Trace:
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.Compile@14379-14.Invoke(ILTypeBuilder tb, FSharpOption`1 ptdT) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14481
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.typeMembers@14214(AssemblyCompiler this, FSharpFunc`2 f, ProvidedTypeDefinition ptd) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14216
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.typeMembers@14214(AssemblyCompiler this, FSharpFunc`2 f, ProvidedTypeDefinition ptd) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14218
   at ProviderImplementation.ProvidedTypes.AssemblyCompiler.iterateTypes[a](FSharpFunc`2 f, IEnumerable`1 providedTypeDefinitions) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14228
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.Compile@14379-13.Invoke(IEnumerable`1 providedTypeDefinitions) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14379
   at ProviderImplementation.ProvidedTypes.AssemblyCompiler.Compile(Boolean isHostedExecution) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14263
   at ProviderImplementation.ProvidedTypes.TypeProviderForNamespaces.Microsoft-FSharp-Core-CompilerServices-ITypeProvider-GetGeneratedAssemblyContents(Assembly assembly) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14794
   at FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.testProvidedAssembly(FSharpFunc`2 test) in C:\Code\FSharp.TypeProviders.SDK\tests\GenerativeAbstractClassesTests.fs:line 81
Failed   FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.Interfaces are generated correctly
Error Message:
 System.Exception : The provided type definition is an interface; therefore, it should not define an implementation for its members.
Stack Trace:
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.Compile@14379-14.Invoke(ILTypeBuilder tb, FSharpOption`1 ptdT) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14479
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.typeMembers@14214(AssemblyCompiler this, FSharpFunc`2 f, ProvidedTypeDefinition ptd) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14216
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.typeMembers@14214(AssemblyCompiler this, FSharpFunc`2 f, ProvidedTypeDefinition ptd) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14218
   at ProviderImplementation.ProvidedTypes.AssemblyCompiler.iterateTypes[a](FSharpFunc`2 f, IEnumerable`1 providedTypeDefinitions) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14228
   at <StartupCode$FSharp-TypeProviders-SDK-Tests>.$ProvidedTypes.Compile@14379-13.Invoke(IEnumerable`1 providedTypeDefinitions) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14379
   at ProviderImplementation.ProvidedTypes.AssemblyCompiler.Compile(Boolean isHostedExecution) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14263
   at ProviderImplementation.ProvidedTypes.TypeProviderForNamespaces.Microsoft-FSharp-Core-CompilerServices-ITypeProvider-GetGeneratedAssemblyContents(Assembly assembly) in C:\Code\FSharp.TypeProviders.SDK\src\ProvidedTypes.fs:line 14794
   at FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.testProvidedAssembly(FSharpFunc`2 test) in C:\Code\FSharp.TypeProviders.SDK\tests\GenerativeInterfacesTests.fs:line 71

Total tests: 39. Passed: 37. Failed: 2. Skipped: 0.
Test Run Failed.
Test execution time: 9.4491 Seconds
Running build failed.
Error:
System.Exception: Test failed on "test" "tests/FSharp.TypeProviders.SDK.Tests.fsproj" --configuration Release --framework net461
   at Fake.DotNetCli.Test@298-3.Invoke(String message) in D:\code\fake\src\app\FakeLib\DotNetCLIHelper.fs:line 298
   at Fake.DotNetCli.Test(FSharpFunc`2 setTestParams) in D:\code\fake\src\app\FakeLib\DotNetCLIHelper.fs:line 298
   at FSI_0005.Build.clo@116-19.Invoke(Unit _arg4) in C:\Code\FSharp.TypeProviders.SDK\build.fsx:line 135
   at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in D:\code\fake\src\app\FakeLib\TargetHelper.fs:line 626
panesofglass commented 5 years ago

After updating to leverage optional invokeCode and fixing a minor issue with correctly inferring requirement for virtual members, the failing tests produce:

[xUnit.net 00:00:12.8257338]     FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.Interfaces are generated correctly [FAIL]
[xUnit.net 00:00:12.8981477]     FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.Abstract classes are generated correctly [FAIL]
Failed   FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.Interfaces are generated correctly
Error Message:
 System.TypeLoadException : Failure has occurred while loading a type.
Stack Trace:
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at System.Reflection.Assembly.get_ExportedTypes()
   at FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.testProvidedAssembly(FSharpFunc`2 test) in C:\Code\FSharp.TypeProviders.SDK\tests\GenerativeInterfacesTests.fs:line 73
Failed   FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.Abstract classes are generated correctly
Error Message:
 System.TypeLoadException : Abstract method with non-zero RVA.
Stack Trace:
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at System.Reflection.Assembly.get_ExportedTypes()
   at FSharp.TypeProviders.SDK.Tests.GenerativeAbstractClassesTests.testProvidedAssembly(FSharpFunc`2 test) in C:\Code\FSharp.TypeProviders.SDK\tests\GenerativeAbstractClassesTests.fs:line 84
panesofglass commented 5 years ago

Does this mean I do need to provide an implementation?

sergey-tihon commented 5 years ago

We were managed to drive code to the state when all test fails with single error

Error Message:
   System.TypeLoadException : Abstract method with non-zero RVA.
Stack Trace:
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at System.Reflection.Assembly.get_ExportedTypes()
   at at FSharp.TypeProviders.SDK.Tests.GenerativeInterfacesTests.testProvidedAssembly(FSharpFunc`2 test) in /home/travis/build/fsprojects/FSharp.TypeProviders.SDK/tests/GenerativeInterfacesTests.fs:line 70

and we not sure what's exactly going wrong here. It look like code emitted incorrectly... also there are some parts of SDK wrapped in #if EMIT_FIELD_DATA block that does not run now...

@dsyme we appreciate your guidance here, thx

sergey-tihon commented 4 years ago

Merged in #331 and fixed there