WhereKeywordRecommenderTests.cs 8.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Test.Utilities;
using Xunit;

namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Recommendations
{
    public class WhereKeywordRecommenderTests : KeywordRecommenderTests
    {
12
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
13 14 15 16 17 18
        public void NotAtRoot_Interactive()
        {
            VerifyAbsence(SourceCodeKind.Script,
@"$$");
        }

19
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
20 21 22 23 24 25 26
        public void NotAfterClass_Interactive()
        {
            VerifyAbsence(SourceCodeKind.Script,
@"class C { }
$$");
        }

27
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
28 29 30 31 32 33 34
        public void NotAfterGlobalStatement_Interactive()
        {
            VerifyAbsence(SourceCodeKind.Script,
@"System.Console.WriteLine();
$$");
        }

35
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
36 37 38 39 40 41 42
        public void NotAfterGlobalVariableDeclaration_Interactive()
        {
            VerifyAbsence(SourceCodeKind.Script,
@"int i = 0;
$$");
        }

43
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
44 45 46 47 48 49
        public void NotInUsingAlias()
        {
            VerifyAbsence(
@"using Foo = $$");
        }

50
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
51 52 53 54 55 56
        public void NotInEmptyStatement()
        {
            VerifyAbsence(AddInsideMethod(
@"$$"));
        }

57
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
58 59 60 61 62 63 64
        public void NewClause()
        {
            VerifyKeyword(AddInsideMethod(
@"var q = from x in y
          $$"));
        }

65
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
66 67 68 69 70 71 72 73
        public void AfterPreviousClause()
        {
            VerifyKeyword(AddInsideMethod(
@"var v = from x in y
          where x > y
          $$"));
        }

74
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
75 76 77 78 79 80 81 82
        public void AfterPreviousContinuationClause()
        {
            VerifyKeyword(AddInsideMethod(
@"var v = from x in y
          group x by y into g
          $$"));
        }

83
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
84 85 86 87 88 89
        public void NotAtEndOfPreviousClause()
        {
            VerifyAbsence(AddInsideMethod(
@"var q = from x in y$$"));
        }

90
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
91 92 93 94 95 96 97 98
        public void BetweenClauses()
        {
            VerifyKeyword(AddInsideMethod(
@"var q = from x in y
          $$
          from z in w"));
        }

99
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
100 101 102 103 104 105 106 107
        public void NotAfterWhere()
        {
            VerifyAbsence(AddInsideMethod(
@"var q = from x in y
          where $$
          from z in w"));
        }

108
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
109 110 111 112 113 114
        public void NotAfterClass()
        {
            VerifyAbsence(
@"class C $$");
        }

115
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
116 117 118 119 120 121
        public void AfterGenericClass()
        {
            VerifyKeyword(
@"class C<T> $$");
        }

122
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
123 124 125 126 127 128
        public void NotAfterClassBaseList()
        {
            VerifyAbsence(
@"class C : IFoo $$");
        }

129
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
130 131 132 133 134 135
        public void AfterGenericClassBaseList()
        {
            VerifyKeyword(
@"class C<T> : IFoo $$");
        }

136
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
137 138 139 140 141 142
        public void NotAfterDelegate()
        {
            VerifyAbsence(
@"delegate void D() $$");
        }

143
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
144 145 146 147 148 149
        public void AfterGenericDelegate()
        {
            VerifyKeyword(
@"delegate void D<T>() $$");
        }

150
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
151 152 153 154 155 156
        public void AfterPreviousClassConstraint()
        {
            VerifyKeyword(
@"class C<T> where T : class $$");
        }

157
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
158 159 160 161 162 163
        public void AfterPreviousStructConstraint()
        {
            VerifyKeyword(
@"class C<T> where T : struct $$");
        }

164
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
165 166 167 168 169 170
        public void AfterPreviousNewConstraint()
        {
            VerifyKeyword(
@"class C<T> where T : new() $$");
        }

171
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
172 173 174 175 176 177
        public void AfterPreviousConstraint()
        {
            VerifyKeyword(
@"class C<T> where T : IList<T> $$");
        }

178
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
179 180 181 182 183 184
        public void AfterPreviousDelegateClassConstraint()
        {
            VerifyKeyword(
@"delegate void D<T>() where T : class $$");
        }

185
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
186 187 188 189 190 191
        public void AfterPreviousDelegateStructConstraint()
        {
            VerifyKeyword(
@"delegate void D<T>() where T : struct $$");
        }

192
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
193 194 195 196 197 198
        public void AfterPreviousDelegateNewConstraint()
        {
            VerifyKeyword(
@"delegate void D<T>() where T : new() $$");
        }

199
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
200 201 202 203 204 205
        public void AfterPreviousDelegateConstraint()
        {
            VerifyKeyword(
@"delegate void D<T>() where T : IList<T> $$");
        }

206
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
207 208 209 210 211 212 213
        public void NotAfterMethod()
        {
            VerifyAbsence(
@"class C {
    void D() $$");
        }

214
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
215 216 217 218 219 220 221
        public void AfterGenericMethod()
        {
            VerifyKeyword(
@"class C {
    void D<T>() $$");
        }

222
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
223 224 225 226 227 228 229
        public void AfterPreviousMethodClassConstraint()
        {
            VerifyKeyword(
@"class C {
    void D<T>() where T : class $$");
        }

230
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
231 232 233 234 235 236 237
        public void AfterPreviousMethodStructConstraint()
        {
            VerifyKeyword(
@"class C {
    void D<T>() where T : struct $$");
        }

238
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
239 240 241 242 243 244 245
        public void AfterPreviousMethodNewConstraint()
        {
            VerifyKeyword(
@"class C {
    void D<T>() where T : new() $$");
        }

246
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
247 248 249 250 251 252 253 254
        public void AfterPreviousMethodConstraint()
        {
            VerifyKeyword(
@"class C {
    void D<T>() where T : IList<T> $$");
        }

        [WorkItem(550715)]
255
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
256 257 258 259 260 261 262 263
        public void NotAfterWhereTypeConstraint()
        {
            VerifyAbsence(
@"public class Foo<T> : System.Object where $$
{
}");
        }

264
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
265 266 267 268 269 270 271 272
        public void NotAfterWhereWhere()
        {
            VerifyAbsence(
@"public class Foo<T> : System.Object where where $$
{
}");
        }

273
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
274 275 276 277 278 279 280 281 282
        public void NotAfterWhereWhereWhere()
        {
            VerifyAbsence(
@"public class Foo<T> : System.Object where where where $$
{
}");
        }

        [WorkItem(550720)]
283
        [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
284 285 286 287 288 289 290 291 292
        public void NoWhereAfterDot()
        {
            VerifyAbsence(
@"public class Foo<where> : System.$$
{
}");
        }
    }
}