Skip to content

Commit

Permalink
Skip §2.13 for value types (#34)
Browse files Browse the repository at this point in the history
Marc Piechura authored Apr 1, 2017

Verified

This commit was signed with the committer’s verified signature.
dovydas55 Dovydas Stankevicius
1 parent 5598523 commit 5c27fee
Showing 4 changed files with 81 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -5,9 +5,72 @@
namespace Reactive.Streams.Example.Unicast.Tests
{
[TestFixture]
public class SyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int?>
public class ValueTypeSyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int>
{
public SyncSubscriberWhiteboxTest() : base(new TestEnvironment())
public ValueTypeSyncSubscriberWhiteboxTest() : base(new TestEnvironment())
{
}

public override int CreateElement(int element) => element;

public override ISubscriber<int> CreateSubscriber(WhiteboxSubscriberProbe<int> probe) => new Subscriber(probe);

private sealed class Subscriber : SyncSubscriber<int>
{
private readonly WhiteboxSubscriberProbe<int> _probe;

public Subscriber(WhiteboxSubscriberProbe<int> probe)
{
_probe = probe;
}

public override void OnSubscribe(ISubscription subscription)
{
base.OnSubscribe(subscription);

_probe.RegisterOnSubscribe(new SubscriberPuppet(subscription));
}

private sealed class SubscriberPuppet : ISubscriberPuppet
{
private readonly ISubscription _subscription;

public SubscriberPuppet(ISubscription subscription)
{
_subscription = subscription;
}

public void TriggerRequest(long elements) => _subscription.Request(elements);

public void SignalCancel() => _subscription.Cancel();
}

public override void OnNext(int element)
{
base.OnNext(element);
_probe.RegisterOnNext(element);
}

protected override bool WhenNext(int element) => true;

public override void OnError(Exception cause)
{
base.OnError(cause);
_probe.RegisterOnError(cause);
}

public override void OnComplete()
{
base.OnComplete();
_probe.RegisterOnComplete();
}
}
}

[TestFixture]
public class NullableSyncSubscriberWhiteboxTest : SubscriberWhiteboxVerification<int?>
{
public NullableSyncSubscriberWhiteboxTest() : base(new TestEnvironment())
{
}

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

[Test]
public void Required_spec213_blackbox_mustThrowNullPointerExceptionWhenParametersAreNull_mustIgnoreSpecForValueType_onNext()
=> RequireTestSkip(
() => SimpleSubscriberVerification().Required_spec213_blackbox_onNext_mustThrowNullPointerExceptionWhenParametersAreNull(),
"Can't verify behavior for value types");

[Test]
public void Required_spec213_blackbox_mustThrowNullPointerExceptionWhenParametersAreNull_mustFailOnIgnoredNull_onError()
=> RequireTestFailure(
Original file line number Diff line number Diff line change
@@ -310,15 +310,17 @@ public void Required_spec213_blackbox_onSubscribe_mustThrowNullPointerExceptionW
public void Required_spec213_blackbox_onNext_mustThrowNullPointerExceptionWhenParametersAreNull()
=> BlackboxSubscriberWithoutSetupTest(stage =>
{
var element = default(T);
if(element != null)
throw new IgnoreException("Can't verify behavior for value types");

var subscriber = CreateSubscriber();
var gotNpe = false;
subscriber.OnSubscribe(new Spec213DummySubscription());

try
{
// we can't use null here because we can't enforce a constsraint which supports Nullable<T>
// default(T) will return null for all reference types as well as Nullable<T>
subscriber.OnNext(default(T));
subscriber.OnNext(element);
}
catch (ArgumentNullException)
{
Original file line number Diff line number Diff line change
@@ -329,13 +329,15 @@ public void Required_spec213_onSubscribe_mustThrowNullPointerExceptionWhenParame
public void Required_spec213_onNext_mustThrowNullPointerExceptionWhenParametersAreNull()
=> SubscriberTest(stage =>
{
var element = default(T);
if (element != null)
throw new IgnoreException("Can't verify behavior for value types");

var subscriber = stage.Sub;
var gotNpe = false;
try
{
// we can't use null here because we can't enforce a constsraint which supports Nullable<T>
// default(T) will return null for all reference types as well as Nullable<T>
subscriber.OnNext(default(T));
subscriber.OnNext(element);
}
catch (ArgumentNullException)
{

2 comments on commit 5c27fee

@Petabridge-CI
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TeamCity Reactive.Streams :: Pull Requests (Windows) Build 63 is now running

@Petabridge-CI
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TeamCity Reactive.Streams :: Pull Requests (Windows) Build 63 outcome was SUCCESS
Summary: Running Build time: 00:03:13

Please sign in to comment.