Skip to content

Commit

Permalink
Fix support for multiple languages in AdditionalProjects
Browse files Browse the repository at this point in the history
  • Loading branch information
sharwell committed Jun 22, 2021
1 parent 38150ef commit 876f52e
Show file tree
Hide file tree
Showing 2 changed files with 273 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,22 @@ public ProjectCollection(string defaultLanguage, string defaultExtension)
{
get
{
var project = this.GetOrAdd(projectName, () => new ProjectState(projectName, _defaultLanguage, $"/{projectName}/Test", _defaultExtension));
string extension;
if (language == _defaultLanguage)
{
extension = _defaultExtension;
}
else
{
extension = language switch
{
LanguageNames.CSharp => "cs",
LanguageNames.VisualBasic => "vb",
_ => throw new ArgumentOutOfRangeException(nameof(language)),
};
}

var project = this.GetOrAdd(projectName, () => new ProjectState(projectName, language, $"/{projectName}/Test", extension));
if (project.Language != language)
{
throw new InvalidOperationException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
Microsoft.CodeAnalysis.Testing.TestAnalyzers.HighlightBracesAnalyzer,
Microsoft.CodeAnalysis.Testing.TestAnalyzers.CSharpAnalyzerTest<Microsoft.CodeAnalysis.Testing.TestAnalyzers.HighlightBracesAnalyzer>,
Microsoft.CodeAnalysis.Testing.DefaultVerifier>;
using VisualBasicTest = Microsoft.CodeAnalysis.Testing.TestAnalyzers.VisualBasicAnalyzerTest<
Microsoft.CodeAnalysis.Testing.TestAnalyzers.HighlightBracesAnalyzer>;

namespace Microsoft.CodeAnalysis.Testing
{
Expand Down Expand Up @@ -44,6 +46,87 @@ public async Task TwoCSharpProjects_Independent()
}.RunAsync();
}

[Fact]
public async Task TwoVisualBasicProjects_Independent()
{
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Derived1 : Inherits {|BC30002:Base2|} : End Class",
@"Public Class Base1 : End Class",
},
AdditionalProjects =
{
["Secondary"] =
{
Sources =
{
@"Public Class Derived2 : Inherits {|BC30002:Base1|} : End Class",
@"Public Class Base2 : End Class",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneCSharpProjectOneVisualBasicProject_Independent()
{
await new CSharpTest
{
TestState =
{
Sources =
{
@"public class Derived1 : {|CS0246:Base2|} [|{|] }",
@"public class Base1 [|{|] }",
},
AdditionalProjects =
{
["Secondary", LanguageNames.VisualBasic] =
{
Sources =
{
@"Public Class Derived2 : Inherits {|BC30002:Base1|} : End Class",
@"Public Class Base2 : End Class",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneVisualBasicProjectOneCSharpProject_Independent()
{
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Derived1 : Inherits {|BC30002:Base2|} : End Class",
@"Public Class Base1 : End Class",
},
AdditionalProjects =
{
["Secondary", LanguageNames.CSharp] =
{
Sources =
{
@"public class Derived2 : {|CS0246:Base1|} [|{|] }",
@"public class Base2 [|{|] }",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task TwoCSharpProjects_IndependentWithMarkupLocations()
{
Expand Down Expand Up @@ -120,6 +203,93 @@ public async Task TwoCSharpProjects_PrimaryReferencesSecondary()
}.RunAsync();
}

[Fact]
public async Task TwoVisualBasicProjects_PrimaryReferencesSecondary()
{
// TestProject references Secondary
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Derived1 : Inherits Base2 : End Class",
@"Public Class Base1 : End Class",
},
AdditionalProjectReferences = { "Secondary", },
AdditionalProjects =
{
["Secondary"] =
{
Sources =
{
@"Public Class Derived2 : Inherits {|BC30002:Base1|} : End Class",
@"Public Class Base2 : End Class",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneCSharpProjectOneVisualBasicProject_PrimaryReferencesSecondary()
{
// TestProject references Secondary
await new CSharpTest
{
TestState =
{
Sources =
{
@"public class Type1 [|{|] object field = new Type3(); }",
@"public class Type2 [|{|] }",
},
AdditionalProjectReferences = { "Secondary", },
AdditionalProjects =
{
["Secondary", LanguageNames.VisualBasic] =
{
Sources =
{
@"Public Class Type3 : Private field As Object = New {|BC30002:Type1|}() : End Class",
@"Public Class Type4 : End Class",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneVisualBasicProjectOneCSharpProject_PrimaryReferencesSecondary()
{
// TestProject references Secondary
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Type1 : Private field As Object = New Type3() : End Class",
@"Public Class Type2 : End Class",
},
AdditionalProjectReferences = { "Secondary", },
AdditionalProjects =
{
["Secondary", LanguageNames.CSharp] =
{
Sources =
{
@"public class Type3 [|{|] object field = new {|CS0246:Type1|}(); }",
@"public class Type4 [|{|] }",
},
},
},
},
}.RunAsync();
}

[Fact]
public async Task TwoCSharpProjects_SecondaryReferencesPrimary()
{
Expand Down Expand Up @@ -149,6 +319,93 @@ public async Task TwoCSharpProjects_SecondaryReferencesPrimary()
}.RunAsync();
}

[Fact]
public async Task TwoVisualBasicProjects_SecondaryReferencesPrimary()
{
// TestProject references Secondary
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Derived1 : Inherits {|BC30002:Base2|} : End Class",
@"Public Class Base1 : End Class",
},
AdditionalProjects =
{
["Secondary"] =
{
Sources =
{
@"Public Class Derived2 : Inherits Base1 : End Class",
@"Public Class Base2 : End Class",
},
AdditionalProjectReferences = { "TestProject" },
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneCSharpProjectOneVisualBasicProject_SecondaryReferencesPrimary()
{
// TestProject references Secondary
await new CSharpTest
{
TestState =
{
Sources =
{
@"public class Type1 [|{|] object field = new {|CS0246:Type3|}(); }",
@"public class Type2 [|{|] }",
},
AdditionalProjects =
{
["Secondary", LanguageNames.VisualBasic] =
{
Sources =
{
@"Public Class Type3 : Private field As Object = New Type1() : End Class",
@"Public Class Type4 : End Class",
},
AdditionalProjectReferences = { "TestProject" },
},
},
},
}.RunAsync();
}

[Fact]
public async Task OneVisualBasicProjectOneCSharpProject_SecondaryReferencesPrimary()
{
// TestProject references Secondary
await new VisualBasicTest
{
TestState =
{
Sources =
{
@"Public Class Type1 : Private field As Object = New {|BC30002:Type3|}() : End Class",
@"Public Class Type2 : End Class",
},
AdditionalProjects =
{
["Secondary", LanguageNames.CSharp] =
{
Sources =
{
@"public class Type3 [|{|] object field = new Type1(); }",
@"public class Type4 [|{|] }",
},
AdditionalProjectReferences = { "TestProject" },
},
},
},
}.RunAsync();
}

[Fact]
public async Task TwoCSharpProjects_DefaultPaths()
{
Expand Down

0 comments on commit 876f52e

Please sign in to comment.