You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							3.7 KiB
						
					
					
				var delegate = require('../src/delegate'); | 
						|
var simulant = require('simulant'); | 
						|
 | 
						|
describe('delegate', function() { | 
						|
    before(function() { | 
						|
        var html = '<ul>' + | 
						|
                        '<li><a>Item 1</a></li>' + | 
						|
                        '<li><a>Item 2</a></li>' + | 
						|
                        '<li><a>Item 3</a></li>' + | 
						|
                        '<li><a>Item 4</a></li>' + | 
						|
                        '<li><a>Item 5</a></li>' + | 
						|
                   '</ul>'; | 
						|
 | 
						|
        document.body.innerHTML += html; | 
						|
 | 
						|
        global.container = document.querySelector('ul'); | 
						|
        global.anchor = document.querySelector('a'); | 
						|
 | 
						|
        global.spy = sinon.spy(global.container, 'removeEventListener'); | 
						|
    }); | 
						|
 | 
						|
    after(function() { | 
						|
        global.spy.restore(); | 
						|
        document.body.innerHTML = ''; | 
						|
    }); | 
						|
 | 
						|
    it('should add an event listener', function(done) { | 
						|
        delegate(global.container, 'a', 'click', function() { | 
						|
            done(); | 
						|
        }); | 
						|
 | 
						|
        simulant.fire(global.anchor, simulant('click')); | 
						|
    }); | 
						|
 | 
						|
    it('should remove an event listener', function() { | 
						|
        var delegation = delegate(global.container, 'a', 'click', function() {}); | 
						|
 | 
						|
        delegation.destroy(); | 
						|
        assert.ok(global.spy.calledOnce); | 
						|
    }); | 
						|
 | 
						|
    it('should use `document` if the element is unspecified', function(done) { | 
						|
        delegate('a', 'click', function() { | 
						|
            done(); | 
						|
        }); | 
						|
 | 
						|
        simulant.fire(global.anchor, simulant('click')); | 
						|
    }); | 
						|
 | 
						|
    it('should remove an event listener the unspecified base (`document`)', function() { | 
						|
        var delegation = delegate('a', 'click', function() {}); | 
						|
        var spy = sinon.spy(document, 'removeEventListener'); | 
						|
 | 
						|
        delegation.destroy(); | 
						|
        assert.ok(spy.calledOnce); | 
						|
 | 
						|
        spy.restore(); | 
						|
    }); | 
						|
 | 
						|
    it('should add event listeners to all the elements in a base selector', function() { | 
						|
        var spy = sinon.spy(); | 
						|
        delegate('li', 'a', 'click', spy); | 
						|
 | 
						|
        var anchors = document.querySelectorAll('a'); | 
						|
        simulant.fire(anchors[0], simulant('click')); | 
						|
        simulant.fire(anchors[1], simulant('click')); | 
						|
        assert.ok(spy.calledTwice); | 
						|
    }); | 
						|
 | 
						|
    it('should remove the event listeners from all the elements in a base selector', function() { | 
						|
        var items = document.querySelectorAll('li') | 
						|
        var spies = Array.prototype.map.call(items, function (li) { | 
						|
            return sinon.spy(li, 'removeEventListener'); | 
						|
        }); | 
						|
 | 
						|
        var delegations = delegate('li', 'a', 'click', function() {}); | 
						|
        delegations.forEach(function (delegation) { | 
						|
            delegation.destroy(); | 
						|
        }); | 
						|
 | 
						|
        spies.every(function (spy) { | 
						|
            var success = spy.calledOnce; | 
						|
            spy.restore(); | 
						|
            return success; | 
						|
        }); | 
						|
    }); | 
						|
 | 
						|
    it('should add event listeners to all the elements in a base array', function() { | 
						|
        var spy = sinon.spy(); | 
						|
        var items = document.querySelectorAll('li') | 
						|
        delegate(items, 'a', 'click', spy); | 
						|
 | 
						|
        var anchors = document.querySelectorAll('a') | 
						|
        simulant.fire(anchors[0], simulant('click')); | 
						|
        simulant.fire(anchors[1], simulant('click')); | 
						|
        assert.ok(spy.calledTwice); | 
						|
    }); | 
						|
 | 
						|
    it('should remove the event listeners from all the elements in a base array', function() { | 
						|
        var items = document.querySelectorAll('li') | 
						|
        var spies = Array.prototype.map.call(items, function (li) { | 
						|
            return sinon.spy(li, 'removeEventListener'); | 
						|
        }); | 
						|
 | 
						|
        var delegations = delegate(items, 'a', 'click', function() {}); | 
						|
        delegations.forEach(function (delegation) { | 
						|
            delegation.destroy(); | 
						|
        }); | 
						|
 | 
						|
        spies.every(function (spy) { | 
						|
            var success = spy.calledOnce; | 
						|
            spy.restore(); | 
						|
            return success; | 
						|
        }); | 
						|
    }); | 
						|
});
 | 
						|
 |