UNPKG

4.09 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.6.3
2var AssertionError, Does, Loader, colors, config, deferred, does, facto, ipso, loadModules, loadModulesSync, parallel, should, util, _ref, _ref1;
3
4_ref = require('also'), util = _ref.util, deferred = _ref.deferred, parallel = _ref.parallel;
5
6AssertionError = require('assert').AssertionError;
7
8facto = require('facto');
9
10Loader = require('./loader');
11
12colors = require('colors');
13
14Does = require('does');
15
16does = Does({
17 does: {
18 mode: 'spec'
19 }
20});
21
22should = require('should');
23
24config = {
25 dir: process.cwd(),
26 modules: {}
27};
28
29_ref1 = Loader.create(config), loadModules = _ref1.loadModules, loadModulesSync = _ref1.loadModulesSync;
30
31module.exports = ipso = function(actualTestFunction) {
32 var testFunctionForMocha;
33 return testFunctionForMocha = function(done) {
34 var Module, arg1, argsToInjectIntoTest, fnArgsArray, testResolver, _i, _len, _ref2,
35 _this = this;
36 fnArgsArray = util.argsOf(actualTestFunction);
37 argsToInjectIntoTest = [];
38 if (done == null) {
39 if (fnArgsArray[0] === 'done' || fnArgsArray[0] === 'facto') {
40 console.log('ipso cannot inject done into describe() or context()'.red);
41 return;
42 }
43 does.activate({
44 context: this,
45 mode: 'spec',
46 spec: null,
47 resolver: null
48 });
49 _ref2 = loadModulesSync(fnArgsArray, does);
50 for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
51 Module = _ref2[_i];
52 argsToInjectIntoTest.push(Module);
53 }
54 actualTestFunction.apply(this, argsToInjectIntoTest);
55 return;
56 }
57 does.activate({
58 context: this,
59 mode: 'spec',
60 spec: this.test,
61 resolver: done
62 });
63 testResolver = function(metadata) {
64 return does.assert(done).then(function(result) {
65 if (fnArgsArray[0] === 'facto') {
66 facto(metadata);
67 }
68 return done();
69 }, function(error) {
70 if (fnArgsArray[0] === 'facto') {
71 return facto(metadata);
72 }
73 }, function(notify) {});
74 };
75 if (fnArgsArray[0] === 'done' || fnArgsArray[0] === 'facto') {
76 argsToInjectIntoTest.push(testResolver);
77 arg1 = fnArgsArray.shift();
78 }
79 return loadModules(fnArgsArray, does).then(function(Modules) {
80 var error, promise, _j, _len1;
81 for (_j = 0, _len1 = Modules.length; _j < _len1; _j++) {
82 Module = Modules[_j];
83 argsToInjectIntoTest.push(Module);
84 }
85 try {
86 promise = actualTestFunction.apply(_this, argsToInjectIntoTest);
87 } catch (_error) {
88 error = _error;
89 does.reset();
90 done(error);
91 return;
92 }
93 if (arg1 !== 'done' && arg1 !== 'facto') {
94 testResolver();
95 }
96 if (promise.then != null) {
97 return promise.then((function() {}), done);
98 }
99 }, done);
100 };
101};
102
103ipso.modules = function(list) {
104 var tag;
105 for (tag in list) {
106 if (list[tag].require == null) {
107 throw new Error('ipso.module expects { tagName: { require: "path/or/name" } }');
108 }
109 config.modules[tag] = list[tag];
110 }
111 return ipso;
112};
113
114ipso.ipso = ipso;
115
116ipso.mock = function(name) {
117 var object;
118 object = {
119 title: name,
120 is: function(mock) {
121 if (typeof mock === 'object') {
122 return object.should.equal(mock);
123 }
124 return name.should.equal(mock);
125 }
126 };
127 return does.spectateSync({
128 name: name,
129 tagged: true
130 }, object);
131};
132
133ipso.tag = deferred(function(action, list) {
134 var tag;
135 return parallel((function() {
136 var _results;
137 _results = [];
138 for (tag in list) {
139 _results.push((function(tag) {
140 return function() {
141 return does.spectate({
142 name: tag,
143 tagged: true
144 }, list[tag]);
145 };
146 })(tag));
147 }
148 return _results;
149 })()).then(action.resolve, action.reject, action.notify);
150});
151
152module.exports.once = function(fn) {
153 return (function(done) {
154 return function() {
155 if (done) {
156 return;
157 }
158 done = true;
159 return fn.apply(this, arguments);
160 };
161 })(false);
162};