1+ using Xunit . Sdk ;
2+
3+ namespace NRedisStack . Tests ;
4+
5+ // TODO(imalinovskiy): Remove this file once tests are migrated to Xunit v3
6+
7+ /// Copyright (c) Andrew Arnott. All rights reserved.
8+ // Licensed under the Microsoft Public License (Ms-PL).
9+ // https://github.com/AArnott/Xunit.SkippableFact/blob/main/src/Xunit.SkippableFact/Sdk/SkippableTheoryDiscoverer.cs
10+ // See https://github.com/AArnott/Xunit.SkippableFact/blob/main/LICENSE for full license information.
11+
12+ using System . Collections . Generic ;
13+ using Validation ;
14+ using Xunit . Abstractions ;
15+
16+ /// <summary>
17+ /// Patched TestCase discoverer to support SkipIfRedisAttribute.
18+ /// </summary>
19+ public class SkippableTheoryDiscoverer : IXunitTestCaseDiscoverer
20+ {
21+ /// <summary>
22+ /// The diagnostic message sink provided to the constructor.
23+ /// </summary>
24+ private readonly IMessageSink diagnosticMessageSink ;
25+
26+ /// <summary>
27+ /// The complex theory discovery process that we wrap.
28+ /// </summary>
29+ private readonly TheoryDiscoverer theoryDiscoverer ;
30+
31+ /// <summary>
32+ /// Initializes a new instance of the <see cref="SkippableTheoryDiscoverer"/> class.
33+ /// </summary>
34+ /// <param name="diagnosticMessageSink">The message sink used to send diagnostic messages.</param>
35+ public SkippableTheoryDiscoverer ( IMessageSink diagnosticMessageSink )
36+ {
37+ this . diagnosticMessageSink = diagnosticMessageSink ;
38+ this . theoryDiscoverer = new TheoryDiscoverer ( diagnosticMessageSink ) ;
39+ }
40+
41+ /// <inheritdoc />
42+ public virtual IEnumerable < IXunitTestCase > Discover ( ITestFrameworkDiscoveryOptions discoveryOptions , ITestMethod testMethod , IAttributeInfo factAttribute )
43+ {
44+ Requires . NotNull ( factAttribute , nameof ( factAttribute ) ) ;
45+ string [ ] skippingExceptionNames = new [ ] { "Xunit.SkippableFact.SkipException" } ;
46+ TestMethodDisplay defaultMethodDisplay = discoveryOptions . MethodDisplayOrDefault ( ) ;
47+
48+ IEnumerable < IXunitTestCase > ? basis = this . theoryDiscoverer . Discover ( discoveryOptions , testMethod , factAttribute ) ;
49+ foreach ( IXunitTestCase ? testCase in basis )
50+ {
51+ if ( testCase is XunitTheoryTestCase )
52+ {
53+ yield return new SkippableTheoryTestCase ( skippingExceptionNames , this . diagnosticMessageSink , defaultMethodDisplay , discoveryOptions . MethodDisplayOptionsOrDefault ( ) , testCase . TestMethod ) ;
54+ }
55+ else
56+ {
57+ yield return new SkippableFactTestCase ( skippingExceptionNames , this . diagnosticMessageSink , defaultMethodDisplay , discoveryOptions . MethodDisplayOptionsOrDefault ( ) , testCase . TestMethod , testCase . TestMethodArguments ) ;
58+ }
59+ }
60+ }
61+ }
0 commit comments