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);
}
}
}