Migrate channels and related operators to common, so channels can be used from JS
Fixes #201
diff --git a/common/kotlinx-coroutines-core-common/src/test/kotlin/kotlinx/coroutines/experimental/channels/LinkedListChannelTest.kt b/common/kotlinx-coroutines-core-common/src/test/kotlin/kotlinx/coroutines/experimental/channels/LinkedListChannelTest.kt
new file mode 100644
index 0000000..897801e
--- /dev/null
+++ b/common/kotlinx-coroutines-core-common/src/test/kotlin/kotlinx/coroutines/experimental/channels/LinkedListChannelTest.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package kotlinx.coroutines.experimental.channels
+
+import kotlinx.coroutines.experimental.TestBase
+import kotlin.test.*
+
+class LinkedListChannelTest : TestBase() {
+
+ @Test
+ fun testBasic() = runTest {
+ val c = LinkedListChannel<Int>()
+ c.send(1)
+ check(c.offer(2))
+ c.send(3)
+ check(c.close())
+ check(!c.close())
+ assertEquals(1, c.receive())
+ assertEquals(2, c.poll())
+ assertEquals(3, c.receiveOrNull())
+ assertNull(c.receiveOrNull())
+ }
+
+ @Test
+ fun testConsumeAll() = runTest {
+ val q = LinkedListChannel<Int>()
+ for (i in 1..10) {
+ q.send(i) // buffers
+ }
+ q.cancel()
+ check(q.isClosedForSend)
+ check(q.isClosedForReceive)
+ check(q.receiveOrNull() == null)
+ }
+}