diff --git a/js/common/modules/jsunity.js b/js/common/modules/jsunity.js index be9c646936..6464d1c788 100644 --- a/js/common/modules/jsunity.js +++ b/js/common/modules/jsunity.js @@ -99,6 +99,8 @@ function Run (testsuite) { var tests = []; var setUp; var tearDown; + var setUpAll; + var tearDownAll; if (definition.hasOwnProperty('setUp')) { setUp = definition.setUp; @@ -107,17 +109,27 @@ function Run (testsuite) { if (definition.hasOwnProperty('tearDown')) { tearDown = definition.tearDown; } + + if (definition.hasOwnProperty('setUpAll')) { + setUpAll = definition.setUpAll; + } + + if (definition.hasOwnProperty('tearDownAll')) { + tearDownAll = definition.tearDownAll; + } var scope = {}; scope.setUp = setUp; scope.tearDown = tearDown; + scope.setUpAll = setUpAll; + scope.tearDownAll = tearDownAll; for (var key in definition) { if (key.indexOf('test') === 0) { var test = { name: key, fn: definition[key]}; tests.push(test); - } else if (key !== 'tearDown' && key !== 'setUp') { + } else if (key !== 'tearDown' && key !== 'setUp' && key !== 'tearDownAll' && key !== 'setUpAll') { console.error('unknown function: %s', key); } } @@ -127,6 +139,8 @@ function Run (testsuite) { suite.tests = tests; suite.setUp = setUp; suite.tearDown = tearDown; + suite.setUpAll = setUpAll; + suite.tearDownAll = tearDownAll; var result = jsUnity.run(suite); TOTAL += result.total; @@ -148,7 +162,6 @@ function Run (testsuite) { // ////////////////////////////////////////////////////////////////////////////// function Done (suiteName) { - // console.log("%d total, %d passed, %d failed, %d ms", TOTAL, PASSED, FAILED, DURATION) internal.printf('%d total, %d passed, %d failed, %d ms', TOTAL, PASSED, FAILED, DURATION); print(); diff --git a/js/common/modules/jsunity/jsunity.js b/js/common/modules/jsunity/jsunity.js index fb0deccb1b..c08e2e38be 100644 --- a/js/common/modules/jsunity/jsunity.js +++ b/js/common/modules/jsunity/jsunity.js @@ -322,7 +322,7 @@ var jsUnity = exports.jsUnity = (function () { if (typeof fn === "function") { if (/^test/.test(name)) { suite.tests.push({ name: name, fn: fn }); - } else if (/^(setUp|tearDown)$/.test(name)) { + } else if (/^(setUp|tearDown|setUpAll|tearDownAll)$/.test(name)) { suite[name] = fn; } } @@ -399,6 +399,8 @@ var jsUnity = exports.jsUnity = (function () { this.tests = []; this.setUp = undefined; this.tearDown = undefined; + this.setUpAll = undefined; + this.tearDownAll = undefined; }, TestResults: function () { @@ -486,65 +488,92 @@ var jsUnity = exports.jsUnity = (function () { var setUp = getFixtureUtil("setUp", suite); var tearDown = getFixtureUtil("tearDown", suite); + var setUpAll = getFixtureUtil("setUpAll", suite); + var tearDownAll = getFixtureUtil("tearDownAll", suite); + var runSuite; - for (var j = 0; j < cnt; j++) { - var test = suite.tests[j]; - - counter = 0; - - try { - setUp(test.name); - test.fn.call(suite.scope, test.name); - tearDown(test.name); + try { + setUpAll(suite.suiteName); + runSuite = true; + } catch (setUpAllError) { + runSuite = false; + if (setUpAllError.stack !== undefined) { + this.results.fail(0, suite.suiteName, + setUpAllError + " - " + String(setUpAllError.stack) + + " - setUpAll failed"); + } + } - this.results.pass(j + 1, test.name); - - results.passed++; - } catch (e) { + if (runSuite) { + for (var j = 0; j < cnt; j++) { + var test = suite.tests[j]; + + counter = 0; + try { - tearDown(test.name); // if tearDown above throws exc, will call again! - } - catch (x) { - var xstack; - if (x.stack !== undefined) { - xstack = x.stack; + setUp(test.name); + test.fn.call(suite.scope, test.name); + tearDown(test.name); + + this.results.pass(j + 1, test.name); + + results.passed++; + } catch (e) { + try { + tearDown(test.name); // if tearDown above throws exc, will call again! } + catch (x) { + var xstack; + if (x.stack !== undefined) { + xstack = x.stack; + } + if (e.stack !== undefined) { + this.results.fail(j + 1, + test.name, + e + " - " + String(e.stack) + + " - teardown failed - " + + x + + " - " + + xstack); + } + else { + this.results.fail(j + 1, + test.name, + e + + " - teardown failed - " + + x + + " - " + + xstack); + } + + this.log.error("Teardown failed (again): " + + x + + " - " + + xstack + + " aborting tests"); + + i = arguments.length; j = cnt; break; + } + if (e.stack !== undefined) { - this.results.fail(j + 1, - test.name, - e + " - " + String(e.stack) + - " - teardown failed - " + - x + - " - " + - xstack); + this.results.fail(j + 1, test.name, e + " - " + String(e.stack)); } else { - this.results.fail(j + 1, - test.name, - e + - " - teardown failed - " + - x + - " - " + - xstack); - } - - this.log.error("Teardown failed (again): " + - x + - " - " + - xstack + - " aborting tests"); - - i = arguments.length; j = cnt; break; - } - - if (e.stack !== undefined) { - this.results.fail(j + 1, test.name, e + " - " + String(e.stack)); - } - else { - this.results.fail(j + 1, test.name, e); + this.results.fail(j + 1, test.name, e); + } } } } + + try { + tearDownAll(suite.suiteName); + } catch (tearDownAllError) { + if (tearDownAllError.stack !== undefined) { + this.results.fail(0, suite.suiteName, + tearDownAllError + " - " + String(tearDownAllError.stack) + + " - tearDownAll failed"); + } + } } results.suiteName = suiteNames.join(","); diff --git a/js/server/tests/aql/aql-graph-traverser.js b/js/server/tests/aql/aql-graph-traverser.js index afefcb680c..42c24831fe 100644 --- a/js/server/tests/aql/aql-graph-traverser.js +++ b/js/server/tests/aql/aql-graph-traverser.js @@ -101,7 +101,7 @@ function namedGraphSuite () { return { - setUp: function() { + setUpAll: function() { opts.allPlans = true; opts.verbosePlans = true; cleanup(); @@ -114,7 +114,7 @@ function namedGraphSuite () { g = gm._create(gn, [gm._relation(en, vn, vn)]); }, - tearDown: function () { + tearDownAll: function () { gm._drop(gn); cleanup(); }, @@ -432,7 +432,7 @@ function multiCollectionGraphSuite () { return { - setUp: function() { + setUpAll: function() { opts.allPlans = true; opts.verbosePlans = true; cleanup(); @@ -449,7 +449,7 @@ function multiCollectionGraphSuite () { db[en2].save(vn2 + "/G", vn + "/D", {}); }, - tearDown: function() { + tearDownAll: function() { gm._drop(gn); db._drop(vn2); db._drop(en2); @@ -946,7 +946,7 @@ function multiEdgeCollectionGraphSuite () { return { - setUp: function() { + setUpAll: function() { opts.allPlans = true; opts.verbosePlans = true; cleanup(); @@ -974,7 +974,7 @@ function multiEdgeCollectionGraphSuite () { edge.EA = ec2.save(vertex.E, vertex.A, {})._id; }, - tearDown: function() { + tearDownAll: function() { gm._drop(gn); db._drop(vn); db._drop(en); @@ -1009,7 +1009,7 @@ function potentialErrorsSuite () { return { - setUp: function () { + setUpAll: function () { cleanup(); vc = db._create(vn); ec = db._createEdgeCollection(en); @@ -1020,7 +1020,7 @@ function potentialErrorsSuite () { ec.save(vertex.B, vertex.C, {}); }, - tearDown: cleanup, + tearDownAll: cleanup, testNonIntegerSteps: function () { var query = "FOR x IN 2.5 OUTBOUND @startId @@eCol RETURN x"; @@ -1446,7 +1446,7 @@ function optimizeInSuite () { return { - setUp: function () { + setUpAll: function () { cleanup(); vc = db._create(vn, {numberOfShards: 4}); ec = db._createEdgeCollection(en, {numberOfShards: 4}); @@ -1462,7 +1462,7 @@ function optimizeInSuite () { } }, - tearDown: cleanup, + tearDownAll: cleanup, testSingleOptimize: function () { var vertexQuery = `WITH ${vn} @@ -1660,7 +1660,7 @@ function complexFilteringSuite () { ***********************************************************************/ return { - setUp: function() { + setUpAll: function() { cleanup(); var vc = db._create(vn, {numberOfShards: 4}); var ec = db._createEdgeCollection(en, {numberOfShards: 4}); @@ -1688,7 +1688,7 @@ function complexFilteringSuite () { edge.Tri31 = ec.save(vertex.Tri3, vertex.Tri1, {isLoop: true, lateLoop: true})._id; }, - tearDown: cleanup, + tearDownAll: cleanup, testVertexEarlyPruneHighDepth: function () { var query = `WITH ${vn} @@ -2071,7 +2071,7 @@ function brokenGraphSuite () { return { - setUp: function () { + setUpAll: function () { cleanup(); vc = db._create(vn, {numberOfShards: 4}); ec = db._createEdgeCollection(en, {numberOfShards: 4}); @@ -2083,7 +2083,7 @@ function brokenGraphSuite () { ec.save(vn + "/missing", vertex.B, {}); }, - tearDown: cleanup, + tearDownAll: cleanup, testRequestMissingVertex: function () { var query = `WITH ${vn} FOR x IN OUTBOUND @startId @@eCol RETURN x._id`; @@ -2185,7 +2185,7 @@ function multiEdgeDirectionSuite () { return { - setUp: function () { + setUpAll: function () { cleanup(); db._drop(en2); @@ -2216,7 +2216,7 @@ function multiEdgeDirectionSuite () { ec.save(vertex.E, vertex.F, {}); }, - tearDown: function () { + tearDownAll: function () { cleanup(); db._drop(en2); }, @@ -2315,7 +2315,7 @@ function subQuerySuite () { * */ - setUp: function () { + setUpAll: function () { cleanup(); vc = db._create(vn, {numberOfShards: 4}); ec = db._createEdgeCollection(en, {numberOfShards: 4}); @@ -2374,7 +2374,7 @@ function subQuerySuite () { ec.save(vertex.D, vertex.D5, {}); }, - tearDown: function () { + tearDownAll: function () { try { gm._drop(gn); } catch (e) { @@ -2659,7 +2659,7 @@ function optimizeQuantifierSuite() { let edges = {}; return { - setUp: function () { + setUpAll: function () { cleanup(); vc = db._create(vn, {numberOfShards: 4}); ec = db._createEdgeCollection(en, {numberOfShards: 4}); @@ -2687,7 +2687,7 @@ function optimizeQuantifierSuite() { gm._create(gn, [gm._relation(en, vn, vn)]); }, - tearDown: function () { + tearDownAll: function () { try { gm._drop(gn); } catch (e) {