Skip to content

Commit 7ba5e3a

Browse files
author
Piotr Bobinski
committed
First 3 classes
1 parent 89e2dca commit 7ba5e3a

20 files changed

+152
-2
lines changed

exercises/exercises.iml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</content>
1212
<orderEntry type="jdk" jdkName="1.7" jdkType="JavaSDK" />
1313
<orderEntry type="sourceFolder" forTests="false" />
14-
<orderEntry type="library" name="Maven: io.reactivex.rxjava2:rxjava:unknown" level="project" />
14+
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.1.6" level="project" />
1515
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-all:2.4.4" level="project" />
1616
<orderEntry type="library" scope="TEST" name="Maven: org.spockframework:spock-core:1.1-groovy-2.4" level="project" />
1717
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />

exercises/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010

1111
<dependencies>
1212
<dependency>
13-
<groupId>io.reactivex.rxjava2</groupId>
13+
<groupId>io.reactivex</groupId>
1414
<artifactId>rxjava</artifactId>
15+
<version>1.1.6</version>
1516
</dependency>
1617
<dependency>
1718
<groupId>org.codehaus.groovy</groupId>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package main
2+
3+
import rx.subjects.AsyncSubject
4+
import spock.lang.Specification
5+
6+
7+
class AsyncSubjectTest extends Specification {
8+
9+
// AsyncSubject cached last value. It doesnt emit anything before sequence finishes.
10+
// It is to be used to emit a single value and immediately terminate
11+
def "Standard AsyncSubject test"() {
12+
when:
13+
AsyncSubject<Integer> s = AsyncSubject.create()
14+
s.subscribe { v -> println("Emit: " + v) }
15+
16+
s.onNext(0)
17+
s.onNext(1)
18+
19+
s.onCompleted()
20+
21+
then:
22+
s.hasValue() && s.hasCompleted()
23+
}
24+
25+
def "AsyncSubject has no values because it did not complete"() {
26+
when:
27+
AsyncSubject<Integer> s = AsyncSubject.create()
28+
s.subscribe { v -> println("Emit: " + v) }
29+
30+
s.onNext(0)
31+
s.onNext(1)
32+
33+
//s.onCompleted() <- events didnt complete
34+
35+
then:
36+
!s.hasValue() || !s.hasCompleted()
37+
}
38+
39+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package main
2+
3+
import rx.subjects.BehaviorSubject
4+
import spock.lang.Specification
5+
6+
7+
class BehaviorSubjectTest extends Specification {
8+
9+
// BehavioSubject only remembers last value. Similar to REPLAYSubject with buffer of size 1
10+
def "Standard BehaviorSubject test"() {
11+
when:
12+
BehaviorSubject<Integer> s = BehaviorSubject.create()
13+
s.onNext(0)
14+
s.onNext(1)
15+
s.onNext(2)
16+
s.subscribe { v -> println "Late: " + v }
17+
s.onNext(3)
18+
then:
19+
s.getValues().size() == 1
20+
}
21+
22+
def "BehaviorSubject that is empty because events finished before subscription"() {
23+
when:
24+
BehaviorSubject<Integer> s = BehaviorSubject.create();
25+
s.onNext(0)
26+
s.onNext(1)
27+
s.onNext(2)
28+
s.onCompleted();
29+
s.subscribe(
30+
{ v -> println v },
31+
{ println "Error" },
32+
{ println "Completed" }
33+
)
34+
then:
35+
s.getValues().size() == 0
36+
}
37+
38+
def "BehaviorSubject handles first event if it was placed before someone subscribed"() {
39+
when:
40+
BehaviorSubject<Integer> s = BehaviorSubject.create(0);
41+
s.subscribe({ v -> println v })
42+
s.onNext(1)
43+
then:
44+
s.getValues().size() == 1
45+
}
46+
47+
def "If events are completed BehaviourSubject empties"() {
48+
when:
49+
BehaviorSubject<Integer> s = BehaviorSubject.create(0);
50+
s.subscribe({ v -> println v })
51+
s.onNext(1)
52+
s.onCompleted()
53+
then:
54+
s.getValues().size() == 0
55+
}
56+
57+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import rx.schedulers.Schedulers
4+
import rx.subjects.ReplaySubject
5+
import spock.lang.Specification
6+
import spock.lang.Unroll
7+
8+
import java.util.concurrent.TimeUnit
9+
10+
11+
class ReplaySubjectTest extends Specification {
12+
13+
@Unroll
14+
def "Standard ReplaySubject"() {
15+
when:
16+
ReplaySubject<Integer> s = ReplaySubject.create();
17+
s.subscribe { v -> println "Early: " + v }
18+
s.onNext(0)
19+
s.onNext(1)
20+
s.subscribe { v -> println "Late: " + v }
21+
s.onNext(2)
22+
then:
23+
s != null
24+
}
25+
26+
def "ReplaySubject with size 2"() {
27+
when:
28+
ReplaySubject<Integer> s = ReplaySubject.createWithSize(2)
29+
s.onNext(0)
30+
s.onNext(1)
31+
s.onNext(2)
32+
s.onNext(3)
33+
s.subscribe { v -> println "Late: " + v }
34+
s.onNext(4)
35+
then:
36+
s != null
37+
}
38+
39+
def "ReplaySubject with createWithTime"() {
40+
when:
41+
ReplaySubject<Integer> s = ReplaySubject.createWithTime(550, TimeUnit.MILLISECONDS, Schedulers.immediate())
42+
s.onNext(0)
43+
Thread.sleep(200)
44+
s.onNext(1)
45+
Thread.sleep(200)
46+
s.onNext(2)
47+
s.subscribe { v -> println "Late: " + v }
48+
s.onNext(3)
49+
then:
50+
s != null
51+
}
52+
53+
}
Binary file not shown.
Binary file not shown.
6.81 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)