| var closest = require('../src/closest'); |
| |
| describe('closest', function() { |
| before(function() { |
| var html = '<div id="a">' + |
| '<div id="b">' + |
| '<div id="c"></div>' + |
| '</div>' + |
| '</div>'; |
| |
| document.body.innerHTML += html; |
| |
| global.a = document.querySelector('#a'); |
| global.b = document.querySelector('#b'); |
| global.c = document.querySelector('#c'); |
| }); |
| |
| after(function() { |
| document.body.innerHTML = ''; |
| }); |
| |
| it('should return the closest parent based on the selector', function() { |
| assert.ok(closest(global.c, '#b'), global.b); |
| assert.ok(closest(global.c, '#a'), global.a); |
| assert.ok(closest(global.b, '#a'), global.a); |
| }); |
| |
| it('should return itself if the same selector is passed', function() { |
| assert.ok(closest(document.body, 'body'), document.body); |
| }); |
| |
| it('should not throw on elements without matches()', function() { |
| var fakeElement = { |
| nodeType: -1, // anything but DOCUMENT_NODE_TYPE |
| parentNode: null, |
| matches: undefined // undefined to emulate Elements without this function |
| }; |
| |
| try { |
| closest(fakeElement, '#a') |
| } catch (err) { |
| assert.fail(); |
| } |
| }); |
| }); |