Пример #1
0
        /// <summary>
        /// Creates a message sink that populates the test model as test and annotation
        /// discovered messages are published.
        /// </summary>
        /// <param name="testModel">The test model to populate.</param>
        /// <returns>The message sink.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="testModel"/> is null.</exception>
        public static IMessageSink CreateMessageSinkToPopulateTestModel(TestModel testModel)
        {
            if (testModel == null)
                throw new ArgumentNullException("testModel");

            return new MessageConsumer()
                .Handle<TestDiscoveredMessage>(message =>
                {
                    Test test = message.Test.ToTest();

                    if (message.ParentTestId != null)
                    {
                        Test parentTest = testModel.FindTest(message.ParentTestId);
                        if (parentTest == null)
                            throw new InvalidOperationException("The parent test is missing.");

                        parentTest.AddChild(test);
                    }
                    else
                    {
                        testModel.RootTest = test;
                    }
                })
                .Handle<AnnotationDiscoveredMessage>(message =>
                {
                    testModel.AddAnnotation(message.Annotation.ToAnnotation());
                });
        }
Пример #2
0
        private TestModel PublishTestModelFromCodeElements(IEnumerable<ICodeElementInfo> codeElements, IMessageSink messageSink, IProgressMonitor progressMonitor)
        {
            TestModel testModel = new TestModel();
            var tests = new Dictionary<ICodeElementInfo, Test>();

            foreach (ICodeElementInfo codeElement in codeElements)
            {
                if (progressMonitor.IsCanceled)
                    return null;

                testModel.AddAnnotation(new Annotation(AnnotationType.Warning, codeElement, FallbackExplanation));

                IAssemblyInfo assembly = ReflectionUtils.GetAssembly(codeElement);
                if (assembly != null)
                {
                    Test assemblyTest;
                    if (!tests.TryGetValue(assembly, out assemblyTest))
                    {
                        assemblyTest = CreateTest(Path.GetFileName(assembly.Path), assembly);
                        testModel.RootTest.AddChild(assemblyTest);
                        tests.Add(assembly, assemblyTest);

                        ITypeInfo type = ReflectionUtils.GetType(codeElement);
                        if (type != null)
                        {
                            Test typeTest;
                            if (!tests.TryGetValue(type, out typeTest))
                            {
                                typeTest = CreateTest(type.Name, type);
                                assemblyTest.AddChild(typeTest);
                                tests.Add(type, typeTest);
                            }
                        }
                    }
                }

                progressMonitor.Worked(1);
            }

            TestModelSerializer.PublishTestModel(testModel, messageSink);
            return testModel;
        }