Skip to content

Commit

Permalink
plugin tests, grunt test task, clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
purge committed Nov 13, 2013
1 parent 3f52322 commit c5945e3
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 35 deletions.
30 changes: 22 additions & 8 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,10 @@ module.exports = function(grunt) {
baseUrl: "src",
out: 'dist/<%= bower.name %>.js',
paths: {
almond: 'lib/almond/almond',
requirejs: 'lib/requirejs/require',
domReady: 'lib/requirejs-domready/domReady',
},
include: ['requirejs', 'sqwidget'],
// Wrapper for AMD
wrap: {
startFile: 'src/_wrapper/top.js',
endFile: 'src/_wrapper/bottom.js'
Expand All @@ -63,20 +61,35 @@ module.exports = function(grunt) {
}
}
},
karma: {
options: {
configFile: './karma.conf.js',
browsers: ['Chrome', 'Firefox']
},
unit: {
background: true
},
//continuous integration mode: run tests once in PhantomJS browser.
continuous: {
singleRun: true,
browsers: ['PhantomJS']
},
},

shell: {
build_example: {
command: "./build_example.sh"
},
test: {
command: "npm test"
}
},

watch: {
test: {
files: ["test/fixture/*.js", "src/*.js", "test/spec/*.js"],
tasks: ["karma:unit:run"]
},
sqwidget: {
files: ["src/*.js"],
tasks: ["shell:test", "build"]
files: ["src/*.js", "test/spec/*.js"],
tasks: ["karma:unit:run", "build"]
},
scaffold: {
files: ["grunt-scaffold/root/main.js", "grunt-scaffold/root/app/**/*.js", "grunt-scaffold/**/*.tmpl"],
Expand All @@ -100,6 +113,7 @@ module.exports = function(grunt) {
});
grunt.registerTask("build", ["requirejs:compile"]);
grunt.registerTask("default", ["clean", "build", "connect", "watch"]);
grunt.registerTask("dist", ["clean", "build"]);
grunt.registerTask("dist", ["clean", "build", "karma:unit"]);
grunt.registerTask("test", ["clean", "karma:unit", "watch:test"]);
grunt.registerTask("release", ["dist", "bowerRelease:stable"]);
};
3 changes: 2 additions & 1 deletion karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ module.exports = function(config) {
browsers: ['PhantomJS'],
// If singleRun is set to true, Karma will start and capture all
// configured browsers, run tests and then exit with an exit code of 0 or 1.
singleRun: false
singleRun: false,
reporters: 'dots'
});
};
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"scripts": {
"prepublish": "make dist",
"postinstall": "./grunt-scaffold/install.sh",
"test": "./node_modules/.bin/karma start --single-run --browsers PhantomJS"
"test": "grunt test:continuous"
},
"dependencies": {
"grunt-bower-release": "0.0.2"
Expand Down
37 changes: 19 additions & 18 deletions src/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ define(['require', 'lib/bonzo/bonzo', 'lib/qwery/qwery', 'lib/bean/bean', 'domRe
});

//bus events
bean.fire(this, "rendered:" + pkg.url);
bean.fire(this, "rendered:" + pkg.id);
bean.fire(pkg, "rendered");
bean.fire(this, "rendered:" + pkg.url, [bundle]);
bean.fire(this, "rendered:" + pkg.id,[bundle]);
bean.fire(pkg, "rendered", [bundle]);
} else {
throw("controller not found for " + bundle.location);
}
Expand All @@ -84,13 +84,10 @@ define(['require', 'lib/bonzo/bonzo', 'lib/qwery/qwery', 'lib/bean/bean', 'domRe
};

SqwidgetCore.prototype.initialize = function() {
var names = [],
_this = this;

for(var id in _this.packages) {
var pkg = _this.packages[id];
for(var id in this.packages) {

(function(pkg,id) {
(function(pkg, id, _this) {
//parse out script name from path
var parts = pkg.url.split("/");
var name = "./" + parts.pop();
Expand All @@ -105,21 +102,23 @@ define(['require', 'lib/bonzo/bonzo', 'lib/qwery/qwery', 'lib/bean/bean', 'domRe
//the outer bundle can define some config, like packages it would like
//loading before running its 'main' function

//todo fix dumb closing out on vars here
var loadMain = function(require,pkg,_this) {
//load the 'main' function inside the widget bundle when we have
//finished with dependencies
var loadMain = function() {
require(["main"], function(loaded) {
//if the bundle is a promise, wait for it to resolve, otherwise handle
//immediately
if("then" in loaded) {
var resolve = function(bundle) {
return _this.initializeWidget.apply(_this, [pkg, bundle]); };
_this.initialiseWidget.apply(_this, [pkg, bundle]); };
loaded.then(resolve);
} else {
_this.initialiseWidget(pkg, loaded);
}
}, function(err) { throw err; } );
};

// preload a library the widget bundle requires
if(bundle_config && bundle_config.packages) {

//create a new config for the lib loader
Expand All @@ -141,18 +140,20 @@ define(['require', 'lib/bonzo/bonzo', 'lib/qwery/qwery', 'lib/bean/bean', 'domRe
//config allowing both to be loaded simultaneously

var preloads = bundle_config.preloads || [];
//there must be a better way to do this... we could
//iterate context.registry() but that also seems insane.
require(preloads,function() {
loadMain(require,pkg,_this);
});
//at the moment the bundle config passes things we need to preload
//however, since its an optimized bundle they are *all* loaded
//already they are just sat inside registry()
//we could iterate context.registry() instead to force them into
//the current require context
require(preloads,function() { loadMain(); });

}, function(err) { throw err; } );
} else {
loadMain(require,pkg, _this);
loadMain();
}

}, function(err) { throw err; } );
})(pkg,id);
})(this.packages[id], id, this);
}
};

Expand Down
15 changes: 15 additions & 0 deletions test/fixture/dep1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//outer define is namespaced and passed the contextualised require
sqwidget.define(["require"], function(require) {
var define = sqwidget.define;

define("dep1/helper", function() {
return true;
});

define("dep1/helper2", function() {
return true;
});

return {};
});

15 changes: 15 additions & 0 deletions test/fixture/dep2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//outer define is namespaced and passed the contextualised require
sqwidget.define(["require"], function(require) {
var define = sqwidget.define;

define("dep2/helper", function() {
return true;
});

define("dep2/helper2", function() {
return true;
});

return {};
});

11 changes: 9 additions & 2 deletions test/fixture/example.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@ sqwidget.define(["require"], function(require) {
return {
Controller: function (opts) {
opts.config.el.append("<div>TEST</div>");
}
},
require: require
};
});

return {};
return {
packages: [
{ name: "dep1", location: '/base/test/fixture', main:"dep1" },
{ name: "dep2", location: '/base/test/fixture', main:"dep2" }
],
preloads: ["dep1/helper", "dep1/helper2"]
};
});

11 changes: 9 additions & 2 deletions test/fixture/promise.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,21 @@ sqwidget.define(['require', '../../src/lib/when/when'] ,function(require, when)
var pkg = {
Controller: function (opts) {
opts.config.el.append("<div>PROMISE</div>");
}
},
require: require
};

deferred.resolve(pkg);
});
return deferred.promise;
});
return {};

return {
packages: [
{ name: "dep2", location: '/base/test/fixture', main:"dep2" }
],
preloads: ["dep2/helper", "dep2/helper2"]
};
});


19 changes: 16 additions & 3 deletions test/spec/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,35 @@ define(['chai', 'lib/async/lib/async', 'core', 'lib/bonzo/bonzo', 'lib/bean/bean

async.parallel([
function(cb) {
bean.on(widget, 'rendered', function() {
bean.on(widget, 'rendered', function(bundle) {
assert.isTrue(bundle.require("dep1/helper"));
assert.isTrue(bundle.require("dep1/helper2"));
try {
bundle.require("dep2/helper");
assert.fail(true, false, "loaded");
} catch (e) {
assert.ok(e, "failed to load");
}

assert.ok("Triggered event on package");
//check we have mixed in plugin

cb();
});
},

function(cb) {
bean.on(sqwidgetCore, 'rendered:' + widget.id, function() {
bean.on(sqwidgetCore, 'rendered:' + widget.id, function(bundle) {
assert.ok("Triggered event");
assert.equal(bonzo(w1).html(), '<div>TEST</div>', 'Rendered correctly');
cb();
});
},

function(cb) {
bean.on(sqwidgetCore, 'rendered:' + w2r.id, function() {
bean.on(sqwidgetCore, 'rendered:' + w2r.id, function(bundle) {
assert.isTrue(bundle.require("dep2/helper"));
assert.isTrue(bundle.require("dep2/helper2"));
assert.ok("Triggered event");
assert.equal(bonzo(w2).html(), '<div>PROMISE</div>', 'Rendered correctly');
cb();
Expand Down

0 comments on commit c5945e3

Please sign in to comment.