public void WriteTestSequenceShouldWriteCorrectFileContentsIfTestCompletedIsTrue()
        {
            var xmlReaderWriter = new XmlReaderWriter();
            var testObject      = new BlameTestObject(new TestCase("Abc.UnitTest1", new Uri("test:/abc"), "Abc.dll"));

            testObject.DisplayName = "UnitTest1";
            var testSequence = new List <Guid>
            {
                testObject.Id
            };
            var testObjectDictionary = new Dictionary <Guid, BlameTestObject>
            {
                { testObject.Id, testObject }
            };

            testObjectDictionary[testObject.Id].IsCompleted = true;
            var filePath     = xmlReaderWriter.WriteTestSequence(testSequence, testObjectDictionary, Path.GetTempPath());
            var testCaseList = xmlReaderWriter.ReadTestSequence(filePath);

            File.Delete(filePath);

            Assert.AreEqual("Abc.UnitTest1", testCaseList.First().FullyQualifiedName);
            Assert.AreEqual("UnitTest1", testCaseList.First().DisplayName);
            Assert.AreEqual("Abc.dll", testCaseList.First().Source);
            Assert.IsTrue(testCaseList.First().IsCompleted);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="XmlReaderWriterTests"/> class.
        /// </summary>
        public XmlReaderWriterTests()
        {
            this.mockFileHelper       = new Mock <IFileHelper>();
            this.xmlReaderWriter      = new TestableXmlReaderWriter(this.mockFileHelper.Object);
            this.mockStream           = new Mock <Stream>();
            this.testCaseList         = new List <Guid>();
            this.testObjectDictionary = new Dictionary <Guid, BlameTestObject>();
            var testcase = new TestCase
            {
                ExecutorUri        = new Uri("test:/abc"),
                FullyQualifiedName = "TestProject.UnitTest.TestMethod",
                Source             = "abc.dll"
            };

            this.blameTestObject = new BlameTestObject(testcase);
        }
        public void EventHandlersShouldGenerateCorrectTestSequenceAndTestObjectDictionaryForBothCompletedAndNotCompletedTests()
        {
            // Initializing Blame Data Collector
            this.blameDataCollector.Initialize(
                this.configurationElement,
                this.mockDataColectionEvents.Object,
                this.mockDataCollectionSink.Object,
                this.mockLogger.Object,
                this.context);

            TestCase testcase1 = new TestCase("TestProject.UnitTest.TestMethod1", new Uri("test:/abc"), "abc.dll");
            TestCase testcase2 = new TestCase("TestProject.UnitTest.TestMethod2", new Uri("test:/abc"), "abc.dll");

            testcase1.DisplayName = "TestMethod1";
            testcase2.DisplayName = "TestMethod2";
            var blameTestObject1 = new BlameTestObject(testcase1);
            var blameTestObject2 = new BlameTestObject(testcase2);

            // Setup and Raise TestCaseStart and Session End Event
            this.mockBlameReaderWriter.Setup(x => x.WriteTestSequence(It.IsAny <List <Guid> >(), It.IsAny <Dictionary <Guid, BlameTestObject> >(), It.IsAny <string>())).Returns(this.filepath);
            this.mockDataColectionEvents.Raise(x => x.TestCaseStart += null, new TestCaseStartEventArgs(testcase1));
            this.mockDataColectionEvents.Raise(x => x.TestCaseStart += null, new TestCaseStartEventArgs(testcase2));
            this.mockDataColectionEvents.Raise(x => x.TestCaseEnd   += null, new TestCaseEndEventArgs(testcase1, TestOutcome.Passed));
            blameTestObject1.IsCompleted = true;
            this.mockDataColectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs(this.dataCollectionContext));

            // Verify call to mockBlameReaderWriter
            this.mockBlameReaderWriter.Verify(
                x => x.WriteTestSequence(
                    It.Is <List <Guid> >(y => y.Count == 2 && y.First() == blameTestObject1.Id && y.Last() == blameTestObject2.Id),
                    It.Is <Dictionary <Guid, BlameTestObject> >(
                        y => y.Count == 2 &&
                        y[blameTestObject1.Id].IsCompleted == true && y[blameTestObject2.Id].IsCompleted == false &&
                        y[blameTestObject1.Id].FullyQualifiedName == "TestProject.UnitTest.TestMethod1" && y[blameTestObject2.Id].FullyQualifiedName == "TestProject.UnitTest.TestMethod2" &&
                        y[blameTestObject1.Id].Source == "abc.dll" && y[blameTestObject2.Id].Source == "abc.dll" &&
                        y[blameTestObject1.Id].DisplayName == "TestMethod1" && y[blameTestObject2.Id].DisplayName == "TestMethod2"),
                    It.IsAny <string>()),
                Times.Once);
        }