You've already forked linux-packaging-mono
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
153 lines
4.5 KiB
C#
153 lines
4.5 KiB
C#
![]() |
// 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
|