spade 0.1.0 → 0.1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +0 -11
- data/.gitmodules +3 -6
- data/Gemfile +10 -0
- data/bin/spade +3 -1
- data/lib/spade.rb +70 -0
- data/lib/spade/bundle.rb +180 -0
- data/lib/spade/cli.rb +1 -17
- data/lib/spade/cli/base.rb +182 -0
- data/lib/spade/console.rb +39 -0
- data/lib/spade/context.rb +107 -0
- data/lib/spade/evaluator.rb +34 -0
- data/lib/spade/exports.rb +70 -0
- data/lib/spade/loader.rb +208 -0
- data/lib/spade/package/.gitignore +1 -0
- data/lib/spade/package/Gemfile +15 -0
- data/lib/spade/package/lib/spade.js +1283 -0
- data/lib/spade/package/lib/wrapper.js +15 -0
- data/lib/spade/package/package.json +17 -0
- data/lib/spade/package/spec/javascript/async-test.js +123 -0
- data/lib/spade/package/spec/javascript/compiler/javascript.js +13 -0
- data/lib/spade/package/spec/javascript/compiler/ruby.js +14 -0
- data/lib/spade/package/spec/javascript/loader-test.js +64 -0
- data/lib/spade/package/spec/javascript/normalize-test.js +73 -0
- data/lib/spade/package/spec/javascript/packages-test.js +50 -0
- data/lib/spade/package/spec/javascript/relative-require-test.js +72 -0
- data/lib/spade/package/spec/javascript/require-test.js +117 -0
- data/lib/spade/package/spec/javascript/sandbox/creation.js +44 -0
- data/lib/spade/package/spec/javascript/sandbox/evaluate.js +37 -0
- data/lib/spade/package/spec/javascript/sandbox/format.js +79 -0
- data/lib/spade/package/spec/javascript/sandbox/misc.js +58 -0
- data/lib/spade/package/spec/javascript/sandbox/preprocessor.js +81 -0
- data/lib/spade/package/spec/javascript/sandbox/require.js +48 -0
- data/lib/spade/package/spec/javascript/sandbox/run-command.js +21 -0
- data/lib/spade/package/spec/javascript/spade/externs.js +14 -0
- data/lib/spade/package/spec/javascript/spade/load-factory.js +15 -0
- data/lib/spade/package/spec/javascript/spade/misc.js +23 -0
- data/lib/spade/package/spec/javascript/spade/ready.js +12 -0
- data/lib/spade/package/spec/javascript/spade/register.js +13 -0
- data/lib/spade/package/spec/javascript_spec.rb +7 -0
- data/lib/spade/package/spec/spec_helper.rb +3 -0
- data/lib/spade/package/spec/support/core_test.rb +67 -0
- data/lib/spade/reactor.rb +159 -0
- data/lib/spade/server.rb +66 -0
- data/lib/spade/shell.rb +85 -0
- data/lib/spade/version.rb +1 -1
- data/spade.gemspec +15 -4
- data/spec/cli/update_spec.rb +65 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/cli.rb +103 -0
- data/spec/support/matchers.rb +12 -0
- data/spec/support/path.rb +66 -0
- metadata +146 -78
- data/.rspec +0 -1
- data/Buildfile +0 -18
- data/README.md +0 -152
- data/Rakefile +0 -9
- data/examples/format-app/lib/hello.coffee +0 -1
- data/examples/format-app/lib/main.js +0 -6
- data/examples/format-app/package.json +0 -10
- data/examples/format-app/resources/README.txt +0 -1
- data/examples/format-app/resources/config.json +0 -3
- data/examples/path-test/lib/hello.js +0 -1
- data/examples/path-test/lib/main.js +0 -1
- data/examples/path-test/package.json +0 -5
- data/examples/sc-app/index.html +0 -13
- data/examples/sc-app/lib/main.js +0 -24
- data/examples/sc-app/package.json +0 -8
- data/examples/single-file.js +0 -22
- data/examples/todos/index.html +0 -11
- data/examples/todos/lib/main.js +0 -11
- data/examples/todos/lib/todos.js +0 -93
- data/examples/todos/package.json +0 -10
- data/examples/todos/resources/stylesheets/todos.css +0 -162
- data/examples/todos/resources/templates/todos.handlebars +0 -31
- data/examples/web-app/README.md +0 -83
- data/examples/web-app/index.html +0 -12
- data/examples/web-app/lib/main.js +0 -3
- data/examples/web-app/package.json +0 -6
- data/examples/web-app/tests.html +0 -12
- data/examples/web-app/tests/ct-example-test.js +0 -39
- data/examples/web-app/tests/qunit-test.js +0 -23
@@ -0,0 +1,15 @@
|
|
1
|
+
exports.compileWrapper = function(code, spade, filename, pkg, id) {
|
2
|
+
var ret = ''
|
3
|
+
|
4
|
+
// Register package, probably a better way to do this
|
5
|
+
if (id.match(/^[^\/]+\/main$/)) {
|
6
|
+
ret += 'spade.register("'+pkg.name+'", '+JSON.stringify(pkg)+');\n\n';
|
7
|
+
}
|
8
|
+
|
9
|
+
// TODO: This probably isn't quite right
|
10
|
+
// TOOD: We can also pass a string here, maybe we should instead
|
11
|
+
ret += 'spade.register("'+id+'", function(){\n'+code+'\n});';
|
12
|
+
|
13
|
+
return ret;
|
14
|
+
};
|
15
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"name": "spade",
|
3
|
+
"version": "0.1.1",
|
4
|
+
|
5
|
+
"description": "Dependency Management Library for JavaScript",
|
6
|
+
"author": "Charles Jolley",
|
7
|
+
"homepage": "http://github.com/sproutcore/spade",
|
8
|
+
|
9
|
+
"directories": {
|
10
|
+
"lib": "./lib",
|
11
|
+
"tests": "./tests"
|
12
|
+
},
|
13
|
+
|
14
|
+
"main": "./lib/spade",
|
15
|
+
|
16
|
+
"plugin:wrapper": "spade/wrapper"
|
17
|
+
}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2010 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
/*globals Ct */
|
7
|
+
|
8
|
+
require('core-test');
|
9
|
+
|
10
|
+
var Spade = require('spade').Spade;
|
11
|
+
|
12
|
+
// ..........................................................
|
13
|
+
// BASIC REQUIRE
|
14
|
+
//
|
15
|
+
|
16
|
+
Ct.module('spade: async require');
|
17
|
+
|
18
|
+
Ct.setup(function(t, done) {
|
19
|
+
t.spade = new Spade();
|
20
|
+
|
21
|
+
// preload a module
|
22
|
+
t.spade.register('foo/baz', function(require,e) {
|
23
|
+
e.id = 'foo/baz';
|
24
|
+
e.async = require.async; // export for testing
|
25
|
+
});
|
26
|
+
|
27
|
+
// dummy loader loads only foo/bar on demand after delay
|
28
|
+
t.spade.loader = {
|
29
|
+
|
30
|
+
requests: 0,
|
31
|
+
|
32
|
+
loadFactory: function(spade, id, formats, done) {
|
33
|
+
this.requests++;
|
34
|
+
if (id === 'foo/bar') {
|
35
|
+
setTimeout(function() {
|
36
|
+
spade.register(id, function(r,e) { e.id='foo/bar'; });
|
37
|
+
done();
|
38
|
+
}, 10);
|
39
|
+
|
40
|
+
} else {
|
41
|
+
done('Not Found'); // immediately
|
42
|
+
}
|
43
|
+
}
|
44
|
+
};
|
45
|
+
|
46
|
+
done();
|
47
|
+
});
|
48
|
+
|
49
|
+
Ct.teardown(function(t, done) {
|
50
|
+
delete t.spade;
|
51
|
+
done();
|
52
|
+
});
|
53
|
+
|
54
|
+
Ct.test('should not talk to loader if registered', function(t, done) {
|
55
|
+
var spade = t.spade;
|
56
|
+
|
57
|
+
t.timeout(1000);
|
58
|
+
|
59
|
+
spade.async('foo/baz', function(err) {
|
60
|
+
t.equal(err, null);
|
61
|
+
t.equal(spade.loader.requests, 0, 'loader should not have been called');
|
62
|
+
t.equal(spade.require('foo/baz').id, 'foo/baz', 'should find foo');
|
63
|
+
done();
|
64
|
+
});
|
65
|
+
|
66
|
+
});
|
67
|
+
|
68
|
+
Ct.test('should let loader register', function(t, done) {
|
69
|
+
var spade = t.spade;
|
70
|
+
t.timeout(1000);
|
71
|
+
spade.async('foo/bar', function(err) {
|
72
|
+
t.equal(err, null);
|
73
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
74
|
+
t.equal(spade.require('foo/bar').id, 'foo/bar', 'should find foo');
|
75
|
+
done();
|
76
|
+
});
|
77
|
+
});
|
78
|
+
|
79
|
+
|
80
|
+
Ct.test('should normalize id', function(t, done) {
|
81
|
+
var spade = t.spade;
|
82
|
+
t.timeout(1000);
|
83
|
+
spade.async('/./foo/baz/../bar', function(err) {
|
84
|
+
t.equal(err, null);
|
85
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
86
|
+
t.equal(spade.require('foo/bar').id, 'foo/bar', 'should find foo');
|
87
|
+
done();
|
88
|
+
});
|
89
|
+
});
|
90
|
+
|
91
|
+
|
92
|
+
Ct.test('should expose async inside of module', function(t, done) {
|
93
|
+
var spade = t.spade;
|
94
|
+
t.timeout(1000);
|
95
|
+
|
96
|
+
var async = spade.require('foo/baz').async;
|
97
|
+
t.ok(async, 'should have an async function');
|
98
|
+
|
99
|
+
// normalize relative to async
|
100
|
+
async('./bar', function(err) {
|
101
|
+
t.equal(err, null);
|
102
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
103
|
+
t.equal(spade.require('foo/bar').id, 'foo/bar', 'should find foo');
|
104
|
+
done();
|
105
|
+
});
|
106
|
+
});
|
107
|
+
|
108
|
+
|
109
|
+
Ct.test('should return err if loader does not register', function(t, done) {
|
110
|
+
var spade = t.spade;
|
111
|
+
t.timeout(1000);
|
112
|
+
spade.async('imaginary/bar', function(err) {
|
113
|
+
t.equal(err, 'Not Found');
|
114
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
115
|
+
|
116
|
+
t.throws(function() {
|
117
|
+
spade.require('imaginary/bar');
|
118
|
+
});
|
119
|
+
done();
|
120
|
+
});
|
121
|
+
|
122
|
+
});
|
123
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2011 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
//
|
7
|
+
|
8
|
+
var Ct = require('core-test/sync');
|
9
|
+
|
10
|
+
Ct.module('spade: Compiler JavaScript');
|
11
|
+
|
12
|
+
Ct.test('works');
|
13
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2011 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
//
|
7
|
+
|
8
|
+
var Ct = require('core-test/sync');
|
9
|
+
|
10
|
+
Ct.module('spade: Compiler Ruby');
|
11
|
+
|
12
|
+
Ct.test('works');
|
13
|
+
|
14
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2010 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
var Ct = require('core-test/sync'),
|
8
|
+
Spade = require('spade').Spade;
|
9
|
+
|
10
|
+
// ..........................................................
|
11
|
+
// BASIC REQUIRE
|
12
|
+
//
|
13
|
+
|
14
|
+
Ct.module('spade: basic require');
|
15
|
+
|
16
|
+
Ct.setup(function(t) {
|
17
|
+
t.spade = new Spade();
|
18
|
+
|
19
|
+
// preload a module
|
20
|
+
t.spade.register('foo/main', function(r, e) { e.id = 'foo'; });
|
21
|
+
|
22
|
+
// dummy loader loads only foo/bar on demand
|
23
|
+
t.spade.loader = {
|
24
|
+
|
25
|
+
requests: 0,
|
26
|
+
|
27
|
+
loadFactory: function(spade, id, formats, done) {
|
28
|
+
this.requests++;
|
29
|
+
if (id === 'foo/bar') {
|
30
|
+
spade.register(id, function(r,e) { e.id='foo/bar'; });
|
31
|
+
}
|
32
|
+
if (done) throw "should not be passed done"
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
});
|
37
|
+
|
38
|
+
Ct.teardown(function(t) {
|
39
|
+
delete t.spade;
|
40
|
+
});
|
41
|
+
|
42
|
+
Ct.test('should not talk to loader if module is registered', function(t) {
|
43
|
+
var spade = t.spade;
|
44
|
+
t.equal(spade.require('foo').id, 'foo', 'should find foo');
|
45
|
+
t.equal(spade.loader.requests, 0, 'loader should not have been called');
|
46
|
+
});
|
47
|
+
|
48
|
+
Ct.test('should let loader register', function(t) {
|
49
|
+
var spade = t.spade;
|
50
|
+
t.equal(spade.require('foo/bar').id, 'foo/bar', 'should find foo');
|
51
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
52
|
+
});
|
53
|
+
|
54
|
+
Ct.test('should throw if loader does not register', function(t) {
|
55
|
+
var spade = t.spade;
|
56
|
+
t.throws(function() {
|
57
|
+
spade.require('imaginary/bar');
|
58
|
+
});
|
59
|
+
t.equal(spade.loader.requests, 1, 'loader should have been called');
|
60
|
+
});
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
Ct.run();
|
@@ -0,0 +1,73 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2010 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
var Ct = require('core-test/sync'),
|
8
|
+
Spade = require('spade').Spade;
|
9
|
+
|
10
|
+
// ..........................................................
|
11
|
+
// BASIC REQUIRE
|
12
|
+
//
|
13
|
+
|
14
|
+
Ct.module('spade: normalize');
|
15
|
+
|
16
|
+
Ct.setup(function(t) {
|
17
|
+
t.spade = new Spade();
|
18
|
+
});
|
19
|
+
|
20
|
+
Ct.teardown(function(t) {
|
21
|
+
delete t.spade;
|
22
|
+
});
|
23
|
+
|
24
|
+
Ct.test('normalize', function(t) {
|
25
|
+
var spade = t.spade;
|
26
|
+
t.equal(spade.normalize('foo/bar'), 'foo/bar');
|
27
|
+
t.equal(spade.normalize('./foo', 'bar/baz'), 'bar/foo');
|
28
|
+
t.equal(spade.normalize('../foo', 'bar/baz'), 'foo/main');
|
29
|
+
t.equal(spade.normalize('foo/../bar//foo/./baz', 'bar/baz'), 'bar/foo/baz');
|
30
|
+
|
31
|
+
t.equal(spade.normalize('/foo/./bar'), 'foo/bar');
|
32
|
+
t.equal(spade.normalize('foo/../bar/'), 'bar/main');
|
33
|
+
t.equal(spade.normalize('/foo/../bar/'), 'bar/main');
|
34
|
+
|
35
|
+
t.equal(spade.normalize('/foo/bar'), 'foo/bar');
|
36
|
+
t.equal(spade.normalize('foo/bar/'), 'foo/bar');
|
37
|
+
t.equal(spade.normalize('/foo/bar/'), 'foo/bar');
|
38
|
+
|
39
|
+
t.equal(spade.normalize('PKG/foo/bar'), 'PKG/foo/bar');
|
40
|
+
t.equal(spade.normalize('BAR/foo', 'PKG/bar/baz'), 'BAR/foo');
|
41
|
+
t.equal(spade.normalize('./foo', 'PKG/bar/baz'), 'PKG/bar/foo');
|
42
|
+
t.equal(spade.normalize('../foo', 'PKG/bar/baz'), 'PKG/foo');
|
43
|
+
t.equal(spade.normalize('./foo/../../bar//foo/./baz', 'PKG/bar/baz'), 'PKG/bar/foo/baz');
|
44
|
+
|
45
|
+
});
|
46
|
+
|
47
|
+
Ct.test('normalize package', function(t) {
|
48
|
+
var spade = t.spade;
|
49
|
+
spade.register('sproutcore', {}); // register as a package
|
50
|
+
t.equal(spade.normalize('sproutcore'), 'sproutcore/main');
|
51
|
+
t.equal(spade.normalize('foo/sproutcore'), 'foo/sproutcore');
|
52
|
+
});
|
53
|
+
|
54
|
+
Ct.test('normalize relative require from main', function(t) {
|
55
|
+
// I think this is a valid test, but not certain
|
56
|
+
var spade = t.spade, mainRequire, otherRequire;
|
57
|
+
spade.register('foo', { main: './lib/foo', directories: { lib: './lib/foo' } });
|
58
|
+
spade.register('foo/main', 'return require;');
|
59
|
+
spade.register('foo/other/main', 'return require;');
|
60
|
+
mainRequire = spade.require('foo/main');
|
61
|
+
otherRequire = spade.require('foo/other/main');
|
62
|
+
t.equal(mainRequire.normalize('./foo/adfadf'), 'foo/adfadf', 'works for real main');
|
63
|
+
t.equal(otherRequire.normalize('./foo/core'), 'foo/other/foo/core', "no difference for fake main");
|
64
|
+
});
|
65
|
+
|
66
|
+
Ct.test('normalize tilde paths with lib', function(t){
|
67
|
+
var spade = t.spade, fooRequire;
|
68
|
+
spade.register('foo', { directories: { lib: './lib' }}); // register as a package
|
69
|
+
spade.register('foo/main', 'return require;');
|
70
|
+
fooRequire = spade.require('foo');
|
71
|
+
t.equal(fooRequire.normalize('foo/~lib/main'), 'foo/main');
|
72
|
+
t.equal(fooRequire.normalize('foo/~lib/core'), 'foo/core');
|
73
|
+
});
|
@@ -0,0 +1,50 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2010 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
var Ct = require('core-test/sync'),
|
8
|
+
Spade = require('spade').Spade;
|
9
|
+
|
10
|
+
Ct.module('spade: packages');
|
11
|
+
|
12
|
+
Ct.setup(function(t) {
|
13
|
+
t.spade = new Spade();
|
14
|
+
});
|
15
|
+
|
16
|
+
Ct.teardown(function(t) {
|
17
|
+
delete t.spade;
|
18
|
+
});
|
19
|
+
|
20
|
+
Ct.test('should find registered package', function(t) {
|
21
|
+
|
22
|
+
var spade = t.spade;
|
23
|
+
spade.register('PKG', { name: 'PKG' });
|
24
|
+
|
25
|
+
t.equal(spade.package('PKG').name, 'PKG');
|
26
|
+
t.equal(spade.package('PKG/foo/bar').name, 'PKG');
|
27
|
+
|
28
|
+
});
|
29
|
+
|
30
|
+
Ct.test('should respect mappings', function(t) {
|
31
|
+
|
32
|
+
var spade = t.spade;
|
33
|
+
spade.register('PKG', { mappings: { foo: 'FOO' } });
|
34
|
+
|
35
|
+
spade.register('PKG/bar', function(require, exports) {
|
36
|
+
exports.id = require('foo/foo').id;
|
37
|
+
});
|
38
|
+
|
39
|
+
spade.register('FOO/foo', function(r, e) { e.id = 'FOO'; });
|
40
|
+
|
41
|
+
t.equal(spade.require('PKG/bar').id, 'FOO'); // should remap pkg name
|
42
|
+
|
43
|
+
});
|
44
|
+
|
45
|
+
Ct.test('should set default directories', function(t){
|
46
|
+
var spade = t.spade;
|
47
|
+
spade.register('PKG', { name: 'PKG' });
|
48
|
+
|
49
|
+
t.deepEqual(spade.package('PKG').directories, { 'lib': ['lib'] });
|
50
|
+
});
|
@@ -0,0 +1,72 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: Spade - CommonJS Runtime
|
3
|
+
// Copyright: ©2010 Strobe Inc. All rights reserved.
|
4
|
+
// License: Licened under MIT license (see __preamble__.js)
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
var Ct = require('core-test/sync'),
|
8
|
+
Spade = require('spade').Spade;
|
9
|
+
|
10
|
+
// ..........................................................
|
11
|
+
// BASIC REQUIRE
|
12
|
+
//
|
13
|
+
|
14
|
+
Ct.module('spade: relative require');
|
15
|
+
|
16
|
+
Ct.setup(function(t) {
|
17
|
+
t.spade = new Spade();
|
18
|
+
|
19
|
+
['foo', 'bar'].forEach(function(id) {
|
20
|
+
t.spade.register(id, { "name": id });
|
21
|
+
});
|
22
|
+
|
23
|
+
// register some dummy modules. These will just set an 'id' prop on exports
|
24
|
+
['foo/bar', 'bar/main', 'foo/bar/baz'].forEach(function(id) {
|
25
|
+
t.spade.register(id, function(r, e) { e.id = id; });
|
26
|
+
});
|
27
|
+
|
28
|
+
});
|
29
|
+
|
30
|
+
Ct.teardown(function(t) {
|
31
|
+
delete t.spade;
|
32
|
+
});
|
33
|
+
|
34
|
+
Ct.test('require absolute', function(t) {
|
35
|
+
var spade = t.spade;
|
36
|
+
|
37
|
+
spade.register('blah/main', function(require, e) {
|
38
|
+
e.found = require('foo/bar').id;
|
39
|
+
});
|
40
|
+
|
41
|
+
t.equal(spade.require('blah').found, 'foo/bar');
|
42
|
+
});
|
43
|
+
|
44
|
+
Ct.test('require relative top level', function(t) {
|
45
|
+
var spade = t.spade;
|
46
|
+
spade.register('blah/main', function(require, e) {
|
47
|
+
e.found = require('../bar').id;
|
48
|
+
});
|
49
|
+
|
50
|
+
t.equal(spade.require('blah').found, 'bar/main');
|
51
|
+
});
|
52
|
+
|
53
|
+
Ct.test('require relative nested', function(t) {
|
54
|
+
var spade = t.spade;
|
55
|
+
spade.register('foo/blah', function(require, e) {
|
56
|
+
e.found = require('./bar').id;
|
57
|
+
});
|
58
|
+
|
59
|
+
t.equal(spade.require('foo/blah').found, 'foo/bar');
|
60
|
+
});
|
61
|
+
|
62
|
+
Ct.test('require relative up nested', function(t) {
|
63
|
+
var spade = t.spade;
|
64
|
+
spade.register('bar/blah', function(require, e) {
|
65
|
+
e.found = require('../foo/bar/baz').id;
|
66
|
+
});
|
67
|
+
|
68
|
+
t.equal(spade.require('bar/blah').found, 'foo/bar/baz');
|
69
|
+
});
|
70
|
+
|
71
|
+
|
72
|
+
Ct.run();
|