/// <summary>
        /// Processes all testcase events.
        /// <see cref="AllureCSharpCommons.Events.TestCaseStartedEvent"/>
        /// <see cref="AllureCSharpCommons.Events.TestCasePendingEvent"/>
        /// <see cref="AllureCSharpCommons.Events.TestCaseCanceledEvent"/>
        /// <see cref="AllureCSharpCommons.Events.TestCaseFinishedEvent"/>
        /// </summary>
        /// <param name="evt">event to process</param>
        public void Fire(ITestCaseEvent evt)
        {
            if (typeof(TestCaseStartedEvent).IsAssignableFrom(evt.GetType()))
            {
                StepStorage.Get();

                var testcaseresult = TestCaseStorage.Get();
                evt.Process(testcaseresult);

                lock (TestSuiteAddChildLock)
                {
                    TestSuiteStorage.Put(evt.SuiteUid);
                    TestSuiteStorage.Get(evt.SuiteUid).testcases =
                        ArraysUtils.Add(TestSuiteStorage.Get(evt.SuiteUid).testcases, testcaseresult);
                }
            }
            else if (typeof(TestCaseFinishedEvent).IsAssignableFrom(evt.GetType()))
            {
                var testcaseresult = TestCaseStorage.Get();
                evt.Process(testcaseresult);

                var root = StepStorage.PollLast();

                testcaseresult.steps       = ArraysUtils.AddAll(testcaseresult.steps, root.steps);
                testcaseresult.attachments = ArraysUtils.AddAll(testcaseresult.attachments, root.attachments);
                StepStorage.Remove();
                TestCaseStorage.Remove();
            }
            else
            {
                var testcaseresult = TestCaseStorage.Get();
                evt.Process(testcaseresult);
            }
        }
 /// <summary>
 /// Processes all step events.
 /// <see cref="AllureCSharpCommons.Events.StepStartedEvent"/>
 /// <see cref="AllureCSharpCommons.Events.StepCanceledEvent"/>
 /// <see cref="AllureCSharpCommons.Events.StepFinishedEvent"/>
 /// </summary>
 /// <param name="evt">event to process</param>
 public void Fire(IStepEvent evt)
 {
     if (typeof(StepStartedEvent).IsAssignableFrom(evt.GetType()))
     {
         var step = new step();
         evt.Process(step);
         StepStorage.Put(step);
     }
     else if (typeof(StepFinishedEvent).IsAssignableFrom(evt.GetType()))
     {
         var step = StepStorage.PollLast();
         evt.Process(step);
         StepStorage.Last.steps = ArraysUtils.Add(StepStorage.Last.steps, step);
     }
     else
     {
         var step = StepStorage.Last;
         evt.Process(step);
     }
 }
        public override void Process(testcaseresult context)
        {
            var attachment = AllureResultsUtils.WriteAttachmentSafely(Attachment, Title, Type);

            context.attachments = ArraysUtils.Add(context.attachments, attachment);
        }
 public override void Process(testcaseresult context)
 {
     context.parameters = ArraysUtils.Add(context.parameters, new parameter(Name, Value, parameterkind.environmentvariable));
 }
 public override void Process(step context)
 {
     context.attachments = ArraysUtils.Add(context.attachments, Attach);
 }