diff --git a/test/session.test.ts b/test/session.test.ts index d50de32..30a1e4e 100644 --- a/test/session.test.ts +++ b/test/session.test.ts @@ -455,15 +455,23 @@ describe('bind', () => { assert.equal(session.boundAs, undefined); assert.equal(session.peerInterfaceVersion, undefined); - session.bound('receiver', 0x34); - + assert.deepEqual(session.bound('receiver', 0x34), {}); assert.equal(session.boundAs, 'receiver'); assert.equal(session.peerInterfaceVersion, 0x34); assert.equal(session.bindAllows('submit_sm'), false); - session.bound('transmitter', undefined); - + assert.deepEqual(session.bound('transmitter', undefined), {}); assert.equal(session.peerInterfaceVersion, 0x00, 'no declared version is pre-3.4'); + + // The mistakes an untyped caller makes: the TLV object for its value, a version past int8, a typo. + for (const [bindType, declared] of [['receiver', { tagValue: 0x34 }], ['receiver', 0x100], ['receiver', 3.4], ['tx', 0x34]]) { + const refused: unknown = Reflect.apply(session.bound, session, [bindType, declared]); + + assert.ok(refused && typeof refused === 'object' && 'err' in refused && refused.err instanceof Error); + } + + assert.equal(session.boundAs, 'transmitter', 'a refused bind leaves the recorded one alone'); + assert.equal(session.peerInterfaceVersion, 0x00); assert.equal(Reflect.set(session, 'boundAs', 'transceiver'), false); assert.equal(Reflect.set(session, 'peerInterfaceVersion', 0x50), false); assert.equal(session.boundAs, 'transmitter');