Skip to content

Commit b55b648

Browse files
committed
add tests
1 parent fe561ae commit b55b648

File tree

15 files changed

+719
-15
lines changed

15 files changed

+719
-15
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ type IProxyExtensionTypingProvider =
3030
type ExtensionTypingProviderShim(solution: ISolution, toolset: ISolutionToolset,
3131
experimentalFeatures: FSharpExperimentalFeaturesProvider,
3232
checkerService: FcsCheckerService, daemon: IDaemon, psiFiles: IPsiFiles,
33-
scheduler: ISolutionLoadTasksScheduler,
3433
typeProvidersLoadersFactory: TypeProvidersExternalProcessFactory) as this =
3534
let lifetime = solution.GetLifetime()
3635
let defaultShim = ExtensionTypingProvider

rider-fsharp/src/test/kotlin/Extensions.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,23 @@ fun com.intellij.openapi.editor.Editor.dumpTypeProviders(stream: PrintStream) {
1515
}
1616
}
1717

18-
fun withSetting(project: Project, setting: String, function: () -> Unit) {
19-
TestHost.getInstance(project.protocolHost).setSetting(setting, "true")
18+
fun withSettings(project: Project, settings: List<String>, function: () -> Unit) {
19+
settings.forEach { TestHost.getInstance(project.protocolHost).setSetting(it, "true") }
2020
try {
2121
function()
2222
} finally {
23-
TestHost.getInstance(project.protocolHost).setSetting(setting, "false")
23+
settings.forEach { TestHost.getInstance(project.protocolHost).setSetting(it, "false") }
2424
}
2525
}
2626

27-
fun BaseTestWithSolution.withTypeProviders(function: () -> Unit) {
28-
withSetting(project, "FSharp/FSharpOptions/FSharpExperimentalFeatures/OutOfProcessTypeProviders/@EntryValue", function)
27+
fun BaseTestWithSolution.withTypeProviders(shadowCopyMode: Boolean = false, function: () -> Unit) {
28+
val settings = mutableListOf("FSharp/FSharpOptions/FSharpExperimentalFeatures/OutOfProcessTypeProviders/@EntryValue")
29+
if (shadowCopyMode) settings.add("FSharp/FSharpOptions/FSharpExperimentalFeatures/HostTypeProvidersFromTempFolder/@EntryValue")
30+
withSettings(project, settings, function)
2931
}
3032

3133
fun withEditorConfig(project: Project, function: () -> Unit) {
32-
withSetting(project, "CodeStyle/EditorConfig/EnableEditorConfigSupport", function)
34+
withSettings(project, listOf("CodeStyle/EditorConfig/EnableEditorConfigSupport"), function)
3335
}
3436

3537
fun withCultureInfo(project: Project, culture: String, function: () -> Unit) {

rider-fsharp/src/test/kotlin/typeProviders/TypeProvidersActionsTest.kt

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
package typeProviders
22

3+
import com.intellij.execution.configurations.GeneralCommandLine
34
import com.jetbrains.rd.platform.util.lifetime
4-
import com.jetbrains.rd.util.lifetime.Lifetime
55
import com.jetbrains.rdclient.testFramework.waitForDaemon
66
import com.jetbrains.rdclient.util.idea.waitAndPump
7+
import com.jetbrains.rider.NetCoreRuntime
78
import com.jetbrains.rider.daemon.util.hasErrors
89
import com.jetbrains.rider.plugins.fsharp.rdFSharpModel
910
import com.jetbrains.rider.projectView.solution
11+
import com.jetbrains.rider.projectView.solutionDirectoryPath
1012
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.*
1414
import com.jetbrains.rider.test.base.BaseTestWithSolution
1515
import com.jetbrains.rider.test.enums.CoreVersion
1616
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.*
2018
import org.testng.annotations.Test
2119
import withTypeProviders
2220
import 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
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": 1,
3+
"isRoot": true,
4+
"tools": {
5+
"paket": {
6+
"version": "5.241.5",
7+
"commands": [
8+
"paket"
9+
]
10+
}
11+
}
12+
}

0 commit comments

Comments
 (0)