Skip to content

Commit 3d8a950

Browse files
authored
Merge pull request #9 from Silv3rcircl3/tck
Ported TCK and examples
2 parents 93a21c7 + 6096377 commit 3d8a950

File tree

72 files changed

+9214
-18
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+9214
-18
lines changed

CopyrightWaivers.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright Statement for Contributions to the Reactive Streams Project
1+
Copyright Statement for Contributions to the Reactive Streams Project
22
=====================================================================
33

44
I hereby represent that all present, past and future contributions I make to
@@ -20,3 +20,4 @@ github name | Real Name, Email Address used for git commits, Company
2020
---------------+----------------------------------------------------------------------------
2121
cconstantin | Chris Constantin, [email protected], Aligned Software Solutions, Inc.
2222
viktorklang | Viktor Klang, [email protected], Lightbend, Inc.
23+
Silv3rcircl3 | Marc Piechura, [email protected], Pulmokard GmbH

RELEASE_NOTES.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#### 0.0.0 - 10.06.2016
2+
3+
Paceholder for the build script

build.cmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ src\.nuget\NuGet.exe update -self
66

77
src\.nuget\NuGet.exe install FAKE -ConfigFile src\.nuget\Nuget.Config -OutputDirectory src\packages -ExcludeVersion -Version 4.16.1
88

9-
src\.nuget\NuGet.exe install xunit.runner.console -ConfigFile src\.nuget\Nuget.Config -OutputDirectory src\packages\FAKE -ExcludeVersion -Version 2.0.0
9+
src\.nuget\NuGet.exe install NUnit.ConsoleRunner -ConfigFile src\.nuget\Nuget.Config -OutputDirectory src\packages\FAKE -ExcludeVersion -Version 3.2.1
1010

1111
if not exist src\packages\SourceLink.Fake\tools\SourceLink.fsx (
1212
src\.nuget\nuget.exe install SourceLink.Fake -ConfigFile src\.nuget\Nuget.Config -OutputDirectory src\packages -ExcludeVersion

build.fsx

+14-11
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ let testOutput = "TestResults"
5050

5151
let nugetDir = binDir @@ "nuget"
5252
let workingDir = binDir @@ "build"
53-
let libDir = workingDir @@ @"lib\net40\"
53+
let libDirPortable = workingDir @@ @"lib\portable-net45+netcore45\"
54+
let libDir45 = workingDir @@ @"lib\net45\"
5455
let nugetExe = FullName @"src\.nuget\NuGet.exe"
5556
let slnFile = "./src/Reactive.Streams.sln"
5657

@@ -104,8 +105,7 @@ Target "CopyOutput" <| fun _ ->
104105
let src = "src" @@ project @@ @"bin/Release/"
105106
let dst = binDir @@ project
106107
CopyDir dst src allFiles
107-
[ "Reactive.Streams"
108-
]
108+
[ "api/Reactive.Streams"; "tck/Reactive.Streams.TCK" ]
109109
|> List.iter copyOutput
110110

111111
Target "BuildRelease" DoNothing
@@ -123,18 +123,18 @@ Target "CleanTests" <| fun _ ->
123123
DeleteDir testOutput
124124
//--------------------------------------------------------------------------------
125125
// Run tests
126+
open Fake.Testing
126127

127-
open XUnit2Helper
128128
Target "RunTests" <| fun _ ->
129-
let xunitTestAssemblies = !! "src/**/bin/Release/*.Tests.dll"
129+
let nunitTestAssemblies = !! "src/**/bin/Release/*.Tests.dll"
130130

131131
mkdir testOutput
132132

133-
let xunitToolPath = findToolInSubPath "xunit.console.exe" "src/packages/xunit.runner.console*/tools"
134-
printfn "Using XUnit runner: %s" xunitToolPath
135-
xUnit2
136-
(fun p -> { p with OutputDir = testOutput; ToolPath = xunitToolPath })
137-
xunitTestAssemblies
133+
let nunitToolPath = findToolInSubPath "nunit3-console.exe" "src/packages/FAKE/NUnit.ConsoleRunner/tools"
134+
printfn "Using NUnit runner: %s" nunitToolPath
135+
NUnit3
136+
(fun p -> { p with ToolPath = nunitToolPath; ResultSpecs = [testOutput + "/TestResults.xml"] })
137+
nunitTestAssemblies
138138

139139
//--------------------------------------------------------------------------------
140140
// Nuget targets
@@ -238,12 +238,15 @@ let createNugetPackages _ =
238238
Dependencies = dependencies })
239239
nuspec
240240

241-
// Copy dll, pdb and xml to libdir = workingDir/lib/net45/
241+
// Copy dll, pdb and xml to libdir = workingDir/lib/net4x/
242+
let libDir = if project.Contains ".TCK" then libDir45 else libDirPortable
242243
ensureDirectory libDir
243244
!! (releaseDir @@ project + ".dll")
244245
++ (releaseDir @@ project + ".pdb")
245246
++ (releaseDir @@ project + ".xml")
246247
++ (releaseDir @@ project + ".ExternalAnnotations.xml")
248+
++ (releaseDir @@ "Reactive.Streams.Example.Unicast.dll")
249+
++ (releaseDir @@ "Reactive.Streams.Example.Unicast.pdb")
247250
|> CopyFiles libDir
248251

249252
// Copy all src-files (.cs and .fs files) to workingDir/src

src/.nuget/NuGet.exe

2 KB
Binary file not shown.

src/Reactive.Streams.sln

+38-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 14
44
VisualStudioVersion = 14.0.25123.0
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams", "Reactive.Streams\Reactive.Streams.csproj", "{68FBB4DF-6D83-4CF1-8105-A1D41912852F}"
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams", "api\Reactive.Streams\Reactive.Streams.csproj", "{68FBB4DF-6D83-4CF1-8105-A1D41912852F}"
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{97BE0CEB-2816-47E9-ABC3-78905582A882}"
99
ProjectSection(SolutionItems) = preProject
@@ -20,6 +20,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{D389959C
2020
..\build.sh = ..\build.sh
2121
EndProjectSection
2222
EndProject
23+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams.TCK", "tck\Reactive.Streams.TCK\Reactive.Streams.TCK.csproj", "{7DBE1261-04EB-4DA7-9953-C8E8CCC49010}"
24+
EndProject
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams.TCK.Tests", "tck\Reactive.Streams.TCK.Tests\Reactive.Streams.TCK.Tests.csproj", "{0F1C51EB-3554-487F-8CE4-75CAAD2887F8}"
26+
EndProject
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams.Example.Unicast", "examples\Reactive.Streams.Example.Unicast\Reactive.Streams.Example.Unicast.csproj", "{01737D0D-ED40-499B-A706-12BE9847491B}"
28+
EndProject
29+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reactive.Streams.Example.Unicast.Tests", "examples\Reactive.Streams.Example.Unicast.Tests\Reactive.Streams.Example.Unicast.Tests.csproj", "{A69C5115-5E39-47ED-B8EF-83A342968999}"
30+
EndProject
31+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "api", "api", "{47E4C672-A6E8-43FE-A03E-761BC4601F84}"
32+
EndProject
33+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tck", "tck", "{755FE80E-BE8C-4FC3-8ACD-CCB8338889D2}"
34+
EndProject
35+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{6CCDDC32-BD9D-4767-BF9A-64275D330558}"
36+
EndProject
2337
Global
2438
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2539
Debug|Any CPU = Debug|Any CPU
@@ -30,8 +44,31 @@ Global
3044
{68FBB4DF-6D83-4CF1-8105-A1D41912852F}.Debug|Any CPU.Build.0 = Debug|Any CPU
3145
{68FBB4DF-6D83-4CF1-8105-A1D41912852F}.Release|Any CPU.ActiveCfg = Release|Any CPU
3246
{68FBB4DF-6D83-4CF1-8105-A1D41912852F}.Release|Any CPU.Build.0 = Release|Any CPU
47+
{7DBE1261-04EB-4DA7-9953-C8E8CCC49010}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48+
{7DBE1261-04EB-4DA7-9953-C8E8CCC49010}.Debug|Any CPU.Build.0 = Debug|Any CPU
49+
{7DBE1261-04EB-4DA7-9953-C8E8CCC49010}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{7DBE1261-04EB-4DA7-9953-C8E8CCC49010}.Release|Any CPU.Build.0 = Release|Any CPU
51+
{0F1C51EB-3554-487F-8CE4-75CAAD2887F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52+
{0F1C51EB-3554-487F-8CE4-75CAAD2887F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
53+
{0F1C51EB-3554-487F-8CE4-75CAAD2887F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
54+
{0F1C51EB-3554-487F-8CE4-75CAAD2887F8}.Release|Any CPU.Build.0 = Release|Any CPU
55+
{01737D0D-ED40-499B-A706-12BE9847491B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
56+
{01737D0D-ED40-499B-A706-12BE9847491B}.Debug|Any CPU.Build.0 = Debug|Any CPU
57+
{01737D0D-ED40-499B-A706-12BE9847491B}.Release|Any CPU.ActiveCfg = Release|Any CPU
58+
{01737D0D-ED40-499B-A706-12BE9847491B}.Release|Any CPU.Build.0 = Release|Any CPU
59+
{A69C5115-5E39-47ED-B8EF-83A342968999}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
60+
{A69C5115-5E39-47ED-B8EF-83A342968999}.Debug|Any CPU.Build.0 = Debug|Any CPU
61+
{A69C5115-5E39-47ED-B8EF-83A342968999}.Release|Any CPU.ActiveCfg = Release|Any CPU
62+
{A69C5115-5E39-47ED-B8EF-83A342968999}.Release|Any CPU.Build.0 = Release|Any CPU
3363
EndGlobalSection
3464
GlobalSection(SolutionProperties) = preSolution
3565
HideSolutionNode = FALSE
3666
EndGlobalSection
67+
GlobalSection(NestedProjects) = preSolution
68+
{68FBB4DF-6D83-4CF1-8105-A1D41912852F} = {47E4C672-A6E8-43FE-A03E-761BC4601F84}
69+
{7DBE1261-04EB-4DA7-9953-C8E8CCC49010} = {755FE80E-BE8C-4FC3-8ACD-CCB8338889D2}
70+
{0F1C51EB-3554-487F-8CE4-75CAAD2887F8} = {755FE80E-BE8C-4FC3-8ACD-CCB8338889D2}
71+
{01737D0D-ED40-499B-A706-12BE9847491B} = {6CCDDC32-BD9D-4767-BF9A-64275D330558}
72+
{A69C5115-5E39-47ED-B8EF-83A342968999} = {6CCDDC32-BD9D-4767-BF9A-64275D330558}
73+
EndGlobalSection
3774
EndGlobal

src/SharedAssemblyInfo.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
[assembly: AssemblyCompanyAttribute("Reactive Streams")]
55
[assembly: AssemblyCopyrightAttribute("CC0 1.0 Universal")]
66
[assembly: AssemblyTrademarkAttribute("")]
7-
[assembly: AssemblyVersionAttribute("1.0.0.0")]
8-
[assembly: AssemblyFileVersionAttribute("1.0.0.0")]
7+
[assembly: AssemblyVersionAttribute("0.0.0.0")]
8+
[assembly: AssemblyFileVersionAttribute("0.0.0.0")]

src/Reactive.Streams/Reactive.Streams.csproj renamed to src/api/Reactive.Streams/Reactive.Streams.csproj

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<AppDesignerFolder>Properties</AppDesignerFolder>
1010
<RootNamespace>Reactive.Streams</RootNamespace>
1111
<AssemblyName>Reactive.Streams</AssemblyName>
12-
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
12+
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
1313
<FileAlignment>512</FileAlignment>
1414
<TargetFrameworkProfile />
1515
</PropertyGroup>
@@ -21,6 +21,7 @@
2121
<DefineConstants>DEBUG;TRACE</DefineConstants>
2222
<ErrorReport>prompt</ErrorReport>
2323
<WarningLevel>4</WarningLevel>
24+
<Prefer32Bit>false</Prefer32Bit>
2425
</PropertyGroup>
2526
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
2627
<DebugType>pdbonly</DebugType>
@@ -29,14 +30,16 @@
2930
<DefineConstants>TRACE</DefineConstants>
3031
<ErrorReport>prompt</ErrorReport>
3132
<WarningLevel>4</WarningLevel>
33+
<Prefer32Bit>false</Prefer32Bit>
34+
<DocumentationFile>bin\Release\Reactive.Streams.xml</DocumentationFile>
3235
</PropertyGroup>
3336
<ItemGroup>
3437
<Reference Include="System" />
3538
<Reference Include="System.Core" />
3639
<Reference Include="Microsoft.CSharp" />
3740
</ItemGroup>
3841
<ItemGroup>
39-
<Compile Include="..\SharedAssemblyInfo.cs">
42+
<Compile Include="..\..\SharedAssemblyInfo.cs">
4043
<Link>Properties\SharedAssemblyInfo.cs</Link>
4144
</Compile>
4245
<Compile Include="IProcessor.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using System.Threading;
3+
using NUnit.Framework;
4+
using Reactive.Streams.TCK;
5+
using Reactive.Streams.TCK.Support;
6+
7+
namespace Reactive.Streams.Example.Unicast.Tests
8+
{
9+
[TestFixture]
10+
public class AsyncSubscriberTest : SubscriberBlackboxVerification<int?>
11+
{
12+
public AsyncSubscriberTest() : base(new TestEnvironment())
13+
{
14+
}
15+
16+
public override int? CreateElement(int element) => element;
17+
18+
public override ISubscriber<int?> CreateSubscriber() => new Suscriber();
19+
20+
private sealed class Suscriber : AsyncSubscriber<int?>
21+
{
22+
protected override bool WhenNext(int? element) => true;
23+
}
24+
25+
[Test]
26+
public void TestAccumulation()
27+
{
28+
var i = new AtomicCounterLong(0);
29+
var latch = new CountdownEvent(1);
30+
var subscriber = new AccSubscriber(i, latch);
31+
new NumberIterablePublisher(0,10).Subscribe(subscriber);
32+
latch.Wait(TimeSpan.FromMilliseconds(Environment.DefaultTimeoutMilliseconds*10));
33+
Assert.AreEqual(45, i.Current);
34+
}
35+
36+
private sealed class AccSubscriber : AsyncSubscriber<int?>
37+
{
38+
private readonly AtomicCounterLong _counter;
39+
private readonly CountdownEvent _latch;
40+
private long _acc;
41+
42+
public AccSubscriber(AtomicCounterLong counter, CountdownEvent latch)
43+
{
44+
_counter = counter;
45+
_latch = latch;
46+
}
47+
48+
protected override bool WhenNext(int? element)
49+
{
50+
// no need for null check, OnNext handles this case
51+
_acc += element.Value;
52+
return true;
53+
}
54+
55+
protected override void WhenComplete()
56+
{
57+
_counter.GetAndAdd(_acc);
58+
_latch.Signal();
59+
}
60+
}
61+
}
62+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using NUnit.Framework;
5+
using Reactive.Streams.TCK;
6+
7+
namespace Reactive.Streams.Example.Unicast.Tests
8+
{
9+
[TestFixture]
10+
public class IterablePublisherTest : PublisherVerification<int?>
11+
{
12+
public IterablePublisherTest() : base(new TestEnvironment())
13+
{
14+
}
15+
16+
public override IPublisher<int?> CreatePublisher(long elements)
17+
{
18+
Assert.LessOrEqual(elements, MaxElementsFromPublisher);
19+
return new NumberIterablePublisher(0, (int)elements);
20+
}
21+
22+
public override IPublisher<int?> CreateFailedPublisher() => new FailedPublisher();
23+
24+
private sealed class FailedPublisher : AsyncIterablePublisher<int?>
25+
{
26+
public FailedPublisher() : base(new FailedEnumerable())
27+
{
28+
}
29+
30+
private sealed class FailedEnumerable : IEnumerable<int?>
31+
{
32+
public IEnumerator<int?> GetEnumerator()
33+
{
34+
throw new Exception("Error state signal!");
35+
}
36+
37+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
38+
}
39+
}
40+
41+
public override long MaxElementsFromPublisher { get; } = int.MaxValue;
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System.Reflection;
2+
using System.Runtime.InteropServices;
3+
4+
// Allgemeine Informationen über eine Assembly werden über die folgenden
5+
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
6+
// die einer Assembly zugeordnet sind.
7+
[assembly: AssemblyTitle("Reactive.Streams.Example.Unicast.Tests")]
8+
[assembly: AssemblyDescription("")]
9+
[assembly: AssemblyConfiguration("")]
10+
[assembly: AssemblyCompany("")]
11+
[assembly: AssemblyProduct("Reactive.Streams.Example.Unicast.Tests")]
12+
[assembly: AssemblyCopyright("Copyright © 2016")]
13+
[assembly: AssemblyTrademark("")]
14+
[assembly: AssemblyCulture("")]
15+
16+
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
17+
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
18+
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
19+
[assembly: ComVisible(false)]
20+
21+
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
22+
[assembly: Guid("a69c5115-5e39-47ed-b8ef-83a342968999")]
23+
24+
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
25+
//
26+
// Hauptversion
27+
// Nebenversion
28+
// Buildnummer
29+
// Revision
30+
//
31+
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
32+
// übernehmen, indem Sie "*" eingeben:
33+
// [assembly: AssemblyVersion("1.0.*")]
34+
[assembly: AssemblyVersion("1.0.0.0")]
35+
[assembly: AssemblyFileVersion("1.0.0.0")]

0 commit comments

Comments
 (0)