public void Test_WildCardInputAssemblies_All_Assemblies_Are_Public_If_Internalize_False()
        {
            var workingDirectory = _baseFixture.WorkingDirectory;

            // If test cases fail then we have to remove those libraries or this test case may
            // fail because there are multiple "My*.dll" libraries present in working directory causing duplicate type exceptions.
            workingDirectory.DeleteResidueMyLibraries();

            var ticks = DateTime.Now.Ticks;

            var publicLibraryAssemblyDefinition   = _baseFixture.BuildLibrary($"MyPublicLibrary{ticks}", "ThisClassShouldBePublic");
            var internalLibraryAssemblyDefinition = _baseFixture.BuildLibrary($"MyInternalLibrary{ticks}", "ThisClassShouldBeInternal");
            var ilRepackedAssemblyDefinition      = _baseFixture.BuildLibrary($"MyILRepackedLibrary{ticks}", "ThisClassShouldAlsoBePublic");

            using (_baseFixture.WithDisposableAssemblies(workingDirectory, publicLibraryAssemblyDefinition, internalLibraryAssemblyDefinition, ilRepackedAssemblyDefinition))
            {
                var task = new ILRepack
                {
                    FakeBuildEngine = new FakeBuildEngine(),
                    Internalize     = false,
                    OutputType      = "Library",
                    MainAssembly    = ilRepackedAssemblyDefinition.GetRelativeFilename(),
                    OutputAssembly  = ilRepackedAssemblyDefinition.GetRelativeFilename(),
                    InputAssemblies = new List <ITaskItem>
                    {
                        new TaskItem("My*.dll")
                    }.ToArray(),
                    WilcardInputAssemblies = true,
                    WorkingDirectory       = workingDirectory
                };

                Assert.True(task.Execute());

                Assert.True(File.Exists(task.OutputAssembly));

                using (ilRepackedAssemblyDefinition = AssemblyDefinition.ReadAssembly(task.OutputAssembly))
                {
                    Assert.NotNull(ilRepackedAssemblyDefinition);

                    var references = ilRepackedAssemblyDefinition.MainModule.AssemblyReferences.ToList();
                    Assert.Single(references);
                    Assert.Equal("mscorlib", references[0].Name);

                    var types = ilRepackedAssemblyDefinition.MainModule.Types.ToList();

                    var thisClassShouldBePublic = types.SingleOrDefault(x => x.Namespace == publicLibraryAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldBePublic");
                    Assert.NotNull(thisClassShouldBePublic);
                    Assert.True(thisClassShouldBePublic.IsPublic);

                    var thisClassShouldBeInternal = types.SingleOrDefault(x => x.Namespace == internalLibraryAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldBeInternal");
                    Assert.NotNull(thisClassShouldBeInternal);
                    Assert.True(thisClassShouldBeInternal.IsPublic);

                    var thisClassShouldAlsoBePublic = types.SingleOrDefault(x => x.Namespace == ilRepackedAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldAlsoBePublic");
                    Assert.NotNull(thisClassShouldAlsoBePublic);
                    Assert.True(thisClassShouldAlsoBePublic.IsPublic);
                }
            }
        }
        public void TestInternalize_Exclude_Relative_Regex()
        {
            var workingDirectory = _baseFixture.WorkingDirectory;

            var ticks = DateTime.Now.Ticks;

            var publicLibraryAssemblyDefinition   = _baseFixture.BuildLibrary($"PublicLibrary{ticks}", "ThisClassShouldBePublic");
            var internalLibraryAssemblyDefinition = _baseFixture.BuildLibrary($"InternalLibrary{ticks}", "ThisClassShouldBeInternal");
            var ilRepackedAssemblyDefinition      = _baseFixture.BuildLibrary($"ILRepackedLibrary{ticks}", "ThisClassShouldAlsoBePublic");

            using (_baseFixture.WithDisposableAssemblies(workingDirectory, publicLibraryAssemblyDefinition, internalLibraryAssemblyDefinition, ilRepackedAssemblyDefinition))
            {
                var task = new ILRepack
                {
                    FakeBuildEngine = new FakeBuildEngine(),
                    OutputType      = "Library",
                    MainAssembly    = ilRepackedAssemblyDefinition.GetRelativeFilename(),
                    OutputAssembly  = ilRepackedAssemblyDefinition.GetRelativeFilename(),
                    InputAssemblies = new List <ITaskItem>
                    {
                        new TaskItem(publicLibraryAssemblyDefinition.GetRelativeFilename()),
                        new TaskItem(internalLibraryAssemblyDefinition.GetRelativeFilename())
                    }.ToArray(),
                    InternalizeExcludeAssemblies = new ITaskItem[]
                    {
                        new TaskItem(publicLibraryAssemblyDefinition.GetInternalizeRegex())
                    },
                    WorkingDirectory = workingDirectory
                };

                Assert.True(task.Execute());

                Assert.True(File.Exists(task.OutputAssembly));

                using (ilRepackedAssemblyDefinition = AssemblyDefinition.ReadAssembly(task.OutputAssembly))
                {
                    Assert.NotNull(ilRepackedAssemblyDefinition);

                    var references = ilRepackedAssemblyDefinition.MainModule.AssemblyReferences.ToList();
                    Assert.Single(references);
                    Assert.Equal("mscorlib", references[0].Name);

                    var types = ilRepackedAssemblyDefinition.MainModule.Types.ToList();

                    var thisClassShouldBePublic = types.SingleOrDefault(x => x.Namespace == publicLibraryAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldBePublic");
                    Assert.NotNull(thisClassShouldBePublic);
                    Assert.True(thisClassShouldBePublic.IsPublic);

                    var thisClassShouldBeInternal = types.SingleOrDefault(x => x.Namespace == internalLibraryAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldBeInternal");
                    Assert.NotNull(thisClassShouldBeInternal);
                    Assert.False(thisClassShouldBeInternal.IsPublic);

                    var thisClassShouldAlsoBePublic = types.SingleOrDefault(x => x.Namespace == ilRepackedAssemblyDefinition.MainModule.Name && x.Name == "ThisClassShouldAlsoBePublic");
                    Assert.NotNull(thisClassShouldAlsoBePublic);
                    Assert.True(thisClassShouldAlsoBePublic.IsPublic);
                }
            }
        }