UNPKG

tcl-js

Version:

tcl-js is a tcl intepreter written completely in Typescript. It is meant to replicate the tcl-sh interpreter as closely as possible.

88 lines (64 loc) 2.16 kB
const Tcl = require('../../dist/tcl'); const Scope = require('../../dist/scope').Scope; const Types = require('../../dist/types'); const expect = require('chai').expect; module.exports = () => { it('Undefine function', async () => { let tcl = new Tcl.Tcl(['puts']); let err = { name: '', }; try { await tcl.run('puts hello'); } catch (e) { err = e; } if (!err) throw new Error(); expect(err.name).to.equal('TclError'); }); it('Undefine in parent', async () => { let scope = new Scope(); scope.define('hi', new Types.TclSimple('hello')); let test = scope.resolve('hi'); expect(test instanceof Types.TclSimple).to.equal(true); expect(test.getValue()).to.equal('hello'); let subscope = new Scope(scope); test = subscope.resolve('hi'); expect(test instanceof Types.TclSimple).to.equal(true); expect(test.getValue()).to.equal('hello'); subscope.undefine('hi'); test = scope.resolve('hi'); expect(test).to.equal(null); }); it('Disable non-existing proc', async () => { let scope = new Scope(); try { scope.disableProc('nope'); } catch (e) { expect(e.name).to.equal('TclError'); expect(e.message).to.equal('can\'t disable "nope": no such function'); } }); it('Delete setting', async () => { let scope = new Scope(); scope.setSetting('test', true); expect(scope.getSetting('test')).to.equal(true); scope.setSetting('test', null); expect(scope.getSetting('test')).to.equal(null); }); it('Delete subsetting', async () => { let scope = new Scope(); scope.setSetting('test', true); expect(scope.getSetting('test')).to.equal(true); scope.setSubSetting('test', 'wow', true); expect(scope.getSetting('test')).to.eql({wow: true}); scope.setSubSetting('test', 'wow', null); expect(scope.getSetting('test')).to.eql({}); }); it('Unexpected subsetting', async () => { let scope = new Scope(); expect(scope.getSetting('test')).to.equal(null); let out = scope.setSubSetting('test', 'wow', true); expect(out).to.equal(false); }); };