|
|
function moduleTests(ui) { var module = ui.module, element = ui.element, singleton = ui.singleton, name = $.fn[module].settings.name,
testValue = 'Test', fixtures = jasmine.getFixtures(),
originalSettings, $modules, $oneModule, $module, $clone ;
// set fixture path
fixtures.fixturesPath = 'base/test/fixtures/';
// disable debug
$.fn[module].settings.debug = false; $.fn[module].settings.performance = false; $.fn[module].settings.verbose = false;
beforeEach(function() { // load fixtures
fixtures.load(module + '.html'); // save settings
originalSettings = $.fn[module].settings;
// module available in scope
$module = $(element);
// one module available in fixture
if($module.size() == 1) { $oneModule = $module; $clone = $module.clone().appendTo( $(sandbox()) ); $modules = $clone.add($module); } // multiple modules available in fixture
else { $modules = $(element); $clone = $module.eq(1); $oneModule = $modules.first(); }
});
afterEach(function() { // restore settings
$.fn[module].settings = originalSettings; // remove element
$(element).remove(); });
/******************************* Module *******************************/
/*------------------- Instantiation --------------------*/ describe('Module', function() {
it("allows chaining when no settings returned", function() { var $chain = $modules[module](); expect($chain).toExist(); expect($chain.size()).toBe($modules.size()); });
it("returns a string when one setting returned", function() { var result = $oneModule[module]('setting', 'name'); expect(typeof result).toBe('string'); });
it("returns an array when multiple settings returned", function() { var result = $modules[module]('setting', 'name'); expect( $.isArray(result) ).toBeTruthy(); });
it("has an instance in metadata after init", function() { $oneModule[module](); expect($module).toHaveData('module-' + module); });
});
/*------------------- Settings --------------------*/
describe('Settings', function() {
it("clears settings on re-init", function() { $oneModule[module]({ name: testValue });
var retrievedValue = $oneModule[module]('setting', 'name'); expect(retrievedValue).toBe(testValue);
// reinit
$oneModule[module](); retrievedValue = $oneModule[module]('setting', 'name'); expect(retrievedValue).toBe(name); });
it("allows default settings to be changed", function() { $.fn[module].settings.name = testValue; $oneModule[module]();
var retrievedValue = $oneModule[module]('setting', 'name'); $.fn[module].settings.name = name;
expect(retrievedValue).toBe(testValue); });
it("allows settings to be changed during init", function() { $oneModule[module]({ name: testValue });
var retrievedValue = $oneModule[module]('setting', 'name');
expect(retrievedValue).toBe(testValue); });
it("allows settings to be changed during runtime", function() { $oneModule[module]();
var retrievedValue = $oneModule[module]('setting', 'name');
expect(retrievedValue).toBe(name); });
});
/*------------------- Groups --------------------*/
if(!singleton) {
describe('Group Contamination', function() {
it("creates settings for all instances", function() { $modules[module]('setting', 'name', testValue);
var retrievedValue = $oneModule[module]('setting', 'name'); var clonedSetting = $clone[module]('setting', 'name');
expect(retrievedValue).toBe(testValue); expect(clonedSetting).toBe(testValue);
$oneModule[module]({ 'name': testValue });
expect(retrievedValue).toBe(testValue); expect(clonedSetting).toBe(testValue);
});
it("does not change other elements settings when changing one element", function() { $modules[module](); $oneModule[module]('setting', 'name', testValue);
var retrievedValue = $oneModule[module]('setting', 'name'); var clonedSetting = $clone[module]('setting', 'name');
expect(retrievedValue).toBe(testValue); expect(clonedSetting).toBe(name);
});
it("does not change other elements when re-initialized", function() { $modules[module]();
$oneModule[module]({ 'name': testValue });
var retrievedValue = $oneModule[module]('setting', 'name'); var clonedSetting = $clone[module]('setting', 'name');
expect(retrievedValue).toBe(testValue); expect(clonedSetting).toBe(name);
});
});
}
/*------------------- Destroy --------------------*/ describe('Destroy', function() {
it("removes all events from page", function() { $module[module]('destroy'); if($.events().length > 0) { dump($.events()); } expect($.events().length).toBe(0); });
it("removes instance metadata", function() { $module[module]('destroy'); expect( $module.data('module-'+ module) ).toBe(undefined); });
});
}
|