Files
archived-enquire.js/spec/MediaQueryDispatch.js
WickyNilliams 98f197e7e4 clean up tests
2017-03-08 17:05:56 +00:00

116 lines
3.4 KiB
JavaScript

var MediaQueryDispatch = require('../src/MediaQueryDispatch');
var MediaQuery = require('../src/MediaQuery');
var QueryHandler = require('../src/QueryHandler');
describe('MediaQueryDispatch', function() {
var query = 'max-width:1000px';
var matchMedia;
beforeEach(function() {
matchMedia = window.matchMedia;
});
afterEach(function() {
window.matchMedia = matchMedia;
});
it('throws if matchMedia is not present', function() {
window.matchMedia = undefined;
expect(function() {
new MediaQueryDispatch();
}).toThrowError('matchMedia not present, legacy browsers require a polyfill');
});
it('tests for browser capability', function() {
window.matchMedia = jasmine.createSpy('matchMedia').and.returnValue({ matches: true });
var mqd = new MediaQueryDispatch();
expect(window.matchMedia).toHaveBeenCalled();
expect(mqd.browserIsIncapable).toBe(false);
});
//TODO: test for isUnconditional
it('allows a match function to be registered', function() {
var mqd = new MediaQueryDispatch();
mqd.register(query, function(){});
var mediaQuery = mqd.queries[query];
expect(mediaQuery).not.toBe(undefined);
expect(mediaQuery.handlers.length).toBe(1);
});
it('allows handler objects to be registered', function() {
var mqd = new MediaQueryDispatch();
mqd.register(query, {});
expect(mqd.queries[query].handlers.length).toBe(1);
});
it('allows arrays of handlers to be registered', function() {
var mqd = new MediaQueryDispatch();
var handlers = [{}, {}, {}];
mqd.register(query, handlers);
expect(mqd.queries[query].handlers.length).toBe(handlers.length);
});
it('allows multiple handlers for same query to be registered at different times', function() {
var mqd = new MediaQueryDispatch();
var spy = spyOn(MediaQuery.prototype, 'addHandler');
mqd.register(query, {});
mqd.register(query, {});
expect(spy.calls.count()).toBe(2);
});
it('allows entire queries to be unregistered', function() {
var mqd = new MediaQueryDispatch();
var destroy = spyOn(QueryHandler.prototype, 'destroy');
var handlers = [
jasmine.createSpyObj('handler1', ['match']),
jasmine.createSpyObj('handler2', ['match'])
];
mqd.register(query, handlers);
mqd.unregister(query);
expect(destroy.calls.count()).toBe(handlers.length);
expect(mqd.queries[query]).toBe(undefined);
});
it('allows individual handlers to be unregistered', function() {
var mqd = new MediaQueryDispatch();
var removeSpy = spyOn(MediaQuery.prototype, 'removeHandler');
var handlers = [
jasmine.createSpyObj('handler1', ['match']),
jasmine.createSpyObj('handler2', ['match'])
];
mqd.register(query, handlers);
mqd.unregister(query, handlers[1]);
expect(removeSpy.calls.count()).toBe(1);
});
it('returns if unregistering unrecognised media query', function() {
var mqd = new MediaQueryDispatch();
var removeSpy = spyOn(MediaQuery.prototype, 'removeHandler');
var destroySpy = spyOn(QueryHandler.prototype, 'destroy');
var handler = jasmine.createSpyObj('handler1', ['match']);
mqd.register(query, handler);
var result = mqd.unregister('klgfjglkfdsajflkj', handler);
expect(removeSpy).not.toHaveBeenCalled();
expect(destroySpy).not.toHaveBeenCalled();
expect(result).toBe(mqd);
});
});