Skip to content

Commit

Permalink
Add additional module initializers tests from review (#46020)
Browse files Browse the repository at this point in the history
  • Loading branch information
RikkiGibson authored Jul 17, 2020
1 parent 91eb6ee commit ab38a9d
Showing 1 changed file with 88 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,62 @@ namespace System.Runtime.CompilerServices { class ModuleInitializerAttribute : S
);
}

[Fact]
public void ModuleInitializerOnPrivatePartialMethod_AllowMultiple()
{
string source = @"
using System;
using System.Runtime.CompilerServices;
partial class C
{
[ModuleInitializer] // 1
static partial void M1();
[ModuleInitializer] // 2
static partial void M2();
static partial void M2() { }
static partial void M3();
[ModuleInitializer] // 3
static partial void M3() { }
[ModuleInitializer] // 4
static partial void M4();
[ModuleInitializer] // 5
static partial void M4() { }
}
class Program
{
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
class ModuleInitializerAttribute : System.Attribute { }
}
";
var compilation = CreateCompilation(source, parseOptions: s_parseOptions);
compilation.VerifyEmitDiagnostics(
// (7,6): error CS8814: Module initializer method 'M1' must be accessible at the module level
// [ModuleInitializer] // 1
Diagnostic(ErrorCode.ERR_ModuleInitializerMethodMustBeAccessibleOutsideTopLevelType, "ModuleInitializer").WithArguments("M1").WithLocation(7, 6),
// (10,6): error CS8814: Module initializer method 'M2' must be accessible at the module level
// [ModuleInitializer] // 2
Diagnostic(ErrorCode.ERR_ModuleInitializerMethodMustBeAccessibleOutsideTopLevelType, "ModuleInitializer").WithArguments("M2").WithLocation(10, 6),
// (15,6): error CS8814: Module initializer method 'M3' must be accessible at the module level
// [ModuleInitializer] // 3
Diagnostic(ErrorCode.ERR_ModuleInitializerMethodMustBeAccessibleOutsideTopLevelType, "ModuleInitializer").WithArguments("M3").WithLocation(15, 6),
// (18,6): error CS8814: Module initializer method 'M4' must be accessible at the module level
// [ModuleInitializer] // 4
Diagnostic(ErrorCode.ERR_ModuleInitializerMethodMustBeAccessibleOutsideTopLevelType, "ModuleInitializer").WithArguments("M4").WithLocation(18, 6),
// (20,6): error CS8814: Module initializer method 'M4' must be accessible at the module level
// [ModuleInitializer] // 5
Diagnostic(ErrorCode.ERR_ModuleInitializerMethodMustBeAccessibleOutsideTopLevelType, "ModuleInitializer").WithArguments("M4").WithLocation(20, 6)
);
}

[Fact]
public void ModuleInitializerOnPublicPartialMethod()
{
Expand Down Expand Up @@ -230,6 +286,38 @@ namespace System.Runtime.CompilerServices { class ModuleInitializerAttribute : S
);
}

[Fact]
public void DuplicateModuleInitializerOnPublicPartialMethod_AllowMultiple()
{
string source = @"
using System;
using System.Runtime.CompilerServices;
partial class C
{
[ModuleInitializer]
public static partial void M1();
[ModuleInitializer]
public static partial void M1() { Console.Write(1); }
}
class Program
{
static void Main()
{
Console.Write(2);
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
class ModuleInitializerAttribute : System.Attribute { }
}
";
CompileAndVerify(source, expectedOutput: "12", parseOptions: s_parseOptions);
}

[Theory]
[InlineData("public")]
[InlineData("internal")]
Expand Down

0 comments on commit ab38a9d

Please sign in to comment.