提交 9fbed0b6 编写于 作者: J Jared Parsons

Re-arranging portable TestUtilities part 1

The TestUtilities project should be our portable unit test helper.  This is part one of rearranging our sources to reflect that reality.  I'm separating it out because it involves a significant code move that
will make the actual rework part harder to review.
上级 6167bb2d
......@@ -77,8 +77,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CscCore", "src\Compilers\CS
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VbcCore", "src\Compilers\VisualBasic\VbcCore\VbcCore.csproj", "{8CE3A581-2969-4864-A803-013E9D977C3A}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "TestUtilities.Shared", "src\Test\Utilities\Shared\TestUtilities.Shared.shproj", "{6FF42825-5464-4151-AC55-ED828168C192}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSBuildTaskTests", "src\Compilers\Core\MSBuildTaskTests\MSBuildTaskTests.csproj", "{1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{E35DA3D1-16C0-4318-9187-6B664F12A870}"
......@@ -147,8 +145,6 @@ Global
src\Compilers\VisualBasic\BasicAnalyzerDriver\BasicAnalyzerDriver.projitems*{2523d0e6-df32-4a3e-8ae0-a19bffae2ef6}*SharedItemsImports = 4
src\Compilers\Server\ServerShared\ServerShared.projitems*{32691768-af9c-4cae-9d0f-10721091b9aa}*SharedItemsImports = 13
src\Compilers\Core\CommandLine\CommandLine.projitems*{4b45ca0c-03a0-400f-b454-3d4bcb16af38}*SharedItemsImports = 4
src\Test\Utilities\Shared\TestUtilities.projitems*{6ff42825-5464-4151-ac55-ed828168c192}*SharedItemsImports = 13
src\Test\Utilities\Shared\TestUtilities.projitems*{76c6f005-c89d-4348-bb4a-391898dbeb52}*SharedItemsImports = 4
src\Compilers\Core\CommandLine\CommandLine.projitems*{7ad4fe65-9a30-41a6-8004-aa8f89bcb7f3}*SharedItemsImports = 4
src\Compilers\Core\CommandLine\CommandLine.projitems*{8ce3a581-2969-4864-a803-013e9d977c3a}*SharedItemsImports = 4
src\Compilers\Core\CommandLine\CommandLine.projitems*{9508f118-f62e-4c16-a6f4-7c3b56e166ad}*SharedItemsImports = 4
......@@ -158,7 +154,6 @@ Global
src\Dependencies\PooledObjects\Microsoft.CodeAnalysis.PooledObjects.projitems*{afde6bea-5038-4a4a-a88e-dbd2e4088eed}*SharedItemsImports = 4
src\Compilers\CSharp\CSharpAnalyzerDriver\CSharpAnalyzerDriver.projitems*{b501a547-c911-4a05-ac6e-274a50dff30e}*SharedItemsImports = 4
src\Dependencies\PooledObjects\Microsoft.CodeAnalysis.PooledObjects.projitems*{c1930979-c824-496b-a630-70f5369a636f}*SharedItemsImports = 13
src\Test\Utilities\Shared\TestUtilities.projitems*{ccbd3438-3e84-40a9-83ad-533f23bcfca5}*SharedItemsImports = 4
src\Compilers\Core\AnalyzerDriver\AnalyzerDriver.projitems*{d0bc9be7-24f6-40ca-8dc6-fcb93bd44b34}*SharedItemsImports = 13
src\Dependencies\CodeAnalysis.Metadata\Microsoft.CodeAnalysis.Metadata.projitems*{d73adf7d-2c1c-42ae-b2ab-edc9497e4b71}*SharedItemsImports = 13
src\Compilers\Core\CommandLine\CommandLine.projitems*{e3cd2895-76a8-4d11-a316-ea67cb5ea42c}*SharedItemsImports = 4
......@@ -1241,7 +1236,6 @@ Global
{E58EE9D7-1239-4961-A0C1-F9EC3952C4C1} = {C65C6143-BED3-46E6-869E-9F0BE6E84C37}
{E3CD2895-76A8-4D11-A316-EA67CB5EA42C} = {32A48625-F0AD-419D-828B-A50BDABA38EA}
{8CE3A581-2969-4864-A803-013E9D977C3A} = {C65C6143-BED3-46E6-869E-9F0BE6E84C37}
{6FF42825-5464-4151-AC55-ED828168C192} = {6F016299-BA96-45BA-9BFF-6C0793979177}
{1DFEA9C5-973C-4179-9B1B-0F32288E1EF2} = {A41D1B99-F489-4C43-BBDF-96D61B19A6B9}
{AD6F474E-E6D4-4217-91F3-B7AF1BE31CCC} = {A41D1B99-F489-4C43-BBDF-96D61B19A6B9}
{06B26DCB-7A12-48EF-AE50-708593ABD05F} = {E35DA3D1-16C0-4318-9187-6B664F12A870}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.Test.Utilities
{
}
......@@ -4,7 +4,7 @@
<Import Project="..\..\..\..\build\Targets\Settings.props" />
<PropertyGroup>
<Platform Condition="'$(Platform)' == ''">AnyCPU</Platform>
<ProjectGuid>{67ca3eee-37f1-4edf-bd9b-c11911748f37}</ProjectGuid>
<ProjectGuid>{67CA3EEE-37F1-4EDF-BD9B-C11911748F37}</ProjectGuid>
<OutputType>Library</OutputType>
<AssemblyName>Roslyn.Test.Utilities.CoreClr</AssemblyName>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
......@@ -67,7 +67,8 @@
<None Include="project.json" />
</ItemGroup>
<ItemGroup>
<Compile Include="Temp.cs" />
<Compile Include="CoreCLRRuntimeEnvironment.cs" />
<Compile Include="Exceptions.cs" />
</ItemGroup>
<Import Project="..\..\..\..\build\Targets\Imports.targets" />
</Project>
\ No newline at end of file
......@@ -20,8 +20,6 @@
namespace Microsoft.CodeAnalysis.Test.Utilities
{
public abstract partial class CommonTestBase
{
public class CompilationVerifier
{
private readonly CommonTestBase _test;
......@@ -336,5 +334,4 @@ public void VerifyOperationTree(string symbolToVerify, string expectedOperationT
_compilation.VerifyOperationTree(symbolToVerify, expectedOperationTree, skipImplicitlyDeclaredSymbols);
}
}
}
}
......@@ -8,13 +8,6 @@
namespace Microsoft.CodeAnalysis.Test.Utilities
{
public class SignatureDescription
{
public string FullyQualifiedTypeName { get; set; }
public string MemberName { get; set; }
public string ExpectedSignature { get; set; }
}
internal class MetadataSignatureUnitTestHelper
{
/// <summary>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.Emit;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Test.Utilities
{
public static class ModuleExtension
{
public static readonly string EXE = ".exe";
public static readonly string DLL = ".dll";
public static readonly string NETMODULE = ".netmodule";
}
[Serializable]
public struct ModuleDataId
{
public string SimpleName { get; }
public string FullName { get; }
public Guid Mvid { get; }
public ModuleDataId(Assembly assembly)
{
SimpleName = assembly.GetName().Name;
FullName = assembly.FullName;
Mvid = assembly.ManifestModule.ModuleVersionId;
}
public ModuleDataId(string simpleName, string fullName, Guid mvid)
{
SimpleName = simpleName;
FullName = fullName;
Mvid = mvid;
}
public override string ToString()
{
return $"{FullName} - {Mvid}";
}
}
[Serializable, DebuggerDisplay("{GetDebuggerDisplay()}")]
public sealed class ModuleData : ISerializable
{
public readonly ModuleDataId Id;
public readonly OutputKind Kind;
public readonly ImmutableArray<byte> Image;
public readonly ImmutableArray<byte> Pdb;
public readonly bool InMemoryModule;
public string SimpleName => Id.SimpleName;
public string FullName => Id.FullName;
public Guid Mvid => Id.Mvid;
public ModuleData(string netModuleName, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule)
{
this.Id = new ModuleDataId(netModuleName, netModuleName, GetMvid(image));
this.Kind = OutputKind.NetModule;
this.Image = image;
this.Pdb = pdb;
this.InMemoryModule = inMemoryModule;
}
public ModuleData(AssemblyIdentity identity, OutputKind kind, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule)
{
this.Id = new ModuleDataId(identity.Name, identity.GetDisplayName(), GetMvid(image));
this.Kind = kind;
this.Image = image;
this.Pdb = pdb;
this.InMemoryModule = inMemoryModule;
}
private static Guid GetMvid(ImmutableArray<byte> image)
{
using (var metadata = ModuleMetadata.CreateFromImage(image))
{
return metadata.GetModuleVersionId();
}
}
private string GetDebuggerDisplay()
{
return FullName + " {" + Mvid + "}";
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(nameof(Id), this.Id);
info.AddValue(nameof(Kind), (int)this.Kind);
info.AddByteArray(nameof(Image), this.Image);
info.AddByteArray(nameof(Pdb), this.Pdb);
info.AddValue(nameof(InMemoryModule), this.InMemoryModule);
}
private ModuleData(SerializationInfo info, StreamingContext context)
{
this.Id = (ModuleDataId)info.GetValue(nameof(Id), typeof(ModuleDataId));
this.Kind = (OutputKind)info.GetInt32(nameof(Kind));
this.Image = info.GetByteArray(nameof(Image));
this.Pdb = info.GetByteArray(nameof(Pdb));
this.InMemoryModule = info.GetBoolean(nameof(InMemoryModule));
}
}
}
......@@ -37,6 +37,10 @@
<Project>{afde6bea-5038-4a4a-a88e-dbd2e4088eed}</Project>
<Name>PdbUtilities</Name>
</ProjectReference>
<ProjectReference Include="..\Portable\TestUtilities.csproj">
<Project>{ccbd3438-3e84-40a9-83ad-533f23bcfca5}</Project>
<Name>TestUtilities</Name>
</ProjectReference>
</ItemGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
......@@ -90,7 +94,6 @@
<Compile Include="ProcessUtilities.cs" />
<Compile Include="AppDomainAssemblyCache.cs" />
<Compile Include="Exceptions.cs" />
<Compile Include="ModuleData.cs" />
<Compile Include="Extensions.cs" />
<Compile Include="RuntimeAssemblyManager.cs" />
<Compile Include="SharedResourceHelpers.cs" />
......@@ -102,7 +105,6 @@
<Compile Include="HostedRuntimeEnvironment.cs" />
<Compile Include="MetadataSignatureHelper.cs" />
<Compile Include="MetadataSignatureUnitTestHelper.cs" />
<Compile Include="ProcessResult.cs" />
<Compile Include="..\Portable\ReflectionAssert.cs">
<Link>ReflectionAssert.cs</Link>
</Compile>
......@@ -164,6 +166,5 @@
<CustomToolNamespace>Roslyn.Test.Utilities</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
<Import Project="..\Shared\TestUtilities.projitems" Label="Shared" />
<Import Project="..\..\..\..\build\Targets\Imports.targets" />
</Project>
\ No newline at end of file
......@@ -14,17 +14,17 @@
namespace Roslyn.Test.Utilities
{
public class RuntimeEnvironmentFactory
{
private static readonly Lazy<Func<IRuntimeEnvironment>> s_lazyFactory = new Lazy<Func<IRuntimeEnvironment>>(GetFactoryFunc);
internal static IRuntimeEnvironment Create(IEnumerable<ModuleData> additionalDependencies = null)
{
}
#if DNX
return new CoreCLRRuntimeEnvironment(additionalDependencies);
#else
return new HostedRuntimeEnvironment(additionalDependencies);
#endif
private static Func<IRuntimeEnvironment> GetFactoryFunc()
{
throw new Exception();
}
}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Linq;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.Test.Utilities
{
public class SignatureDescription
{
public string FullyQualifiedTypeName { get; set; }
public string MemberName { get; set; }
public string ExpectedSignature { get; set; }
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.Emit;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Test.Utilities
{
public static class ModuleExtension
{
public static readonly string EXE = ".exe";
public static readonly string DLL = ".dll";
public static readonly string NETMODULE = ".netmodule";
}
public struct ModuleDataId
{
public string SimpleName { get; }
public string FullName { get; }
public Guid Mvid { get; }
public ModuleDataId(Assembly assembly)
{
SimpleName = assembly.GetName().Name;
FullName = assembly.FullName;
// TODO: Use S.R.M to load mvid
Mvid = new Guid();
}
public ModuleDataId(string simpleName, string fullName, Guid mvid)
{
SimpleName = simpleName;
FullName = fullName;
Mvid = mvid;
}
public override string ToString()
{
return $"{FullName} - {Mvid}";
}
}
[DebuggerDisplay("{GetDebuggerDisplay()}")]
public sealed class ModuleData
{
public readonly ModuleDataId Id;
public readonly OutputKind Kind;
public readonly ImmutableArray<byte> Image;
public readonly ImmutableArray<byte> Pdb;
public readonly bool InMemoryModule;
public string SimpleName => Id.SimpleName;
public string FullName => Id.FullName;
public Guid Mvid => Id.Mvid;
public ModuleData(string netModuleName, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule)
{
this.Id = new ModuleDataId(netModuleName, netModuleName, GetMvid(image));
this.Kind = OutputKind.NetModule;
this.Image = image;
this.Pdb = pdb;
this.InMemoryModule = inMemoryModule;
}
public ModuleData(AssemblyIdentity identity, OutputKind kind, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule)
{
this.Id = new ModuleDataId(identity.Name, identity.GetDisplayName(), GetMvid(image));
this.Kind = kind;
this.Image = image;
this.Pdb = pdb;
this.InMemoryModule = inMemoryModule;
}
private static Guid GetMvid(ImmutableArray<byte> image)
{
using (var metadata = ModuleMetadata.CreateFromImage(image))
{
return metadata.GetModuleVersionId();
}
}
private string GetDebuggerDisplay()
{
return FullName + " {" + Mvid + "}";
}
}
}
......@@ -2,7 +2,6 @@
<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -->
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\..\build\Targets\Settings.props" />
<Import Project="..\Shared\TestUtilities.projitems" Label="Shared" />
<PropertyGroup>
<Platform Condition="'$(Platform)' == ''">AnyCPU</Platform>
<ProjectGuid>{CCBD3438-3E84-40A9-83AD-533F23BCFCA5}</ProjectGuid>
......@@ -104,21 +103,111 @@
<None Include="project.json" />
</ItemGroup>
<ItemGroup>
<Compile Include="Assert\AssertEx.cs" />
<Compile Include="Assert\AssertXml.cs" />
<Compile Include="Assert\ClrOnlyFactAttribute.cs" />
<Compile Include="Assert\ConditionalFactAttribute.cs" />
<Compile Include="Assert\DiffUtil.cs" />
<Compile Include="Assert\EqualityTesting.cs" />
<Compile Include="Assert\EqualityUnit.cs" />
<Compile Include="Assert\EqualityUnit`1.cs" />
<Compile Include="Assert\EqualityUtil.cs" />
<Compile Include="Assert\EqualityUtil`1.cs" />
<Compile Include="Assert\TestExceptionUtilities.cs" />
<Compile Include="Assert\WorkItemAttribute.cs" />
<Compile Include="CommonTestBase.cs" />
<Compile Include="Compilation\CompilationDifference.cs" />
<Compile Include="Compilation\CompilationExtensions.cs" />
<Compile Include="Compilation\CompilationOutputFiles.cs" />
<Compile Include="Compilation\CompilationTestDataExtensions.cs" />
<Compile Include="Compilation\DiagnosticBagErrorLogger.cs" />
<Compile Include="Compilation\IRuntimeEnvironment.cs" />
<Compile Include="Compilation\OperationTreeVerifier.cs" />
<Compile Include="Compilation\TestOperationWalker.cs" />
<Compile Include="Compilation\VersionTestHelpers.cs" />
<Compile Include="ConditionalFactAttribute.cs" />
<Compile Include="CoreCLRRuntimeEnvironment.cs" />
<Compile Include="Exceptions.cs" />
<Compile Include="Diagnostics\BoxingOperationAnalyzer.cs" />
<Compile Include="Diagnostics\CouldHaveMoreSpecificTypeAnalyzer.cs" />
<Compile Include="Diagnostics\DescriptorFactory.cs" />
<Compile Include="Diagnostics\DiagnosticDescription.cs" />
<Compile Include="Diagnostics\DiagnosticExtensions.cs" />
<Compile Include="Diagnostics\DiagnosticsHelper.cs" />
<Compile Include="Diagnostics\EmptyArrayAnalyzer.cs" />
<Compile Include="Diagnostics\FieldCouldBeReadOnlyAnalyzer.cs" />
<Compile Include="Diagnostics\LocalCouldBeConstAnalyzer.cs" />
<Compile Include="Diagnostics\OperationTestAnalyzer.cs" />
<Compile Include="Diagnostics\OptionsDiagnosticAnalyzer.cs" />
<Compile Include="Diagnostics\SuppressMessageAttributeTests.cs" />
<Compile Include="Diagnostics\SuppressMessageAttributeTests.DiagnosticAnalyzers.cs" />
<Compile Include="Diagnostics\TestDiagnosticAnalyzer.cs" />
<Compile Include="Diagnostics\ThrowingDiagnosticAnalyzer.cs" />
<Compile Include="Diagnostics\TrackingDiagnosticAnalyzer.cs" />
<Compile Include="ExceptionHelper.cs" />
<Compile Include="CompilerTraitAttribute.cs" />
<Compile Include="Extensions\SymbolExtensions.cs" />
<Compile Include="FX\ConsoleOutput.cs" />
<Compile Include="FX\CultureHelpers.cs" />
<Compile Include="FX\DirectoryHelper.cs" />
<Compile Include="FX\EncodingUtilities.cs" />
<Compile Include="FX\EnsureEnglishUICulture.cs" />
<Compile Include="FX\EnsureInvariantCulture.cs" />
<Compile Include="FX\EventWaiter.cs" />
<Compile Include="FX\ImmutableArrayTestExtensions.cs" />
<Compile Include="FX\MonoHelpers.cs" />
<Compile Include="FX\PinnedBlob.cs" />
<Compile Include="FX\PinnedMetadata.cs" />
<Compile Include="FX\ProcessResult.cs" />
<Compile Include="FX\RegexExtensions.cs" />
<Compile Include="FX\StringExtensions.cs" />
<Compile Include="ICompilationVerifier.cs" />
<Compile Include="MetadataSignatureUnitTestHelper.cs" />
<Compile Include="ModuleData.cs" />
<Compile Include="MarkedSource\MarkupTestFile.cs" />
<Compile Include="MarkedSource\SourceWithMarkedNodes.cs" />
<Compile Include="Metadata\CustomAttributeRow.cs" />
<Compile Include="Metadata\DynamicAnalysisDataReader.cs" />
<Compile Include="Metadata\EncValidation.cs" />
<Compile Include="Metadata\IlasmUtilities.cs" />
<Compile Include="Metadata\ILBuilderVisualizer.cs" />
<Compile Include="Metadata\MetadataReaderUtils.cs" />
<Compile Include="Metadata\MetadataValidation.cs" />
<Compile Include="Metadata\ModuleData.cs" />
<Compile Include="Metadata\PEModuleTestHelpers.cs" />
<Compile Include="Metadata\SignatureDescription.cs" />
<Compile Include="Metadata\TypeAttributesMissing.cs" />
<Compile Include="Mocks\TestDocumentationCommentProvider.cs" />
<Compile Include="Mocks\TestMessageProvider.cs" />
<Compile Include="Mocks\TestMetadataReference.cs" />
<Compile Include="Mocks\TestMetadataReferenceResolver.cs" />
<Compile Include="Mocks\TestMissingMetadataReferenceResolver.cs" />
<Compile Include="Mocks\TestReferences.cs" />
<Compile Include="Mocks\TestSourceReferenceResolver.cs" />
<Compile Include="Mocks\TestStream.cs" />
<Compile Include="Mocks\VirtualizedRelativePathResolver.cs" />
<Compile Include="Pdb\MockSymWriter.cs" />
<Compile Include="Pdb\PdbTestUtilities.cs" />
<Compile Include="Pdb\PdbValidation.cs" />
<Compile Include="Pe\BrokenStream.cs" />
<Compile Include="ReflectionAssert.cs" />
<Compile Include="Syntax\ISyntaxNodeKindProvider.cs" />
<Compile Include="Syntax\NodeHelpers.cs" />
<Compile Include="Syntax\NodeInfo.cs" />
<Compile Include="Syntax\NodeInfo.FieldInfo.cs" />
<Compile Include="Syntax\SourceUtilities.cs" />
<Compile Include="Syntax\TokenUtilities.cs" />
<Compile Include="Syntax\XmlHelpers.cs" />
<Compile Include="TempFiles\DisposableDirectory.cs" />
<Compile Include="TempFiles\DisposableFile.cs" />
<Compile Include="TempFiles\TempDirectory.cs" />
<Compile Include="TempFiles\TempFile.cs" />
<Compile Include="TempFiles\TempRoot.cs" />
<Compile Include="TestBase.cs" />
<Compile Include="TestResource.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>TestResource.resx</DependentUpon>
</Compile>
<Compile Include="ThrowingTraceListener.cs" />
<Compile Include="Traits\ComilerTraitDiscoverer.cs" />
<Compile Include="Traits\CompilerFeature.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="TestResource.resx">
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.CodeAnalysis.Text;
namespace Roslyn.Test.Utilities
{
/// <summary>
/// Encapsulates exit code and output/error streams of a process.
/// </summary>
public sealed class ProcessResult
{
public int ExitCode { get; }
public string Output { get; }
public string Errors { get; }
public ProcessResult(int exitCode, string output, string errors)
{
ExitCode = exitCode;
Output = output;
Errors = errors;
}
public override string ToString()
{
return "EXIT CODE: " +
this.ExitCode +
Environment.NewLine +
"OUTPUT STREAM:" +
Environment.NewLine +
this.Output +
Environment.NewLine +
"ERRORS:" +
Environment.NewLine +
this.Errors;
}
public bool ContainsErrors
{
get { return this.ExitCode != 0 || !string.IsNullOrEmpty(this.Errors); }
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using Xunit;
namespace Roslyn.Test.Utilities
{
public static class ProcessUtilities
{
/// <summary>
/// Launch a process, wait for it to complete, and return output, error, and exit code.
/// </summary>
public static ProcessResult Run(
string fileName,
string arguments,
string workingDirectory = null,
IEnumerable<KeyValuePair<string, string>> additionalEnvironmentVars = null)
{
if (fileName == null) throw new ArgumentNullException(nameof(fileName));
var startInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
WorkingDirectory = workingDirectory
};
if (additionalEnvironmentVars != null)
{
foreach (var entry in additionalEnvironmentVars)
{
startInfo.Environment[entry.Key] = entry.Value;
}
}
using (var process = new Process { StartInfo = startInfo })
{
StringBuilder outputBuilder = new StringBuilder();
StringBuilder errorBuilder = new StringBuilder();
process.OutputDataReceived += (sender, args) =>
{
if (args.Data != null)
outputBuilder.AppendLine(args.Data);
};
process.ErrorDataReceived += (sender, args) =>
{
if (args.Data != null)
errorBuilder.AppendLine(args.Data);
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return new ProcessResult(process.ExitCode, outputBuilder.ToString(), errorBuilder.ToString());
}
}
/// <summary>
/// Launch a process, and return Process object. The process continues to run asynchronously.
/// You cannot capture the output.
/// </summary>
public static Process StartProcess(string fileName, string arguments, string workingDirectory = null)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
var startInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
WorkingDirectory = workingDirectory
};
Process p = new Process { StartInfo = startInfo };
p.Start();
return p;
}
public static string RunAndGetOutput(string exeFileName, string arguments = null, int expectedRetCode = 0, string startFolder = null)
{
ProcessStartInfo startInfo = new ProcessStartInfo(exeFileName);
if (arguments != null)
{
startInfo.Arguments = arguments;
}
string result = null;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
if (startFolder != null)
{
startInfo.WorkingDirectory = startFolder;
}
using (var process = Process.Start(startInfo))
{
// Do not wait for the child process to exit before reading to the end of its
// redirected stream. Read the output stream first and then wait. Doing otherwise
// might cause a deadlock.
result = process.StandardOutput.ReadToEnd();
process.WaitForExit();
Assert.Equal(expectedRetCode, process.ExitCode);
}
return result;
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Text.RegularExpressions;
using Xunit;
namespace Microsoft.CodeAnalysis.Scripting.Hosting.UnitTests
{
public abstract class ObjectFormatterTestBase
{
protected static PrintOptions SingleLineOptions => new PrintOptions { MemberDisplayFormat = MemberDisplayFormat.SingleLine };
protected static PrintOptions SeparateLinesOptions => new PrintOptions { MemberDisplayFormat = MemberDisplayFormat.SeparateLines, MaximumOutputLength = int.MaxValue };
protected static PrintOptions HiddenOptions => new PrintOptions { MemberDisplayFormat = MemberDisplayFormat.Hidden };
public void AssertMembers(string str, params string[] expected)
{
int i = 0;
foreach (var line in str.Split(new[] { "\r\n " }, StringSplitOptions.None))
{
if (i == 0)
{
Assert.Equal(expected[i] + " {", line);
}
else if (i == expected.Length - 1)
{
Assert.Equal(expected[i] + "\r\n}\r\n", line);
}
else
{
Assert.Equal(expected[i] + ",", line);
}
i++;
}
Assert.Equal(expected.Length, i);
}
public string FilterDisplayString(string str)
{
str = Regex.Replace(str, @"Id = \d+", "Id = *");
str = Regex.Replace(str, @"Id=\d+", "Id=*");
str = Regex.Replace(str, @"Id: \d+", "Id: *");
return str;
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Globalization;
using Microsoft.CodeAnalysis.CSharp.Scripting.Hosting;
namespace Microsoft.CodeAnalysis.Scripting.Hosting.UnitTests
{
internal sealed class TestCSharpObjectFormatter : CSharpObjectFormatterImpl
{
private readonly bool _includeCodePoints;
private readonly bool _quoteStringsAndCharacters;
private readonly int _maximumLineLength;
private readonly CultureInfo _cultureInfo;
public TestCSharpObjectFormatter(bool includeCodePoints = false, bool quoteStringsAndCharacters = true, int maximumLineLength = int.MaxValue, CultureInfo cultureInfo = null)
{
_includeCodePoints = includeCodePoints;
_quoteStringsAndCharacters = quoteStringsAndCharacters;
_maximumLineLength = maximumLineLength;
_cultureInfo = cultureInfo ?? CultureInfo.InvariantCulture;
}
protected override BuilderOptions GetInternalBuilderOptions(PrintOptions printOptions) =>
new BuilderOptions(
indentation: " ",
newLine: Environment.NewLine,
ellipsis: printOptions.Ellipsis,
maximumLineLength: _maximumLineLength,
maximumOutputLength: printOptions.MaximumOutputLength);
protected override CommonPrimitiveFormatterOptions GetPrimitiveOptions(PrintOptions printOptions) =>
new CommonPrimitiveFormatterOptions(
numberRadix: printOptions.NumberRadix,
includeCodePoints: _includeCodePoints,
escapeNonPrintableCharacters: printOptions.EscapeNonPrintableCharacters,
quoteStringsAndCharacters: _quoteStringsAndCharacters,
cultureInfo: _cultureInfo);
}
}
\ No newline at end of file
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Globalization;
using Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting;
namespace Microsoft.CodeAnalysis.Scripting.Hosting.UnitTests
{
internal sealed class TestVisualBasicObjectFormatter : VisualBasicObjectFormatterImpl
{
private readonly bool _quoteStringsAndCharacters;
private readonly int _maximumLineLength;
private readonly CultureInfo _cultureInfo;
public TestVisualBasicObjectFormatter(
bool quoteStringsAndCharacters = true,
int maximumLineLength = int.MaxValue,
CultureInfo cultureInfo = null)
{
_quoteStringsAndCharacters = quoteStringsAndCharacters;
_maximumLineLength = maximumLineLength;
_cultureInfo = cultureInfo ?? CultureInfo.InvariantCulture;
}
protected override BuilderOptions GetInternalBuilderOptions(PrintOptions printOptions) =>
new BuilderOptions(
indentation: " ",
newLine: Environment.NewLine,
ellipsis: printOptions.Ellipsis,
maximumLineLength: _maximumLineLength,
maximumOutputLength: printOptions.MaximumOutputLength);
protected override CommonPrimitiveFormatterOptions GetPrimitiveOptions(PrintOptions printOptions) =>
new CommonPrimitiveFormatterOptions(
numberRadix: printOptions.NumberRadix,
includeCodePoints: false,
escapeNonPrintableCharacters: printOptions.EscapeNonPrintableCharacters,
quoteStringsAndCharacters: _quoteStringsAndCharacters,
cultureInfo: _cultureInfo);
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<ProjectGuid>6FF42825-5464-4151-AC55-ED828168C192</ProjectGuid>
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
<PropertyGroup />
<Import Project="TestUtilities.projitems" Label="Shared" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<HasSharedItems>true</HasSharedItems>
<SharedGUID>6FF42825-5464-4151-AC55-ED828168C192</SharedGUID>
</PropertyGroup>
<PropertyGroup Label="Configuration">
<Import_RootNamespace>Roslyn.Test.Utilities</Import_RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)Assert\ClrOnlyFactAttribute.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\EqualityTesting.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\TestExceptionUtilities.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\AssertEx.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\AssertXml.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\ConditionalFactAttribute.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\WorkItemAttribute.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\DiffUtil.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\EqualityUnit.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\EqualityUnit`1.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\EqualityUtil.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Assert\EqualityUtil`1.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\CompilationDifference.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\CompilationExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\CompilationOutputFiles.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\CompilationTestDataExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\DiagnosticBagErrorLogger.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\IRuntimeEnvironment.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\OperationTreeVerifier.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\TestOperationWalker.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Compilation\VersionTestHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\BoxingOperationAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\CouldHaveMoreSpecificTypeAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DescriptorFactory.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DiagnosticDescription.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DiagnosticExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\DiagnosticsHelper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\EmptyArrayAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\FieldCouldBeReadOnlyAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\LocalCouldBeConstAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\OperationTestAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\OptionsDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\SuppressMessageAttributeTests.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\SuppressMessageAttributeTests.DiagnosticAnalyzers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\TestDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\ThrowingDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\TrackingDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ExceptionHelper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SymbolExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\ConsoleOutput.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\CultureHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\DirectoryHelper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\EncodingUtilities.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\EnsureInvariantCulture.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\EnsureEnglishUICulture.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\EventWaiter.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\ImmutableArrayTestExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\MonoHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\PinnedBlob.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\PinnedMetadata.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\RegexExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)FX\StringExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\CustomAttributeRow.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\DynamicAnalysisDataReader.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\EncValidation.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\ILBuilderVisualizer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\MetadataReaderUtils.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\MetadataValidation.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\TypeAttributesMissing.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Metadata\PEModuleTestHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestDocumentationCommentProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestMissingMetadataReferenceResolver.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestSourceReferenceResolver.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\VirtualizedRelativePathResolver.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Pdb\MockSymWriter.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Pdb\PdbTestUtilities.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Pdb\PdbValidation.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Pe\BrokenStream.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\SourceUtilities.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TempFiles\DisposableDirectory.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TempFiles\DisposableFile.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TempFiles\TempDirectory.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TempFiles\TempFile.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TempFiles\TempRoot.cs" />
<Compile Include="$(MSBuildThisFileDirectory)MarkedSource\MarkupTestFile.cs" />
<Compile Include="$(MSBuildThisFileDirectory)MarkedSource\SourceWithMarkedNodes.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\ISyntaxNodeKindProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\NodeHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\NodeInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\NodeInfo.FieldInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\TokenUtilities.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Syntax\XmlHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestMessageProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestMetadataReference.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestMetadataReferenceResolver.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestReferences.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Mocks\TestStream.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TestBase.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Traits\ComilerTraitDiscoverer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Traits\CompilerFeature.cs" />
</ItemGroup>
</Project>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册