~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to external/nrefactory/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ReferenceToStaticMemberViaDerivedTypeTests.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// CallToStaticMemberViaDerivedType.cs
 
3
//
 
4
// Author:
 
5
//       Simon Lindgren <simon.n.lindgren@gmail.com>
 
6
//
 
7
// Copyright (c) 2012 Simon Lindgren
 
8
//
 
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
 
10
// of this software and associated documentation files (the "Software"), to deal
 
11
// in the Software without restriction, including without limitation the rights
 
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
13
// copies of the Software, and to permit persons to whom the Software is
 
14
// furnished to do so, subject to the following conditions:
 
15
//
 
16
// The above copyright notice and this permission notice shall be included in
 
17
// all copies or substantial portions of the Software.
 
18
//
 
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
25
// THE SOFTWARE.
 
26
using System;
 
27
using NUnit.Framework;
 
28
using ICSharpCode.NRefactory.CSharp.CodeActions;
 
29
using ICSharpCode.NRefactory.CSharp.Refactoring;
 
30
 
 
31
namespace ICSharpCode.NRefactory.CSharp.CodeIssues
 
32
{
 
33
        [TestFixture]
 
34
        public class ReferenceToStaticMemberViaDerivedTypeTests : InspectionActionTestBase
 
35
        {
 
36
                [Test]
 
37
                public void MemberInvocation()
 
38
                {
 
39
                        var input = @"
 
40
class A
 
41
{
 
42
        public static void F() { }
 
43
}
 
44
class B : A { }
 
45
class C
 
46
{
 
47
        void Main()
 
48
        {
 
49
                B.F ();
 
50
        }
 
51
}";
 
52
                        TestRefactoringContext context;                 
 
53
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
54
                        Assert.AreEqual(1, issues.Count);
 
55
                        Assert.AreEqual(11, issues [0].Start.Line);
 
56
 
 
57
                        CheckFix(context, issues [0], @"
 
58
class A
 
59
{
 
60
        public static void F() { }
 
61
}
 
62
class B : A { }
 
63
class C
 
64
{
 
65
        void Main()
 
66
        {
 
67
                A.F ();
 
68
        }
 
69
}"
 
70
                        );
 
71
                }
 
72
 
 
73
                [Test]
 
74
                public void PropertyAccess()
 
75
                {
 
76
                        var input = @"
 
77
class A
 
78
{
 
79
        public static string Property { get; set; }
 
80
}
 
81
class B : A { }
 
82
class C
 
83
{
 
84
        void Main()
 
85
        {
 
86
                System.Console.WriteLine(B.Property);
 
87
        }
 
88
}";
 
89
                        TestRefactoringContext context;                 
 
90
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
91
                        Assert.AreEqual(1, issues.Count);
 
92
                        Assert.AreEqual(11, issues [0].Start.Line);
 
93
                        
 
94
                        CheckFix(context, issues [0], @"
 
95
class A
 
96
{
 
97
        public static string Property { get; set; }
 
98
}
 
99
class B : A { }
 
100
class C
 
101
{
 
102
        void Main()
 
103
        {
 
104
                System.Console.WriteLine(A.Property);
 
105
        }
 
106
}"
 
107
                        );
 
108
                }
 
109
                
 
110
                [Test]
 
111
                public void FieldAccess()
 
112
                {
 
113
                        var input = @"
 
114
class A
 
115
{
 
116
        public static string Property;
 
117
}
 
118
class B : A { }
 
119
class C
 
120
{
 
121
        void Main()
 
122
        {
 
123
                System.Console.WriteLine(B.Property);
 
124
        }
 
125
}";
 
126
                        TestRefactoringContext context;                 
 
127
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
128
                        Assert.AreEqual(1, issues.Count);
 
129
                        Assert.AreEqual(11, issues [0].Start.Line);
 
130
                        
 
131
                        CheckFix(context, issues [0], @"
 
132
class A
 
133
{
 
134
        public static string Property;
 
135
}
 
136
class B : A { }
 
137
class C
 
138
{
 
139
        void Main()
 
140
        {
 
141
                System.Console.WriteLine(A.Property);
 
142
        }
 
143
}"
 
144
                        );
 
145
                }
 
146
 
 
147
                [Test]
 
148
                public void NestedClass()
 
149
                {
 
150
                        var input = @"
 
151
class A
 
152
{
 
153
        public class B
 
154
        {
 
155
                public static void F() { }
 
156
        }
 
157
        public class C : B { }
 
158
}
 
159
class D
 
160
{
 
161
        void Main()
 
162
        {
 
163
                A.C.F ();
 
164
        }
 
165
}";
 
166
                        TestRefactoringContext context;                 
 
167
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
168
                        Assert.AreEqual(1, issues.Count);
 
169
                        Assert.AreEqual(14, issues [0].Start.Line);
 
170
                        
 
171
                        CheckFix(context, issues [0], @"
 
172
class A
 
173
{
 
174
        public class B
 
175
        {
 
176
                public static void F() { }
 
177
        }
 
178
        public class C : B { }
 
179
}
 
180
class D
 
181
{
 
182
        void Main()
 
183
        {
 
184
                A.B.F ();
 
185
        }
 
186
}"
 
187
                        );
 
188
                }
 
189
                
 
190
                [Test]
 
191
                public void ExpandsTypeWithNamespaceIfNeccessary()
 
192
                {
 
193
                        var input = @"
 
194
namespace First
 
195
{
 
196
        class A
 
197
        {
 
198
                public static void F() { }
 
199
        }
 
200
}
 
201
namespace Second
 
202
{
 
203
        public class B : First.A { }
 
204
        class C
 
205
        {
 
206
                void Main()
 
207
                {
 
208
                        B.F ();
 
209
                }
 
210
        }
 
211
}";
 
212
                        TestRefactoringContext context;                 
 
213
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
214
                        Assert.AreEqual(1, issues.Count);
 
215
                        Assert.AreEqual(16, issues [0].Start.Line);
 
216
                        
 
217
                        CheckFix(context, issues [0], @"
 
218
namespace First
 
219
{
 
220
        class A
 
221
        {
 
222
                public static void F() { }
 
223
        }
 
224
}
 
225
namespace Second
 
226
{
 
227
        public class B : First.A { }
 
228
        class C
 
229
        {
 
230
                void Main()
 
231
                {
 
232
                        First.A.F ();
 
233
                }
 
234
        }
 
235
}"
 
236
                        );
 
237
                }
 
238
                
 
239
                [Test]
 
240
                public void IgnoresCorrectCalls()
 
241
                {
 
242
                        var input = @"
 
243
class A
 
244
{
 
245
        public static void F() { }
 
246
}
 
247
class B
 
248
{
 
249
        void Main()
 
250
        {
 
251
                A.F();
 
252
        }
 
253
}";
 
254
                        TestRefactoringContext context;                 
 
255
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
256
                        Assert.AreEqual(0, issues.Count);
 
257
                }
 
258
                
 
259
                [Test]
 
260
                public void IgnoresNonStaticCalls()
 
261
                {
 
262
                        var input = @"
 
263
class A
 
264
{
 
265
        public void F() { }
 
266
}
 
267
class B : A { }
 
268
class C
 
269
{
 
270
        void Main()
 
271
        {
 
272
                B b = new B();
 
273
                b.F();
 
274
        }
 
275
}";
 
276
                        TestRefactoringContext context;                 
 
277
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
278
                        Assert.AreEqual(0, issues.Count);
 
279
                }
 
280
                
 
281
                [Test]
 
282
                public void IgnoresOwnMemberFunctions()
 
283
                {
 
284
                        var input = @"
 
285
class A
 
286
{
 
287
        protected static void F() { }
 
288
}
 
289
class B : A
 
290
{
 
291
        void Main()
 
292
        {
 
293
                F();
 
294
                this.F();
 
295
                base.F();
 
296
        }
 
297
}";
 
298
                        TestRefactoringContext context;                 
 
299
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
300
                        Assert.AreEqual(0, issues.Count);
 
301
                }
 
302
                
 
303
                [Test]
 
304
                public void IgnoresCuriouslyRecurringTemplatePattern()
 
305
                {
 
306
                        var input = @"
 
307
class Base<T>
 
308
{
 
309
        public static void F() { }
 
310
}
 
311
class Derived : Base<Derived> {}
 
312
class Test
 
313
{
 
314
        void Main()
 
315
        {
 
316
                Derived.F();
 
317
        }
 
318
}";
 
319
                        // do not suggest replacing 'Derived.F()' with 'Base<Derived>.F()'
 
320
                        TestRefactoringContext context;                 
 
321
                        var issues = GetIssues(new ReferenceToStaticMemberViaDerivedTypeIssue(), input, out context);
 
322
                        Assert.AreEqual(0, issues.Count);
 
323
                }
 
324
        }
 
325
}
 
326