MachineContextTest GetContextTest(Context context)
        {
            MachineContextTest contextTest = new MachineContextTest(context);

            context.Specifications
            .Select(spec => GetSpecificationTest(context, spec))
            .Each(test => contextTest.AddChild(test));

            if (context.Subject != null)
            {
                contextTest.Metadata.Add(MetadataKeys.Category, context.Subject.FullConcern);
            }

            if (context.Tags != null && context.Tags.Any())
            {
                contextTest.Metadata.Add(SpecificationMetadataKeys.Tags, context.Tags.Select(t => t.Name).ToList());
            }

            if (context.IsIgnored)
            {
                contextTest.Metadata.Add(MetadataKeys.IgnoreReason, "The context has the IgnoreAttribute");
            }

            AddXmlComment(contextTest, Reflector.Wrap(context.Type));
            return(contextTest);
        }
        MachineSpecificationTest GetSpecificationTest(Context context, Specification specification)
        {
            MachineSpecificationTest specificationTest = new MachineSpecificationTest(specification);

            if (specification.IsIgnored)
            {
                string reason = context.IsIgnored ? "The parent context has the IgnoreAttribute" : "The specification has the IgnoreAttribute";
                specificationTest.Metadata.Add(MetadataKeys.IgnoreReason, reason);
            }

            AddXmlComment(specificationTest, Reflector.Wrap(specification.FieldInfo));

            return(specificationTest);
        }
    MachineContextTest GetContextTest(Context context)
    {
      MachineContextTest contextTest = new MachineContextTest(context);

      context.Specifications
        .Select( spec => GetSpecificationTest( context, spec))
        .Each( test => contextTest.AddChild(test));

      if (context.Subject != null)
        contextTest.Metadata.Add(MetadataKeys.Category, context.Subject.FullConcern);

      if (context.Tags != null && context.Tags.Any())
        contextTest.Metadata.Add(SpecificationMetadataKeys.Tags, context.Tags.Select(t => t.Name).ToList());

      if (context.IsIgnored)
        contextTest.Metadata.Add(MetadataKeys.IgnoreReason, "The context has the IgnoreAttribute");

      AddXmlComment(contextTest, Reflector.Wrap(context.Type));
      return contextTest;
    }
    MachineSpecificationTest GetSpecificationTest(Context context, Specification specification)
    {
      MachineSpecificationTest specificationTest = new MachineSpecificationTest( specification);

      if (specification.IsIgnored)
      {
        string reason = context.IsIgnored ? "The parent context has the IgnoreAttribute" : "The specification has the IgnoreAttribute";
        specificationTest.Metadata.Add(MetadataKeys.IgnoreReason, reason);
      }

      AddXmlComment(specificationTest, Reflector.Wrap(specification.FieldInfo));

      return specificationTest;
    }