~ubuntu-branches/ubuntu/oneiric/monodevelop/oneiric-updates

« back to all changes in this revision

Viewing changes to tests/UnitTests/MonoDevelop.CSharpBinding/CodeCompletionBugTests.cs

  • Committer: Bazaar Package Importer
  • Author(s): Jo Shields
  • Date: 2009-02-18 08:40:51 UTC
  • mfrom: (1.2.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090218084051-gh8m6ukvokbwj7cf
Tags: 1.9.2+dfsg-1ubuntu1
* Merge from Debian Experimental (LP: #330519), remaining Ubuntu changes:
  + debian/control:
    - Update for Gnome# 2.24
    - Add libmono-cairo1.0-cil to build-deps to fool pkg-config check

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// CodeCompletionBugTests.cs
 
3
//
 
4
// Author:
 
5
//   Mike Krüger <mkrueger@novell.com>
 
6
//
 
7
// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
 
8
//
 
9
// Permission is hereby granted, free of charge, to any person obtaining
 
10
// a copy of this software and associated documentation files (the
 
11
// "Software"), to deal in the Software without restriction, including
 
12
// without limitation the rights to use, copy, modify, merge, publish,
 
13
// distribute, sublicense, and/or sell copies of the Software, and to
 
14
// permit persons to whom the Software is furnished to do so, subject to
 
15
// the following conditions:
 
16
// 
 
17
// The above copyright notice and this permission notice shall be
 
18
// included in all copies or substantial portions of the Software.
 
19
// 
 
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
27
//
 
28
 
 
29
using System;
 
30
using NUnit.Framework;
 
31
using MonoDevelop.CSharpBinding.Gui;
 
32
using MonoDevelop.Ide.Gui;
 
33
using MonoDevelop.Projects;
 
34
using MonoDevelop.Core;
 
35
using MonoDevelop.Projects.Gui.Completion;
 
36
using MonoDevelop.Ide.Gui.Content;
 
37
using MonoDevelop.Projects.Dom.Parser;
 
38
 
 
39
namespace MonoDevelop.CSharpBinding.Tests
 
40
{
 
41
        [TestFixture()]
 
42
        public class CodeCompletionBugTests : UnitTests.TestBase
 
43
        {
 
44
                static int pcount = 0;
 
45
                
 
46
                public static CompletionDataList CreateProvider (string text)
 
47
                {
 
48
                        return CreateProvider (text, false);
 
49
                }
 
50
                
 
51
                public static CompletionDataList CreateCtrlSpaceProvider (string text)
 
52
                {
 
53
                        return CreateProvider (text, true);
 
54
                }
 
55
                
 
56
                static CompletionDataList CreateProvider (string text, bool isCtrlSpace)
 
57
                {
 
58
                        string parsedText;
 
59
                        string editorText;
 
60
                        int cursorPosition = text.IndexOf ('$');
 
61
                        int endPos = text.IndexOf ('$', cursorPosition + 1);
 
62
                        if (endPos == -1)
 
63
                                parsedText = editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1);
 
64
                        else {
 
65
                                parsedText = text.Substring (0, cursorPosition) + new string (' ', endPos - cursorPosition) + text.Substring (endPos + 1);
 
66
                                editorText = text.Substring (0, cursorPosition) + text.Substring (cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring (endPos + 1);
 
67
                                cursorPosition = endPos - 1; 
 
68
                        }
 
69
                        
 
70
                        TestWorkbenchWindow tww = new TestWorkbenchWindow ();
 
71
                        TestViewContent sev = new TestViewContent ();
 
72
                        DotNetProject project = new DotNetProject ("C#");
 
73
                        project.FileName = "/tmp/a" + pcount + ".csproj";
 
74
                        
 
75
                        string file = "/tmp/test-file-" + (pcount++) + ".cs";
 
76
                        project.AddFile (file);
 
77
                        
 
78
                        ProjectDomService.Load (project);
 
79
                        ProjectDom dom = ProjectDomService.GetProjectDom (project);
 
80
                        ProjectDomService.Parse (project, file, null, delegate { return parsedText; });
 
81
                        ProjectDomService.Parse (project, file, null, delegate { return parsedText; });
 
82
                        
 
83
                        sev.Project = project;
 
84
                        sev.ContentName = file;
 
85
                        sev.Text = editorText;
 
86
                        sev.CursorPosition = cursorPosition;
 
87
                        tww.ViewContent = sev;
 
88
                        Document doc = new Document (tww);
 
89
                        doc.ParsedDocument = new NRefactoryParser ().Parse (sev.ContentName, parsedText);
 
90
                        CSharpTextEditorCompletion textEditorCompletion = new CSharpTextEditorCompletion (doc);
 
91
                        
 
92
                        int triggerWordLength = 1;
 
93
                        CodeCompletionContext ctx = new CodeCompletionContext ();
 
94
                        ctx.TriggerOffset = sev.CursorPosition;
 
95
                        int line, column;
 
96
                        sev.GetLineColumnFromPosition (sev.CursorPosition, out line, out column);
 
97
                        ctx.TriggerLine = line;
 
98
                        ctx.TriggerLineOffset = column;
 
99
                        
 
100
                        if (isCtrlSpace)
 
101
                                return textEditorCompletion.CodeCompletionCommand (ctx) as CompletionDataList;
 
102
                        else
 
103
                                return textEditorCompletion.HandleCodeCompletion (ctx, editorText[cursorPosition - 1] , ref triggerWordLength) as CompletionDataList;
 
104
                }
 
105
                
 
106
                public static void CheckObjectMembers (CompletionDataList provider)
 
107
                {
 
108
                        Assert.IsNotNull (provider.Find ("Equals"), "Method 'System.Object.Equals' not found.");
 
109
                        Assert.IsNotNull (provider.Find ("GetHashCode"), "Method 'System.Object.GetHashCode' not found.");
 
110
                        Assert.IsNotNull (provider.Find ("GetType"), "Method 'System.Object.GetType' not found.");
 
111
                        Assert.IsNotNull (provider.Find ("ToString"), "Method 'System.Object.ToString' not found.");
 
112
                }
 
113
                
 
114
                public static void CheckProtectedObjectMembers (CompletionDataList provider)
 
115
                {
 
116
                        CheckObjectMembers (provider);
 
117
                        Assert.IsNotNull (provider.Find ("MemberwiseClone"), "Method 'System.Object.MemberwiseClone' not found.");
 
118
                }
 
119
                
 
120
                public static void CheckStaticObjectMembers (CompletionDataList provider)
 
121
                {
 
122
                        Assert.IsNotNull (provider.Find ("Equals"), "Method 'System.Object.Equals' not found.");
 
123
                        Assert.IsNotNull (provider.Find ("ReferenceEquals"), "Method 'System.Object.ReferenceEquals' not found.");
 
124
                }
 
125
                
 
126
                [Test()]
 
127
                public void TestSimpleCodeCompletion ()
 
128
                {
 
129
                        CompletionDataList provider = CreateProvider (
 
130
@"class Test { public void TM1 () {} public void TM2 () {} public int TF1; }
 
131
class CCTest {
 
132
void TestMethod ()
 
133
{
 
134
        Test t;
 
135
        $t.$
 
136
}
 
137
}
 
138
");
 
139
                        Assert.IsNotNull (provider);
 
140
                        Assert.AreEqual (7, provider.Count);
 
141
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
142
                        Assert.IsNotNull (provider.Find ("TM1"));
 
143
                        Assert.IsNotNull (provider.Find ("TM2"));
 
144
                        Assert.IsNotNull (provider.Find ("TF1"));
 
145
                }
 
146
                [Test()]
 
147
                public void TestSimpleInterfaceCodeCompletion ()
 
148
                {
 
149
                        CompletionDataList provider = CreateProvider (
 
150
@"interface ITest { void TM1 (); void TM2 (); int TF1 { get; } }
 
151
class CCTest {
 
152
void TestMethod ()
 
153
{
 
154
        ITest t;
 
155
        $t.$
 
156
}
 
157
}
 
158
");
 
159
                        Assert.IsNotNull (provider);
 
160
                        Assert.AreEqual (7, provider.Count);
 
161
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
162
                        Assert.IsNotNull (provider.Find ("TM1"));
 
163
                        Assert.IsNotNull (provider.Find ("TM2"));
 
164
                        Assert.IsNotNull (provider.Find ("TF1"));
 
165
                }
 
166
 
 
167
                /// <summary>
 
168
                /// Bug 399695 - Code completion not working with an enum in a different namespace
 
169
                /// </summary>
 
170
                [Test()]
 
171
                public void TestBug399695 ()
 
172
                {
 
173
                        CompletionDataList provider = CreateProvider (
 
174
@"namespace Other { enum TheEnum { One, Two } }
 
175
namespace ThisOne { 
 
176
        public class Test {
 
177
                public Other.TheEnum TheEnum {
 
178
                        set { }
 
179
                }
 
180
 
 
181
                public void TestMethod () {
 
182
                        $TheEnum = $
 
183
                }
 
184
        }
 
185
}");
 
186
                        Assert.IsNotNull (provider);
 
187
                        Assert.AreEqual (1, provider.Count);
 
188
                        Assert.IsNotNull (provider.Find ("Other.TheEnum"), "Other.TheEnum not found.");
 
189
                }
 
190
 
 
191
                /// <summary>
 
192
                /// Bug 318834 - autocompletion kicks in when inputting decimals
 
193
                /// </summary>
 
194
                [Test()]
 
195
                public void TestBug318834 ()
 
196
                {
 
197
                        CompletionDataList provider = CreateProvider (
 
198
@"class T
 
199
{
 
200
        static void Main ()
 
201
        {
 
202
                $decimal foo = 0.$
 
203
        }
 
204
}
 
205
 
 
206
");
 
207
                        Assert.IsNull (provider);
 
208
                }
 
209
 
 
210
                /// <summary>
 
211
                /// Bug 321306 - Code completion doesn't recognize child namespaces
 
212
                /// </summary>
 
213
                [Test()]
 
214
                public void TestBug321306 ()
 
215
                {
 
216
                        CompletionDataList provider = CreateProvider (
 
217
@"namespace a
 
218
{
 
219
        namespace b
 
220
        {
 
221
                public class c
 
222
                {
 
223
                        public static int hi;
 
224
                }
 
225
        }
 
226
        
 
227
        public class d
 
228
        {
 
229
                public d ()
 
230
                {
 
231
                        $b.$
 
232
                }
 
233
        }
 
234
}");
 
235
                        Assert.IsNotNull (provider, "provider not found.");
 
236
                        Assert.AreEqual (1, provider.Count);
 
237
                        Assert.IsNotNull (provider.Find ("c"), "class 'c' not found.");
 
238
                }
 
239
 
 
240
                /// <summary>
 
241
                /// Bug 322089 - Code completion for indexer
 
242
                /// </summary>
 
243
                [Test()]
 
244
                public void TestBug322089 ()
 
245
                {
 
246
                        CompletionDataList provider = CreateProvider (
 
247
@"class AClass
 
248
{
 
249
        public int AField;
 
250
        public int BField;
 
251
}
 
252
 
 
253
class Test
 
254
{
 
255
        public void TestMethod ()
 
256
        {
 
257
                AClass[] list = new AClass[0];
 
258
                $list[0].$
 
259
        }
 
260
}");
 
261
                        Assert.IsNotNull (provider, "provider not found.");
 
262
                        Assert.AreEqual (6, provider.Count);
 
263
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
264
                        Assert.IsNotNull (provider.Find ("AField"), "field 'AField' not found.");
 
265
                        Assert.IsNotNull (provider.Find ("BField"), "field 'BField' not found.");
 
266
                }
 
267
                
 
268
                /// <summary>
 
269
                /// Bug 323283 - Code completion for indexers offered by generic types (generics)
 
270
                /// </summary>
 
271
                [Test()]
 
272
                public void TestBug323283 ()
 
273
                {
 
274
                        CompletionDataList provider = CreateProvider (
 
275
@"class AClass
 
276
{
 
277
        public int AField;
 
278
        public int BField;
 
279
}
 
280
 
 
281
class MyClass<T>
 
282
{
 
283
        public T this[int i] {
 
284
                get {
 
285
                        return default (T);
 
286
                }
 
287
        }
 
288
}
 
289
 
 
290
class Test
 
291
{
 
292
        public void TestMethod ()
 
293
        {
 
294
                MyClass<AClass> list = new MyClass<AClass> ();
 
295
                $list[0].$
 
296
        }
 
297
}");
 
298
                        Assert.IsNotNull (provider, "provider not found.");
 
299
                        Assert.AreEqual (6, provider.Count);
 
300
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
301
                        Assert.IsNotNull (provider.Find ("AField"), "field 'AField' not found.");
 
302
                        Assert.IsNotNull (provider.Find ("BField"), "field 'BField' not found.");
 
303
                }
 
304
 
 
305
                /// <summary>
 
306
                /// Bug 323317 - Code completion not working just after a constructor
 
307
                /// </summary>
 
308
                [Test()]
 
309
                public void TestBug323317 ()
 
310
                {
 
311
                        CompletionDataList provider = CreateProvider (
 
312
@"class AClass
 
313
{
 
314
        public int AField;
 
315
        public int BField;
 
316
}
 
317
 
 
318
class Test
 
319
{
 
320
        public void TestMethod ()
 
321
        {
 
322
                $new AClass().$
 
323
        }
 
324
}");
 
325
                        Assert.IsNotNull (provider, "provider not found.");
 
326
                        Assert.AreEqual (6, provider.Count);
 
327
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
328
                        Assert.IsNotNull (provider.Find ("AField"), "field 'AField' not found.");
 
329
                        Assert.IsNotNull (provider.Find ("BField"), "field 'BField' not found.");
 
330
                }
 
331
                
 
332
                /// <summary>
 
333
                /// Bug 325509 - Inaccessible methods displayed in autocomplete
 
334
                /// </summary>
 
335
                [Test()]
 
336
                public void TestBug325509 ()
 
337
                {
 
338
                        CompletionDataList provider = CreateProvider (
 
339
@"class AClass
 
340
{
 
341
        public int A;
 
342
        public int B;
 
343
        
 
344
        protected int C;
 
345
        int D;
 
346
}
 
347
 
 
348
class Test
 
349
{
 
350
        public void TestMethod ()
 
351
        {
 
352
                AClass a;
 
353
                $a.$
 
354
        }
 
355
}");
 
356
                        Assert.IsNotNull (provider, "provider not found.");
 
357
                        Assert.AreEqual (6, provider.Count);
 
358
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
359
                        Assert.IsNotNull (provider.Find ("A"), "field 'A' not found.");
 
360
                        Assert.IsNotNull (provider.Find ("B"), "field 'B' not found.");
 
361
                }
 
362
 
 
363
                /// <summary>
 
364
                /// Bug 338392 - MD tries to use types when declaring namespace
 
365
                /// </summary>
 
366
                [Test()]
 
367
                public void TestBug338392 ()
 
368
                {
 
369
                        CompletionDataList provider = CreateProvider (
 
370
@"namespace A
 
371
{
 
372
        class C
 
373
        {
 
374
        }
 
375
}
 
376
 
 
377
$namespace A.$
 
378
");
 
379
                        Assert.IsNotNull (provider, "provider not found.");
 
380
                        Assert.AreEqual (0, provider.Count);
 
381
                }
 
382
 
 
383
                /// <summary>
 
384
                /// Bug 427284 - Code Completion: class list shows the full name of classes
 
385
                /// </summary>
 
386
                [Test()]
 
387
                public void TestBug427284 ()
 
388
                {
 
389
                        CompletionDataList provider = CreateProvider (
 
390
@"namespace TestNamespace
 
391
{
 
392
        class Test
 
393
        {
 
394
        }
 
395
}
 
396
class TestClass
 
397
{
 
398
        void Method ()
 
399
        {
 
400
                $TestNamespace.$
 
401
        }
 
402
}
 
403
");
 
404
                        Assert.IsNotNull (provider, "provider not found.");
 
405
                        Assert.AreEqual (1, provider.Count);
 
406
                        Assert.IsNotNull (provider.Find ("Test"), "class 'Test' not found.");
 
407
                }
 
408
 
 
409
                /// <summary>
 
410
                /// Bug 427294 - Code Completion: completion on values returned by methods doesn't work
 
411
                /// </summary>
 
412
                [Test()]
 
413
                public void TestBug427294 ()
 
414
                {
 
415
                        CompletionDataList provider = CreateProvider (
 
416
@"class TestClass
 
417
{
 
418
        public TestClass GetTestClass ()
 
419
        {
 
420
        }
 
421
}
 
422
 
 
423
class Test
 
424
{
 
425
        public void TestMethod ()
 
426
        {
 
427
                TestClass a;
 
428
                $a.GetTestClass ().$
 
429
        }
 
430
}");
 
431
                        Assert.IsNotNull (provider, "provider not found.");
 
432
                        Assert.AreEqual (5, provider.Count);
 
433
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
434
                        Assert.IsNotNull (provider.Find ("GetTestClass"), "method 'GetTestClass' not found.");
 
435
                }
 
436
                
 
437
                /// <summary>
 
438
                /// Bug 405000 - Namespace alias qualifier operator (::) does not trigger code completion
 
439
                /// </summary>
 
440
                [Test()]
 
441
                public void TestBug405000 ()
 
442
                {
 
443
                        CompletionDataList provider = CreateProvider (
 
444
@"namespace A {
 
445
        class Test
 
446
        {
 
447
        }
 
448
}
 
449
 
 
450
namespace B {
 
451
        using foo = A;
 
452
        class C
 
453
        {
 
454
                public static void Main ()
 
455
                {
 
456
                        $foo::$
 
457
                }
 
458
        }
 
459
}");
 
460
                        Assert.IsNotNull (provider, "provider not found.");
 
461
                        Assert.AreEqual (1, provider.Count);
 
462
                        Assert.IsNotNull (provider.Find ("Test"), "class 'Test' not found.");
 
463
                }
 
464
                
 
465
                /// <summary>
 
466
                /// Bug 427649 - Code Completion: protected methods shown in code completion
 
467
                /// </summary>
 
468
                [Test()]
 
469
                public void TestBug427649 ()
 
470
                {
 
471
                        CompletionDataList provider = CreateProvider (
 
472
@"class BaseClass
 
473
{
 
474
        protected void ProtecedMember ()
 
475
        {
 
476
        }
 
477
}
 
478
 
 
479
class C : BaseClass
 
480
{
 
481
        public static void Main ()
 
482
        {
 
483
                BaseClass bc;
 
484
                $bc.$
 
485
        }
 
486
}
 
487
");
 
488
                        Assert.IsNotNull (provider, "provider not found.");
 
489
                        Assert.AreEqual (4, provider.Count);
 
490
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
491
                }
 
492
                
 
493
                /// <summary>
 
494
                /// Bug 427734 - Code Completion issues with enums
 
495
                /// </summary>
 
496
                [Test()]
 
497
                public void TestBug427734A ()
 
498
                {
 
499
                        CompletionDataList provider = CreateProvider (
 
500
@"public class Test
 
501
{
 
502
        public enum SomeEnum { a,b }
 
503
        
 
504
        public void Run ()
 
505
        {
 
506
                $Test.$
 
507
        }
 
508
}");
 
509
                        Assert.IsNotNull (provider, "provider not found.");
 
510
                        Assert.AreEqual (3, provider.Count);
 
511
                        CodeCompletionBugTests.CheckStaticObjectMembers (provider); // 2 from System.Object
 
512
                        Assert.IsNotNull (provider.Find ("SomeEnum"), "enum 'SomeEnum' not found.");
 
513
                }
 
514
                
 
515
                /// <summary>
 
516
                /// Bug 427734 - Code Completion issues with enums
 
517
                /// </summary>
 
518
                [Test()]
 
519
                public void TestBug427734B ()
 
520
                {
 
521
                        CompletionDataList provider = CreateProvider (
 
522
@"public class Test
 
523
{
 
524
        public enum SomeEnum { a,b }
 
525
        
 
526
        public void Run ()
 
527
        {
 
528
                $SomeEnum.$
 
529
        }
 
530
}");
 
531
                        Assert.IsNotNull (provider, "provider not found.");
 
532
                        Assert.AreEqual (2, provider.Count);
 
533
                        Assert.IsNotNull (provider.Find ("a"), "enum member 'a' not found.");
 
534
                        Assert.IsNotNull (provider.Find ("b"), "enum member 'b' not found.");
 
535
                }
 
536
                
 
537
                /// <summary>
 
538
                /// Bug 431764 - Completion doesn't work in properties
 
539
                /// </summary>
 
540
                [Test()]
 
541
                public void TestBug431764 ()
 
542
                {
 
543
                        CompletionDataList provider = CreateCtrlSpaceProvider (
 
544
@"public class Test
 
545
{
 
546
        int number;
 
547
        public int Number {
 
548
                set { $this.number = $ }
 
549
        }
 
550
}");
 
551
                        Assert.IsNotNull (provider, "provider not found.");
 
552
                        Assert.IsNotNull (provider.Find ("value"), "Should contain 'value'");
 
553
                }
 
554
                
 
555
                /// <summary>
 
556
                /// Bug 431797 - Code completion showing invalid options
 
557
                /// </summary>
 
558
                [Test()]
 
559
                public void TestBug431797A ()
 
560
                {
 
561
                        CompletionDataList provider = CreateCtrlSpaceProvider (
 
562
@"public class Test
 
563
{
 
564
        private List<string> strings;
 
565
        $public $
 
566
}");
 
567
                
 
568
                        Assert.IsNotNull (provider, "provider not found.");
 
569
                        Assert.IsNull (provider.Find ("strings"), "should not contain 'strings'");
 
570
                }
 
571
                
 
572
                /// <summary>
 
573
                /// Bug 431797 - Code completion showing invalid options
 
574
                /// </summary>
 
575
                [Test()]
 
576
                public void TestBug431797B ()
 
577
                {
 
578
                        CompletionDataList provider = CreateProvider (
 
579
@"public class Test
 
580
{
 
581
        public delegate string [] AutoCompleteHandler (string text, int pos);
 
582
        public void Method ()
 
583
        {
 
584
                Test t = new Test ();
 
585
                $t.$
 
586
        }
 
587
}");
 
588
                        Assert.IsNotNull (provider, "provider not found.");
 
589
                        Assert.IsNull (provider.Find ("AutoCompleteHandler"), "should not contain 'AutoCompleteHandler' delegate");
 
590
                }
 
591
                
 
592
                /// <summary>
 
593
                /// Bug 432681 - Incorrect completion in nested classes
 
594
                /// </summary>
 
595
                [Test()]
 
596
                public void TestBug432681 ()
 
597
                {
 
598
                        CompletionDataList provider = CreateProvider (
 
599
@"
 
600
 
 
601
class C {
 
602
        public class D
 
603
        {
 
604
        }
 
605
 
 
606
        public void Method ()
 
607
        {
 
608
                $C.D c = new $
 
609
        }
 
610
}");
 
611
                        Assert.IsNotNull (provider, "provider not found.");
 
612
                        Assert.AreEqual ("C.D", provider.DefaultCompletionString, "Completion string is incorrect");
 
613
                }
 
614
                
 
615
                [Test()]
 
616
                public void TestGenericObjectCreation ()
 
617
                {
 
618
                        CompletionDataList provider = CreateProvider (
 
619
@"
 
620
class List<T>
 
621
{
 
622
}
 
623
class Test{
 
624
        public void Method ()
 
625
        {
 
626
                $List<int> i = new $
 
627
        }
 
628
}");
 
629
                        Assert.IsNotNull (provider, "provider not found.");
 
630
                        Assert.IsTrue (provider.Find ("List<int>") != null, "List<int> not found");
 
631
                }
 
632
                
 
633
                /// <summary>
 
634
                /// Bug 431803 - Autocomplete not giving any options
 
635
                /// </summary>
 
636
                [Test()]
 
637
                public void TestBug431803 ()
 
638
                {
 
639
                        CompletionDataList provider = CreateProvider (
 
640
@"public class Test
 
641
{
 
642
        public string[] GetStrings ()
 
643
        {
 
644
                $return new $
 
645
        }
 
646
}");
 
647
                        Assert.IsNotNull (provider, "provider not found.");
 
648
                        Assert.AreEqual (1, provider.Count);
 
649
                        Assert.IsNotNull (provider.Find ("string[]"), "type string not found.");
 
650
                }
 
651
 
 
652
                /// <summary>
 
653
                /// Bug 434770 - No autocomplete on array types
 
654
                /// </summary>
 
655
                [Test()]
 
656
                public void TestBug434770 ()
 
657
                {
 
658
                        CompletionDataList provider = CreateProvider (
 
659
@"
 
660
namespace System {
 
661
        public class Array 
 
662
        {
 
663
                public int Length {
 
664
                        get {}
 
665
                        set {}
 
666
                }
 
667
                public int MyField;
 
668
        }
 
669
}
 
670
public class Test
 
671
{
 
672
        public void AMethod ()
 
673
        {
 
674
                byte[] buffer = new byte[1024];
 
675
                $buffer.$
 
676
        }
 
677
}");
 
678
                        Assert.IsNotNull (provider, "provider not found.");
 
679
                        Assert.IsNotNull (provider.Find ("Length"), "property 'Length' not found.");
 
680
                        Assert.IsNotNull (provider.Find ("MyField"), "field 'MyField' not found.");
 
681
                }
 
682
                
 
683
                /// <summary>
 
684
                /// Bug 439601 - Intellisense Broken For Partial Classes
 
685
                /// </summary>
 
686
                [Test()]
 
687
                public void TestBug439601 ()
 
688
                {
 
689
                        CompletionDataList provider = CreateProvider (
 
690
@"
 
691
namespace MyNamespace
 
692
{
 
693
        partial class FormMain
 
694
        {
 
695
                private void Foo()
 
696
                {
 
697
                        Bar();
 
698
                }
 
699
                
 
700
                private void Blah()
 
701
                {
 
702
                        Foo();
 
703
                }
 
704
        }
 
705
}
 
706
 
 
707
namespace MyNamespace
 
708
{
 
709
        public partial class FormMain
 
710
        {
 
711
                public FormMain()
 
712
                {
 
713
                }
 
714
                
 
715
                private void Bar()
 
716
                {
 
717
                        $this.$
 
718
                }
 
719
        }
 
720
}
 
721
");
 
722
                        Assert.IsNotNull (provider, "provider not found.");
 
723
                        Assert.IsNotNull (provider.Find ("Foo"), "method 'Foo' not found.");
 
724
                        Assert.IsNotNull (provider.Find ("Blah"), "method 'Blah' not found.");
 
725
                        Assert.IsNotNull (provider.Find ("Bar"), "method 'Bar' not found.");
 
726
                }
 
727
                
 
728
                /// <summary>
 
729
                /// Bug 432434 - Code completion doesn't work with subclasses
 
730
                /// </summary>
 
731
                [Test()]
 
732
                public void TestBug432434 ()
 
733
                {
 
734
                        CompletionDataList provider = CreateProvider (
 
735
 
 
736
@"public class Test
 
737
{
 
738
        public class Inner
 
739
        {
 
740
                public void Inner1 ()
 
741
                {
 
742
                }
 
743
                
 
744
                public void Inner2 ()
 
745
                {
 
746
                }
 
747
        }
 
748
        
 
749
        public void Run ()
 
750
        {
 
751
                Inner inner = new Inner ();
 
752
                $inner.$
 
753
        }
 
754
}
 
755
");
 
756
                        Assert.IsNotNull (provider, "provider not found.");
 
757
                        Assert.IsNotNull (provider.Find ("Inner1"), "Method inner1 not found.");
 
758
                        Assert.IsNotNull (provider.Find ("Inner2"), "Method inner2 not found.");
 
759
                }
 
760
 
 
761
                /// <summary>
 
762
                /// Bug 432434A - Code completion doesn't work with subclasses
 
763
                /// </summary>
 
764
                [Test()]
 
765
                public void TestBug432434A ()
 
766
                {
 
767
                        CompletionDataList provider = CreateProvider (
 
768
 
 
769
@"    public class E
 
770
        {
 
771
                public class Inner
 
772
                {
 
773
                        public void Method ()
 
774
                        {
 
775
                                Inner inner = new Inner();
 
776
                                $inner.$
 
777
                        }
 
778
                }
 
779
        }
 
780
");
 
781
                        Assert.IsNotNull (provider, "provider not found.");
 
782
                        Assert.IsNotNull (provider.Find ("Method"), "Method 'Method' not found.");
 
783
                }
 
784
                
 
785
                /// <summary>
 
786
                /// Bug 432434B - Code completion doesn't work with subclasses
 
787
                /// </summary>
 
788
                [Test()]
 
789
                public void TestBug432434B ()
 
790
                {
 
791
                        CompletionDataList provider = CreateProvider (
 
792
 
 
793
@"  public class E
 
794
        {
 
795
                public class Inner
 
796
                {
 
797
                        public class ReallyInner $: $
 
798
                        {
 
799
 
 
800
                        }
 
801
                }
 
802
        }
 
803
");
 
804
                        Assert.IsNotNull (provider, "provider not found.");
 
805
                        Assert.IsNotNull (provider.Find ("E"), "Class 'E' not found.");
 
806
                        Assert.IsNotNull (provider.Find ("Inner"), "Class 'Inner' not found.");
 
807
                        Assert.IsNull (provider.Find ("ReallyInner"), "Class 'ReallyInner' found, but shouldn't.");
 
808
                }
 
809
                
 
810
 
 
811
                /// <summary>
 
812
                /// Bug 436705 - code completion for constructors does not handle class name collisions properly
 
813
                /// </summary>
 
814
                [Test()]
 
815
                public void TestBug436705 ()
 
816
                {
 
817
                        CompletionDataList provider = CreateProvider (
 
818
@"
 
819
public class Point
 
820
{
 
821
}
 
822
 
 
823
class C {
 
824
 
 
825
        public void Method ()
 
826
        {
 
827
                $System.Drawing.Point p = new $
 
828
        }
 
829
}");
 
830
                        Assert.IsNotNull (provider, "provider not found.");
 
831
                        Assert.AreEqual ("System.Drawing.Point", provider.DefaultCompletionString, "Completion string is incorrect");
 
832
                }
 
833
                
 
834
                /// <summary>
 
835
                /// Bug 439963 - Lacking members in code completion
 
836
                /// </summary>
 
837
                [Test()]
 
838
                public void TestBug439963 ()
 
839
                {
 
840
                        CompletionDataList provider = CreateProvider (
 
841
@"public class StaticTest
 
842
{
 
843
        public void Test1()
 
844
        {}
 
845
        public void Test2()
 
846
        {}
 
847
        
 
848
        public static StaticTest GetObject ()
 
849
        {
 
850
        }
 
851
}
 
852
 
 
853
public class Test
 
854
{
 
855
        public void TestMethod ()
 
856
        {
 
857
                $StaticTest.GetObject ().$
 
858
        }
 
859
}
 
860
");
 
861
                        Assert.IsNotNull (provider, "provider not found.");
 
862
                        Assert.IsNotNull (provider.Find ("Test1"), "Method 'Test1' not found.");
 
863
                        Assert.IsNotNull (provider.Find ("Test2"), "Method 'Test2' not found.");
 
864
                        Assert.IsNull (provider.Find ("GetObject"), "Method 'GetObject' found, but shouldn't.");
 
865
                }
 
866
 
 
867
                /// <summary>
 
868
                /// Bug 441671 - Finalisers show up in code completion
 
869
                /// </summary>
 
870
                [Test()]
 
871
                public void TestBug441671 ()
 
872
                {
 
873
                        CompletionDataList provider = CreateProvider (
 
874
@"class TestClass
 
875
{
 
876
        public TestClass (int i)
 
877
        {
 
878
        }
 
879
        public void TestMethod ()
 
880
        {
 
881
        }
 
882
        public ~TestClass ()
 
883
        {
 
884
        }
 
885
}
 
886
 
 
887
class AClass
 
888
{
 
889
        void AMethod ()
 
890
        {
 
891
                TestClass c;
 
892
                $c.$
 
893
        }
 
894
}
 
895
");
 
896
                        Assert.IsNotNull (provider, "provider not found.");
 
897
                        Assert.AreEqual (5, provider.Count);
 
898
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
899
                        Assert.IsNull (provider.Find (".dtor"), "destructor found - but shouldn't.");
 
900
                        Assert.IsNotNull (provider.Find ("TestMethod"), "method 'TestMethod' not found.");
 
901
                }
 
902
                
 
903
                /// <summary>
 
904
                /// Bug 444110 - Code completion doesn't activate
 
905
                /// </summary>
 
906
                [Test()]
 
907
                public void TestBug444110 ()
 
908
                {
 
909
                        CompletionDataList provider = CreateProvider (
 
910
@"using System;
 
911
using System.Collections.Generic;
 
912
 
 
913
namespace System.Collections.Generic {
 
914
        
 
915
        public class TemplateClass<T>
 
916
        {
 
917
                public T TestField;
 
918
        }
 
919
}
 
920
 
 
921
namespace CCTests
 
922
{
 
923
        
 
924
        public class Test
 
925
        {
 
926
                public TemplateClass<int> TemplateClass { get; set; }
 
927
        }
 
928
        
 
929
        class MainClass
 
930
        {
 
931
                public static void Main(string[] args)
 
932
                {
 
933
                        Test t = new Test();
 
934
                        $t.TemplateClass.$
 
935
                }
 
936
        }
 
937
}");
 
938
                        Assert.IsNotNull (provider, "provider not found.");
 
939
                        Assert.AreEqual (5, provider.Count);
 
940
                        CodeCompletionBugTests.CheckObjectMembers (provider); // 4 from System.Object
 
941
                        Assert.IsNotNull (provider.Find ("TestField"), "field 'TestField' not found.");
 
942
                }
 
943
                
 
944
                /// <summary>
 
945
                /// Bug 460234 - Invalid options shown when typing 'override'
 
946
                /// </summary>
 
947
                [Test()]
 
948
                public void TestBug460234 ()
 
949
                {
 
950
                        CompletionDataList provider = CreateProvider (
 
951
@"
 
952
namespace System {
 
953
        public class Object
 
954
        {
 
955
                public virtual int GetHashCode ()
 
956
                {
 
957
                }
 
958
                protected virtual void Finalize ()
 
959
                {
 
960
                }
 
961
        }
 
962
}
 
963
public class TestMe : System.Object
 
964
{
 
965
        $override $
 
966
}");
 
967
                        Assert.IsNotNull (provider, "provider not found.");
 
968
                        Assert.AreEqual (1, provider.Count);
 
969
                        Assert.IsNull (provider.Find ("Finalize"), "method 'Finalize' found, but shouldn't.");
 
970
                        Assert.IsNotNull (provider.Find ("GetHashCode"), "method 'GetHashCode' not found.");
 
971
                }
 
972
 
 
973
                /// <summary>
 
974
                /// Bug 457003 - code completion shows variables out of scope
 
975
                /// </summary>
 
976
                [Test()]
 
977
                public void TestBug457003 ()
 
978
                {
 
979
                        CompletionDataList provider = CreateProvider (
 
980
@"
 
981
class A
 
982
{
 
983
        public void Test ()
 
984
        {
 
985
                if (true) {
 
986
                        A st = null;
 
987
                }
 
988
                
 
989
                if (true) {
 
990
                        int i = 0;
 
991
                        $st.$
 
992
                }
 
993
        }
 
994
}
 
995
");
 
996
                        Assert.IsNotNull (provider, "provider not found.");
 
997
                        Assert.IsTrue (provider.Count == 0, "variable 'st' found, but shouldn't.");
 
998
                }
 
999
                
 
1000
                /// <summary>
 
1001
                /// Bug 457237 - code completion doesn't show static methods when setting global variable
 
1002
                /// </summary>
 
1003
                [Test()]
 
1004
                public void TestBug457237 ()
 
1005
                {
 
1006
                        CompletionDataList provider = CreateProvider (
 
1007
@"
 
1008
class Test
 
1009
{
 
1010
        public static double Val = 0.5;
 
1011
}
 
1012
 
 
1013
class Test2
 
1014
{
 
1015
        $double dd = Test.$
 
1016
}
 
1017
");
 
1018
                        Assert.IsNotNull (provider, "provider not found.");
 
1019
                        Assert.IsNotNull (provider.Find ("Val"), "field 'Val' not found.");
 
1020
                }
 
1021
 
 
1022
                /// <summary>
 
1023
                /// Bug 459682 - Static methods/properties don't show up in subclasses
 
1024
                /// </summary>
 
1025
                [Test()]
 
1026
                public void TestBug459682 ()
 
1027
                {
 
1028
                        CompletionDataList provider = CreateProvider (
 
1029
@"public class BaseC
 
1030
{
 
1031
        public static int TESTER;
 
1032
}
 
1033
public class Child : BaseC
 
1034
{
 
1035
        public Child()
 
1036
        {
 
1037
                $Child.$
 
1038
        }
 
1039
}
 
1040
");
 
1041
                        Assert.IsNotNull (provider, "provider not found.");
 
1042
                        Assert.IsNotNull (provider.Find ("TESTER"), "field 'TESTER' not found.");
 
1043
                }
 
1044
                
 
1045
                /// <summary>
 
1046
                /// Bug 466692 - Missing completion for return/break keywords after yield
 
1047
                /// </summary>
 
1048
                [Test()]
 
1049
                public void TestBug466692 ()
 
1050
                {
 
1051
                        CompletionDataList provider = CreateProvider (
 
1052
@"
 
1053
public class TestMe 
 
1054
{
 
1055
        public int Test ()
 
1056
        {
 
1057
                $yield $
 
1058
        }
 
1059
}");
 
1060
                        Assert.IsNotNull (provider, "provider not found.");
 
1061
                        Assert.AreEqual (2, provider.Count);
 
1062
                        Assert.IsNotNull (provider.Find ("break"), "keyword 'break' not found");
 
1063
                        Assert.IsNotNull (provider.Find ("return"), "keyword 'return' not found");
 
1064
                }
 
1065
                
 
1066
                /// <summary>
 
1067
                /// Bug 467507 - No completion of base members inside explicit events
 
1068
                /// </summary>
 
1069
                [Test()]
 
1070
                public void TestBug467507 ()
 
1071
                {
 
1072
                        CompletionDataList provider = CreateCtrlSpaceProvider (
 
1073
@"
 
1074
using System;
 
1075
 
 
1076
class Test
 
1077
{
 
1078
        public void TestMe ()
 
1079
        {
 
1080
        }
 
1081
        
 
1082
        public event EventHandler TestEvent {
 
1083
                add {
 
1084
                        $
 
1085
                }
 
1086
                remove {
 
1087
                        
 
1088
                }
 
1089
        }
 
1090
}
 
1091
");
 
1092
                        Assert.IsNotNull (provider, "provider not found.");
 
1093
                        
 
1094
                        Assert.IsNotNull (provider.Find ("TestMe"), "method 'TestMe' not found");
 
1095
                        Assert.IsNotNull (provider.Find ("value"), "keyword 'value' not found");
 
1096
                }
 
1097
        }
 
1098
}