// 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 ConstKeywordRecommenderTests : KeywordRecommenderTests { [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AtRoot_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"$$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterClass_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"class C { } $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterGlobalStatement_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"System.Console.WriteLine(); $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterGlobalVariableDeclaration_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"int i = 0; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotInUsingAlias() { VerifyAbsence( @"using Foo = $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InEmptyStatement() { VerifyKeyword(AddInsideMethod( @"$$")); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotInCompilationUnit() { VerifyAbsence(SourceCodeKind.Regular, @"$$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterExtern() { VerifyAbsence(SourceCodeKind.Regular, @"extern alias Foo; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterExtern_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"extern alias Foo; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterUsing() { VerifyAbsence(SourceCodeKind.Regular, @"using Foo; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterUsing_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"using Foo; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterNamespace() { VerifyAbsence(SourceCodeKind.Regular, @"namespace N {} $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterTypeDeclaration() { VerifyAbsence(SourceCodeKind.Regular, @"class C {} $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterDelegateDeclaration() { VerifyAbsence(SourceCodeKind.Regular, @"delegate void Foo(); $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterMethod() { VerifyKeyword( @"class C { void Foo() {} $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterField() { VerifyKeyword( @"class C { int i; $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterProperty() { VerifyKeyword( @"class C { int i { get; } $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotBeforeUsing() { VerifyAbsence(SourceCodeKind.Regular, @"$$ using Foo;"); } [WpfFact(Skip = "528041"), Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotBeforeUsing_Interactive() { VerifyAbsence(SourceCodeKind.Script, @"$$ using Foo;"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterAssemblyAttribute() { VerifyAbsence(SourceCodeKind.Regular, @"[assembly: foo] $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterAssemblyAttribute_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"[assembly: foo] $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterRootAttribute() { VerifyAbsence(@"[foo] $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedAttribute() { VerifyKeyword( @"class C { [foo] $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InsideStruct() { VerifyKeyword( @"struct S { $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotInsideInterface() { VerifyAbsence(@"interface I { $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotInsideEnum() { VerifyAbsence(@"enum E { $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InsideClass() { VerifyKeyword( @"class C { $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterPartial() { VerifyAbsence(@"partial $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterAbstract() { VerifyAbsence(@"abstract $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterInternal() { VerifyAbsence(SourceCodeKind.Regular, @"internal $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterInternal_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"internal $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedInternal() { VerifyKeyword( @"class C { internal $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterPublic() { VerifyAbsence(SourceCodeKind.Regular, @"public $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterPublic_Interactive() { VerifyKeyword(SourceCodeKind.Script, @"public $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedPublic() { VerifyKeyword( @"class C { public $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterPrivate() { VerifyAbsence(SourceCodeKind.Regular, @"private $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterPrivate_Script() { VerifyKeyword(SourceCodeKind.Script, @"private $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedPrivate() { VerifyKeyword( @"class C { private $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterProtected() { VerifyAbsence( @"protected $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedProtected() { VerifyKeyword( @"class C { protected $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterSealed() { VerifyAbsence(@"sealed $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterNestedSealed() { VerifyAbsence( @"class C { sealed $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterStatic() { VerifyAbsence(@"static $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterNestedStatic() { VerifyAbsence( @"class C { static $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterStaticPublic() { VerifyAbsence(@"static public $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterNestedStaticPublic() { VerifyAbsence( @"class C { static public $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterDelegate() { VerifyAbsence(@"delegate $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterEvent() { VerifyAbsence( @"class C { event $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterConst() { VerifyAbsence( @"class C { const $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void NotAfterNew() { VerifyAbsence( @"new $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void AfterNestedNew() { VerifyKeyword( @"class C { new $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InMethod() { VerifyKeyword( @"class C { void Foo() { $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InMethodNotAfterConst() { VerifyAbsence( @"class C { void Foo() { const $$"); } [WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] public void InProperty() { VerifyKeyword( @"class C { int Foo { get { $$"); } } }