[System] Overwrite Console encoding to match mcs text output for CodeDOM compiler...
authorMarek Safar <marek.safar@gmail.com>
Tue, 21 Jun 2016 17:44:05 +0000 (19:44 +0200)
committerMarek Safar <marek.safar@gmail.com>
Tue, 21 Jun 2016 17:46:14 +0000 (19:46 +0200)
mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs
mcs/class/System/Test/Microsoft.CSharp/CSharpCodeProviderTest.cs

index a4de75e853a54719fc8293f8852e83e2e32092be..00424bd70f370d8cc10be4b2e2ddeec4ead96442 100644 (file)
@@ -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();
index a5899fd28f3ab544f83a1e863f669a3ca5ef3091..2e9ef60993db000f2d431ec64db0d2c088b73bb0 100644 (file)
@@ -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<string>().ToArray ()[1].Contains ("Trigger Some Warning"));
+               }
+
                private static string CreateTempDirectory ()
                {
                        // create a uniquely named zero-byte file