@@ -18,7 +18,7 @@ open Xunit
18
18
#nowarn " 760" // IDisposable needs new
19
19
20
20
[<TypeProvider>]
21
- type ErasingProvider ( config : TypeProviderConfig ) as this =
21
+ type ErasingProvider ( config : TypeProviderConfig , hasBigInt : bool ) as this =
22
22
inherit TypeProviderForNamespaces ( config)
23
23
24
24
let ns = " StaticProperty.Provided"
@@ -27,12 +27,13 @@ type ErasingProvider (config : TypeProviderConfig) as this =
27
27
let createTypes () =
28
28
let myType = ProvidedTypeDefinition( asm, ns, " MyType" , Some typeof< obj>)
29
29
let myStaticGetterProp = ProvidedProperty( " MyStaticGetterProperty" , typeof< string list>, isStatic = true , getterCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>))
30
+ let myStaticGetterProp2 = ProvidedProperty( " MyStaticGetterProperty2" , ( if hasBigInt then typeof< bigint> else typeof< int>), isStatic = true , getterCode = ( fun _args -> if hasBigInt then <@@ 34 L @@> else <@@ 34 @@>))
30
31
let myStaticSetterProp = ProvidedProperty( " MyStaticSetterProperty" , typeof< string list>, isStatic = true , getterCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>), setterCode = ( fun _args -> <@@ () @@>))
31
32
let myStaticMethod = ProvidedMethod( " MyStaticMethod" , [ ProvidedParameter( " paramName" , typeof< string list>) ], typeof< string list>, isStatic = true , invokeCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>))
32
33
let myGetterProp = ProvidedProperty( " MyGetterProperty" , typeof< string list>, getterCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>))
33
34
let mySetterProp = ProvidedProperty( " MySetterProperty" , typeof< string list>, getterCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>), setterCode = ( fun _args -> <@@ () @@>))
34
35
let myMethod = ProvidedMethod( " MyMethod" , [ ProvidedParameter( " paramName" , typeof< string list>) ], typeof< string list>, invokeCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>))
35
- myType.AddMembers [ myStaticGetterProp; myStaticSetterProp; myGetterProp; mySetterProp]
36
+ myType.AddMembers [ myStaticGetterProp; myStaticGetterProp2 ; myStaticSetterProp; myGetterProp; mySetterProp]
36
37
myType.AddMembers [ myStaticMethod; myMethod ]
37
38
38
39
[ myType]
@@ -72,7 +73,7 @@ type ErasingProviderWithStaticParams (config : TypeProviderConfig) as this =
72
73
let ns = " StaticProperty.Provided"
73
74
let asm = Assembly.GetExecutingAssembly()
74
75
75
- let createType ( typeName , _n : int ) =
76
+ let createType ( typeName , _n : int , _dayOfWeekInt : int ) =
76
77
let myType = ProvidedTypeDefinition( asm, ns, typeName, Some typeof< obj>)
77
78
let myProp = ProvidedProperty( " MyGetterProperty" , typeof< string list>, isStatic = true , getterCode = ( fun _args -> <@@ Set.ofList [ " Hello world" ] @@>))
78
79
myType.AddMember( myProp)
@@ -84,8 +85,8 @@ type ErasingProviderWithStaticParams (config : TypeProviderConfig) as this =
84
85
85
86
do
86
87
let myType = ProvidedTypeDefinition( asm, ns, " MyType" , Some typeof< obj>)
87
- let parameters = [ ProvidedStaticParameter( " Count" , typeof< int>) ]
88
- myType.DefineStaticParameters( parameters, ( fun typeName args -> createType( typeName, args.[ 0 ] :?> int)))
88
+ let parameters = [ ProvidedStaticParameter( " Count" , typeof< int>); ProvidedStaticParameter ( " Day " , typeof < System.DayOfWeek >) ]
89
+ myType.DefineStaticParameters( parameters, ( fun typeName args -> createType( typeName, ( args.[ 0 ] :?> int), ( args .[ 1 ] :?> int ) )))
89
90
90
91
this.AddNamespace( ns, [ myType])
91
92
@@ -97,15 +98,15 @@ let testCrossTargeting (refs: string list) provider args =
97
98
98
99
[<Fact>]
99
100
let ``ErasingProvider generates for .NET 4.5 F # 3.1 correctly`` () : unit =
100
- let res = testCrossTargeting ( Targets.DotNet45FSharp31Refs()) ( fun args -> new ErasingProvider( args)) [| |]
101
+ let res = testCrossTargeting ( Targets.DotNet45FSharp31Refs()) ( fun args -> new ErasingProvider( args, true )) [| |]
101
102
Assert.False( res.Contains " [FSharp.Core, Version=3.259.3.1" )
102
103
Assert.True( res.Contains " [FSharp.Core, Version=4.3.1.0" )
103
104
Assert.False( res.Contains " [FSharp.Core, Version=4.4.0.0" )
104
105
105
106
[<Fact>]
106
107
let ``ErasingProvider generates for .NET 4.5 F # 4.0 correctly`` () : unit =
107
108
if ( try File.Exists ( Targets.FSharpCore40Ref()) with _ -> false ) then
108
- let res = testCrossTargeting ( Targets.DotNet45FSharp40Refs()) ( fun args -> new ErasingProvider( args)) [| |]
109
+ let res = testCrossTargeting ( Targets.DotNet45FSharp40Refs()) ( fun args -> new ErasingProvider( args, true )) [| |]
109
110
Assert.False( res.Contains " [FSharp.Core, Version=3.259.3.1" )
110
111
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
111
112
Assert.True( res.Contains " [FSharp.Core, Version=4.4.0.0" )
@@ -115,15 +116,15 @@ let ``ErasingProvider generates for .NET 4.5 F# 4.0 correctly``() : unit =
115
116
[<Fact>]
116
117
let ``ErasingProvider generates for Portable Profile 259 F # 3.1 correctly`` () : unit =
117
118
if Targets.hasPortable259Assemblies() then
118
- let res = testCrossTargeting ( Targets.Portable259FSharp31Refs()) ( fun args -> new ErasingProvider( args)) [| |]
119
+ let res = testCrossTargeting ( Targets.Portable259FSharp31Refs()) ( fun args -> new ErasingProvider( args, false )) [| |]
119
120
Assert.True( res.Contains " [FSharp.Core, Version=3.259.3.1" )
120
121
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
121
122
Assert.False( res.Contains " [FSharp.Core, Version=4.4.4.0" )
122
123
123
124
[<Fact>]
124
125
let ``ErasingProvider generates for Portable Profile 259 F # 4.0 correctly`` () : unit =
125
126
if Targets.hasPortable259Assemblies() then
126
- let res = testCrossTargeting ( Targets.Portable259FSharp40Refs()) ( fun args -> new ErasingProvider( args)) [| |]
127
+ let res = testCrossTargeting ( Targets.Portable259FSharp40Refs()) ( fun args -> new ErasingProvider( args, false )) [| |]
127
128
Assert.True( res.Contains " [FSharp.Core, Version=3.259.4.0" )
128
129
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
129
130
Assert.False( res.Contains " [FSharp.Core, Version=4.4.4.0" )
@@ -132,15 +133,15 @@ let ``ErasingProvider generates for Portable Profile 259 F# 4.0 correctly``() :
132
133
[<Fact>]
133
134
let ``ErasingProvider generates for Portable Profile 7 F # 4.0 correctly`` () : unit =
134
135
if Targets.hasPortable7Assemblies() then
135
- let res = testCrossTargeting ( Targets.Portable7FSharp40Refs()) ( fun args -> new ErasingProvider( args)) [| |]
136
+ let res = testCrossTargeting ( Targets.Portable7FSharp40Refs()) ( fun args -> new ErasingProvider( args, false )) [| |]
136
137
Assert.True( res.Contains " [FSharp.Core, Version=3.7.4.0" )
137
138
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
138
139
Assert.False( res.Contains " [FSharp.Core, Version=4.4.4.0" )
139
140
140
141
[<Fact>]
141
142
let ``ErasingProviderWithStaticParams generates for .NET 4.5 F # 4.0 correctly`` () : unit =
142
143
if ( try File.Exists ( Targets.FSharpCore40Ref()) with _ -> false ) then
143
- let res = testCrossTargeting ( Targets.DotNet45FSharp40Refs()) ( fun args -> new ErasingProviderWithStaticParams( args)) [| box 3 |]
144
+ let res = testCrossTargeting ( Targets.DotNet45FSharp40Refs()) ( fun args -> new ErasingProviderWithStaticParams( args)) [| box 3 ; box 4 |]
144
145
printfn " res = %s " res
145
146
Assert.False( res.Contains " [FSharp.Core, Version=3.259.3.1" )
146
147
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
@@ -151,7 +152,7 @@ let ``ErasingProviderWithStaticParams generates for .NET 4.5 F# 4.0 correctly``(
151
152
[<Fact>]
152
153
let ``ErasingProviderWithStaticParams generates for Portable Profile 7 F # 4.0 correctly`` () : unit =
153
154
if Targets.hasPortable7Assemblies() then
154
- let res = testCrossTargeting ( Targets.Portable7FSharp40Refs()) ( fun args -> new ErasingProviderWithStaticParams( args)) [| box 3 |]
155
+ let res = testCrossTargeting ( Targets.Portable7FSharp40Refs()) ( fun args -> new ErasingProviderWithStaticParams( args)) [| box 3 ; box 4 |]
155
156
printfn " res = %s " res
156
157
Assert.True( res.Contains " [FSharp.Core, Version=3.7.4.0" )
157
158
Assert.False( res.Contains " [FSharp.Core, Version=4.3.1.0" )
0 commit comments