public void PortablePdb_DeterministicCompilation(CSharpCompilationOptions compilationOptions, EmitOptions emitOptions, CSharpParseOptions parseOptions) { var sourceOne = Parse(@" using System; class MainType { public static void Main() { Console.WriteLine(); } } ", filename: "a.cs", options: parseOptions, encoding: Encoding.UTF8); var sourceTwo = Parse(@" class TypeTwo { }", filename: "b.cs", options: parseOptions, encoding: new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); var sourceThree = Parse(@" class TypeThree { }", filename: "c.cs", options: parseOptions, encoding: Encoding.Unicode); var referenceOneCompilation = CreateCompilation( @"public struct StructWithReference { string PrivateData; } public struct StructWithValue { int PrivateData; }", options: TestOptions.DebugDll); var referenceTwoCompilation = CreateCompilation( @"public class ReferenceTwo { }", options: TestOptions.DebugDll); using var referenceOne = TestMetadataReferenceInfo.Create( referenceOneCompilation, fullPath: "abcd.dll", emitOptions: emitOptions); using var referenceTwo = TestMetadataReferenceInfo.Create( referenceTwoCompilation, fullPath: "efgh.dll", emitOptions: emitOptions); var testSource = new[] { sourceOne, sourceTwo, sourceThree }; TestDeterministicCompilationCSharp( parseOptions.LanguageVersion.MapSpecifiedToEffectiveVersion().ToDisplayString(), testSource, compilationOptions, emitOptions, new[] { referenceOne, referenceTwo }); }
public void PortablePdb_DeterministicCompilation_DuplicateFilePaths(CSharpCompilationOptions compilationOptions, EmitOptions emitOptions, CSharpParseOptions parseOptions) { var sourceOne = Parse(@" using System; class MainType { public static void Main() { Console.WriteLine(); } } ", filename: "a.cs", options: parseOptions, encoding: Encoding.UTF8); var sourceTwo = Parse(@" class TypeTwo { }", filename: "b.cs", options: parseOptions, encoding: new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); var sourceThree = Parse(@" class TypeThree { }", filename: "a.cs", options: parseOptions, encoding: Encoding.Unicode); var referenceOneCompilation = CreateCompilation( @"public struct StructWithReference { string PrivateData; } public struct StructWithValue { int PrivateData; }", options: TestOptions.DebugDll); var referenceTwoCompilation = CreateCompilation( @"public class ReferenceTwo { }", options: TestOptions.DebugDll); using var referenceOne = TestMetadataReferenceInfo.Create( referenceOneCompilation, fullPath: "abcd.dll", emitOptions: emitOptions); using var referenceTwo = TestMetadataReferenceInfo.Create( referenceTwoCompilation, fullPath: "efgh.dll", emitOptions: emitOptions); var testSource = new[] { sourceOne, sourceTwo, sourceThree }; // Note that only one debug document can be present for each distinct source path. // So if more than one syntax tree has the same file path, it won't be possible to do a rebuild from the DLL+PDB. TestDeterministicCompilationCSharp( parseOptions.LanguageVersion.MapSpecifiedToEffectiveVersion().ToDisplayString(), testSource, compilationOptions, emitOptions, new[] { referenceOne, referenceTwo }, debugDocumentsCount: 2); }