Skip to content

Commit 5c27fee

Browse files
author
Marc Piechura
authored
Skip §2.13 for value types (#34)
1 parent 5598523 commit 5c27fee

File tree

4 files changed

+81
-8
lines changed

4 files changed

+81
-8
lines changed

src/examples/Reactive.Streams.Example.Unicast.Tests/SyncSubscriberWhiteboxTest.cs

+65-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,72 @@
55
namespace Reactive.Streams.Example.Unicast.Tests
66
{
77
[TestFixture]
8-
public class SyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int?>
8+
public class ValueTypeSyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int>
99
{
10-
public SyncSubscriberWhiteboxTest() : base(new TestEnvironment())
10+
public ValueTypeSyncSubscriberWhiteboxTest() : base(new TestEnvironment())
11+
{
12+
}
13+
14+
public override int CreateElement(int element) => element;
15+
16+
public override ISubscriber<int> CreateSubscriber(WhiteboxSubscriberProbe<int> probe) => new Subscriber(probe);
17+
18+
private sealed class Subscriber : SyncSubscriber<int>
19+
{
20+
private readonly WhiteboxSubscriberProbe<int> _probe;
21+
22+
public Subscriber(WhiteboxSubscriberProbe<int> probe)
23+
{
24+
_probe = probe;
25+
}
26+
27+
public override void OnSubscribe(ISubscription subscription)
28+
{
29+
base.OnSubscribe(subscription);
30+
31+
_probe.RegisterOnSubscribe(new SubscriberPuppet(subscription));
32+
}
33+
34+
private sealed class SubscriberPuppet : ISubscriberPuppet
35+
{
36+
private readonly ISubscription _subscription;
37+
38+
public SubscriberPuppet(ISubscription subscription)
39+
{
40+
_subscription = subscription;
41+
}
42+
43+
public void TriggerRequest(long elements) => _subscription.Request(elements);
44+
45+
public void SignalCancel() => _subscription.Cancel();
46+
}
47+
48+
public override void OnNext(int element)
49+
{
50+
base.OnNext(element);
51+
_probe.RegisterOnNext(element);
52+
}
53+
54+
protected override bool WhenNext(int element) => true;
55+
56+
public override void OnError(Exception cause)
57+
{
58+
base.OnError(cause);
59+
_probe.RegisterOnError(cause);
60+
}
61+
62+
public override void OnComplete()
63+
{
64+
base.OnComplete();
65+
_probe.RegisterOnComplete();
66+
}
67+
}
68+
}
69+
70+
[TestFixture]
71+
public class NullableSyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int?>
72+
{
73+
public NullableSyncSubscriberWhiteboxTest() : base(new TestEnvironment())
1174
{
1275
}
1376

src/tck/Reactive.Streams.TCK.Tests/SubscriberBlackboxVerificationTest.cs

+6
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ public void Required_spec213_blackbox_mustThrowNullPointerExceptionWhenParameter
115115
() => CustomSubscriberVerification(new LamdaSubscriber<int?>()).Required_spec213_blackbox_onNext_mustThrowNullPointerExceptionWhenParametersAreNull(),
116116
"OnNext(null) did not throw ArgumentNullException");
117117

118+
[Test]
119+
public void Required_spec213_blackbox_mustThrowNullPointerExceptionWhenParametersAreNull_mustIgnoreSpecForValueType_onNext()
120+
=> RequireTestSkip(
121+
() => SimpleSubscriberVerification().Required_spec213_blackbox_onNext_mustThrowNullPointerExceptionWhenParametersAreNull(),
122+
"Can't verify behavior for value types");
123+
118124
[Test]
119125
public void Required_spec213_blackbox_mustThrowNullPointerExceptionWhenParametersAreNull_mustFailOnIgnoredNull_onError()
120126
=> RequireTestFailure(

src/tck/Reactive.Streams.TCK/SubscriberBlackboxVerification.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -310,15 +310,17 @@ public void Required_spec213_blackbox_onSubscribe_mustThrowNullPointerExceptionW
310310
public void Required_spec213_blackbox_onNext_mustThrowNullPointerExceptionWhenParametersAreNull()
311311
=> BlackboxSubscriberWithoutSetupTest(stage =>
312312
{
313+
var element = default(T);
314+
if(element != null)
315+
throw new IgnoreException("Can't verify behavior for value types");
316+
313317
var subscriber = CreateSubscriber();
314318
var gotNpe = false;
315319
subscriber.OnSubscribe(new Spec213DummySubscription());
316320

317321
try
318322
{
319-
// we can't use null here because we can't enforce a constsraint which supports Nullable<T>
320-
// default(T) will return null for all reference types as well as Nullable<T>
321-
subscriber.OnNext(default(T));
323+
subscriber.OnNext(element);
322324
}
323325
catch (ArgumentNullException)
324326
{

src/tck/Reactive.Streams.TCK/SubscriberWhiteboxVerification.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -329,13 +329,15 @@ public void Required_spec213_onSubscribe_mustThrowNullPointerExceptionWhenParame
329329
public void Required_spec213_onNext_mustThrowNullPointerExceptionWhenParametersAreNull()
330330
=> SubscriberTest(stage =>
331331
{
332+
var element = default(T);
333+
if (element != null)
334+
throw new IgnoreException("Can't verify behavior for value types");
335+
332336
var subscriber = stage.Sub;
333337
var gotNpe = false;
334338
try
335339
{
336-
// we can't use null here because we can't enforce a constsraint which supports Nullable<T>
337-
// default(T) will return null for all reference types as well as Nullable<T>
338-
subscriber.OnNext(default(T));
340+
subscriber.OnNext(element);
339341
}
340342
catch (ArgumentNullException)
341343
{

0 commit comments

Comments
 (0)