// errorcheck // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test various correct and incorrect permutations of send-only, // receive-only, and bidirectional channels. 'use strict' const assert = require(`@nodeguy/assert`) const Channel = require('../../lib') it(`perm`, function () { const c = Channel() const cr = Channel().readOnly() const cs = Channel().writeOnly() const n = 0 assert.throws(() => { Channel.shift(n) // ERROR "receive from non-chan" }) assert.throws(() => { Channel.push(2, n) // ERROR "send to non-chan" }) c.push(0) // ok c.shift() // ok assert.throws(() => { cr.push(0) // ERROR "send" }) cr.shift() // ok cs.push(0) // ok assert.throws(() => { cs.shift() // ERROR "receive" }) Channel.select( c.push(0), // ok c.shift() // ok ) assert.throws(() => { Channel.select( cr.push(0) // ERROR "send" ) }) Channel.select(cr.shift()) // ok Channel.select(cs.push(0)) // ok assert.throws(() => { Channel.select(cs.shift()) // ERROR "receive" }) assert.throws(() => { cs.forEach(() => {}) // ERROR "receive" }) c.close() cs.close() assert.throws(() => { cr.close() // ERROR "receive" }) assert.throws(() => { Channel.close(n) // ERROR "invalid operation.*non-chan type" }) })