コード例 #1
0
ファイル: TestAssembly.cs プロジェクト: igor-toporet/TestFx
 public TestAssembly(
     IEnumerable <ITestMetadata> testMetadatas,
     IMetadataAssembly metadataAssembly)
     : base(metadataAssembly)
 {
     _testMetadatas = testMetadatas;
 }
コード例 #2
0
 public void ExploreAssembly(IProject project,
                             IMetadataAssembly assembly,
                             UnitTestElementConsumer consumer,
                             ManualResetEvent exitEvent)
 {
     ExploreAssembly(project, assembly, consumer);
 }
コード例 #3
0
        public void Explore(IMetadataAssembly assembly, CancellationToken token)
        {
            try
            {
                myTempMethods      = new List <IMetadataMethod>(200);
                myTempMethodsNames = new JetHashSet <string>(200);

                foreach (var type in assembly.GetTypes())
                {
                    ExploreType(type, assembly, token);
                }
            }

            finally
            {
                if (myTempMethods != null)
                {
                    myTempMethods.Clear();
                    myTempMethods = null;
                }
                if (myTempMethodsNames != null)
                {
                    myTempMethodsNames.Clear();
                    myTempMethods = null;
                }
            }
        }
コード例 #4
0
ファイル: MSTestProvider.cs プロジェクト: locbet/sneal
        public void ExploreAssembly(IMetadataAssembly assembly, IProject project, UnitTestElementConsumer consumer)
        {
            foreach (IMetadataTypeInfo type in assembly.GetTypes())
            {
                if (!IsTestFixture(type))
                {
                    continue;
                }

                var fixture = new MSTestFixtureElement(this, project, type.FullyQualifiedName, assembly.Location);
                fixture.SetExplicit(GetExplicitString(type));

                consumer(fixture);
                int order = 0;
                foreach (IMetadataMethod method in GetAllTestMethods(type))
                {
                    if (!IsTestMethod(method))
                    {
                        continue;
                    }

                    var testElement = new MSTestElement(this, fixture, project,
                                                        method.DeclaringType.FullyQualifiedName, method.Name,
                                                        order++);
                    testElement.SetExplicit(GetExplicitString(method));
                    consumer(testElement);
                }
            }
        }
コード例 #5
0
        private void ExploreContext(IProject project, IMetadataAssembly assembly, ITypeInfo type)
        {
            var contextElement = _factory.GetOrCreateContext(
                project,
                new ClrTypeName(type.FullyQualifiedName),
                assembly.Location,
                type.GetSubject(),
                type.GetTags().ToArray(),
                type.IsIgnored());

            _observer.OnUnitTestElement(contextElement);

            var fields = type.GetFields().ToArray();

            var specifications = fields.Where(x => x.IsSpecification());
            var behaviors      = fields.Where(x => x.IsBehavior());

            foreach (var specification in specifications)
            {
                ExploreSpecification(project, contextElement, type, specification);
            }

            foreach (var behavior in behaviors)
            {
                ExploreBehavior(project, contextElement, type, behavior);
            }

            _observer.OnUnitTestElementChanged(contextElement);
        }
        public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver consumer, IMetadataTypeInfo metadataTypeInfo)
        {
            if (!metadataTypeInfo.IsContext())
            {
                return;
            }

            ContextElement contextElement = this._factories.Contexts.CreateContext(project, assembly.Location.FullPath, metadataTypeInfo);

            consumer.OnUnitTestElement(contextElement);

            metadataTypeInfo.GetSpecifications()
            .ForEach(x =>
            {
                var contextSpecificationElement = this._factories.ContextSpecifications.CreateContextSpecification(contextElement, x);
                consumer.OnUnitTestElement(contextSpecificationElement);
            });

            metadataTypeInfo.GetBehaviors().ForEach(x =>
            {
                var behaviorElement = this._factories.Behaviors.CreateBehavior(contextElement, x);
                consumer.OnUnitTestElement(behaviorElement);

                this._factories.BehaviorSpecifications
                .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                .ForEach(consumer.OnUnitTestElement);

                consumer.OnUnitTestElementChanged(behaviorElement);
            });

            consumer.OnUnitTestElementChanged(contextElement);
        }
コード例 #7
0
        public AssemblyExplorer(MSpecUnitTestProvider provider,
#if RESHARPER_61
                                IUnitTestElementManager manager,
                                PsiModuleManager psiModuleManager,
                                CacheManager cacheManager,
#endif
                                IMetadataAssembly assembly,
                                IProject project,
                                UnitTestElementConsumer consumer)
        {
            _assembly = assembly;
            _consumer = consumer;

            using (ReadLockCookie.Create())
            {
                var projectEnvoy = new ProjectModelElementEnvoy(project);

                var cache = new ContextCache();
#if RESHARPER_61
                _contextFactory = new ContextFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, _assembly.Location.FullPath, cache);
                _contextSpecificationFactory  = new ContextSpecificationFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, cache);
                _behaviorFactory              = new BehaviorFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, cache);
                _behaviorSpecificationFactory = new BehaviorSpecificationFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy);
#else
#if RESHARPER_6
                _contextFactory = new ContextFactory(provider, project, projectEnvoy, _assembly.Location.FullPath, cache);
#else
                _contextFactory = new ContextFactory(provider, project, projectEnvoy, _assembly.Location, cache);
#endif
                _contextSpecificationFactory  = new ContextSpecificationFactory(provider, project, projectEnvoy, cache);
                _behaviorFactory              = new BehaviorFactory(provider, project, projectEnvoy, cache);
                _behaviorSpecificationFactory = new BehaviorSpecificationFactory(provider, project, projectEnvoy);
#endif
            }
        }
コード例 #8
0
 public void ExploreAssembly(IProject project,
                             IMetadataAssembly assembly,
                             UnitTestElementConsumer consumer,
                             ManualResetEvent exitEvent)
 {
   ExploreAssembly(project, assembly, consumer);
 }
コード例 #9
0
        public void Explore(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, IMetadataTypeInfo metadataTypeInfo)
        {
            if (!metadataTypeInfo.IsContext())
            {
                return;
            }

            var contextElement = _factories.Contexts.CreateContext(project, assembly.Location.FullPath, metadataTypeInfo);

            consumer(contextElement);

            metadataTypeInfo.GetSpecifications()
            .ForEach(x => consumer(_factories.ContextSpecifications.CreateContextSpecification(contextElement, x)));


            metadataTypeInfo.GetBehaviors().ForEach(x =>
            {
                var behaviorElement = _factories.Behaviors.CreateBehavior(contextElement, x);
                consumer(behaviorElement);


                _factories.BehaviorSpecifications
                .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                .ForEach(y => consumer(y));
            });
        }
コード例 #10
0
        public void Explore(IProject project, IMetadataAssembly assembly, Action <IUnitTestElement> consumer, Func <bool> notInterrupted)
        {
            // TODO: ILMerge / embedded reference
            //if (!referencedAssemblies.Any(x => x.StartsWith("TestFx")))
            var frameworkPrefix      = typeof(IRootRunner).Assembly.GetName().Name;
            var referencedAssemblies = assembly.ReferencedAssembliesNames.Select(x => x.Name);

            if (!referencedAssemblies.Any(x => x.StartsWith(frameworkPrefix)))
            {
                return;
            }

            using (ReadLockCookie.Create())
            {
                var testAssembly = assembly.ToTestAssembly(project, notInterrupted);
                if (testAssembly == null)
                {
                    return;
                }

                var testElements    = testAssembly.TestMetadatas.Select(_testElementFactory.GetOrCreateClassTestElementRecursively);
                var allTestElements = testElements.SelectMany(x => x.DescendantsAndSelf(y => y.Children)).ToList();

                Debug.Assert(allTestElements.Count > 0, "No tests found.");
                allTestElements.ForEach(consumer);
            }
        }
コード例 #11
0
    public void Explore(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, IMetadataTypeInfo metadataTypeInfo)
    {
      if (!metadataTypeInfo.IsContext())
      {
        return;
      }

      var contextElement = _factories.Contexts.CreateContext(project, assembly.Location.FullPath, metadataTypeInfo);

      consumer(contextElement);

      metadataTypeInfo.GetSpecifications()
          .ForEach(x => consumer(_factories.ContextSpecifications.CreateContextSpecification(contextElement, x)));


      metadataTypeInfo.GetBehaviors().ForEach(x =>
      {
        var behaviorElement = _factories.Behaviors.CreateBehavior(contextElement, x);
        consumer(behaviorElement);


        _factories.BehaviorSpecifications
                    .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                    .ForEach(y => consumer(y));
      });
    }
コード例 #12
0
    public AssemblyExplorer(MSpecUnitTestProvider provider,
#if RESHARPER_61
                            IUnitTestElementManager manager,
                            PsiModuleManager psiModuleManager,
                            CacheManager cacheManager,
#endif
                            IMetadataAssembly assembly,
                            IProject project,
                            UnitTestElementConsumer consumer)
    {
      _assembly = assembly;
      _consumer = consumer;

      using (ReadLockCookie.Create())
      {
        var projectEnvoy = new ProjectModelElementEnvoy(project);

        var cache = new ContextCache();
#if RESHARPER_61
        _contextFactory = new ContextFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, _assembly.Location.FullPath, cache);
        _contextSpecificationFactory = new ContextSpecificationFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, cache);
        _behaviorFactory = new BehaviorFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy, cache);
        _behaviorSpecificationFactory = new BehaviorSpecificationFactory(provider, manager, psiModuleManager, cacheManager, project, projectEnvoy);
#else
#if RESHARPER_6
        _contextFactory = new ContextFactory(provider, project, projectEnvoy, _assembly.Location.FullPath, cache);
#else
        _contextFactory = new ContextFactory(provider, project, projectEnvoy, _assembly.Location, cache);
#endif
        _contextSpecificationFactory = new ContextSpecificationFactory(provider, project, projectEnvoy, cache);
        _behaviorFactory = new BehaviorFactory(provider, project, projectEnvoy, cache);
        _behaviorSpecificationFactory = new BehaviorSpecificationFactory(provider, project, projectEnvoy);
#endif
      }
    }
コード例 #13
0
        public void ExploreAssembly(
            IProject project,
            IMetadataAssembly metadataAssembly,
            UnitTestElementConsumer consumer,
            ManualResetEvent exitEvent)
        {
            using (ReadLockCookie.Create())
            {
                if (project.GetModuleReferences().All(module => module.Name != "Fixie"))
                {
                    return;
                }

                foreach (var metadataTypeInfo in GetExportedTypes(metadataAssembly.GetTypes()))
                {
                    bool isTestClass = ExploreType(project, metadataAssembly, consumer, metadataTypeInfo);
                    if (isTestClass)
                    {
                        foreach (var metadataMethod in metadataTypeInfo.GetMethods())
                        {
                            ExploreMethod(project, metadataAssembly, consumer, metadataMethod);
                        }
                    }
                }
            }
        }
コード例 #14
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, ManualResetEvent exitEvent)
        {
            var envoy = ProjectModelElementEnvoy.Create(project);
            if (assembly.ReferencedAssembliesNames.Any(n => n.Name == SilverlightMsTestAssemblyName))
            {
                var allElements = new List<IUnitTestElement>();
                var mappedElements = new Dictionary<IUnitTestElement, IUnitTestElement>();

                new mstestlegacy::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTestElementFactory, msTestAttributesProvider, project, shellLocks, allElements.Add)
                    .ExploreAssembly(assembly);

                foreach (var classElement in allElements.OfType<mstest10::JetBrains.ReSharper.UnitTestProvider.MSTest10.MsTestTestClassElement>())
                    mappedElements.Add(classElement, elementFactory.GetOrCreateClassElement(classElement.TypeName, project, envoy));

                foreach (var methodElement in allElements.OfType<mstest10::JetBrains.ReSharper.UnitTestProvider.MSTest10.MsTestTestMethodElement>())
                    mappedElements.Add(methodElement, elementFactory.GetOrCreateMethodElement(methodElement.Id, project, (mstestlegacy::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestTestClassElementBase)mappedElements[methodElement.Parent], envoy, methodElement.TypeName));

                foreach (var rowElement in allElements.OfType<mstest10::JetBrains.ReSharper.UnitTestProvider.MSTest10.MsTestTestRowElement>())
                    mappedElements.Add(rowElement, elementFactory.GetOrCreateRowElement(rowElement.Id, project, (mstestlegacy::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestTestMethodElementBase)mappedElements[rowElement.Parent], envoy));

                foreach (var element in allElements)
                {
                    IUnitTestElement mappedElement;
                    if (mappedElements.TryGetValue(element, out mappedElement))
                        consumer(mappedElements[element]);
                    else
                        consumer(element);
                }

            }
        }
コード例 #15
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            if (assembly.ReferencedAssembliesNames.Any(n => n.Name == SilverlightMsTestAssemblyName))
            {
                var originalReferencedAssemblies = InjectMsTestIntoReferencedAssemblyNames(assembly);

                try
                {
#if RS70
                    if (msTest11Provider != null)
                    {
                        new mstest11::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTest11ElementFactory, project, shellLocks, consumer).ExploreAssembly(assembly);
                    }
                    else
#endif
                    if (msTest10Provider != null)
                    {
                        new mstest10::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTest10ElementFactory, project, shellLocks, consumer).ExploreAssembly(assembly);
                    }
                    else if (msTestLegacyProvider != null)
                    {
                        new mstestlegacy::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTestLegacyElementFactory, project, shellLocks, consumer).ExploreAssembly(assembly);
                    }
                }
                finally
                {
                    SetReferencedAssemblyNames(assembly, originalReferencedAssemblies);
                }
            }
        }
コード例 #16
0
        public void Explore(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            if (!assembly.ReferencedAssembliesNames.Any(x => String.Equals(
                                                            x.Name,
                                                            typeof(It).Assembly.GetName().Name,
                                                            StringComparison.InvariantCultureIgnoreCase)))
            {
                return;
            }

            assembly.GetTypes().Where(type => type.IsContext()).ForEach(type =>
            {
                var contextElement = _factories.Contexts.CreateContext(project, assembly.Location.FullPath, type);
                consumer(contextElement);

                type
                .GetSpecifications()
                .ForEach(x => consumer(_factories.ContextSpecifications.CreateContextSpecification(contextElement, x)));

                type.GetBehaviors().ForEach(x =>
                {
                    var behaviorElement = _factories.Behaviors.CreateBehavior(contextElement, x);
                    consumer(behaviorElement);

                    _factories.BehaviorSpecifications
                    .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                    .ForEach(y => consumer(y));
                });
            });
        }
コード例 #17
0
    public void Explore(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
    {
      if (!assembly.ReferencedAssembliesNames.Any(x => String.Equals(
                                                                     x.Name,
                                                                     typeof(It).Assembly.GetName().Name,
                                                                     StringComparison.InvariantCultureIgnoreCase)))
      {
        return;
      }

      assembly.GetTypes().Where(type => type.IsContext()).ForEach(type =>
      {
        var contextElement = _factories.Contexts.CreateContext(project,assembly.Location.FullPath, type);
        consumer(contextElement);

        type
          .GetSpecifications()
          .ForEach(x => consumer(_factories.ContextSpecifications.CreateContextSpecification(contextElement, x)));

        type.GetBehaviors().ForEach(x =>
        {
          var behaviorElement = _factories.Behaviors.CreateBehavior(contextElement, x);
          consumer(behaviorElement);

          _factories.BehaviorSpecifications
                    .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                    .ForEach(y => consumer(y));
        });
      });
    }
コード例 #18
0
        public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, CancellationToken cancellationToken)
        {
            // TODO: ILMerge / embedded reference
            //if (!referencedAssemblies.Any(x => x.StartsWith("TestFx")))
            var frameworkPrefix      = typeof(IRootRunner).Assembly.GetName().Name;
            var referencedAssemblies = assembly.ReferencedAssembliesNames.Select(x => x.Name);

            if (!referencedAssemblies.Any(x => x.StartsWith(frameworkPrefix)))
            {
                return;
            }

            using (ReadLockCookie.Create())
            {
                var testAssembly = assembly.ToTestAssembly(project, notInterrupted: () => !cancellationToken.IsCancellationRequested);
                if (testAssembly == null)
                {
                    return;
                }

                var testElements    = testAssembly.TestMetadatas.Select(_testElementFactory.GetOrCreateClassTestElementRecursively);
                var allTestElements = testElements.SelectMany(x => x.DescendantsAndSelf(y => y.Children)).ToList();
                foreach (var testElement in allTestElements)
                {
                    observer.OnUnitTestElement(testElement);
                    observer.OnUnitTestElementChanged(testElement);
                }
                observer.OnCompleted();
            }
        }
コード例 #19
0
 public TestAssembly(
 IEnumerable<ITestMetadata> testMetadatas,
 IMetadataAssembly metadataAssembly)
     : base(metadataAssembly)
 {
     _testMetadatas = testMetadatas;
 }
コード例 #20
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            new AssemblyExplorer(_provider,
#if RESHARPER_61
                                 _manager, _psiModuleManager, _cacheManager,
#endif
                                 assembly, project, consumer).Explore();
        }
コード例 #21
0
    public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
    {
      new AssemblyExplorer(_provider,
#if RESHARPER_61
        _manager, _psiModuleManager, _cacheManager, 
#endif
        assembly, project, consumer).Explore();
    }
コード例 #22
0
 public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
 {
   using (ReadLockCookie.Create()) //Get a read lock so that it is safe to read the assembly
   {
     foreach (var metadataTypeInfo in GetTypesIncludingNested(assembly.GetTypes()))
       this._assemblyExplorer.Explore(project, assembly, consumer, metadataTypeInfo);
   }
 }
コード例 #23
0
 public void ExploreAssembly(
     IProject project, 
     IMetadataAssembly assembly, 
     IUnitTestElementsObserver observer,
     CancellationToken cancellationToken)
 {
     var environment = new ExecutionEnvironment(assembly.Location.FullPath);
     var methodGroups = environment.DiscoverTestMethodGroups(null);
 }
コード例 #24
0
        private void ExploreType(IProject project, IMetadataAssembly assembly, ITypeInfo type)
        {
            if (!type.IsContext())
            {
                return;
            }

            ExploreContext(project, assembly, type);
        }
コード例 #25
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            var types = GetExportedTypes(assembly.GetTypes()).ToArray();

            foreach (var metadataTypeInfo in types)
            {
                ExploreType(project, assembly, consumer, metadataTypeInfo);
            }
        }
コード例 #26
0
 // ReSharper 8.0
 public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, ManualResetEvent exitEvent)
 {
     // TODO: Monitor exitEvent to stop processing. Note that nunit currently ignores it, too
     using (ReadLockCookie.Create())
     {
         foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
             ExploreType(project, assembly, consumer, metadataTypeInfo);
     }
 }
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver consumer, CancellationToken cancellationToken)
        {
            // TODO: Use CancellationToken to exit early

            using (ReadLockCookie.Create()) //Get a read lock so that it is safe to read the assembly
            {
                foreach (var metadataTypeInfo in GetTypesIncludingNested(assembly.GetTypes()))
                    this._assemblyExplorer.Explore(project, assembly, consumer, metadataTypeInfo);
            }
        }
コード例 #28
0
        public ITestAssembly GetTestAssembly(IMetadataAssembly assembly)
        {
            var identity  = new Identity(_project.GetOutputFilePath().FullPath);
            var testTypes = assembly.GetTypes()
                            .TakeWhile(_notInterrupted)
                            .Select(x => VisitType(x, identity))
                            .WhereNotNull();

            return(new TestAssembly(testTypes.ToList(), assembly));
        }
コード例 #29
0
        public ITestAssembly GetTestAssembly(IMetadataAssembly assembly)
        {
            var identity = new Identity(_project.GetOutputFilePath().FullPath);
              var testTypes = assembly.GetTypes()
              .TakeWhile(_notInterrupted)
              .Select(x => VisitType(x, identity))
              .WhereNotNull();

              return new TestAssembly(testTypes.ToList(), assembly);
        }
コード例 #30
0
 public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
 {
     using (ReadLockCookie.Create()) //Get a read lock so that it is safe to read the assembly
     {
         foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
         {
             this._assemblyExplorer.Explore(project, assembly, consumer, metadataTypeInfo);
         }
     }
 }
コード例 #31
0
 private void ExploreType(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, IMetadataTypeInfo metadataTypeInfo)
 {
     // It would be nice to use TestClassCommandFactory.Make(...), but that doesn't work
     // with RunWith, since Make ends up calling TypeUtility.GetRunWith, which tries to
     // call IAttributeInfo.GetInstance<RunWithAttribute>, and we can't support that.
     // So we'll break down Make and do it ourselves. If the runner finds any methods
     // that we don't find, it will create them at runtime
     var typeInfo = metadataTypeInfo.AsTypeInfo();
     if (TypeUtility.IsTestClass(typeInfo))
         ExploreTestClass(project, assembly, consumer, typeInfo, metadataTypeInfo.FullyQualifiedName);
 }
コード例 #32
0
 // ReSharper 8.0
 public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer, ManualResetEvent exitEvent)
 {
     // TODO: Monitor exitEvent to stop processing. Note that nunit currently ignores it, too
     using (ReadLockCookie.Create())
     {
         foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
         {
             ExploreType(project, assembly, consumer, metadataTypeInfo);
         }
     }
 }
コード例 #33
0
        private bool ExploreType(IProject project, IMetadataAssembly metadataAssembly, UnitTestElementConsumer consumer, IMetadataTypeInfo typeInfo)
        {
            if (conventionCheck.IsValidTestClass(project, typeInfo))
            {
                var classUnitTestElement = unitTestElementFactory.GetOrCreateTestClass(project, new ClrTypeName(typeInfo.FullyQualifiedName), metadataAssembly.Location.FullPath);
                consumer(classUnitTestElement);
                return(true);
            }

            return(false);
        }
コード例 #34
0
 public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, CancellationToken cancellationToken)
 {
     Explore(
         project,
         assembly,
         x =>
     {
         observer.OnUnitTestElement(x);
         observer.OnUnitTestElementChanged(x);
     },
         notInterrupted: () => !cancellationToken.IsCancellationRequested);
 }
コード例 #35
0
 public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer)
 {
     Explore(
         project,
         assembly,
         x =>
     {
         observer.OnUnitTestElement(x);
         observer.OnUnitTestElementChanged(x);
     },
         () => true);
 }
コード例 #36
0
        private AssemblyNameInfo[] InjectMsTestIntoReferencedAssemblyNames(IMetadataAssembly assembly)
        {
            var referencedAssemblyNames = assembly.ReferencedAssembliesNames;
            var updatedReferencedAssemblyNames = new AssemblyNameInfo[referencedAssemblyNames.Length + 1];

            Array.Copy(referencedAssemblyNames, updatedReferencedAssemblyNames, referencedAssemblyNames.Length);
            updatedReferencedAssemblyNames[referencedAssemblyNames.Length] = new AssemblyNameInfo(DotNetMsTestAssemblyName);

            SetReferencedAssemblyNames(assembly, updatedReferencedAssemblyNames);

            return referencedAssemblyNames;
        }
コード例 #37
0
 public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, CancellationToken cancellationToken)
 {
     Explore(
       project,
       assembly,
       x =>
       {
     observer.OnUnitTestElement(x);
     observer.OnUnitTestElementChanged(x);
       },
       notInterrupted: () => !cancellationToken.IsCancellationRequested);
 }
コード例 #38
0
 public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer)
 {
     Explore(
       project,
       assembly,
       x =>
       {
     observer.OnUnitTestElement(x);
     observer.OnUnitTestElementChanged(x);
       },
       () => true);
 }
        private TestUnitTestElementObserver GetMetadataObserver(IProject project, IMetadataAssembly assembly)
        {
            var serviceProvider = Solution.GetComponent <MspecServiceProvider>();
            var observer        = new TestUnitTestElementObserver();
            var factory         = new UnitTestElementFactory(serviceProvider, observer.TargetFrameworkId);

            var explorer = new MspecTestMetadataExplorer(factory, observer);

            explorer.ExploreAssembly(project, assembly, CancellationToken.None);

            return(observer);
        }
コード例 #40
0
        private AssemblyNameInfo[] InjectMsTestIntoReferencedAssemblyNames(IMetadataAssembly assembly)
        {
            var referencedAssemblyNames        = assembly.ReferencedAssembliesNames.ToArray();
            var updatedReferencedAssemblyNames = new AssemblyNameInfo[referencedAssemblyNames.Length + 1];

            Array.Copy(referencedAssemblyNames, updatedReferencedAssemblyNames, referencedAssemblyNames.Length);
            updatedReferencedAssemblyNames[referencedAssemblyNames.Length] = new AssemblyNameInfo(DotNetMsTestAssemblyName);

            SetReferencedAssemblyNames(assembly, updatedReferencedAssemblyNames);

            return(referencedAssemblyNames);
        }
コード例 #41
0
        private void ExploreMethod(IProject project, IMetadataAssembly metadataAssembly, UnitTestElementConsumer consumer, IMetadataMethod metadataMethod)
        {
            if (conventionCheck.IsValidTestMethod(project, metadataMethod))
            {
                bool isParameterised = conventionCheck.IsParameterizedMethod(
                    project,
                    metadataMethod.DeclaringType.FullyQualifiedName,
                    metadataMethod.Name);

                var methodUnitTestElement = unitTestElementFactory.GetOrCreateTestMethod(project, new ClrTypeName(metadataMethod.DeclaringType.FullyQualifiedName), metadataMethod.Name, metadataAssembly.Location.FullPath, isParameterised);
                consumer(methodUnitTestElement);
            }
        }
コード例 #42
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, CancellationToken cancellationToken)
        {
            using (ReadLockCookie.Create())
            {
                foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
                {
                    if (cancellationToken.IsCancellationRequested)
                        break;

                    ExploreType(project, assembly, observer, metadataTypeInfo);
                }
            }
        }
コード例 #43
0
 public void ExploreAssembly(IMetadataAssembly assembly)
 {
     using (shellLocks.UsingReadLock())
     {
         if (project.IsValid())
         {
             foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
             {
                 ProcessTypeInfo(metadataTypeInfo);
             }
         }
     }
 }
コード例 #44
0
        private void ExploreType(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, IMetadataTypeInfo metadataTypeInfo)
        {
            // It would be nice to use TestClassCommandFactory.Make(...), but that doesn't work
            // with RunWith, since Make ends up calling TypeUtility.GetRunWith, which tries to
            // call IAttributeInfo.GetInstance<RunWithAttribute>, and we can't support that.
            // So we'll break down Make and do it ourselves. If the runner finds any methods
            // that we don't find, it will create them at runtime
            var typeInfo = metadataTypeInfo.AsTypeInfo();

            if (TypeUtility.IsTestClass(typeInfo))
            {
                ExploreTestClass(project, assembly, observer, typeInfo, metadataTypeInfo.FullyQualifiedName);
            }
        }
コード例 #45
0
    public AssemblyExplorer(MSpecUnitTestProvider provider,
                            IMetadataAssembly assembly,
                            IProject project,
                            UnitTestElementConsumer consumer)
    {
      _provider = provider;
      _assembly = assembly;
      _project = project;
      _consumer = consumer;

      _contextFactory = new ContextFactory(_provider, _project, _assembly.Location);
      _contextSpecificationFactory = new ContextSpecificationFactory(_provider, _project);
      _behaviorFactory = new BehaviorFactory(_provider, _project);
      _behaviorSpecificationFactory = new BehaviorSpecificationFactory(_provider, _project);
    }
コード例 #46
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, CancellationToken cancellationToken)
        {
            using (ReadLockCookie.Create())
            {
                foreach (var metadataTypeInfo in GetExportedTypes(assembly.GetTypes()))
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    ExploreType(project, assembly, observer, metadataTypeInfo);
                }
            }
        }
コード例 #47
0
        private void ExploreTestClass(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver observer, ITypeInfo typeInfo, string typeName)
        {
            var classUnitTestElement = unitTestElementFactory.GetOrCreateTestClass(project, new ClrTypeName(typeName), assembly.Location.FullPath, typeInfo.GetTraits());
            observer.OnUnitTestElement(classUnitTestElement);

            // Don't create elements for [Fact] methods when the class has [RunWith]. This
            // is because we don't know what the RunWith will do - it might not pay any
            // attention to [Fact], and if we create the elements now, they won't be
            // dynamic, and that can cause issues later
            if (!TypeUtility.HasRunWith(typeInfo))
            {
                foreach (var methodInfo in TypeUtility.GetTestMethods(typeInfo))
                    ExploreTestMethod(project, classUnitTestElement, observer, methodInfo);
            }
        }
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver consumer, CancellationToken cancellationToken)
        {
            using (ReadLockCookie.Create()) //Get a read lock so that it is safe to read the assembly
            {
                foreach (var metadataTypeInfo in GetTypesIncludingNested(assembly.GetTypes()))
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    this._assemblyExplorer.Explore(project, assembly, consumer, metadataTypeInfo);
                }
            }
        }
コード例 #49
0
        public void ExploreAssembly(
            IProject project,
            IMetadataAssembly metadataAssembly,
            UnitTestElementConsumer consumer,
            ManualResetEvent exitEvent)
        {
            using (ReadLockCookie.Create())
            {
                if (project.GetModuleReferences().All(module => module.Name != "Fixie"))
                    return;

                foreach (var metadataTypeInfo in GetExportedTypes(metadataAssembly.GetTypes()))
                    ExploreType(project, metadataAssembly, consumer, metadataTypeInfo);
            }
        }
コード例 #50
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, CancellationToken token)
        {
            using (ReadLockCookie.Create())
            {
                var types = assembly.GetTypes();

                foreach (var type in types)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }
        }
コード例 #51
0
        public void Explore(IMetadataAssembly assembly)
        {
            using (ReadLockCookie.Create())
            {
                var types = assembly.GetTypes()
                            .Flatten(x => x.GetNestedTypes())
                            .Where(x => x.FullyQualifiedName != "<Module>");

                Types.AddRange(types.Select(x => x.AsTypeInfo()));

                foreach (var type in Types)
                {
                    Fields.AddRange(type.GetFields());
                }
            }
        }
コード例 #52
0
        public ITestAssembly Aggregate(IMetadataAssembly metadataAssembly, IProject project, [CanBeNull] Func <bool> notInterrupted)
        {
            notInterrupted = notInterrupted ?? (() => true);

            var assemblyIdentity      = new Identity(project.GetOutputFilePath().FullPath);
            var testMetadataProviders = _testMetadataProviderFactories.Select(x => x.CreateTestMetadataProvider(assemblyIdentity, project, notInterrupted)).ToList();
            var metadataTypeInfos     = metadataAssembly.GetTypes();
            var testMetadata          = GetTestMetadata(testMetadataProviders, metadataTypeInfos).TakeWhile(notInterrupted).WhereNotNull().ToList();

            if (testMetadata.Count == 0)
            {
                return(null);
            }

            return(new TestAssembly(testMetadata, metadataAssembly));
        }
コード例 #53
0
        public void ExploreAssembly(IMetadataAssembly assembly, IProject project, UnitTestElementConsumer consumer)
        {
            var a = Assembly.LoadFrom(assembly.Location);
            var specTypes = FilterToSpecs(a.GetTypes());

            var elementFactory = new ElementFactory(project, consumer, _provider);

            foreach (var type in specTypes)
            {
                var instance = Activator.CreateInstance(type);

                var spec = (instance is ISpec) ?  (ISpec)instance : new SpecWrapper(instance);

                elementFactory.CreateContainerElements(spec);
            }
        }
コード例 #54
0
        public void Explore(IProject project, IMetadataAssembly assembly, Action<IUnitTestElement> consumer, Func<bool> notInterrupted)
        {
            // TODO: ILMerge / embedded reference
              //if (!referencedAssemblies.Any(x => x.StartsWith("TestFx")))
              var frameworkPrefix = typeof (ISuite).Assembly.GetName().Name;
              var referencedAssemblies = assembly.ReferencedAssembliesNames.Select(x => x.Name);
              if (!referencedAssemblies.Any(x => x.StartsWith(frameworkPrefix)))
            return;

              using (ReadLockCookie.Create())
              {
            var assemblyTest = assembly.ToTestAssembly(project, notInterrupted);
            var testElements = assemblyTest.TestMetadatas.Select(_testElementFactory.GetOrCreateClassTestElementRecursively);
            var allTestElements = testElements.SelectMany(x => x.DescendantsAndSelf(y => y.Children)).ToList();

            Debug.Assert(allTestElements.Count > 0, "Found no tests.");
            allTestElements.ForEach(consumer);
              }
        }
コード例 #55
0
    public AssemblyExplorer(MSpecUnitTestProvider provider,
                            IMetadataAssembly assembly,
                            IProject project,
                            UnitTestElementConsumer consumer)
    {
      _assembly = assembly;
      _consumer = consumer;

      using (ReadLockCookie.Create())
      {
        var projectEnvoy = new ProjectModelElementEnvoy(project);

        var cache = new ContextCache();
        _contextFactory = new ContextFactory(provider, projectEnvoy, _assembly.Location, cache);
        _contextSpecificationFactory = new ContextSpecificationFactory(provider, projectEnvoy, cache);
        _behaviorFactory = new BehaviorFactory(provider, projectEnvoy, cache);
        _behaviorSpecificationFactory = new BehaviorSpecificationFactory(provider, projectEnvoy);
      }
    }
コード例 #56
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            if (assembly.ReferencedAssembliesNames.Any(n => n.Name == SilverlightMsTestAssemblyName))
            {
                var originalReferencedAssemblies = InjectMsTestIntoReferencedAssemblyNames(assembly);

                try
                {
                    if (msTest10Provider != null)
                    {
                        new MsTest10MetadataExplorer(msTest10Provider, project, consumer).ExploreAssembly(assembly);
                    }   
                    else if (msTestLegacyProvider != null)
                    {
                        new MsTestLegacyMetadataExplorer(msTestLegacyProvider, project, consumer).ExploreAssembly(assembly);
                    }
                }
                finally
                {
                    SetReferencedAssemblyNames(assembly, originalReferencedAssemblies);
                }
            }
        }
コード例 #57
0
        public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
        {
            if (assembly.ReferencedAssembliesNames.Any(n => n.Name == SilverlightMsTestAssemblyName))
            {
                var originalReferencedAssemblies = InjectMsTestIntoReferencedAssemblyNames(assembly);

                try
                {
                    if (msTest10Provider != null)
                    {
                        new mstest10::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTest10ElementFactory, project, shellLocks, consumer).ExploreAssembly(assembly);
                    }
                    else if (msTestLegacyProvider != null)
                    {
                        new mstestlegacy::JetBrains.ReSharper.UnitTestProvider.MSTest.MsTestMetadataExplorer(msTestLegacyElementFactory, project, shellLocks, consumer).ExploreAssembly(assembly);
                    }

                }
                finally
                {
                    SetReferencedAssemblyNames(assembly, originalReferencedAssemblies);
                }
            }
        }
        public void Explore(IProject project, IMetadataAssembly assembly, IUnitTestElementsObserver consumer, IMetadataTypeInfo metadataTypeInfo)
        {
            if (!metadataTypeInfo.IsContext())
            {
                return;
            }

            var contextElement = this._factories.Contexts.CreateContext(project, assembly.Location.FullPath, metadataTypeInfo);

            consumer.OnUnitTestElement(contextElement);

            metadataTypeInfo.GetSpecifications()
                .ForEach(x =>
                {
                    var element = this._factories.ContextSpecifications.CreateContextSpecification(contextElement, x);
                    consumer.OnUnitTestElement(element);
                    consumer.OnUnitTestElementChanged(element);
                });


            metadataTypeInfo.GetBehaviors().ForEach(x =>
            {
                var behaviorElement = this._factories.Behaviors.CreateBehavior(contextElement, x);
                consumer.OnUnitTestElement(behaviorElement);
                consumer.OnUnitTestElementChanged(behaviorElement);


                this._factories.BehaviorSpecifications
                            .CreateBehaviorSpecificationsFromBehavior(behaviorElement, x)
                            .ForEach(y =>
                            {
                                consumer.OnUnitTestElement(y);
                                consumer.OnUnitTestElementChanged(y);
                            });
            });
        }
コード例 #59
0
 private void SetReferencedAssemblyNames(IMetadataAssembly assembly, AssemblyNameInfo[] referencedAssemblyNames)
 {
     assembly.SetField("myReferencedAssembliesNames", referencedAssemblyNames);
 }
コード例 #60
0
 public void ExploreAssembly(IProject project, IMetadataAssembly assembly, UnitTestElementConsumer consumer)
 {
   _assemblyExplorer.Explore(project, assembly, consumer);
 }