Fix some tests and docs. Add ability to run one test file with help gulp task.
Signed-off-by: Oleksandr Andriienko <oandriie@redhat.com>
const source = require('vinyl-source-stream');
const sourcemaps = require('gulp-sourcemaps');
const ts = require('gulp-typescript');
-
+const util = require('gulp-util');
let buildDir = process.env.BUILD_DIR || 'build';
let tsProject = ts.createProject('tsconfig.json');
.pipe(istanbul.writeReports());
});
+/**
+ * Run single test file by file name(without file extension). Example of the command:
+ * gulp mocha-test --test InputHandler.test
+ */
+gulp.task('mocha-test', ['instrument-test'], function () {
+ let testName = util.env.test;
+ util.log("Run test by Name: " + testName);
+ return gulp.src([`${outDir}/${testName}.js`, `${outDir}/**/${testName}.js`], {read: false})
+ .pipe(mocha())
+ .once('error', () => process.exit(1))
+ .pipe(istanbul.writeReports());
+});
+
/**
* Use `sorcery` to resolve the source map chain and point back to the TypeScript files.
* (Without this task the source maps produced for the JavaScript bundle points into the
* compiled JavaScript files in ${outDir}/).
*/
gulp.task('sorcery', ['browserify'], function () {
- var chain = sorcery.loadSync(`${buildDir}/xterm.js`);
+ let chain = sorcery.loadSync(`${buildDir}/xterm.js`);
chain.apply();
chain.writeSync();
});
"tslint": "^4.0.2",
"typescript": "~2.2.0",
"vinyl-buffer": "^1.0.0",
- "vinyl-source-stream": "^1.1.0"
+ "vinyl-source-stream": "^1.1.0",
+ "gulp-util": "^3.0.8"
},
"scripts": {
"prestart": "npm run build",
* This class represents a terminal buffer (an internal state of the terminal)/
*/
export class Buffer {
- public lines: CircularList<any>;
+ public lines: CircularList<string>;
/**
* Create a new Buffer.
public scrollTop: number = 0,
public tabs: any = {},
) {
- this.lines = new CircularList(this.terminal.scrollback);
+ this.lines = new CircularList<string>(this.terminal.scrollback);
this.scrollBottom = this.terminal.rows - 1;
}
}
import { CircularList } from './utils/CircularList';
import { SelectionManager } from './SelectionManager';
import { SelectionModel } from './SelectionModel';
+import {BufferSet} from './BufferSet';
class TestSelectionManager extends SelectionManager {
constructor(
let rowContainer: HTMLElement;
let selectionManager: TestSelectionManager;
+<<<<<<< HEAD
beforeEach(() => {
dom = new jsdom.JSDOM('');
window = dom.window;
- document = window.document;
- buffer = new CircularList<any>(100);
+ document = window.document
terminal = <any>{ cols: 80, rows: 2 };
+ terminal.scrollback = 100;
+ terminal.buffers = new BufferSet(terminal);
+ terminal.buffer = terminal.buffers.active;
selectionManager = new TestSelectionManager(terminal, buffer, rowContainer, null);
+=======
+ beforeEach(done => {
+ jsdom.env('', (err, w) => {
+ window = w;
+ document = window.document;
+ buffer = new CircularList<any>(100);
+ terminal = <any>{ cols: 80, rows: 2 };
+ terminal.scrollback = 10;
+ terminal.buffers = new BufferSet(terminal);
+ terminal.buffer = terminal.buffers.active;
+
+ selectionManager = new TestSelectionManager(terminal, buffer, rowContainer, null);
+ done();
+ });
+>>>>>>> Fix some tests and docs, little code fix up.
});
function stringToRow(text: string): [number, string, number][] {
import { assert } from 'chai';
import { ITerminal } from './Interfaces';
import { SelectionModel } from './SelectionModel';
+import {BufferSet} from './BufferSet';
class TestSelectionModel extends SelectionModel {
constructor(
beforeEach(() => {
terminal = <any>{ cols: 80, rows: 2, ybase: 0 };
+ terminal.scrollback = 10;
+ terminal.buffers = new BufferSet(terminal);
+ terminal.buffer = terminal.buffers.active;
+
model = new TestSelectionModel(terminal);
});
import { assert } from 'chai';
import { Viewport } from './Viewport';
+import {BufferSet} from './BufferSet';
describe('Viewport', () => {
let terminal;
let viewportElement;
- let selectionContainer;
let charMeasure;
let viewport;
let scrollAreaElement;
beforeEach(() => {
terminal = {
- lines: [],
rows: 0,
ydisp: 0,
on: () => {},
style: {
height: 0
}
- }
+ },
+ scrollback: 10
};
+ terminal.buffers = new BufferSet(terminal);
+ terminal.buffer = terminal.buffers.active;
viewportElement = {
addEventListener: () => {},
style: {
}, 0);
});
it('should set the height of the viewport when the line-height changed', () => {
- terminal.lines.push('');
- terminal.lines.push('');
+ terminal.buffer.lines.push('');
+ terminal.buffer.lines.push('');
terminal.rows = 1;
viewport.refresh();
assert.equal(viewportElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
- charMeasure.height = 20;
+ charMeasure.height = 2 * CHARACTER_HEIGHT;
viewport.refresh();
- assert.equal(viewportElement.style.height, 20 + 'px');
+ assert.equal(viewportElement.style.height, 2 * CHARACTER_HEIGHT + 'px');
});
});
it('should sync the scroll area', done => {
// Allow CharMeasure to be initialized
setTimeout(() => {
- terminal.lines.push('');
+ terminal.buffer.lines.push('');
terminal.rows = 1;
assert.equal(scrollAreaElement.style.height, 0 * CHARACTER_HEIGHT + 'px');
viewport.syncScrollArea();
assert.equal(viewportElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
assert.equal(scrollAreaElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
- terminal.lines.push('');
+ terminal.buffer.lines.push('');
viewport.syncScrollArea();
assert.equal(viewportElement.style.height, 1 * CHARACTER_HEIGHT + 'px');
assert.equal(scrollAreaElement.style.height, 2 * CHARACTER_HEIGHT + 'px');
* @param terminal The terminal this viewport belongs to.
* @param viewportElement The DOM element acting as the viewport.
* @param scrollArea The DOM element acting as the scroll area.
- * @param charMeasureElement A DOM element used to measure the character size of. the terminal.
+ * @param charMeasure A DOM element used to measure the character size of. the terminal.
*/
constructor(
private terminal: ITerminal,
/**
* Refreshes row height, setting line-height, viewport height and scroll area height if
* necessary.
- * @param charSize A character size measurement bounding rect object, if it doesn't exist it will
- * be created.
*/
private refresh(): void {
if (this.charMeasure.height > 0) {
}
if (this.options[key] !== value) {
- if (this.buffer.length > value) {
+ if (this.buffer.lines.length > value) {
const amountToTrim = this.buffer.lines.length - value;
const needsRefresh = (this.buffer.ydisp - amountToTrim < 0);
this.buffer.lines.trimStart(amountToTrim);
*/
Terminal.bindBlur = function (term) {
on(term.textarea, 'blur', function (ev) {
- term.refresh(term.y, term.y);
+ term.refresh(term.buffer.y, term.buffer.y);
if (term.sendFocus) {
term.send(C0.ESC + '[O');
}