@@ -196,6 +196,83 @@ System.Console.WriteLine()
196196let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
197197 Assert.IsFalse( triggered, " FSharpCompletionProvider.ShouldTriggerCompletionAux() should not trigger" )
198198
199+ [<Test>]
200+ let ShouldNotTriggerCompletionInOperatorWithDot () =
201+ // Simulate mistyping '|>' as '|.'
202+ let fileContents = """
203+ let f() =
204+ 12.0 |. sqrt
205+ """
206+ let caretPosition = fileContents.IndexOf( " |." )
207+ let documentId = DocumentId.CreateNewId( ProjectId.CreateNewId())
208+ let getInfo () = documentId, filePath, []
209+ let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
210+ Assert.IsFalse( triggered, " FSharpCompletionProvider.ShouldTriggerCompletionAux() should not trigger on operators" )
211+
212+ [<Test>]
213+ let ShouldTriggerCompletionInAttribute () =
214+ let fileContents = """
215+ [<A
216+ module Foo = module end
217+ """
218+ let marker = " A"
219+ let caretPosition = fileContents.IndexOf( marker) + marker.Length
220+ let documentId = DocumentId.CreateNewId( ProjectId.CreateNewId())
221+ let getInfo () = documentId, filePath, []
222+ let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
223+ Assert.IsTrue( triggered, " Completion should trigger on Attributes." )
224+
225+ [<Test>]
226+ let ShouldTriggerCompletionAfterDerefOperator () =
227+ let fileContents = """
228+ let foo = ref 12
229+ printfn "%d " !f
230+ """
231+ let marker = " !f"
232+ let caretPosition = fileContents.IndexOf( marker) + marker.Length
233+ let documentId = DocumentId.CreateNewId( ProjectId.CreateNewId())
234+ let getInfo () = documentId, filePath, []
235+ let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
236+ Assert.IsTrue( triggered, " Completion should trigger after typing an identifier that follows a dereference operator (!)." )
237+
238+ [<Test>]
239+ let ShouldTriggerCompletionAfterAddressOfOperator () =
240+ let fileContents = """
241+ type Point = { mutable X: int; mutable Y: int }
242+ let pnt = { X = 1; Y = 2 }
243+ use ptr = fixed &p
244+ """
245+ let marker = " &p"
246+ let caretPosition = fileContents.IndexOf( marker) + marker.Length
247+ let documentId = DocumentId.CreateNewId( ProjectId.CreateNewId())
248+ let getInfo () = documentId, filePath, []
249+ let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
250+ Assert.IsTrue( triggered, " Completion should trigger after typing an identifier that follows an addressOf operator (&)." )
251+
252+ [<Test>]
253+ let ShouldTriggerCompletionAfterArithmeticOperation () =
254+ let fileContents = """
255+ let xVal = 1.0
256+ let yVal = 2.0
257+ let zVal
258+
259+ xVal+y
260+ xVal-y
261+ xVal*y
262+ xVal/y
263+ xVal%y
264+ xVal**y
265+ """
266+
267+ let markers = [ " +y" ; " -y" ; " *y" ; " /y" ; " %y" ; " **y" ]
268+
269+ for markerin markersdo
270+ let caretPosition = fileContents.IndexOf( marker) + marker.Length
271+ let documentId = DocumentId.CreateNewId( ProjectId.CreateNewId())
272+ let getInfo () = documentId, filePath, []
273+ let triggered = FSharpCompletionProvider.ShouldTriggerCompletionAux( SourceText.From( fileContents), caretPosition, CompletionTriggerKind.Insertion, getInfo)
274+ Assert.IsTrue( triggered, " Completion should trigger after typing an identifier that follows a mathematical operation" )
275+
199276[<Test>]
200277let ShouldDisplayTypeMembers () =
201278let fileContents = """