diff --git a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs index 50258738045..83474c1ff61 100644 --- a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs @@ -3699,26 +3699,93 @@ let _ = XmlProvider<"13">.GetSample() let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [|fileName1|] - let args = - [| yield! mkProjectCommandLineArgs (dllName, []) - yield @"-r:" + (__SOURCE_DIRECTORY__ ++ ".." ++ "service" ++ "data" ++ "FSharp.Data.dll") - yield @"-r:" + sysLib "System.Xml.Linq" |] - let options = { checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) with SourceFiles = fileNames } -// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core." -[] + // Resolve FSharp.Data via dotnet restore in system temp (outside repo NuGet.Config scope), + // then copy runtime + design-time DLLs side-by-side so the type provider works with --simpleresolution. + let options = lazy ( + let testDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + let stagingDir = Path.Combine(testDir, "FSharp.Data.Staging") + Directory.CreateDirectory(stagingDir) |> ignore + + // Create a temp project OUTSIDE the repo tree to avoid the repo's restricted NuGet.Config + let restoreDir = Path.Combine(Path.GetTempPath(), "fsharp-test-resolve-fsharp-data") + Directory.CreateDirectory(restoreDir) |> ignore + let projContent = """ + netstandard2.0 + +""" + let projPath = Path.Combine(restoreDir, "Resolve.fsproj") + File.WriteAllText(projPath, projContent) + let packagesDir = Path.Combine(restoreDir, "packages") + + let psi = System.Diagnostics.ProcessStartInfo("dotnet", sprintf "restore \"%s\" --packages \"%s\"" projPath packagesDir) + psi.RedirectStandardOutput <- true + psi.RedirectStandardError <- true + psi.UseShellExecute <- false + let p = System.Diagnostics.Process.Start(psi) + let stderr = p.StandardError.ReadToEnd() + let _stdout = p.StandardOutput.ReadToEnd() + p.WaitForExit(60000) |> ignore + if p.ExitCode <> 0 then + failwith (sprintf "dotnet restore failed (exit %d): %s" p.ExitCode stderr) + + // Find FSharp.Data in the restored packages + let fsharpDataDirs = Directory.GetDirectories(packagesDir, "fsharp.data", System.IO.SearchOption.TopDirectoryOnly) + let packageDir = + if fsharpDataDirs.Length > 0 then + let versions = Directory.GetDirectories(fsharpDataDirs.[0]) + if versions.Length > 0 then versions |> Array.sortDescending |> Array.head + else failwith "FSharp.Data package restored but no version directory found" + else failwith (sprintf "FSharp.Data not found in %s" packagesDir) + + // Copy runtime + design-time DLLs into staging root + let libDir = Path.Combine(packageDir, "lib", "netstandard2.0") + if Directory.Exists(libDir) then + for src in Directory.GetFiles(libDir, "*.dll") do + File.Copy(src, Path.Combine(stagingDir, Path.GetFileName(src)), true) + let tpDir = Path.Combine(packageDir, "typeproviders", "fsharp41", "netstandard2.0") + if Directory.Exists(tpDir) then + for src in Directory.GetFiles(tpDir, "*.dll") do + File.Copy(src, Path.Combine(stagingDir, Path.GetFileName(src)), true) + + // Also copy transitive deps (FSharp.Data.*.dll) + let transitivePkgs = ["fsharp.data.csv.core"; "fsharp.data.html.core"; "fsharp.data.http"; "fsharp.data.json.core"; "fsharp.data.runtime.utilities"; "fsharp.data.worldbank.core"; "fsharp.data.xml.core"] + for pkg in transitivePkgs do + let pkgDirs = Directory.GetDirectories(packagesDir, pkg, System.IO.SearchOption.TopDirectoryOnly) + if pkgDirs.Length > 0 then + let versions = Directory.GetDirectories(pkgDirs.[0]) + if versions.Length > 0 then + let latestVersion = versions |> Array.sortDescending |> Array.head + let pkgLib = Path.Combine(latestVersion, "lib", "netstandard2.0") + if Directory.Exists(pkgLib) then + for src in Directory.GetFiles(pkgLib, "*.dll") do + let dest = Path.Combine(stagingDir, Path.GetFileName(src)) + if not (File.Exists(dest)) then + File.Copy(src, dest, true) + + // Build args: standard project args + staged FSharp.Data refs + let stagedRefs = + Directory.GetFiles(stagingDir, "*.dll") + |> Array.map (fun f -> "-r:" + f) + let args = + [| yield! mkProjectCommandLineArgs (dllName, []) + yield! stagedRefs |] + { checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) with SourceFiles = fileNames } + ) + +// Resolved via NuGet at test time - skipped on signed CI +[] let ``Test Project25 whole project errors`` () = - let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate + let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate for e in wholeProjectResults.Diagnostics do printfn "Project25 error: <<<%s>>>" e.Message wholeProjectResults.Diagnostics.Length |> shouldEqual 0 -// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core." -[] +[] let ``Test Project25 symbol uses of type-provided members`` () = - let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate + let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value) |> Async.RunImmediate let allUses = @@ -3729,7 +3796,7 @@ let ``Test Project25 symbol uses of type-provided members`` () = allUses |> shouldEqual [|("FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]); - ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"; "provided"]); + ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"]); ("Microsoft.FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]); ("Microsoft.FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"]); ("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)), @@ -3770,12 +3837,11 @@ let ``Test Project25 symbol uses of type-provided members`` () = usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|] -// ".NET Core SKIPPED: Disabled until FSharp.Data.dll is build for dotnet core.")>] -[] +[] let ``Test Project25 symbol uses of type-provided types`` () = - let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate + let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value) |> Async.RunImmediate let getSampleSymbolUseOpt = @@ -3791,11 +3857,11 @@ let ``Test Project25 symbol uses of type-provided types`` () = usesOfGetSampleSymbol |> shouldEqual [|("file1", ((4, 15), (4, 26))); ("file1", ((10, 8), (10, 19)))|] -[] +[] let ``Test Project25 symbol uses of fully-qualified records`` () = - let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunImmediate + let wholeProjectResults = checker.ParseAndCheckProject(Project25.options.Value) |> Async.RunImmediate let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options.Value) |> Async.RunImmediate let getSampleSymbolUseOpt = diff --git a/tests/service/data/FSharp.Data.DesignTime.dll b/tests/service/data/FSharp.Data.DesignTime.dll deleted file mode 100644 index db2a3317bbc..00000000000 Binary files a/tests/service/data/FSharp.Data.DesignTime.dll and /dev/null differ diff --git a/tests/service/data/FSharp.Data.dll b/tests/service/data/FSharp.Data.dll deleted file mode 100644 index 95b4d8a914b..00000000000 Binary files a/tests/service/data/FSharp.Data.dll and /dev/null differ diff --git a/tests/service/data/sqlite-net-spike/Program.fs b/tests/service/data/sqlite-net-spike/Program.fs deleted file mode 100644 index 7b92f756dd3..00000000000 --- a/tests/service/data/sqlite-net-spike/Program.fs +++ /dev/null @@ -1,49 +0,0 @@ -open System - -open SQLite.Net -open SQLite.Net.Attributes -open SQLite.Net.Platform.Generic - -type Site (url:string) = - let mutable id = new int() - let mutable BD = "" - let mutable site = url - let mutable shown = false - let mutable exemplarcontributor = false - [] [] - member x.ID with get() = id - and set v = id <- v - member x.ExemplarContributor with get() = exemplarcontributor - and set v = exemplarcontributor <- v - member x.Shown with get() = shown - and set v = shown <- v - member x.BreakDown with get() = BD - and set v = BD <- v - [] - member x.Site with get() = site - and set v = site <- v - member x.Url = url - new() = Site "www.google.com" - -[] -type Site2 = - { id : int - visited : string - comment : string } - -type Database (path) = - inherit SQLiteConnection(new SQLitePlatformGeneric(), path) - member x.Setup() = - base.CreateTable() |> ignore - base.CreateTable() |> ignore - -[] -let main argv = - let D = new Database("test.sqlitedb") - D.Setup() |> ignore - - let s = new Site "www.google.com" - D.Insert(s) |> ignore - D.Commit|>ignore - 0 - diff --git a/tests/service/data/sqlite-net-spike/packages.config b/tests/service/data/sqlite-net-spike/packages.config deleted file mode 100644 index 666cb7f0e7b..00000000000 --- a/tests/service/data/sqlite-net-spike/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tests/service/data/sqlite-net-spike/paket.references b/tests/service/data/sqlite-net-spike/paket.references deleted file mode 100644 index 4b717d31d2a..00000000000 --- a/tests/service/data/sqlite-net-spike/paket.references +++ /dev/null @@ -1,2 +0,0 @@ -SQLite.Net.Platform.Generic -SQLite.Net-PCL \ No newline at end of file diff --git a/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj b/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj deleted file mode 100644 index 1b843e45318..00000000000 --- a/tests/service/data/sqlite-net-spike/sqlite-net-spike.fsproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - Debug - x86 - {BE87D723-5EAB-4B69-8F65-5EC072EF9E46} - Exe - sqlitenetspike - sqlite-net-spike - True - v4.5 - 8.0.30703 - 2.0 - - - true - false - bin\Debug - DEBUG - prompt - true - false - x86 - - - false - none - true - bin\Release - prompt - x86 - true - true - - - - - - - ..\..\..\..\packages\Microsoft.Portable.FSharp.Core.10.1.0\lib\profiles\net40\FSharp.Core.dll - false - - - - - - - - - - - - - - - - - ..\..\..\..\packages\SQLite.Net-PCL\lib\net4\SQLite.Net.dll - True - True - - - ..\..\..\..\packages\SQLite.Net-PCL\lib\net4\SQLite.Net.Platform.Win32.dll - True - True - - - - - - - ..\..\..\..\packages\SQLite.Net-PCL\lib\portable-win81+wpa81\SQLite.Net.dll - True - True - - - ..\..\..\..\packages\SQLite.Net-PCL\lib\portable-win81+wpa81\SQLite.Net.Platform.WinRT.dll - True - True - - - - - - - - - ..\..\..\..\packages\SQLite.Net.Platform.Generic\lib\net40\SQLite.Net.Platform.Generic.dll - True - True - - - - - \ No newline at end of file