Esempio n. 1
0
        public TestMetadataReferenceInfo(
            MemoryStream emitStream,
            Compilation compilation,
            TestMetadataReference metadataReference,
            string fullPath
            )
        {
            _emitStream       = emitStream;
            _peReader         = new PEReader(emitStream);
            Compilation       = compilation;
            MetadataReference = metadataReference;

            var metadataReader   = _peReader.GetMetadataReader();
            var moduleDefinition = metadataReader.GetModuleDefinition();

            MetadataReferenceInfo = new MetadataReferenceInfo(
                _peReader.PEHeaders.CoffHeader.TimeDateStamp,
                _peReader.PEHeaders.PEHeader.SizeOfImage,
                PathUtilities.GetFileName(fullPath),
                metadataReader.GetGuid(moduleDefinition.Mvid),
                metadataReference.Properties.Aliases,
                metadataReference.Properties.Kind,
                metadataReference.Properties.EmbedInteropTypes
                );
        }
Esempio n. 2
0
        public static TestMetadataReferenceInfo Create(Compilation compilation, string fullPath, EmitOptions emitOptions)
        {
            var emitStream = compilation.EmitToStream(emitOptions);

            var metadata          = AssemblyMetadata.CreateFromStream(emitStream);
            var metadataReference = new TestMetadataReference(metadata, fullPath: fullPath);

            return(new TestMetadataReferenceInfo(
                       emitStream,
                       compilation,
                       metadataReference,
                       fullPath));
        }
Esempio n. 3
0
        public void Create_MetadataReferences()
        {
            var version           = VersionStamp.Default;
            var metadataReference = new TestMetadataReference();

            var info1 = ProjectInfo.Create(
                ProjectId.CreateNewId(),
                version,
                "proj",
                "assembly",
                "C#",
                metadataReferences: new[] { metadataReference }
                );

            Assert.Same(
                metadataReference,
                ((ImmutableArray <MetadataReference>)info1.MetadataReferences).Single()
                );

            var info2 = ProjectInfo.Create(
                ProjectId.CreateNewId(),
                version,
                "proj",
                "assembly",
                "C#"
                );

            Assert.True(((ImmutableArray <MetadataReference>)info2.MetadataReferences).IsEmpty);

            var info3 = ProjectInfo.Create(
                ProjectId.CreateNewId(),
                version,
                "proj",
                "assembly",
                "C#",
                metadataReferences: new MetadataReference[0]
                );

            Assert.True(((ImmutableArray <MetadataReference>)info3.MetadataReferences).IsEmpty);

            var info4 = ProjectInfo.Create(
                ProjectId.CreateNewId(),
                version,
                "proj",
                "assembly",
                "C#",
                metadataReferences: ImmutableArray <MetadataReference> .Empty
                );

            Assert.True(((ImmutableArray <MetadataReference>)info4.MetadataReferences).IsEmpty);
        }
Esempio n. 4
0
        public void Create_Errors_DuplicateItems()
        {
            var pid = ProjectId.CreateNewId();

            var documentInfo = DocumentInfo.Create(DocumentId.CreateNewId(pid), "doc");

            Assert.Throws <ArgumentException>("documents[1]",
                                              () => ProjectInfo.Create(pid, VersionStamp.Default, "proj", "assembly", "C#", documents: new[] { documentInfo, documentInfo }));

            Assert.Throws <ArgumentNullException>(() => ProjectInfo.Create(pid, VersionStamp.Default, name: "Goo", assemblyName: "Bar", language: "C#",
                                                                           additionalDocuments: new DocumentInfo[] { null }));

            Assert.Throws <ArgumentException>("additionalDocuments[1]",
                                              () => ProjectInfo.Create(pid, VersionStamp.Default, "proj", "assembly", "C#", additionalDocuments: new[] { documentInfo, documentInfo }));

            Assert.Throws <ArgumentNullException>(() => ProjectInfo.Create(pid, VersionStamp.Default, name: "Goo", assemblyName: "Bar", language: "C#",
                                                                           projectReferences: new ProjectReference[] { null }));

            var projectReference = new ProjectReference(ProjectId.CreateNewId());

            Assert.Throws <ArgumentException>("projectReferences[1]",
                                              () => ProjectInfo.Create(pid, VersionStamp.Default, "proj", "assembly", "C#", projectReferences: new[] { projectReference, projectReference }));

            Assert.Throws <ArgumentNullException>("analyzerReferences[0]", () => ProjectInfo.Create(pid, VersionStamp.Default, name: "Goo", assemblyName: "Bar", language: "C#",
                                                                                                    analyzerReferences: new AnalyzerReference[] { null }));

            var analyzerReference = new TestAnalyzerReference();

            Assert.Throws <ArgumentException>("analyzerReferences[1]",
                                              () => ProjectInfo.Create(pid, VersionStamp.Default, "proj", "assembly", "C#", analyzerReferences: new[] { analyzerReference, analyzerReference }));

            Assert.Throws <ArgumentNullException>(() => ProjectInfo.Create(pid, VersionStamp.Default, name: "Goo", assemblyName: "Bar", language: "C#",
                                                                           metadataReferences: new MetadataReference[] { null }));

            var metadataReference = new TestMetadataReference();

            Assert.Throws <ArgumentException>("metadataReferences[1]",
                                              () => ProjectInfo.Create(pid, VersionStamp.Default, "proj", "assembly", "C#", metadataReferences: new[] { metadataReference, metadataReference }));
        }