Beispiel #1
0
        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"));
        }
Beispiel #2
0
        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)));
        }
Beispiel #5
0
        /// <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));
        }