Skip to content

Commit 8a3e726

Browse files
committed
add base test
1 parent 2d99868 commit 8a3e726

File tree

5 files changed

+64
-7
lines changed

5 files changed

+64
-7
lines changed

ReSharper.FSharp/src/FSharp.Common/src/Shim/TypeProviders/ExtensionTypingProviderShim.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type IProxyExtensionTypingProvider =
2323

2424
abstract RuntimeVersion: unit -> string
2525
abstract DumpTypeProvidersProcess: unit -> string
26+
abstract TerminateConnection: unit -> unit
2627

2728
[<SolutionComponent>]
2829
type ExtensionTypingProviderShim(solution: ISolution, toolset: ISolutionToolset,
@@ -131,5 +132,4 @@ type ExtensionTypingProviderShim(solution: ISolution, toolset: ISolutionToolset,
131132

132133
$"{inProcessDump}\n\n{outOfProcessDump}"
133134

134-
interface IDisposable with
135-
member this.Dispose() = terminateConnection ()
135+
member this.TerminateConnection() = terminateConnection()

ReSharper.FSharp/src/FSharp.TypeProviders.Host/src/TypeProvidersLoader.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ public class TypeProvidersLoader : ITypeProvidersLoader
2626
private readonly ILogger myLogger;
2727
private readonly Dictionary<string, string> myShadowCopyMapping = new Dictionary<string, string>();
2828

29-
public TypeProvidersLoader(ILogger logger)
30-
{
31-
myLogger = logger;
32-
}
29+
public TypeProvidersLoader(ILogger logger) => myLogger = logger;
3330

3431
private readonly FSharpFunc<TypeProviderError, Unit> myLogError =
3532
FSharpFunc<TypeProviderError, Unit>.FromConverter(e =>
@@ -56,7 +53,8 @@ public IEnumerable<ITypeProvider> InstantiateTypeProvidersOfAssembly(
5653
var systemRuntimeAssemblyVersion = Version.Parse(parameters.SystemRuntimeAssemblyVersion);
5754
var compilerToolsPath = ListModule.OfSeq(parameters.CompilerToolsPath);
5855

59-
// todo: comment
56+
// We assume that to check the type provider, its developer will reference the type provider design-time assembly in the project.
57+
// In this case, RunTimeAssemblyFileName will be the same as DesignTimeAssemblyNameString.
6058
var designTimeAssembly = parameters.ShadowCopyDesignTimeAssembly
6159
? GetAssemblyShadowCopy(parameters.RunTimeAssemblyFileName)
6260
: parameters.DesignTimeAssemblyNameString;

ReSharper.FSharp/test/src/FSharp.Tests.Host/FSharpTestHost.fs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ type FSharpTestHost(lifetime: Lifetime, solution: ISolution, checkerService: Fcs
5353
let dumpTypeProvidersProcess _ =
5454
solution.GetComponent<IProxyExtensionTypingProvider>().DumpTypeProvidersProcess()
5555

56+
let killTypeProvidersProcess _ =
57+
solution.GetComponent<IProxyExtensionTypingProvider>().TerminateConnection()
58+
JetBrains.Core.Unit.Instance
59+
5660
do
5761
let fsTestHost = solution.RdFSharpModel().FsharpTestHost
5862

@@ -69,3 +73,4 @@ type FSharpTestHost(lifetime: Lifetime, solution: ISolution, checkerService: Fcs
6973
fsTestHost.DumpSingleProjectLocalReferences.Set(dumpSingleProjectLocalReferences)
7074
fsTestHost.TypeProvidersRuntimeVersion.Set(typeProvidersRuntimeVersion)
7175
fsTestHost.DumpTypeProvidersProcess.Set(dumpTypeProvidersProcess)
76+
fsTestHost.KillTypeProvidersProcess.Set(killTypeProvidersProcess)

rider-fsharp/protocol/src/kotlin/model/RdFSharpModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ object RdFSharpModel : Ext(SolutionModel.Solution) {
5151
call("dumpSingleProjectLocalReferences", void, immutableList(string))
5252
call("typeProvidersRuntimeVersion", void, string.nullable)
5353
call("dumpTypeProvidersProcess", void, string)
54+
call("killTypeProvidersProcess", void, void)
5455
}
5556

5657
private val RdFSharpTypeProvidersHost = aggregatedef("RdFSharpTypeProvidersHost") {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package typeProviders
2+
3+
import com.jetbrains.rd.util.lifetime.Lifetime
4+
import com.jetbrains.rdclient.testFramework.waitForDaemon
5+
import com.jetbrains.rdclient.util.idea.waitAndPump
6+
import com.jetbrains.rider.daemon.util.hasErrors
7+
import com.jetbrains.rider.plugins.fsharp.rdFSharpModel
8+
import com.jetbrains.rider.projectView.solution
9+
import com.jetbrains.rider.test.annotations.TestEnvironment
10+
import com.jetbrains.rider.test.asserts.shouldBeFalse
11+
import com.jetbrains.rider.test.asserts.shouldBeNull
12+
import com.jetbrains.rider.test.asserts.shouldNotBeNull
13+
import com.jetbrains.rider.test.base.BaseTestWithSolution
14+
import com.jetbrains.rider.test.enums.CoreVersion
15+
import com.jetbrains.rider.test.enums.ToolsetVersion
16+
import com.jetbrains.rider.test.scriptingApi.callAction
17+
import com.jetbrains.rider.test.scriptingApi.markupAdapter
18+
import com.jetbrains.rider.test.scriptingApi.withOpenedEditor
19+
import org.testng.annotations.Test
20+
import withTypeProviders
21+
import java.time.Duration
22+
23+
@Test
24+
@TestEnvironment(toolset = ToolsetVersion.TOOLSET_16, coreVersion = CoreVersion.DOT_NET_CORE_3_1)
25+
class TypeProvidersActionsTest : BaseTestWithSolution() {
26+
override fun getSolutionDirectoryName() = "TypeProviderLibrary"
27+
override val restoreNuGetPackages = true
28+
private val sourceFile = "TypeProviderLibrary/Caches.fs"
29+
private val rdFcsHost get() = project.solution.rdFSharpModel.fsharpTestHost
30+
31+
private fun waitForTypeProviders() {
32+
waitAndPump(Lifetime.Eternal, { rdFcsHost.typeProvidersRuntimeVersion.sync(Unit) != null }, Duration.ofSeconds(60000))
33+
}
34+
35+
@Test
36+
fun restartTypeProviders() {
37+
withTypeProviders {
38+
withOpenedEditor(project, sourceFile) {
39+
waitForDaemon()
40+
rdFcsHost.typeProvidersRuntimeVersion.sync(Unit).shouldNotBeNull()
41+
markupAdapter.hasErrors.shouldBeFalse()
42+
43+
rdFcsHost.killTypeProvidersProcess.sync(Unit)
44+
rdFcsHost.typeProvidersRuntimeVersion.sync(Unit).shouldBeNull()
45+
46+
callAction("Rider.Plugins.FSharp.RestartTypeProviders")
47+
waitForTypeProviders()
48+
waitForDaemon()
49+
markupAdapter.hasErrors.shouldBeFalse()
50+
}
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)