using System; using System.ComponentModel; using Xunit.Abstractions; using Xunit.Sdk; namespace Microsoft.AspNetCore.Testing { // This is a workaround for https://github.com/xunit/xunit/issues/1782 - as such, this code is a copy-paste // from xUnit with the exception of fixing the bug. // // This will only work with [ConditionalTheory]. internal class WORKAROUND_SkippedDataRowTestCase : XunitTestCase { string skipReason; /// [EditorBrowsable(EditorBrowsableState.Never)] [Obsolete("Called by the de-serializer; should only be called by deriving classes for de-serialization purposes")] public WORKAROUND_SkippedDataRowTestCase() { } /// /// Initializes a new instance of the class. /// /// The message sink used to send diagnostic messages /// Default method display to use (when not customized). /// The test method this test case belongs to. /// The reason that this test case will be skipped /// The arguments for the test method. [Obsolete("Please call the constructor which takes TestMethodDisplayOptions")] public WORKAROUND_SkippedDataRowTestCase(IMessageSink diagnosticMessageSink, TestMethodDisplay defaultMethodDisplay, ITestMethod testMethod, string skipReason, object[] testMethodArguments = null) : this(diagnosticMessageSink, defaultMethodDisplay, TestMethodDisplayOptions.None, testMethod, skipReason, testMethodArguments) { } /// /// Initializes a new instance of the class. /// /// The message sink used to send diagnostic messages /// Default method display to use (when not customized). /// Default method display options to use (when not customized). /// The test method this test case belongs to. /// The reason that this test case will be skipped /// The arguments for the test method. public WORKAROUND_SkippedDataRowTestCase(IMessageSink diagnosticMessageSink, TestMethodDisplay defaultMethodDisplay, TestMethodDisplayOptions defaultMethodDisplayOptions, ITestMethod testMethod, string skipReason, object[] testMethodArguments = null) : base(diagnosticMessageSink, defaultMethodDisplay, defaultMethodDisplayOptions, testMethod, testMethodArguments) { this.skipReason = skipReason; } /// public override void Deserialize(IXunitSerializationInfo data) { // SkipReason has to be read before we call base.Deserialize, this is the workaround. this.skipReason = data.GetValue("SkipReason"); base.Deserialize(data); } /// protected override string GetSkipReason(IAttributeInfo factAttribute) { return skipReason; } /// public override void Serialize(IXunitSerializationInfo data) { base.Serialize(data); data.AddValue("SkipReason", skipReason); } } }