Merge pull request #535 from Tyriar/534_phantomjs

Add PhantomJS test support and CharMeasure tests
This commit is contained in:
Daniel Imms
2017-02-15 13:29:50 -08:00
committed by GitHub
6 changed files with 111 additions and 3 deletions
+12 -1
View File
@@ -3,6 +3,8 @@ const buffer = require('vinyl-buffer');
const fs = require('fs-extra');
const gulp = require('gulp');
const merge = require('merge-stream');
const mocha = require('gulp-mocha');
const mochaPhantomJs = require('gulp-mocha-phantomjs');
const sorcery = require('sorcery');
const source = require('vinyl-source-stream');
const sourcemaps = require('gulp-sourcemaps');
@@ -68,6 +70,15 @@ gulp.task('browserify', ['tsc'], function() {
return merge(bundleStream, copyAddons, copyStylesheets);
});
gulp.task('test-mocha', function () {
return gulp.src(['lib/*test.js', 'lib/**/*test.js'], {read: false})
.pipe(mocha())
});
gulp.task('test-mocha-phantomjs', function () {
return gulp.src('test-harness.html')
.pipe(mochaPhantomJs());
});
/**
* Use `sorcery` to resolve the source map chain and point back to the TypeScript files.
@@ -81,5 +92,5 @@ gulp.task('sorcery', ['browserify'], function () {
});
gulp.task('build', ['sorcery']);
gulp.task('test', ['test-mocha', 'test-mocha-phantomjs']);
gulp.task('default', ['build']);
+3 -2
View File
@@ -47,11 +47,12 @@
"glob": "^7.0.5",
"gulp": "^3.9.1",
"gulp-cli": "^1.2.2",
"gulp-mocha": "^3.0.1",
"gulp-mocha-phantomjs": "^0.12.0",
"gulp-sourcemaps": "1.9.1",
"gulp-typescript": "^3.1.3",
"jsdoc": "3.4.3",
"merge-stream": "^1.0.1",
"mocha": "2.5.3",
"node-pty": "^0.4.1",
"nodemon": "1.10.2",
"sleep": "^3.0.1",
@@ -66,7 +67,7 @@
"start": "node demo/app",
"dev": "nodemon -e js,ts --watch src --watch demo --exec npm start",
"lint": "tslint src/*.ts src/**/*.ts",
"test": "mocha --recursive ./lib",
"test": "gulp test",
"build:docs": "jsdoc -c jsdoc.json",
"build": "gulp build",
"prepublish": "npm run build"
+6
View File
@@ -44,6 +44,12 @@ export interface ITerminal {
emit(event: string, data: any);
}
export interface ICharMeasure {
width: number;
height: number;
measure(): void;
}
interface ICircularList<T> {
length: number;
maxLength: number;
+65
View File
@@ -0,0 +1,65 @@
/**
* @license MIT
*/
import { ICharMeasure, ITerminal } from '../Interfaces';
declare var assert: Chai.Assert;
declare var Terminal: ITerminal;
// Do not describe tests unless in PhantomJS environment
if (typeof Terminal !== 'undefined') {
const CharMeasure = (<any>Terminal).CharMeasure;
describe('CharMeasure', () => {
const parentElement = document.createElement('div');
let charMeasure: ICharMeasure;
beforeEach(() => {
charMeasure = new CharMeasure(parentElement);
document.querySelector('#xterm').appendChild(parentElement);
});
afterEach(() => {
if (parentElement && parentElement.parentElement) {
parentElement.parentElement.removeChild(parentElement);
}
});
describe('measure', () => {
it('should be performed async on first call', done => {
assert.equal(charMeasure.width, null);
charMeasure.measure();
assert.equal(charMeasure.width, null);
setTimeout(() => {
assert.isTrue(charMeasure.width > 0);
done();
}, 0);
});
it('should be performed sync on successive calls', done => {
charMeasure.measure();
setTimeout(() => {
const firstWidth = charMeasure.width;
parentElement.style.fontSize = '2em';
charMeasure.measure();
assert.equal(charMeasure.width, firstWidth * 2);
done();
}, 0);
});
it('should NOT do a measure when the parent is hidden', done => {
charMeasure.measure();
setTimeout(() => {
const firstWidth = charMeasure.width;
parentElement.style.display = 'none';
parentElement.style.fontSize = '2em';
charMeasure.measure();
assert.equal(charMeasure.width, firstWidth);
done();
}, 0);
});
});
});
}
+3
View File
@@ -2237,6 +2237,9 @@ function keys(obj) {
Terminal.EventEmitter = EventEmitter;
Terminal.inherits = inherits;
// Expose for Phantom.JS tests
Terminal.CharMeasure = CharMeasure;
/**
* Adds an event listener to the terminal.
*
+22
View File
@@ -0,0 +1,22 @@
<html>
<head>
<meta charset="utf-8">
<!-- encoding must be set for mocha's special characters to render properly -->
<link rel="stylesheet" href="node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<div id="xterm"></div>
<script src="node_modules/mocha/mocha.js"></script>
<script src="node_modules/chai/chai.js"></script>
<script>
mocha.ui('bdd')
assert = chai.assert
</script>
<script src="build/xterm.js"></script>
<script src="lib/utils/CharMeasure.phantom.js"></script>
<script>
mocha.run()
</script>
</body>
</html>