Files
data
debian
docs
eglib
external
Lucene.Net
Newtonsoft.Json
aspnetwebstack
binary-reference-assemblies
cecil
debian-snapshot
ikdasm
ikvm
referencesource
rx
Ix
Rx
NET
Resources
Samples
Source
.nuget
Microsoft.Reactive.Testing
Playground
References
Rx_Xamarin
System.Reactive.Core
System.Reactive.Debugger
System.Reactive.Experimental
System.Reactive.Interfaces
System.Reactive.Linq
System.Reactive.Observable.Aliases
System.Reactive.PlatformServices
System.Reactive.Providers
System.Reactive.Runtime.Remoting
System.Reactive.Windows.Forms
System.Reactive.Windows.Threading
System.Reactive.WindowsRuntime
Tests.System.Reactive
Dummies
Properties
Stress
Tests
Concurrency
Disposables
Linq
Subjects
ObservableAggregateTest.cs.REMOVED.git-id
ObservableAsyncTest.cs.REMOVED.git-id
ObservableAwaiterTest.cs
ObservableBindingTest.cs
ObservableBlockingTest.cs
ObservableConcurrencyTest.cs
ObservableConversionTests.cs
ObservableCreationTest.cs
ObservableEventsTest.cs
ObservableExTest.cs
ObservableExtensionsTest.cs
ObservableImperativeTest.cs
ObservableJoinsTest.cs
ObservableMultipleTest.cs.REMOVED.git-id
ObservableRemotingTest.cs
ObservableSafetyTest.cs
ObservableSingleTest.cs.REMOVED.git-id
ObservableStandardQueryOperatorTest.cs.REMOVED.git-id
ObservableTimeTest.cs.REMOVED.git-id
QbservableExTest.cs
QbservableTest.cs.REMOVED.git-id
Aliases.cs
AnonymousTest.cs
ConnectableObservable.cs
ConnectableObservableTest.cs
DefaultConcurrencyAbstractionLayerTest.cs
EventPatternSourceBaseTest.cs
ListObservableTest.cs
MySubject.cs
NotificationTest.cs
ObserverTest.cs
PrivateTypesTest.cs
RegressionTest.cs
RogueEnumerable.cs
SystemClockTest.cs
TaskObservableExtensionsTest.cs
TimeTests.cs
UnitTest.cs
App.cs
DispatcherHelpers.cs
Extensions.cs
MockDisposable.cs
MockEnumerable.cs
NullErrorObservable.cs
Semaphore.cs
TestBase.cs
TestLongRunningScheduler.cs
TestTaskScheduler.cs
Tests.System.Reactive.csproj
Utils.cs
packages
.gitattributes
.gitignore
35MSSharedLib1024.snk
Build.bat
BuildAll.proj
BuildSetup.bat
Clean.bat
Common.targets
Import.targets
Local.testsettings
README.txt
Rx.ruleset
Rx.sln.REMOVED.git-id
Test.ruleset
TraceAndTestImpact.testsettings
license.txt
packages.config
Test
tools
component
xpkg
.gitignore
README-microsoft-original.md
README.md
Rakefile
mono.patch
replacer.sh
ikvm-native
libgc
m4
man
mcs
mono
msvc
po
runtime
samples
scripts
support
tools
AUTHORS
COPYING.LIB
ChangeLog.REMOVED.git-id
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
build-mingw32.sh
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-core.spec
mono-core.spec.in
mono-uninstalled.pc.in
test-driver
winconfig.h
linux-packaging-mono/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableAwaiterTest.cs

153 lines
4.5 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
#if HAS_AWAIT
using System;
using System.Collections.Generic;
using System.Reactive;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using Microsoft.Reactive.Testing;
#if NUNIT
using NUnit.Framework;
using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
using TestMethodAttribute = NUnit.Framework.TestAttribute;
using TestInitializeAttribute = NUnit.Framework.SetUpAttribute;
#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
#endif
using ReactiveTests.Dummies;
namespace ReactiveTests.Tests
{
[TestClass]
public class ObservableAwaiterTest : ReactiveTest
{
[TestMethod]
public void Await_ArgumentChecking()
{
ReactiveAssert.Throws<ArgumentNullException>(() => Observable.GetAwaiter<int>(null));
ReactiveAssert.Throws<ArgumentNullException>(() => Observable.GetAwaiter(Observable.Empty<int>()).OnCompleted(null));
}
[TestMethod]
public void Await()
{
var scheduler = new TestScheduler();
var xs = scheduler.CreateHotObservable(
OnNext(20, -1),
OnNext(150, 0),
OnNext(220, 1),
OnNext(290, 2),
OnNext(340, 3),
OnCompleted<int>(410)
);
var awaiter = default(AsyncSubject<int>);
var result = default(int);
var t = long.MaxValue;
scheduler.ScheduleAbsolute(100, () => awaiter = xs.GetAwaiter());
scheduler.ScheduleAbsolute(200, () => awaiter.OnCompleted(() => { t = scheduler.Clock; result = awaiter.GetResult(); }));
scheduler.Start();
Assert.AreEqual(410, t);
Assert.AreEqual(3, result);
xs.Subscriptions.AssertEqual(
Subscribe(100)
);
}
[TestMethod]
public void Await_Error()
{
var scheduler = new TestScheduler();
var ex = new Exception();
var xs = scheduler.CreateHotObservable(
OnNext(20, -1),
OnNext(150, 0),
OnNext(220, 1),
OnNext(290, 2),
OnNext(340, 3),
OnError<int>(410, ex)
);
var awaiter = default(AsyncSubject<int>);
var t = long.MaxValue;
scheduler.ScheduleAbsolute(100, () => awaiter = xs.GetAwaiter());
scheduler.ScheduleAbsolute(200, () => awaiter.OnCompleted(() => { t = scheduler.Clock; ReactiveAssert.Throws(ex, () => awaiter.GetResult()); }));
scheduler.Start();
Assert.AreEqual(410, t);
xs.Subscriptions.AssertEqual(
Subscribe(100)
);
}
[TestMethod]
public void Await_Never()
{
var scheduler = new TestScheduler();
var xs = scheduler.CreateHotObservable(
OnNext(20, -1),
OnNext(150, 0),
OnNext(220, 1),
OnNext(290, 2),
OnNext(340, 3)
);
var awaiter = default(AsyncSubject<int>);
var hasValue = default(bool);
var t = long.MaxValue;
scheduler.ScheduleAbsolute(100, () => awaiter = xs.GetAwaiter());
scheduler.ScheduleAbsolute(200, () => awaiter.OnCompleted(() => { t = scheduler.Clock; awaiter.GetResult(); hasValue = true; }));
scheduler.Start();
Assert.AreEqual(long.MaxValue, t);
Assert.IsFalse(hasValue);
xs.Subscriptions.AssertEqual(
Subscribe(100)
);
}
[TestMethod]
public void Await_Empty()
{
var scheduler = new TestScheduler();
var xs = scheduler.CreateHotObservable(
OnCompleted<int>(300)
);
var awaiter = default(AsyncSubject<int>);
var t = long.MaxValue;
scheduler.ScheduleAbsolute(100, () => awaiter = xs.GetAwaiter());
scheduler.ScheduleAbsolute(200, () => awaiter.OnCompleted(() => { t = scheduler.Clock; ReactiveAssert.Throws<InvalidOperationException>(() => awaiter.GetResult()); }));
scheduler.Start();
Assert.AreEqual(300, t);
xs.Subscriptions.AssertEqual(
Subscribe(100)
);
}
}
}
#endif