public void TestDiagnostic() { MockMessageProvider provider = new MockMessageProvider(); SyntaxTree syntaxTree = new MockSyntaxTree(); CultureInfo englishCulture = CultureHelpers.EnglishCulture; DiagnosticInfo di1 = new DiagnosticInfo(provider, 1); Assert.Equal(1, di1.Code); Assert.Equal(DiagnosticSeverity.Error, di1.Severity); Assert.Equal("MOCK0001", di1.MessageIdentifier); Assert.Equal("The first error", di1.GetMessage(englishCulture)); DiagnosticInfo di2 = new DiagnosticInfo(provider, 1002, "Elvis", "Mort"); Assert.Equal(1002, di2.Code); Assert.Equal(DiagnosticSeverity.Warning, di2.Severity); Assert.Equal("MOCK1002", di2.MessageIdentifier); Assert.Equal("The second warning about Elvis and Mort", di2.GetMessage(englishCulture)); Location l1 = new SourceLocation(syntaxTree, new TextSpan(5, 8)); var d1 = new CSDiagnostic(di2, l1); Assert.Equal(l1, d1.Location); Assert.Same(syntaxTree, d1.Location.SourceTree); Assert.Equal(new TextSpan(5, 8), d1.Location.SourceSpan); Assert.Equal(0, d1.AdditionalLocations.Count()); Assert.Same(di2, d1.Info); }
public void TestSerialization() { var tree = Parse("public class C { }", "file.cs"); var libRef = CreateCompilationWithMscorlib(tree, assemblyName: "Metadata").EmitToImageReference(); var comp = CreateCompilationWithMscorlib(tree, new[] { libRef }, assemblyName: "Source"); var sourceAssembly = comp.SourceAssembly; var referencedAssembly = (AssemblySymbol)comp.GetAssemblyOrModuleSymbol(libRef); var sourceType = sourceAssembly.GlobalNamespace.GetMember <NamedTypeSymbol>("C"); var referenedType = referencedAssembly.GlobalNamespace.GetMember <NamedTypeSymbol>("C"); var distinguisher = new SymbolDistinguisher(comp, sourceType, referenedType); var diagnostic = new CSDiagnostic(new CSDiagnosticInfo(ErrorCode.ERR_NoImplicitConv, distinguisher.First, distinguisher.Second), Location.None); var before = diagnostic.GetMessage(); Assert.Equal("Cannot implicitly convert type 'C [file.cs(1)]' to 'C [Metadata, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]'", before); using (var stream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(stream, diagnostic); stream.Position = 0; diagnostic = (CSDiagnostic)formatter.Deserialize(stream); var after = diagnostic.GetMessage(); Assert.Equal(before, after); } }
public void TestCustomErrorInfo() { MockMessageProvider provider = new MockMessageProvider(); SyntaxTree syntaxTree = new MockSyntaxTree(); DiagnosticInfo di3 = new CustomErrorInfo(provider, "OtherSymbol", new SourceLocation(syntaxTree, new TextSpan(14, 8))); var d3 = new CSDiagnostic(di3, new SourceLocation(syntaxTree, new TextSpan(1, 1))); Assert.Same(syntaxTree, d3.Location.SourceTree); Assert.Equal(new TextSpan(1, 1), d3.Location.SourceSpan); Assert.Equal(1, d3.AdditionalLocations.Count()); Assert.Equal(new TextSpan(14, 8), d3.AdditionalLocations.First().SourceSpan); Assert.Equal("OtherSymbol", (d3.Info as CustomErrorInfo).OtherSymbol); }
public void ErrorLineEnd() { var tree = SyntaxFactory.ParseSyntaxTree("class C public { }", path: "foo"); var comp = new MockCSharpCompiler(null, _baseDirectory, new[] { "/errorendlocation" }); var loc = new SourceLocation(tree.GetCompilationUnitRoot().FindToken(6)); var diag = new CSDiagnostic(new DiagnosticInfo(MessageProvider.Instance, (int)ErrorCode.ERR_MetadataNameTooLong), loc); var text = comp.DiagnosticFormatter.Format(diag); string stringStart = "foo(1,7,1,8)"; Assert.Equal(stringStart, text.Substring(0, stringStart.Length)); }
public void TestSerialization() { var tree = Parse("public class C { }", "file.cs"); var libRef = CreateCompilationWithMscorlib(tree, assemblyName: "Metadata").EmitToImageReference(); var comp = CreateCompilationWithMscorlib(tree, new[] { libRef }, assemblyName: "Source"); var sourceAssembly = comp.SourceAssembly; var referencedAssembly = (AssemblySymbol)comp.GetAssemblyOrModuleSymbol(libRef); var sourceType = sourceAssembly.GlobalNamespace.GetMember<NamedTypeSymbol>("C"); var referenedType = referencedAssembly.GlobalNamespace.GetMember<NamedTypeSymbol>("C"); var distinguisher = new SymbolDistinguisher(comp, sourceType, referenedType); var diagnostic = new CSDiagnostic(new CSDiagnosticInfo(ErrorCode.ERR_NoImplicitConv, distinguisher.First, distinguisher.Second), Location.None); var before = diagnostic.GetMessage(); Assert.Equal("Cannot implicitly convert type 'C [file.cs(1)]' to 'C [Metadata, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]'", before); using (var stream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(stream, diagnostic); stream.Position = 0; diagnostic = (CSDiagnostic)formatter.Deserialize(stream); var after = diagnostic.GetMessage(); Assert.Equal(before, after); } }