11package typeProviders
22
3+ import com.intellij.execution.configurations.GeneralCommandLine
34import com.jetbrains.rd.platform.util.lifetime
4- import com.jetbrains.rd.util.lifetime.Lifetime
55import com.jetbrains.rdclient.testFramework.waitForDaemon
66import com.jetbrains.rdclient.util.idea.waitAndPump
7+ import com.jetbrains.rider.NetCoreRuntime
78import com.jetbrains.rider.daemon.util.hasErrors
89import com.jetbrains.rider.plugins.fsharp.rdFSharpModel
910import com.jetbrains.rider.projectView.solution
11+ import com.jetbrains.rider.projectView.solutionDirectoryPath
1012import com.jetbrains.rider.test.annotations.TestEnvironment
11- import com.jetbrains.rider.test.asserts.shouldBeFalse
12- import com.jetbrains.rider.test.asserts.shouldBeNull
13- import com.jetbrains.rider.test.asserts.shouldNotBeNull
13+ import com.jetbrains.rider.test.asserts.*
1414import com.jetbrains.rider.test.base.BaseTestWithSolution
1515import com.jetbrains.rider.test.enums.CoreVersion
1616import com.jetbrains.rider.test.enums.ToolsetVersion
17- import com.jetbrains.rider.test.scriptingApi.callAction
18- import com.jetbrains.rider.test.scriptingApi.markupAdapter
19- import com.jetbrains.rider.test.scriptingApi.withOpenedEditor
17+ import com.jetbrains.rider.test.scriptingApi.*
2018import org.testng.annotations.Test
2119import withTypeProviders
2220import java.time.Duration
@@ -28,6 +26,7 @@ class TypeProvidersActionsTest : BaseTestWithSolution() {
2826 override val restoreNuGetPackages = true
2927 private val sourceFile = " TypeProviderLibrary/Caches.fs"
3028 private val rdFcsHost get() = project.solution.rdFSharpModel.fsharpTestHost
29+ private val restartTypeProvidersAction = " Rider.Plugins.FSharp.RestartTypeProviders"
3130
3231 private fun waitForTypeProviders () {
3332 waitAndPump(project.lifetime, { rdFcsHost.typeProvidersRuntimeVersion.sync(Unit ) != null }, Duration .ofSeconds(60000 ))
@@ -44,11 +43,56 @@ class TypeProvidersActionsTest : BaseTestWithSolution() {
4443 rdFcsHost.killTypeProvidersProcess.sync(Unit )
4544 rdFcsHost.typeProvidersRuntimeVersion.sync(Unit ).shouldBeNull()
4645
47- callAction(" Rider.Plugins.FSharp.RestartTypeProviders " )
46+ callAction(restartTypeProvidersAction )
4847 waitForTypeProviders()
4948 waitForDaemon()
5049 markupAdapter.hasErrors.shouldBeFalse()
5150 }
5251 }
5352 }
53+
54+ @Test
55+ @TestEnvironment(solution = " LemonadeProvider" )
56+ fun rebuildTypeProvider () {
57+ val lemonadeProviderProject = " ${project.solutionDirectoryPath} /LemonadeProvider.DesignTime/LemonadeProvider.DesignTime.fsproj"
58+ val sourceFileToCheck = " LemonadeProviderConsumer/Library.fs"
59+
60+ withTypeProviders(true ) {
61+
62+ GeneralCommandLine ()
63+ .withWorkDirectory(project.solutionDirectoryPath.toString())
64+ .withExePath(NetCoreRuntime .cliPath.value)
65+ .withParameters(" tool" , " restore" )
66+ .createProcess()
67+ .waitFor()
68+ .shouldBe(0 )
69+
70+ buildSelectedProjectsWithReSharperBuild(listOf (lemonadeProviderProject), ignoreReferencesResolve = true )
71+
72+ withOpenedEditor(project, sourceFileToCheck) {
73+ waitForDaemon()
74+ rdFcsHost.typeProvidersRuntimeVersion.sync(Unit ).shouldNotBeNull()
75+ markupAdapter.hasErrors.shouldBeFalse()
76+ }
77+
78+ withOpenedEditor(project, " LemonadeProvider.DesignTime/LemonadeProvider.DesignTime.fs" ) {
79+ // change "Drink" -> "Drink1"
80+ typeFromOffset(" 1" , 496 )
81+ }
82+
83+ buildSelectedProjectsWithReSharperBuild(project, listOf (lemonadeProviderProject))
84+
85+ withOpenedEditor(project, sourceFileToCheck) {
86+ callAction(restartTypeProvidersAction)
87+ waitForTypeProviders()
88+ waitForDaemon()
89+ markupAdapter.hasErrors.shouldBeTrue()
90+
91+ // change "Drink" -> "Drink1"
92+ typeFromOffset(" 1" , 86 )
93+ waitForDaemon()
94+ markupAdapter.hasErrors.shouldBeFalse()
95+ }
96+ }
97+ }
5498}
0 commit comments