Skip to content

Commit fadb50b

Browse files
committed
WIP
1 parent 1620172 commit fadb50b

File tree

6 files changed

+73
-37
lines changed

6 files changed

+73
-37
lines changed

api-reports/2_12.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15856,16 +15856,17 @@ ReadableStream[JT] def tee(): js.Array[_ <: ReadableStream[T]]
1585615856
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]]?, queuingStrategy: js.UndefOr[QueuingStrategy[T]]?): ReadableStream[T]
1585715857
ReadableStreamController[JC] def close(): Unit
1585815858
ReadableStreamController[JC] def desiredSize: Int
15859-
ReadableStreamController[JC] def enqueue(chunk: T): js.UndefOr[Int]
15859+
ReadableStreamController[JC] def enqueue(): Unit
15860+
ReadableStreamController[JC] def enqueue(chunk: T): Unit
1586015861
ReadableStreamController[JC] def error(e: Any): Unit
1586115862
ReadableStreamReader[JC] def cancel(): js.Promise[Unit]
15862-
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[U]
15863+
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[Unit]
1586315864
ReadableStreamReader[JC] def closed: js.Promise[ReadableStreamReader[T]]
1586415865
ReadableStreamReader[JC] def read(): js.Promise[Chunk[T]]
1586515866
ReadableStreamReader[JC] def releaseLock(): Unit
1586615867
ReadableStreamType[JT]
1586715868
ReadableStreamType[SO] val bytes: ReadableStreamType
15868-
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Double]
15869+
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Int]
1586915870
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, js.UndefOr[js.Promise[Unit]]]]
1587015871
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
1587115872
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]

api-reports/2_13.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15856,16 +15856,17 @@ ReadableStream[JT] def tee(): js.Array[_ <: ReadableStream[T]]
1585615856
ReadableStream[SO] def apply[T](underlyingSource: js.UndefOr[ReadableStreamUnderlyingSource[T]]?, queuingStrategy: js.UndefOr[QueuingStrategy[T]]?): ReadableStream[T]
1585715857
ReadableStreamController[JC] def close(): Unit
1585815858
ReadableStreamController[JC] def desiredSize: Int
15859-
ReadableStreamController[JC] def enqueue(chunk: T): js.UndefOr[Int]
15859+
ReadableStreamController[JC] def enqueue(): Unit
15860+
ReadableStreamController[JC] def enqueue(chunk: T): Unit
1586015861
ReadableStreamController[JC] def error(e: Any): Unit
1586115862
ReadableStreamReader[JC] def cancel(): js.Promise[Unit]
15862-
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[U]
15863+
ReadableStreamReader[JC] def cancel[U](reason: U): js.Promise[Unit]
1586315864
ReadableStreamReader[JC] def closed: js.Promise[ReadableStreamReader[T]]
1586415865
ReadableStreamReader[JC] def read(): js.Promise[Chunk[T]]
1586515866
ReadableStreamReader[JC] def releaseLock(): Unit
1586615867
ReadableStreamType[JT]
1586715868
ReadableStreamType[SO] val bytes: ReadableStreamType
15868-
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Double]
15869+
ReadableStreamUnderlyingSource[JT] var autoAllocateChunkSize: js.UndefOr[Int]
1586915870
ReadableStreamUnderlyingSource[JT] var cancel: js.UndefOr[js.Function1[js.Any, js.UndefOr[js.Promise[Unit]]]]
1587015871
ReadableStreamUnderlyingSource[JT] var pull: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]
1587115872
ReadableStreamUnderlyingSource[JT] var start: js.UndefOr[js.Function1[ReadableStreamController[T], js.UndefOr[js.Promise[Unit]]]]

dom/src/main/scala/org/scalajs/dom/ReadableStreamController.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class ReadableStreamController[-T] private[this] () extends js.Object {
3939
* @return
4040
* seems like its an undefOr[Int] of the size
4141
*/
42-
def enqueue(chunk: T): js.UndefOr[Int] = js.native
42+
def enqueue(chunk: T): Unit = js.native
43+
def enqueue(): Unit = js.native
4344

4445
/** The error method will error the readable stream, making all future interactions with it fail with the given error
4546
* e.

dom/src/main/scala/org/scalajs/dom/ReadableStreamReader.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class ReadableStreamReader[+T](stream: ReadableStream[T]) extends js.Object {
3131
* If the reader is active, the cancel method behaves the same as that for the associated stream. When done, it
3232
* automatically releases the lock.
3333
*/
34-
def cancel[U](reason: U): js.Promise[U] = js.native
34+
def cancel[U](reason: U): js.Promise[Unit] = js.native
3535
def cancel(): js.Promise[Unit] = js.native
3636

3737
/** See [[https://streams.spec.whatwg.org/#reader-read 3.4.4.3. read()]] of whatwg Stream spec.

dom/src/main/scala/org/scalajs/dom/ReadableStreamUnderlyingSource.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ trait ReadableStreamUnderlyingSource[T] extends js.Object {
5353
* Can be set to a positive integer to cause the implementation to automatically allocate buffers for the underlying
5454
* source code to write into.
5555
*/
56-
var autoAllocateChunkSize: js.UndefOr[Double] = js.undefined
56+
var autoAllocateChunkSize: js.UndefOr[Int] = js.undefined
5757
}

tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala

Lines changed: 61 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,32 @@ import org.junit.Test
55
import org.scalajs.dom.QueuingStrategy
66
import org.scalajs.dom.ReadableStream
77
import org.scalajs.dom.ReadableStreamController
8+
import org.scalajs.dom.ReadableStreamReader
89
import org.scalajs.dom.ReadableStreamUnderlyingSource
910
import org.scalajs.dom.tests.shared.AsyncTesting.AsyncResult
1011
import org.scalajs.dom.tests.shared.AsyncTesting._
1112
import org.scalajs.dom.tests.shared.AsyncTesting.async
1213

1314
import scala.concurrent.Future
15+
import scala.concurrent.Promise
1416
import scala.scalajs.js
1517
import scala.scalajs.js.Thenable.Implicits._
18+
import scala.util.Try
1619

1720
trait BrowserTests {
1821

22+
def read[T](reader: ReadableStreamReader[T])(tunas: Seq[T]): Future[Seq[T]] = {
23+
reader
24+
.read()
25+
.flatMap { chunk =>
26+
if (chunk.done) {
27+
Future.successful(tunas)
28+
} else {
29+
read(reader)(tunas :+ chunk.value)
30+
}
31+
}
32+
}
33+
1934
@Test
2035
final def ReadableStreamConstructionAndConsumptionTest: AsyncResult = async {
2136
case class Tuna(color: String)
@@ -35,20 +50,7 @@ trait BrowserTests {
3550
}
3651
)
3752

38-
val reader = stream.getReader()
39-
40-
def read(tunas: Seq[Tuna]): Future[Seq[Tuna]] = {
41-
reader
42-
.read()
43-
.flatMap { chunk =>
44-
if (chunk.done) {
45-
Future.successful(tunas)
46-
} else {
47-
read(tunas :+ chunk.value)
48-
}
49-
}
50-
}
51-
read(Seq.empty)
53+
read(stream.getReader())(Seq.empty)
5254
.map { receivedTunas =>
5355
assertEquals(receivedTunas, expectedTunas)
5456
}
@@ -77,22 +79,53 @@ trait BrowserTests {
7779
}
7880
)
7981

80-
val reader = stream.getReader()
81-
82-
def read(strings: Seq[String]): Future[Seq[String]] = {
83-
reader
84-
.read()
85-
.flatMap { chunk =>
86-
if (chunk.done) {
87-
Future.successful(strings)
88-
} else {
89-
read(strings :+ chunk.value)
90-
}
91-
}
92-
}
93-
read(Seq.empty)
82+
read(stream.getReader())(Seq.empty)
9483
.map { receivedStrings =>
9584
assertEquals(receivedStrings, expectedStrings)
9685
}
9786
}
87+
88+
@Test
89+
final def ReadableStreamReaderCancelUnitTest: AsyncResult = async {
90+
val reasonPromise = Promise[Unit]()
91+
val stream = ReadableStream[Unit](
92+
new ReadableStreamUnderlyingSource[Unit] {
93+
cancel = js.defined({ (reason: Any) =>
94+
reasonPromise.tryComplete(Try(reason.asInstanceOf[Unit]))
95+
(): js.UndefOr[js.Promise[Unit]]
96+
}): js.UndefOr[js.Function1[Any, js.UndefOr[js.Promise[Unit]]]]
97+
}
98+
)
99+
100+
for {
101+
_ <- stream
102+
.getReader()
103+
.cancel()
104+
.map(assertEquals((), _))
105+
_ <- reasonPromise.future.map(assertEquals((), _))
106+
} yield ()
107+
}
108+
109+
@Test
110+
final def ReadableStreamReaderCancelPromiseTest: AsyncResult = async {
111+
val expectedReason = "probably a good one"
112+
113+
val reasonPromise = Promise[String]()
114+
val stream = ReadableStream[Unit](
115+
new ReadableStreamUnderlyingSource[Unit] {
116+
cancel = js.defined({ (reason: Any) =>
117+
reasonPromise.tryComplete(Try(reason.asInstanceOf[String]))
118+
(): js.UndefOr[js.Promise[Unit]]
119+
}): js.UndefOr[js.Function1[Any, js.UndefOr[js.Promise[Unit]]]]
120+
}
121+
)
122+
123+
for {
124+
_ <- stream
125+
.getReader()
126+
.cancel(expectedReason)
127+
.map(assertEquals((), _))
128+
_ <- reasonPromise.future.map(assertEquals(expectedReason, _))
129+
} yield ()
130+
}
98131
}

0 commit comments

Comments
 (0)