-
-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathGenerateCombineSignalsTest.scala
86 lines (80 loc) · 2.6 KB
/
GenerateCombineSignalsTest.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import sbt._
import java.io.File
case class GenerateCombineSignalsTest(
testSourceDir: File,
from: Int,
to: Int
) extends SourceGenerator(
testSourceDir / "scala" / "com" / "raquo" / "airstream" / "combine" / "generated" / s"CombineSignalsSpec.scala"
) {
override def apply(): Unit = {
line("package com.raquo.airstream.combine.generated")
line()
line("import com.raquo.airstream.UnitSpec")
line("import com.raquo.airstream.core.{Observer, Signal}")
line("import com.raquo.airstream.fixtures.TestableOwner")
line("import com.raquo.airstream.state.Var")
line()
line("import scala.collection.mutable")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateCombineSignalsTest.scala")
line()
enter(s"class CombineSignalsSpec extends UnitSpec {", "}") {
line()
for (i <- 1 to to) {
line(s"case class T${i}(v: Int) { def inc: T${i} = T${i}(v+1) }")
}
line()
for (n <- from to to) {
enter(s"""it("CombineSignal${n} works") {""", "}") {
line()
line("implicit val testOwner: TestableOwner = new TestableOwner")
line()
for (i <- 1 to n) {
line(s"val var${i} = Var(T${i}(1))")
}
line()
line(s"val combinedSignal = Signal.combine(${tupleType(n, "var")})")
line()
line(s"val effects = mutable.Buffer[(${tupleType(n)})]()")
line()
line(s"val observer = Observer[(${tupleType(n)})](effects += _)")
line()
line("// --")
line()
line("effects.shouldBeEmpty")
line()
line("// --")
line()
line("val subscription = combinedSignal.addObserver(observer)")
line()
line("// --")
line()
enter("effects.toList shouldBe (List(", "))") {
line(s"(${(1 to n).map(i => s"T${i}(1)").mkString(", ")})")
}
line()
line("// --")
line()
enter("for (iteration <- 0 until 10) {", "}") {
line("effects.clear()")
for (i <- 1 to n) {
line(s"var${i}.update(_.inc)")
}
enter("effects.toList shouldBe (", ")") {
enter("List(", ")") {
for (i <- 1 to n) {
line(s"(${(1 to n).map(j => s"T${j}(1 + iteration${if (j <= i) " + 1" else ""})").mkString(", ")})${if (i < n) "," else ""}")
}
}
}
}
line()
line("subscription.kill()")
}
line()
}
line()
}
}
}