Mercurial > web-gnusto
changeset 6:aeb4289c141f
Added a test runner class w/ simple test suite.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sun, 11 May 2008 12:51:23 -0700 |
parents | 53d7cff492b9 |
children | 110233f31576 |
files | engine-runner.js test_engine_runner.js |
diffstat | 2 files changed, 174 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/engine-runner.js Sun May 11 12:51:23 2008 -0700 @@ -0,0 +1,140 @@ +function Zui() { +} + +Zui.prototype = { + onLineInput: function(callback) { + }, + onCharacterInput: function(callback) { + }, + onSave: function(callback) { + }, + onRestore: function(callback) { + }, + onQuit: function() { + }, + onRestart: function(callback) { + }, + onWimpOut: function(callback) { + }, + onBreakpoint: function(callback) { + }, + onSetStyle: function(textStyle, foreground, background) { + }, + onSplitWindow: function() { + }, + onSetWindow: function() { + }, + onEraseWindow: function() { + }, + onEraseLine: function() { + }, + onSetCursor: function(x, y) { + }, + onSetBufferMode: function() { + }, + onSetInputStream: function() { + }, + onGetCursor: function() { + }, + onPrintTable: function(lines) { + }, +}; + +function EngineRunner(engine, zui) { + this._engine = engine; + this._zui = zui; + this._isRunning = false; + this._isInLoop = false; + this._isWaitingForCallback = false; + + var self = this; + + this.__proto__ = { + stop: function() { + self._isRunning = false; + }, + + run: function() { + self._isRunning = true; + self._continueRunning(); + }, + + _continueRunning: function() { + while (self._isRunning && !self._isWaitingForCallback) { + self._loop(); + } + }, + + _receiveLineInput: function(input) { + self._isWaitingForCallback = false; + self._engine.answer(1, input); + if (!self._isInLoop) { + self._continueRunning(); + } else { + /* We're still inside _loop(), so just return. */ + } + }, + + _loop: function() { + if (self._isInLoop) + throw Error("Already in loop!"); + + self._isInLoop = true; + var engine = self._engine; + + engine.run(); + var effect = '"' + engine.effect(0) + '"'; + + switch (effect) { + case GNUSTO_EFFECT_INPUT: + self._isWaitingForCallback = true; + self._zui.onLineInput(self._receiveLineInput); + break; + case GNUSTO_EFFECT_INPUT_CHAR: + break; + case GNUSTO_EFFECT_SAVE: + break; + case GNUSTO_EFFECT_RESTORE: + break; + case GNUSTO_EFFECT_QUIT: + self.stop(); + self._zui.onQuit(); + break; + case GNUSTO_EFFECT_RESTART: + break; + case GNUSTO_EFFECT_WIMP_OUT: + break; + case GNUSTO_EFFECT_BREAKPOINT: + break; + case GNUSTO_EFFECT_FLAGS_CHANGED: + break; + case GNUSTO_EFFECT_PIRACY: + break; + case GNUSTO_EFFECT_STYLE: + break; + case GNUSTO_EFFECT_SOUND: + break; + case GNUSTO_EFFECT_SPLITWINDOW: + break; + case GNUSTO_EFFECT_SETWINDOW: + break; + case GNUSTO_EFFECT_ERASEWINDOW: + break; + case GNUSTO_EFFECT_ERASELINE: + break; + case GNUSTO_EFFECT_SETCURSOR: + break; + case GNUSTO_EFFECT_SETBUFFERMODE: + break; + case GNUSTO_EFFECT_SETINPUTSTREAM: + break; + case GNUSTO_EFFECT_GETCURSOR: + break; + case GNUSTO_EFFECT_PRINTTABLE: + break; + } + + self._isInLoop = false; + } + }; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test_engine_runner.js Sun May 11 12:51:23 2008 -0700 @@ -0,0 +1,34 @@ +load("gnusto-engine.js"); +load("engine-runner.js"); + +function FakeEngine() { + var self = this; + + this.__proto__ = { + run: function() { + }, + + effect: function() { + return GNUSTO_EFFECT_QUIT.slice(1, -1); + } + }; +} + +function QuitOnlyZui() { + var self = this; + + self.hasQuit = false; + + this.__proto__ = { + onQuit: function() { + self.hasQuit = true; + } + }; +}; + +var gZui = new QuitOnlyZui(); +var gRunner = new EngineRunner(new FakeEngine(), gZui); +gRunner.run(); +if (!gZui.hasQuit) + throw Error('zui onQuit() not called.'); +print('Engine runner test run successfully.');