1
1
package typeProviders
2
2
3
+ import com.intellij.execution.configurations.GeneralCommandLine
3
4
import com.jetbrains.rd.platform.util.lifetime
4
- import com.jetbrains.rd.util.lifetime.Lifetime
5
5
import com.jetbrains.rdclient.testFramework.waitForDaemon
6
6
import com.jetbrains.rdclient.util.idea.waitAndPump
7
+ import com.jetbrains.rider.NetCoreRuntime
7
8
import com.jetbrains.rider.daemon.util.hasErrors
8
9
import com.jetbrains.rider.plugins.fsharp.rdFSharpModel
9
10
import com.jetbrains.rider.projectView.solution
11
+ import com.jetbrains.rider.projectView.solutionDirectoryPath
10
12
import 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.*
14
14
import com.jetbrains.rider.test.base.BaseTestWithSolution
15
15
import com.jetbrains.rider.test.enums.CoreVersion
16
16
import 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.*
20
18
import org.testng.annotations.Test
21
19
import withTypeProviders
22
20
import java.time.Duration
@@ -28,6 +26,7 @@ class TypeProvidersActionsTest : BaseTestWithSolution() {
28
26
override val restoreNuGetPackages = true
29
27
private val sourceFile = " TypeProviderLibrary/Caches.fs"
30
28
private val rdFcsHost get() = project.solution.rdFSharpModel.fsharpTestHost
29
+ private val restartTypeProvidersAction = " Rider.Plugins.FSharp.RestartTypeProviders"
31
30
32
31
private fun waitForTypeProviders () {
33
32
waitAndPump(project.lifetime, { rdFcsHost.typeProvidersRuntimeVersion.sync(Unit ) != null }, Duration .ofSeconds(60000 ))
@@ -44,11 +43,56 @@ class TypeProvidersActionsTest : BaseTestWithSolution() {
44
43
rdFcsHost.killTypeProvidersProcess.sync(Unit )
45
44
rdFcsHost.typeProvidersRuntimeVersion.sync(Unit ).shouldBeNull()
46
45
47
- callAction(" Rider.Plugins.FSharp.RestartTypeProviders " )
46
+ callAction(restartTypeProvidersAction )
48
47
waitForTypeProviders()
49
48
waitForDaemon()
50
49
markupAdapter.hasErrors.shouldBeFalse()
51
50
}
52
51
}
53
52
}
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
+ }
54
98
}
0 commit comments