From: Marek Safar Date: Tue, 21 Jun 2016 17:44:05 +0000 (+0200) Subject: [System] Overwrite Console encoding to match mcs text output for CodeDOM compiler... X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=27482448e956fcedb4c254fdea3a072f5153094b;p=mono.git [System] Overwrite Console encoding to match mcs text output for CodeDOM compiler. Fixes #41979 --- diff --git a/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs b/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs index a4de75e853a..00424bd70f3 100644 --- a/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs +++ b/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs @@ -215,6 +215,10 @@ namespace Mono.CSharp mcs.StartInfo.RedirectStandardOutput=true; mcs.StartInfo.RedirectStandardError=true; mcs.ErrorDataReceived += new DataReceivedEventHandler (McsStderrDataReceived); + + // Use same text decoder as mcs and not user set values in Console + mcs.StartInfo.StandardOutputEncoding = + mcs.StartInfo.StandardErrorEncoding = Encoding.UTF8; try { mcs.Start(); diff --git a/mcs/class/System/Test/Microsoft.CSharp/CSharpCodeProviderTest.cs b/mcs/class/System/Test/Microsoft.CSharp/CSharpCodeProviderTest.cs index a5899fd28f3..2e9ef60993d 100644 --- a/mcs/class/System/Test/Microsoft.CSharp/CSharpCodeProviderTest.cs +++ b/mcs/class/System/Test/Microsoft.CSharp/CSharpCodeProviderTest.cs @@ -16,6 +16,8 @@ using System.IO; using System.Reflection; using Microsoft.CSharp; using NUnit.Framework; +using System.Text; +using System.Linq; namespace MonoTests.Microsoft.CSharp { @@ -566,6 +568,39 @@ namespace MonoTests.Microsoft.CSharp AssertCompileResults (results, true); } + [Test] + public void EncodingMismatch () + { + var source = @" + #warning Trigger Some Warning + public class MyClass { + public static string MyMethod () { return ""data""; } + }"; + + var p = new CompilerParameters () { + GenerateInMemory = false, + GenerateExecutable = false, + IncludeDebugInformation = true, + TreatWarningsAsErrors = false, + TempFiles = new TempFileCollection (_tempDir, true), + }; + + var prov = new CSharpCodeProvider (); + CompilerResults results; + + var prev = Console.OutputEncoding; + try { + Console.OutputEncoding = Encoding.Unicode; + + results = prov.CompileAssemblyFromSource (p, source); + } finally { + Console.OutputEncoding = prev; + } + + Assert.IsNotNull (results.Errors); + Assert.IsTrue (results.Output.Cast().ToArray ()[1].Contains ("Trigger Some Warning")); + } + private static string CreateTempDirectory () { // create a uniquely named zero-byte file