base-test-suite
Version:
Test suite for base projects.
161 lines (134 loc) • 4.49 kB
JavaScript
var assert = require('assert');
module.exports = function(App, options, runner) {
var app;
var Views = App.Views;
var View = App.View;
var collection;
describe('views.use', function() {
beforeEach(function() {
collection = new Views();
});
it('should expose the instance to `use`:', function(cb) {
collection.use(function(inst) {
assert(inst.isViews);
cb();
});
});
it('should be chainable:', function(cb) {
collection
.use(function(inst) {
assert(inst.isViews);
})
.use(function(inst) {
assert(inst.isViews);
})
.use(function(inst) {
assert(inst.isViews);
cb();
});
});
it('should expose the collection to a plugin:', function() {
collection.use(function(views) {
assert(views.isViews);
views.foo = views.addView.bind(views);
});
collection.foo('a', {content: '...'});
assert(collection.views.hasOwnProperty('a'));
});
it('should expose collection when chained:', function() {
collection
.use(function(views) {
assert(views.isViews);
views.foo = views.addView.bind(views);
})
.use(function(views) {
assert(views.isViews);
views.bar = views.addView.bind(views);
})
.use(function(views) {
assert(views.isViews);
views.baz = views.addView.bind(views);
});
var pages = collection;
pages.foo({path: 'a', content: '...'});
pages.bar({path: 'b', content: '...'});
pages.baz({path: 'c', content: '...'});
assert(collection.views.hasOwnProperty('a'));
assert(collection.views.hasOwnProperty('b'));
assert(collection.views.hasOwnProperty('c'));
});
it('should work when a custom `View` constructor is passed:', function() {
collection = new Views({View: require('vinyl')});
collection
.use(function(views) {
assert(views.isViews);
views.foo = views.addView.bind(views);
})
.use(function(views) {
assert(views.isViews);
views.bar = views.addView.bind(views);
})
.use(function(views) {
assert(views.isViews);
views.baz = views.addView.bind(views);
});
var pages = collection;
pages.foo({path: 'a', content: '...'});
pages.bar({path: 'b', content: '...'});
pages.baz({path: 'c', content: '...'});
assert(collection.views.hasOwnProperty('a'));
assert(collection.views.hasOwnProperty('b'));
assert(collection.views.hasOwnProperty('c'));
});
it('should pass to view `use` if a function is returned:', function() {
collection.use(function(views) {
assert(views.isViews);
return function(view) {
view.foo = views.addView.bind(views);
assert(view.isView);
};
});
collection.addView('a', {content: '...'})
.foo({path: 'b', content: '...'})
.foo({path: 'c', content: '...'})
.foo({path: 'd', content: '...'});
assert(collection.views.hasOwnProperty('a'));
assert(collection.views.hasOwnProperty('b'));
assert(collection.views.hasOwnProperty('c'));
assert(collection.views.hasOwnProperty('d'));
});
it('should be chainable when a view function is returned:', function() {
collection
.use(function(views) {
assert(views.isViews);
return function(view) {
view.foo = views.addView.bind(views);
assert(view.isView);
};
})
.use(function(views) {
assert(views.isViews);
return function(view) {
view.bar = views.addView.bind(views);
assert(view.isView);
};
})
.use(function(views) {
assert(views.isViews);
return function(view) {
view.baz = views.addView.bind(views);
assert(view.isView);
};
});
collection.addView('a', {content: '...'})
.foo({path: 'b', content: '...'})
.bar({path: 'c', content: '...'})
.baz({path: 'd', content: '...'});
assert(collection.views.hasOwnProperty('a'));
assert(collection.views.hasOwnProperty('b'));
assert(collection.views.hasOwnProperty('c'));
assert(collection.views.hasOwnProperty('d'));
});
});
};
;