public void CompilationChain_SystemObject_NotEquals() { // As in VS/ETA, make a new list of references for each submission. var options = new CSharpParseOptions(kind: SourceCodeKind.Interactive, documentationMode: DocumentationMode.None); var provider = new TestMetadataReferenceProvider() { MakeDocumentationProvider = () => new TestDocumentationProviderNoEquals() }; var s1 = CSharpCompilation.CreateSubmission("s1.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options), references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s1.GetDiagnostics().Verify(); var s2 = CSharpCompilation.CreateSubmission("s2.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options), previousSubmission: s1, references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); Assert.NotEqual(s1.GetSpecialType(SpecialType.System_Object), s2.GetSpecialType(SpecialType.System_Object)); s2.GetDiagnostics().Verify( // (1,58): error CS0029: Cannot implicitly convert type 'S' to 'object' // System.Collections.IEnumerable Iterator() { yield return new S(); } Diagnostic(ErrorCode.ERR_NoImplicitConv, "new S()").WithArguments("S", "object")); }
public void CompilationChain_SystemObject_Equals() { // As in VS/ETA, make a new list of references for each submission. var options = new CSharpParseOptions(kind: SourceCodeKind.Interactive, documentationMode: DocumentationMode.None); var provider = new TestMetadataReferenceProvider() { MakeDocumentationProvider = () => new TestDocumentationProviderEquals() }; var s1 = CSharpCompilation.CreateSubmission("s1.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options), references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s1.GetDiagnostics().Verify(); var s2 = CSharpCompilation.CreateSubmission("s2.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options), previousSubmission: s1, references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s2.GetDiagnostics().Verify(); Assert.Equal(s1.GetSpecialType(SpecialType.System_Object), s2.GetSpecialType(SpecialType.System_Object)); }
public void CompilationChain_SystemObject_NotEquals() { // As in VS/ETA, make a new list of references for each submission. var options = new CSharpParseOptions(kind: SourceCodeKind.Interactive, documentationMode: DocumentationMode.None); var provider = new TestMetadataReferenceProvider() { MakeDocumentationProvider = () => new TestDocumentationProviderNoEquals() }; var s1 = CSharpCompilation.CreateSubmission("s1.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options), references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s1.VerifyDiagnostics(); var s2 = CSharpCompilation.CreateSubmission("s2.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options), previousSubmission: s1, references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); Assert.NotEqual(s1.GetSpecialType(SpecialType.System_Object), s2.GetSpecialType(SpecialType.System_Object)); s2.VerifyDiagnostics( // (1,58): error CS0029: Cannot implicitly convert type 'S' to 'object' // System.Collections.IEnumerable Iterator() { yield return new S(); } Diagnostic(ErrorCode.ERR_NoImplicitConv, "new S()").WithArguments("S", "object")); }
/// <summary> /// NOTE: We're going through the command line parser to mimic the approach of visual studio and the ETA. /// Crucially, this CommandLineArguments will use the provided TestMetadataReferenceProvider to attach a fresh /// DocumentationProvider to each reference. /// </summary> private static IEnumerable <MetadataReference> MakeReferencesViaCommandLine(TestMetadataReferenceProvider metadataReferenceProvider) { var commandLineArguments = CSharpCommandLineParser.Interactive.Parse( new string[0], Directory.GetDirectoryRoot("."), //NOTE: any absolute path will do - we're not going to use this. RuntimeEnvironment.GetRuntimeDirectory()); return(commandLineArguments.ResolveMetadataReferences(new AssemblyReferenceResolver(MetadataFileReferenceResolver.Default, metadataReferenceProvider))); }
/// <summary> /// NOTE: We're going through the command line parser to mimic the approach of visual studio and the ETA. /// Crucially, this CommandLineArguments will use the provided TestMetadataReferenceProvider to attach a fresh /// DocumentationProvider to each reference. /// </summary> private static IEnumerable <MetadataReference> MakeReferencesViaCommandLine(TestMetadataReferenceProvider metadataReferenceProvider) { var commandLineArguments = CSharpCommandLineParser.Interactive.Parse( new[] { "/r:" + typeof(Script).Assembly.Location }, //get corlib by default Directory.GetDirectoryRoot("."), //NOTE: any absolute path will do - we're not going to use this. RuntimeEnvironment.GetRuntimeDirectory()); var references = commandLineArguments.ResolveMetadataReferences(new AssemblyReferenceResolver(MetadataFileReferenceResolver.Default, metadataReferenceProvider)); return(references); }
/// <summary> /// NOTE: We're going through the command line parser to mimic the approach of visual studio and the ETA. /// Crucially, this CommandLineArguments will use the provided TestMetadataReferenceProvider to attach a fresh /// DocumentationProvider to each reference. /// </summary> private static IEnumerable<MetadataReference> MakeReferencesViaCommandLine(TestMetadataReferenceProvider metadataReferenceProvider) { var commandLineArguments = CSharpCommandLineParser.Interactive.Parse( new[] { "/r:" + typeof(Script).Assembly.Location }, //get corlib by default Directory.GetDirectoryRoot("."), //NOTE: any absolute path will do - we're not going to use this. RuntimeEnvironment.GetRuntimeDirectory()); var references = commandLineArguments.ResolveMetadataReferences(new AssemblyReferenceResolver(MetadataFileReferenceResolver.Default, metadataReferenceProvider)); return references; }
public void CompilationChain_SystemObject_Equals() { // As in VS/ETA, make a new list of references for each submission. var options = new CSharpParseOptions(kind: SourceCodeKind.Interactive, documentationMode: DocumentationMode.None); var provider = new TestMetadataReferenceProvider() { MakeDocumentationProvider = () => new TestDocumentationProviderEquals() }; var s1 = CSharpCompilation.CreateSubmission("s1.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options), references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s1.GetDiagnostics().Verify(); var s2 = CSharpCompilation.CreateSubmission("s2.dll", syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options), previousSubmission: s1, references: MakeReferencesViaCommandLine(provider), returnType: typeof(object)); s2.GetDiagnostics().Verify(); Assert.Equal(s1.GetSpecialType(SpecialType.System_Object), s2.GetSpecialType(SpecialType.System_Object)); }
/// <summary> /// NOTE: We're going through the command line parser to mimic the approach of visual studio and the ETA. /// Crucially, this CommandLineArguments will use the provided TestMetadataReferenceProvider to attach a fresh /// DocumentationProvider to each reference. /// </summary> private static IEnumerable<MetadataReference> MakeReferencesViaCommandLine(TestMetadataReferenceProvider metadataReferenceProvider) { var commandLineArguments = CSharpCommandLineParser.Interactive.Parse( new string[0], Directory.GetDirectoryRoot("."), //NOTE: any absolute path will do - we're not going to use this. RuntimeEnvironment.GetRuntimeDirectory()); return commandLineArguments.ResolveMetadataReferences(new AssemblyReferenceResolver(MetadataFileReferenceResolver.Default, metadataReferenceProvider)); }