Skip to content

Commit e50a356

Browse files
committed
add tests for exposed abstract slot signatures
1 parent 86b3242 commit e50a356

File tree

1 file changed

+94
-1
lines changed

1 file changed

+94
-1
lines changed

tests/service/ProjectAnalysisTests.fs

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4595,4 +4595,97 @@ let ``Test project37 typeof and arrays in attribute constructor arguments`` () =
45954595
| _ -> ()
45964596
Project37.wholeProjectResults.AssemblySignature.Attributes
45974597
|> Seq.map (fun a -> a.AttributeType.CompiledName)
4598-
|> Array.ofSeq |> shouldEqual [| "AttrTestAttribute"; "AttrTest2Attribute" |]
4598+
|> Array.ofSeq |> shouldEqual [| "AttrTestAttribute"; "AttrTest2Attribute" |]
4599+
4600+
module Project38 =
4601+
open System.IO
4602+
4603+
let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
4604+
let base2 = Path.GetTempFileName()
4605+
let dllName = Path.ChangeExtension(base2, ".dll")
4606+
let projFileName = Path.ChangeExtension(base2, ".fsproj")
4607+
let fileSource1 = """
4608+
namespace OverrideTests
4609+
4610+
type I<'X> =
4611+
abstract Method : unit -> unit
4612+
abstract Generic : named:'X -> unit
4613+
abstract Generic<'Y> : 'X * 'Y -> unit
4614+
abstract Property : int
4615+
4616+
[<AbstractClass>]
4617+
type B<'Y>() =
4618+
abstract Method : unit -> unit
4619+
abstract Generic : 'Y -> unit
4620+
abstract Property : int
4621+
[<CLIEvent>]
4622+
abstract Event : IEvent<unit>
4623+
4624+
type A<'XX, 'YY>() =
4625+
inherit B<'YY>()
4626+
4627+
let ev = Event<unit>()
4628+
4629+
override this.Method() = ()
4630+
override this.Generic (a: 'YY) = ()
4631+
override this.Property = 0
4632+
[<CLIEvent>]
4633+
override this.Event = ev.Publish
4634+
4635+
member this.NotOverride() = ()
4636+
4637+
interface I<'XX> with
4638+
member this.Method() = ()
4639+
member this.Generic (a: 'XX) = ()
4640+
member this.Generic<'Y> (a: 'XX, b: 'Y) = ()
4641+
member this.Property = 1
4642+
"""
4643+
File.WriteAllText(fileName1, fileSource1)
4644+
let fileNames = [fileName1]
4645+
let args = mkProjectCommandLineArgs (dllName, fileNames)
4646+
let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
4647+
let wholeProjectResults =
4648+
checker.ParseAndCheckProject(options)
4649+
|> Async.RunSynchronously
4650+
4651+
[<Test>]
4652+
let ``Test project38 abstract slot information`` () =
4653+
let printAbstractSignature (s: FSharpAbstractSignature) =
4654+
let printType (t: FSharpType) = (string t).[5 ..]
4655+
let args =
4656+
(s.AbstractArguments |> Seq.concat |> Seq.map (fun a ->
4657+
(match a.Name with Some n -> n + ":" | _ -> "") + printType a.Type) |> String.concat " * ")
4658+
|> function "" -> "()" | a -> a
4659+
let tgen =
4660+
match s.DeclaringTypeGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with
4661+
| "" -> ""
4662+
| g -> " original generics: <" + g + ">"
4663+
let mgen =
4664+
match s.MethodGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with
4665+
| "" -> ""
4666+
| g -> "<" + g + ">"
4667+
"type " + printType s.DeclaringType + tgen + " with member " + s.Name + mgen + " : " + args + " -> " +
4668+
printType s.AbstractReturnType
4669+
4670+
let a2ent = Project38.wholeProjectResults.AssemblySignature.Entities |> Seq.find (fun e -> e.FullName = "OverrideTests.A`2")
4671+
a2ent.MembersFunctionsAndValues |> Seq.map (fun m ->
4672+
m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> Array.ofSeq)
4673+
)
4674+
|> Array.ofSeq
4675+
|> shouldEqual
4676+
[|
4677+
".ctor", [||]
4678+
"Generic", [|"type OverrideTests.B<'YY> original generics: <'Y> with member Generic : 'Y -> Microsoft.FSharp.Core.unit"|]
4679+
"OverrideTests-I`1-Generic", [|"type OverrideTests.I<'XX> original generics: <'X> with member Generic : named:'X -> Microsoft.FSharp.Core.unit"|]
4680+
"OverrideTests-I`1-Generic", [|"type OverrideTests.I<'XX> original generics: <'X> with member Generic<'Y> : 'X * 'Y -> Microsoft.FSharp.Core.unit"|]
4681+
"Method", [|"type OverrideTests.B<'YY> original generics: <'Y> with member Method : () -> Microsoft.FSharp.Core.unit"|]
4682+
"OverrideTests-I`1-Method", [|"type OverrideTests.I<'XX> original generics: <'X> with member Method : () -> Microsoft.FSharp.Core.unit"|]
4683+
"NotOverride", [||]
4684+
"add_Event", [|"type OverrideTests.B<'YY> original generics: <'Y> with member add_Event : Microsoft.FSharp.Control.Handler<Microsoft.FSharp.Core.unit> -> Microsoft.FSharp.Core.unit"|]
4685+
"get_Event", [|"type OverrideTests.B<'YY> with member get_Event : () -> Microsoft.FSharp.Core.unit"|]
4686+
"get_Property", [|"type OverrideTests.B<'YY> original generics: <'Y> with member get_Property : () -> Microsoft.FSharp.Core.int"|]
4687+
"OverrideTests-I`1-get_Property", [|"type OverrideTests.I<'XX> original generics: <'X> with member get_Property : () -> Microsoft.FSharp.Core.int"|]
4688+
"remove_Event", [|"type OverrideTests.B<'YY> original generics: <'Y> with member remove_Event : Microsoft.FSharp.Control.Handler<Microsoft.FSharp.Core.unit> -> Microsoft.FSharp.Core.unit"|]
4689+
"get_Property", [|"type OverrideTests.B<'YY> original generics: <'Y> with member get_Property : () -> Microsoft.FSharp.Core.int"|]
4690+
"get_Event", [|"type OverrideTests.B<'YY> with member get_Event : () -> Microsoft.FSharp.Core.unit"|]
4691+
|]

0 commit comments

Comments
 (0)