Skip to content

Commit

Permalink
Enable ca2000 for tests and fix the leaks (#10161)
Browse files Browse the repository at this point in the history
* Enable CA2000 in tests

* Fix the process ca2000 error

* disabel the warning CA2000 in StartToolProcess

* Refactor the XmlReader create

* Fix new CA2000 after merge

* Fix the typo error

* Fix the indent

---------

Co-authored-by: Gang Wang <v-gaw@microsoft.com>
  • Loading branch information
JaynieBai and GangWang01 committed Jun 12, 2024
1 parent 74e23a9 commit 9ead13b
Show file tree
Hide file tree
Showing 108 changed files with 1,906 additions and 1,214 deletions.
14 changes: 8 additions & 6 deletions src/Build.OM.UnitTests/Construction/ConstructionEditing_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2313,14 +2313,15 @@ public void InvalidChooseOverflow()
[Fact]
public void Dirtying_ItemCondition()
{
XmlReader content = XmlReader.Create(new StringReader(ObjectModelHelpers.CleanupFileContents(
var projectFileContents = ObjectModelHelpers.CleanupFileContents(
@"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
<ItemGroup>
<i Include=""i1"" />
</ItemGroup>
</Project>")));
</Project>");

Project project = new Project(content);
using ProjectFromString projectFromString = new(projectFileContents);
Project project = projectFromString.Project;
ProjectItem item = Helpers.GetFirst(project.Items);

item.Xml.Condition = "false";
Expand All @@ -2338,16 +2339,17 @@ public void Dirtying_ItemCondition()
[Fact]
public void Dirtying_MetadataCondition()
{
XmlReader content = XmlReader.Create(new StringReader(ObjectModelHelpers.CleanupFileContents(
var content = ObjectModelHelpers.CleanupFileContents(
@"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
<ItemGroup>
<i Include=""i1"">
<m>m1</m>
</i>
</ItemGroup>
</Project>")));
</Project>");

Project project = new Project(content);
using ProjectFromString projectFromString = new(content);
Project project = projectFromString.Project;
ProjectMetadata metadatum = Helpers.GetFirst(project.Items).GetMetadata("m");

metadatum.Xml.Condition = "false";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ public void ReadChooseOnlyWhen()
</Choose>
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectChooseElement choose = (ProjectChooseElement)Helpers.GetFirst(project.Children);

Assert.Equal(1, Helpers.Count(choose.WhenElements));
Expand All @@ -217,7 +217,8 @@ public void ReadChooseBothWhenOtherwise()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectChooseElement choose = (ProjectChooseElement)Helpers.GetFirst(project.Children);

List<ProjectWhenElement> whens = Helpers.MakeList(choose.WhenElements);
Expand Down Expand Up @@ -270,7 +271,8 @@ public void SettingWhenConditionDirties()
</Project>
";

Project project = new Project(XmlReader.Create(new StringReader(content)));
using ProjectFromString projectFromString = new(content);
Project project = projectFromString.Project;
ProjectChooseElement choose = Helpers.GetFirst(project.Xml.ChooseElements);
ProjectWhenElement when = Helpers.GetFirst(choose.WhenElements);
when.Condition = "false";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public void Read()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);

Assert.Equal(@"<a />", extensions.Content);
Expand Down Expand Up @@ -116,7 +117,8 @@ public void DeleteById()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);
extensions["a"] = String.Empty;
content = extensions["a"];
Expand All @@ -141,7 +143,8 @@ public void GetById()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);

content = extensions["b"];
Expand All @@ -166,7 +169,8 @@ public void SetById()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);

extensions["c"] = "z";
Expand All @@ -188,7 +192,8 @@ public void SetByIdWhereItAlreadyExists()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);

extensions["b"] = "y2";
Expand All @@ -206,7 +211,8 @@ private static ProjectExtensionsElement GetEmptyProjectExtensions()
</Project>
";

ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)));
using ProjectRootElementFromString projectRootElementFromString = new(content);
ProjectRootElement project = projectRootElementFromString.Project;
ProjectExtensionsElement extensions = (ProjectExtensionsElement)Helpers.GetFirst(project.Children);
return extensions;
}
Expand Down
86 changes: 57 additions & 29 deletions src/Build.OM.UnitTests/Construction/ProjectFormatting_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,15 @@ public void ProjectAddItemFormatting_StartOfGroup()
</ItemGroup>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);
project.AddItem("Compile", "Class1.cs");
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand Down Expand Up @@ -141,12 +144,15 @@ public void ProjectAddItemFormatting_MiddleOfGroup()
</ItemGroup>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);
project.AddItem("Compile", "Class2.cs");
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand Down Expand Up @@ -174,12 +180,14 @@ public void ProjectAddItemFormatting_EndOfGroup()
</ItemGroup>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;
Project project = new Project(xml);
project.AddItem("Compile", "Program.cs");
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand All @@ -192,7 +200,6 @@ public void ProjectAddItemFormatting_EndOfGroup()
</Project>");

string actual = writer.ToString();

VerifyAssertLineByLine(expected, actual);
}

Expand All @@ -204,12 +211,15 @@ public void ProjectAddItemFormatting_EmptyGroup()
<ItemGroup>
</ItemGroup>
</Project>");
ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);
project.AddItem("Compile", "Program.cs");
StringWriter writer = new EncodingStringWriter();
using StringWriter writer = new EncodingStringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-8""?>
Expand All @@ -231,12 +241,14 @@ public void ProjectAddItemFormatting_NoItemGroup()
<Project DefaultTargets=`Build` ToolsVersion=`msbuilddefaulttoolsversion` xmlns=`msbuildnamespace`>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;
Project project = new Project(xml);
project.AddItem("Compile", "Program.cs");
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand All @@ -263,15 +275,18 @@ public void ProjectRemoveItemFormatting()
</ItemGroup>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);

var itemToRemove = project.GetItems("Compile").Single(item => item.EvaluatedInclude == "Class2.cs");
project.RemoveItem(itemToRemove);

StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand Down Expand Up @@ -299,15 +314,18 @@ public void ProjectAddItemMetadataFormatting()
</ItemGroup>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)),
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);

var itemToEdit = project.GetItems("Compile").Single(item => item.EvaluatedInclude == "Class2.cs");
itemToEdit.SetMetadataValue("ExcludeFromStyleCop", "true");

StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = ObjectModelHelpers.CleanupFileContents(@"<?xml version=""1.0"" encoding=""utf-16""?>
Expand Down Expand Up @@ -339,11 +357,15 @@ public void PreprocessorFormatting()
/>
</Project>");

ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(content)), ProjectCollection.GlobalProjectCollection,
using ProjectRootElementFromString projectRootElementFromString = new(
content,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);

StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();

project.SaveLogicalProject(writer);

Expand All @@ -362,11 +384,14 @@ private void VerifyFormattingPreserved(string projectContents)

private void VerifyFormattingPreservedFromString(string projectContents)
{
ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(projectContents)),
using ProjectRootElementFromString projectRootElementFromString = new(
projectContents,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = @"<?xml version=""1.0"" encoding=""utf-16""?>" +
Expand All @@ -391,7 +416,7 @@ private void VerifyFormattingPreservedFromFile(string projectContents)
ProjectRootElement xml = ProjectRootElement.Open(file, ProjectCollection.GlobalProjectCollection,
preserveFormatting: true);
Project project = new Project(xml);
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = @"<?xml version=""1.0"" encoding=""utf-16""?>" +
Expand All @@ -414,11 +439,14 @@ private void VerifyProjectReformatting(string originalContents, string expectedC

private void VerifyProjectReformattingFromString(string originalContents, string expectedContents)
{
ProjectRootElement xml = ProjectRootElement.Create(XmlReader.Create(new StringReader(originalContents)),
using ProjectRootElementFromString projectRootElementFromString = new(
originalContents,
ProjectCollection.GlobalProjectCollection,
preserveFormatting: false);
ProjectRootElement xml = projectRootElementFromString.Project;

Project project = new Project(xml);
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = @"<?xml version=""1.0"" encoding=""utf-16""?>" +
Expand All @@ -443,7 +471,7 @@ private void VerifyProjectReformattingFromFile(string originalContents, string e
ProjectRootElement xml = ProjectRootElement.Open(file, ProjectCollection.GlobalProjectCollection,
preserveFormatting: false);
Project project = new Project(xml);
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string expected = @"<?xml version=""1.0"" encoding=""utf-16""?>" +
Expand Down Expand Up @@ -508,7 +536,7 @@ public void DefaultProjectSaveContainsAllNewFileOptions()
project.AddItem("ProjectReference", @"..\CLREXE\CLREXE.vcxproj",
new[] { new KeyValuePair<string, string>("metadata", "value") });

StringWriter writer = new EncodingStringWriter();
using StringWriter writer = new EncodingStringWriter();
project.Save(writer);

string actual = writer.ToString();
Expand All @@ -533,7 +561,7 @@ public void NewProjectSaveWithOptionsNone()
var item = project.AddItem("ProjectReference", @"..\CLREXE\CLREXE.vcxproj");
item[0].SetMetadataValue("metadata", "value");

StringWriter writer = new EncodingStringWriter();
using StringWriter writer = new EncodingStringWriter();
project.Save(writer);

string actual = writer.ToString();
Expand All @@ -554,7 +582,7 @@ public void ChangeItemTypeNoNamespace()
var item = project.AddItem("NotProjectReference", @"..\CLREXE\CLREXE.vcxproj");
item[0].ItemType = "ProjectReference";

StringWriter writer = new EncodingStringWriter();
using StringWriter writer = new EncodingStringWriter();
project.Save(writer);

string actual = writer.ToString();
Expand All @@ -577,7 +605,7 @@ public void ChangeItemTypeWithNamespace()
item[0].ItemType = "ProjectReference";

// StringWriter is UTF16 (will output xml declaration)
StringWriter writer = new StringWriter();
using StringWriter writer = new StringWriter();
project.Save(writer);

string actual = writer.ToString();
Expand All @@ -601,7 +629,7 @@ public void ChangeItemTypeWithXmlHeader()

// Should still output XML declaration even when using UTF8 (NewProjectFileOptions.IncludeXmlDeclaration
// was specified)
StringWriter writer = new EncodingStringWriter();
using StringWriter writer = new EncodingStringWriter();
project.Save(writer);

string actual = writer.ToString();
Expand All @@ -616,7 +644,7 @@ public void VerifyUtf8WithoutBomTreatedAsUtf8()
</Project>");

Project project = new Project(NewProjectFileOptions.None);
StringWriter writer = new EncodingStringWriter(new UTF8Encoding(encoderShouldEmitUTF8Identifier: true));
using StringWriter writer = new EncodingStringWriter(new UTF8Encoding(encoderShouldEmitUTF8Identifier: true));
project.Save(writer);

string actual = writer.ToString();
Expand Down
Loading

0 comments on commit 9ead13b

Please sign in to comment.