UNPKG

tap-out

Version:
408 lines (327 loc) 7.74 kB
var parser = require('../'); var test = require('tape'); test('output event', function (t) { t.plan(1); var mockTap = [ '# is true', 'ok 1 true value', 'ok 2 true value' ]; var p = parser(); p.on('output', function (output) { t.deepEqual(output, { asserts: [ { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' } ], fail: [], pass: [ { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' } ], results: [], tests: [ { name: 'is true', number: 1, raw: '# is true', type: 'test' } ], versions: [], comments: [] }, 'output data'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('output callback', function (t) { t.plan(1); var mockTap = [ '# is true', 'ok 1 true value', 'ok 2 true value' ]; var p = parser(function (err, output) { t.deepEqual(output, { asserts: [ { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' } ], fail: [], pass: [ { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' } ], results: [], tests: [ { name: 'is true', number: 1, raw: '# is true', type: 'test' } ], versions: [], comments: [] }, 'output data'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('tests', function (t) { t.plan(1); var mockTap = [ '# is true', 'ok 1 true value', 'ok 2 true value' ]; var p = parser(); p.on('test', function (test) { t.deepEqual(test, { type: 'test', name: 'is true', raw: '# is true', number: 1 }, 'test is parsed'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('asserts', function (t) { t.plan(2); var mockTap = [ '# is true', 'ok 1 true value', 'ok 2 true value' ]; var p = parser(); var asserts = []; p.on('assert', function (assert) { asserts.push(assert); }); p.on('output', function () { t.deepEqual(asserts[0], { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, 'assert 1') t.deepEqual(asserts[1], { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' }, 'assert 2') }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('results', function (t) { t.plan(3); var mockTap = [ '# tests 15', '# pass 13', '# fail 2' ]; var p = parser(); var results = []; p.on('result', function (result) { results.push(result); }); p.on('output', function () { t.deepEqual(results[0], { count: '15', name: 'tests', raw: '# tests 15', type: 'result' }, 'tests'); t.deepEqual(results[1], { count: '13', name: 'pass', raw: '# pass 13', type: 'result' }, 'pass'); t.deepEqual(results[2], { count: '2', name: 'fail', raw: '# fail 2', type: 'result' }, 'fail'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('version', function (t) { t.plan(1); var mockTap = [ 'TAP version 13' ]; var p = parser(); var results = []; p.on('version', function (version) { t.deepEqual(version, { raw: 'TAP version 13', type: 'version' }, 'version data'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('pass', function (t) { t.plan(2); var mockTap = [ '# is true', 'ok 1 true value', 'ok 2 true value' ]; var p = parser(); var passes = []; p.on('pass', function (pass) { passes.push(pass); }); p.on('output', function () { t.deepEqual(passes[0], { name: 'true value', number: 1, ok: true, raw: 'ok 1 true value', test: 1, type: 'assert' }, 'pass 1'); t.deepEqual(passes[1], { name: 'true value', number: 2, ok: true, raw: 'ok 2 true value', test: 1, type: 'assert' }, 'pass 2'); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); test('failed assertion', function (t) { t.plan(1); var mockTap = [ "TAP version 13", "# is true", "ok 1 true value", "ok 2 true value", "not ok 3 strings match", " ---", " operator: equal", " expected: 'you'", " actual: 'me'", " at: Test.<anonymous> (/Users/scott/www/divshot/divshot-cli/test/index.js:8:5)", " ...", "not ok 15 plan != count", " ---", " operator: fail", " expected: 4", " actual: 3", " ...", "", "1..15", ]; var fails = []; var p = parser(function () { t.deepEqual( fails, [ { error: { actual: 'me', at: { character: '5', file: '/Users/scott/www/divshot/divshot-cli/test/index.js', line: '8' }, expected: 'you', operator: 'equal' }, name: 'strings match', number: 3, ok: false, raw: 'not ok 3 strings match', test: 1, type: 'assert' }, { error: { actual: '3', expected: '4', operator: 'count' }, name: 'plan != count', number: 15, ok: false, raw: 'not ok 15 plan != count', test: 1, type: 'plan' } ], 'fails' ); }); p.on('fail', function (fail) { fails.push(fail); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); }); // NOTE: comments output the same as test names. // This makes it very difficult to parse them. // Ignoring them for now. Just don't use comments. test('comments'); test('generic output', function (t) { var mockTap = [ "TAP version 13", "# is true", "ok 1 true value", "not ok 2 strings match", " ---", " operator: equal", " expected: 'you'", " actual: 'me'", " at: Test.<anonymous> (/Users/scott/www/divshot/divshot-cli/test/index.js:8:5)", " ...", "ok 3 true value", "this is a console log", "# false values", "ok 4 should be false", "ok 5 false value" ]; var comments = []; var p = parser(function (err, output) { t.deepEqual( comments, [ { type: 'comment', raw: 'this is a console log', test: 1 } ], 'one comment' ); t.end(); }); p.on('comment', function (comment) { comments.push(comment); }); mockTap.forEach(function (line) { p.write(line + '\n'); }); p.end(); });