Browse Source

Add CompilerOptions.ReferenceCore

pull/1730/head
Siegfried Pammer 6 years ago
parent
commit
15fe9118dc
  1. 40
      ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
  2. 10
      ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

40
ICSharpCode.Decompiler.Tests/Helpers/Tester.cs

@ -55,6 +55,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -55,6 +55,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
UseRoslyn = 0x10,
UseMcs = 0x20,
ReferenceVisualBasic = 0x40,
ReferenceCore = 0x80,
}
[Flags]
@ -182,10 +183,29 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -182,10 +183,29 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
return Regex.Replace(il, @"'<PrivateImplementationDetails>\{[0-9A-F-]+\}'", "'<PrivateImplementationDetails>'");
}
static readonly string refAsmPath = new DotNetCorePathFinder(new Version(3, 0)).GetReferenceAssemblyPath(".NETCoreApp, Version = v3.0");
static readonly string coreRefAsmPath = new DotNetCorePathFinder(new Version(3, 0)).GetReferenceAssemblyPath(".NETCoreApp, Version = v3.0");
static readonly string refAsmPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
@"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2");
static readonly string thisAsmPath = Path.GetDirectoryName(typeof(Tester).Assembly.Location);
static readonly Lazy<IEnumerable<MetadataReference>> defaultReferences = new Lazy<IEnumerable<MetadataReference>>(GetDefaultReferences);
static readonly Lazy<IEnumerable<MetadataReference>> defaultReferences = new Lazy<IEnumerable<MetadataReference>>(delegate {
return new[]
{
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Facades\\netstandard.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "mscorlib.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Core.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, @"Facades\System.Runtime.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Xml.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.CSharp.dll")),
MetadataReference.CreateFromFile(typeof(ValueTuple).Assembly.Location),
MetadataReference.CreateFromFile(typeof(ValueTask).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Span<>).Assembly.Location),
};
});
static readonly Lazy<IEnumerable<MetadataReference>> coreDefaultReferences = new Lazy<IEnumerable<MetadataReference>>(GetDefaultReferences);
const string targetFrameworkAttributeSnippet = @"
@ -195,7 +215,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -195,7 +215,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
static IEnumerable<MetadataReference> GetDefaultReferences()
{
foreach (var reference in Directory.EnumerateFiles(refAsmPath, "*.dll")) {
foreach (var reference in Directory.EnumerateFiles(coreRefAsmPath, "*.dll")) {
yield return MetadataReference.CreateFromFile(reference);
}
}
@ -215,6 +235,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -215,6 +235,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
if (flags.HasFlag(CompilerOptions.Optimize)) {
preprocessorSymbols.Add("OPT");
}
if (flags.HasFlag(CompilerOptions.ReferenceCore)) {
preprocessorSymbols.Add("NETCORE");
}
if (flags.HasFlag(CompilerOptions.UseRoslyn)) {
preprocessorSymbols.Add("ROSLYN");
preprocessorSymbols.Add("CS60");
@ -250,8 +273,15 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -250,8 +273,15 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
languageVersion: Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp8
);
var syntaxTrees = sourceFileNames.Select(f => SyntaxFactory.ParseSyntaxTree(File.ReadAllText(f), parseOptions, path: f));
syntaxTrees = syntaxTrees.Concat(new[] { SyntaxFactory.ParseSyntaxTree(targetFrameworkAttributeSnippet) });
var references = defaultReferences.Value;
if (flags.HasFlag(CompilerOptions.ReferenceCore)) {
syntaxTrees = syntaxTrees.Concat(new[] { SyntaxFactory.ParseSyntaxTree(targetFrameworkAttributeSnippet) });
}
IEnumerable<MetadataReference> references;
if (flags.HasFlag(CompilerOptions.ReferenceCore)) {
references = coreDefaultReferences.Value;
} else {
references = defaultReferences.Value;
}
if (flags.HasFlag(CompilerOptions.ReferenceVisualBasic)) {
references = references.Concat(visualBasic.Value);
}

10
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -59,6 +59,12 @@ namespace ICSharpCode.Decompiler.Tests @@ -59,6 +59,12 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn
};
static readonly CompilerOptions[] dotnetCoreOnlyOptions =
{
CompilerOptions.UseRoslyn | CompilerOptions.ReferenceCore,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn | CompilerOptions.ReferenceCore
};
static readonly CompilerOptions[] defaultOptions =
{
CompilerOptions.None,
@ -302,7 +308,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -302,7 +308,7 @@ namespace ICSharpCode.Decompiler.Tests
}
[Test]
public void AsyncUsing([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
public void AsyncUsing([ValueSource(nameof(dotnetCoreOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
@ -442,7 +448,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -442,7 +448,7 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
public void InterfaceTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
RunForLibrary(cscOptions: cscOptions | CompilerOptions.ReferenceCore);
}
[Test]

Loading…
Cancel
Save