angular-material-npfixed
Version:
The Angular Material project is an implementation of Material Design in Angular.js. This project provides a set of reusable, well-tested, and accessible Material Design UI components. Angular Material is supported internally at Google by the Angular.js, M
171 lines (129 loc) • 4.91 kB
JavaScript
describe('$mdComponentRegistry Service', function() {
beforeEach(module( 'material.core', 'material.components.sidenav' ));
/**
* SideNav element construction macro
*/
function setup(attrs) {
var el;
inject(function($compile, $rootScope) {
var parent = angular.element('<div>');
el = angular.element('<md-sidenav ' + (attrs||'') + '>');
parent.append(el);
$compile(parent)($rootScope);
$rootScope.$apply();
});
return el;
}
describe('registration', function() {
var $mdComponentRegistry, $timeout;
beforeEach( inject(function(_$mdComponentRegistry_, _$timeout_) {
$mdComponentRegistry = _$mdComponentRegistry_;
$timeout = _$timeout_;
}));
it('should print error on no handle', inject(function($log) {
spyOn($log, 'error');
$mdComponentRegistry.notFoundError('badHandle');
expect($log.error).toHaveBeenCalled();
}));
it('Should register handle', function() {
$mdComponentRegistry.register({needle: true}, 'test');
var instance = $mdComponentRegistry.get('test');
expect(instance).toBeTruthy();
expect(instance.needle).not.toBe(undefined);
expect($mdComponentRegistry.getInstances().length).toBe(1);
});
it('Should deregister', function() {
var deregister = $mdComponentRegistry.register({needle: true}, 'test');
expect($mdComponentRegistry.getInstances().length).toBe(1);
deregister();
expect($mdComponentRegistry.getInstances().length).toBe(0);
});
it('should register component when element is created', function() {
var el = setup('md-component-id="left"');
var instance = $mdComponentRegistry.get('left');
expect(instance).not.toBe(null);
});
it('should deregister component when element is destroyed', function() {
var el = setup('md-component-id="left"');
el.triggerHandler('$destroy');
var instance = $mdComponentRegistry.get('left');
expect(instance).toBe(null);
});
it('should wait for component registration', function() {
var promise = $mdComponentRegistry.when('left');
var el = setup('md-component-id="left"');
var instance = $mdComponentRegistry.get('left');
var resolved = false;
promise.then(function(inst){ resolved = inst; });
$timeout.flush();
expect(instance).toBe(resolved);
});
it('should allow multiple registrations', function() {
var promise = $mdComponentRegistry.when('left');
var promise1 = $mdComponentRegistry.when('left');
var el = setup('md-component-id="left"');
var instance = $mdComponentRegistry.get('left');
var resolved = false;
var resolved1 = false;
promise.then(function(inst){ resolved = inst; });
promise1.then(function(inst){ resolved1 = inst; });
$timeout.flush();
expect(instance).toBe(resolved);
expect(instance).toBe(resolved1);
});
it('should wait for next component registration', function() {
var resolved;
var count = 0;
var promise = $mdComponentRegistry.when('left');
var el = setup('md-component-id="left"');
promise.then(function(inst){ count += 1; });
$timeout.flush();
el.triggerHandler('$destroy');
el = setup('md-component-id="left"');
promise = $mdComponentRegistry.when('left');
promise.then(function(inst){
resolved = inst;
count += 1;
});
$timeout.flush();
expect(resolved).toBeDefined();
expect(count).toBe(2);
});
});
describe('component ids', function() {
var $mdComponentRegistry, $timeout;
beforeEach( inject(function(_$mdComponentRegistry_, _$timeout_) {
$mdComponentRegistry = _$mdComponentRegistry_;
$timeout = _$timeout_;
}));
it('should not find a component without an id', function() {
var el = setup();
var resolved;
var count = 0;
var promise = $mdComponentRegistry.when('left');
var instance = $mdComponentRegistry.get('left');
promise.then(function(inst){ resolved = inst; count += 1; });
$timeout.flush();
expect(count).toBe(0);
expect(instance).toBe(null);
expect(resolved).toBeUndefined();
});
it('should not wait for a component with an invalid id', function() {
var el = setup();
var fail, componentID;
var onFail = function() { fail = true;};
fail = false;
$mdComponentRegistry.when(componentID = undefined).catch( onFail );
$timeout.flush();
expect(fail).toBe(true);
fail = false;
$mdComponentRegistry.when(componentID = "").catch( onFail );
$timeout.flush();
expect(fail).toBe(true);
});
it('should properly destroy without a id', function() {
var el = setup();
el.triggerHandler('$destroy');
});
});
});