Skip to content

Commit 8dfa574

Browse files
authored
Merge pull request #57 from exceptionless/browsertesting
Testing both node and browser suites
2 parents 7e19c7a + 152448b commit 8dfa574

10 files changed

+140
-64
lines changed

appveyor.yml

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ install:
1111
build_script:
1212
- gulp build
1313

14+
before_test:
15+
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
16+
1417
test_script:
1518
- gulp test
1619

dist/exceptionless.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/exceptionless.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gulpfile.js

+47-37
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
var fs = require("fs");
22
var pkg = require('./package.json');
33
var gulp = require('gulp');
4-
var replace = require('gulp-replace');
5-
var sourcemaps = require('gulp-sourcemaps');
4+
var $ = require('gulp-load-plugins')({lazy:true });
65
var tsProject = require('tsproject');
6+
var eventStream = require('event-stream');
77

88
gulp.task('clean', function () {
99
var del = require('del');
@@ -23,24 +23,20 @@ gulp.task('typescript.node', function () {
2323
});
2424

2525
gulp.task('exceptionless.umd', ['typescript', 'typescript.integrations'], function () {
26-
var umd = require('gulp-wrap-umd');
2726
return gulp.src('dist/temp/src/exceptionless.js')
28-
.pipe(sourcemaps.init({ loadMaps: true }))
29-
.pipe(umd({
27+
.pipe($.sourcemaps.init({ loadMaps: true }))
28+
.pipe($.wrapUmd({
3029
exports: 'exports',
3130
globalName: 'exceptionless',
3231
namespace: 'exceptionless',
3332
deps: ['TraceKit'],
3433
template: fs.readFileSync('./umd.template.jst', 'utf8')
3534
}))
36-
.pipe(sourcemaps.write('.'))
35+
.pipe($.sourcemaps.write('.'))
3736
.pipe(gulp.dest('dist/temp'));
3837
});
3938

4039
gulp.task('exceptionless', ['exceptionless.umd'], function () {
41-
var uglify = require('gulp-uglify');
42-
var concat = require('gulp-concat');
43-
4440
gulp.src('dist/temp/src/exceptionless.d.ts')
4541
.pipe(gulp.dest('dist'));
4642
var integrations = [
@@ -56,18 +52,18 @@ gulp.task('exceptionless', ['exceptionless.umd'], function () {
5652
];
5753

5854
gulp.src(files)
59-
.pipe(sourcemaps.init({ loadMaps: true }))
60-
.pipe(concat('exceptionless.js'))
61-
.pipe(replace('exceptionless-js/1.0.0.0', 'exceptionless-js/' + pkg.version))
62-
.pipe(sourcemaps.write('.'))
55+
.pipe($.sourcemaps.init({ loadMaps: true }))
56+
.pipe($.concat('exceptionless.js'))
57+
.pipe($.replace('exceptionless-js/1.0.0.0', 'exceptionless-js/' + pkg.version))
58+
.pipe($.sourcemaps.write('.'))
6359
.pipe(gulp.dest('dist'));
6460

6561
return gulp.src(files)
66-
.pipe(sourcemaps.init({ loadMaps: true }))
67-
.pipe(concat('exceptionless.min.js'))
68-
.pipe(replace('exceptionless-js/1.0.0.0', 'exceptionless-js/' + pkg.version))
69-
.pipe(uglify({ output: { beautify: false } }))
70-
.pipe(sourcemaps.write('.'))
62+
.pipe($.sourcemaps.init({ loadMaps: true }))
63+
.pipe($.concat('exceptionless.min.js'))
64+
.pipe($.replace('exceptionless-js/1.0.0.0', 'exceptionless-js/' + pkg.version))
65+
.pipe($.uglify({ output: { beautify: false } }))
66+
.pipe($.sourcemaps.write('.'))
7167
.pipe(gulp.dest('dist'))
7268
});
7369

@@ -79,9 +75,9 @@ gulp.task('exceptionless.node', ['typescript.node'], function () {
7975
];
8076

8177
gulp.src(files)
82-
.pipe(sourcemaps.init({ loadMaps: true }))
83-
.pipe(replace('exceptionless-js/1.0.0.0', 'exceptionless-node/' + pkg.version))
84-
.pipe(sourcemaps.write('.'))
78+
.pipe($.sourcemaps.init({ loadMaps: true }))
79+
.pipe($.replace('exceptionless-js/1.0.0.0', 'exceptionless-node/' + pkg.version))
80+
.pipe($.sourcemaps.write('.'))
8581
.pipe(gulp.dest('dist'));
8682
});
8783

@@ -90,10 +86,9 @@ gulp.task('watch', ['build'], function () {
9086
});
9187

9288
gulp.task('lint', function () {
93-
var tslint = require('gulp-tslint');
9489
return gulp.src(['src/**/*.ts', '!src/typings/**/*.ts'])
95-
.pipe(tslint({ formatter: 'verbose' }))
96-
.pipe(tslint.report());
90+
.pipe($.tslint({ formatter: 'verbose' }))
91+
.pipe($.tslint.report());
9792
});
9893

9994
gulp.task('build', ['clean', 'lint', 'exceptionless', 'exceptionless.node']);
@@ -103,35 +98,50 @@ gulp.task('typescript.test', function () {
10398
});
10499

105100
gulp.task('exceptionless.test.umd', ['typescript.test'], function () {
106-
var umd = require('gulp-wrap-umd');
107-
return gulp.src('dist/temp/src/exceptionless-spec.js')
108-
.pipe(sourcemaps.init({ loadMaps: true }))
109-
.pipe(umd({
101+
var wrap = function(filename){
102+
return gulp.src(filename)
103+
.pipe($.sourcemaps.init({ loadMaps: true }))
104+
.pipe($.wrapUmd({
110105
exports: 'exports',
111106
globalName: 'exceptionless',
112107
namespace: 'exceptionless'
113108
}))
114-
.pipe(replace('}(this, function(require, exports, module) {', '}(this, function(require, exports, module) {\nif (!exports) {\n\tvar exports = {};\n}\n'))
115-
.pipe(sourcemaps.write('.'))
109+
.pipe($.replace('}(this, function(require, exports, module) {', '}(this, function(require, exports, module) {\nif (!exports) {\n\tvar exports = {};\n}\n'))
110+
.pipe($.sourcemaps.write('.'))
116111
.pipe(gulp.dest('dist/temp'));
112+
};
113+
114+
return eventStream.merge(
115+
wrap('dist/temp/src/exceptionless-nodespec.js'),
116+
wrap('dist/temp/src/exceptionless-browserspec.js'));
117117
});
118118

119-
gulp.task('test', ['exceptionless.test.umd'], function(done) {
120-
var mocha = require('gulp-mocha');
121-
return gulp.src('dist/temp/exceptionless-spec.js', { read: false })
122-
.pipe(mocha({
119+
gulp.task('test-node', ['exceptionless.test.umd'], function(done) {
120+
return gulp.src('dist/temp/exceptionless-nodespec.js', { read: false })
121+
.pipe($.mocha({
123122
require: ['source-map-support/register']
124123
}))
125124
.once('end', function () {
126125
process.exit();
127126
});
128127
});
129128

129+
gulp.task('test-browser', ['exceptionless.test.umd'], function(){
130+
return gulp
131+
.src('testrunner.html')
132+
.pipe($.mochaPhantomjs());
133+
});
134+
135+
gulp.task('test', function(){
136+
// test-node calls process.exit(), so run browser tests before node tests
137+
var runSequence = require('run-sequence');
138+
runSequence('test-browser', 'test-node');
139+
});
140+
130141
gulp.task('format', function () {
131-
var exec = require('gulp-exec');
132142
return gulp.src(['src/**/*.ts', '!src/typings/**/*.ts'])
133-
.pipe(exec('node_modules/typescript-formatter/bin/tsfmt -r <%= file.path %>'))
134-
.pipe(exec.reporter());
143+
.pipe($.exec('node_modules/typescript-formatter/bin/tsfmt -r <%= file.path %>'))
144+
.pipe($.exec.reporter());
135145
});
136146

137147
gulp.task('default', ['watch', 'build', 'test']);

package.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,26 @@
3131
"del": "2.2.1",
3232
"es5-shim": "4.5.9",
3333
"es6-shim": "0.35.1",
34+
"event-stream": "^3.3.4",
3435
"gulp": "3.9.1",
3536
"gulp-concat": "2.6.0",
3637
"gulp-exec": "2.1.2",
38+
"gulp-load-plugins": "^1.3.0",
3739
"gulp-mocha": "2.2.0",
40+
"gulp-mocha-phantomjs": "^0.12.0",
3841
"gulp-replace": "0.5.4",
3942
"gulp-sourcemaps": "1.6.0",
4043
"gulp-tslint": "6.0.1",
4144
"gulp-uglify": "1.5.4",
4245
"gulp-wrap-umd": "0.2.1",
46+
"mock-fs": "3.11.0",
47+
"path": "^0.12.7",
48+
"requirejs": "^2.3.2",
49+
"rewire": "^2.5.2",
4350
"rimraf": "2.5.3",
51+
"run-sequence": "^1.2.2",
4452
"source-map-support": "0.4.2",
45-
"mock-fs": "3.11.0",
53+
"systemjs": "^0.19.39",
4654
"tracekit": "0.4.3",
4755
"tslint": "3.13.0",
4856
"tsproject": "1.2.1",

src/storage/Storage-nodespec.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { NodeFileStorage } from './NodeFileStorage';
2+
3+
import { describeStorage } from './Storage-spec';
4+
5+
import * as mockFs from 'mock-fs';
6+
7+
let mockedFs;
8+
9+
let nodeFileStorageFactory = (maxItems?) => {
10+
return new NodeFileStorage('test', './fileStorage', 'ex-', maxItems, mockedFs);
11+
};
12+
13+
let nodeFileStorageInitializer = () => {
14+
mockedFs = mockFs.fs({
15+
'fileStorage': {}
16+
});
17+
};
18+
19+
describeStorage('NodeFileStorage',
20+
nodeFileStorageFactory,
21+
nodeFileStorageInitializer,
22+
true
23+
);

src/storage/Storage-spec.ts

+1-21
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,14 @@ import { IStorage } from './IStorage';
33
import { IStorageItem } from './IStorageItem';
44

55
import { InMemoryStorage } from './InMemoryStorage';
6-
import { NodeFileStorage } from './NodeFileStorage';
76

87
import { expect } from 'chai';
9-
import * as mockFs from 'mock-fs';
10-
11-
let mockedFs;
12-
13-
let nodeFileStorageFactory = (maxItems?) => {
14-
return new NodeFileStorage('test', './fileStorage', 'ex-', maxItems, mockedFs);
15-
};
16-
17-
let nodeFileStorageInitializer = () => {
18-
mockedFs = mockFs.fs({
19-
'fileStorage': {}
20-
});
21-
};
22-
23-
describeStorage('NodeFileStorage',
24-
nodeFileStorageFactory,
25-
nodeFileStorageInitializer,
26-
true
27-
);
288

299
describeStorage('InMemoryStorage', (maxItems = 250) => {
3010
return new InMemoryStorage(maxItems);
3111
});
3212

33-
function describeStorage(name: string,
13+
export function describeStorage(name: string,
3414
storageFactory: (maxItems?: number) => IStorage,
3515
beforeEachCallback?: () => void,
3616
recreateStorage: boolean = false) {

src/tsconfig.test.json

+12-2
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,24 @@
77
"target": "es5"
88
},
99
"bundles": {
10-
"exceptionless-spec": {
10+
"exceptionless-nodespec": {
1111
"files": [
1212
"typings/mocha/mocha.d.ts",
1313
"typings/chai/chai.d.ts",
1414
"typings/node/node.d.ts",
1515
"typings/stack-trace/stack-trace.d.ts",
1616

17-
"**/*-spec.ts"
17+
"**/*-spec.ts",
18+
"**/*-nodespec.ts"
19+
]
20+
},
21+
"exceptionless-browserspec": {
22+
"files": [
23+
"typings/mocha/mocha.d.ts",
24+
"typings/chai/chai.d.ts",
25+
26+
"**/*-spec.ts",
27+
"**/*-browserspec.ts"
1828
]
1929
}
2030
}

test.config.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require.config({
2+
baseUrl: 'node_modules',
3+
paths: {
4+
chai: 'chai/chai',
5+
TraceKit: 'tracekit/tracekit'
6+
}
7+
});
8+
9+
require([
10+
'../dist/temp/exceptionless-browserspec'
11+
], function() {
12+
13+
if (typeof mochaPhantomJS !== "undefined") { mochaPhantomJS.run(); }
14+
else {
15+
16+
console.log('running mocha');
17+
mocha.run();
18+
}
19+
});

testrunner.html

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
<title>Mocha</title>
6+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
8+
<link rel="stylesheet" href="node_modules/mocha/mocha.css" />
9+
</head>
10+
11+
<body>
12+
<div id="mocha">
13+
<p><a href="?">Index</a></p>
14+
</div>
15+
<div id="messages"></div>
16+
<div id="fixtures"></div>
17+
<script src="node_modules/mocha/mocha.js"></script>
18+
<script>
19+
mocha.setup('bdd');
20+
</script>
21+
<script data-main="test.config.js" src="node_modules/requirejs/require.js"></script>
22+
</body>
23+
</html>

0 commit comments

Comments
 (0)