Skip to content

Commit

Permalink
WIP unit going BDD
Browse files Browse the repository at this point in the history
  • Loading branch information
rodneyrehm committed May 30, 2016
1 parent ff89b82 commit 79b04da
Show file tree
Hide file tree
Showing 25 changed files with 2,429 additions and 1,733 deletions.
165 changes: 78 additions & 87 deletions test/unit/core.browser-compatibility.test.js
@@ -1,7 +1,7 @@
define(function(require) {
'use strict';

var registerSuite = require('intern!object');
var bdd = require('intern!bdd');
var expect = require('intern/chai!expect');
var FocusableTestFrame = require('../helper/test-iframe-browser-data');
var focusableTestData = require('../helper/browser-focusable-data');
Expand All @@ -13,57 +13,48 @@ define(function(require) {
var getFocusRedirectTarget = require('ally/get/focus-redirect-target');
var queryTabsequence = require('ally/query/tabsequence');

registerSuite(function() {

function keysMap(list) {
var map = {};
list.forEach(function(key) {
map[key] = true;
});
return map;
}
bdd.describe('core: Focusable Browser Compatibility', function() {

var framed = new FocusableTestFrame();

var data = focusableTestData(platform);
var suite = {
name: 'core: Browser Compatibility',

before: function() {
return framed.initialize(document.body);
},
after: function() {
framed.terminate();
},
'browser version': function() {
if (data) {
var ident = data.platform.name + ' ' + data.platform.version;
if (data.platform.product) {
ident = data.platform.product + ' ' + ident;
}

this.skip('Checking against ' + ident);
} else {
this.skip('No data to compare to');
}
},
};

bdd.before(function() {
if (!data) {
this.skip('No data available to compare against');
}

return framed.initialize(document.body);
});

bdd.after(function() {
framed.terminate();
});

// This test is a hack to print some data
bdd.it('should compare against the correct data', function() {
var ident = data.platform.name + ' ' + data.platform.version;
if (data.platform.product) {
ident = data.platform.product + ' ' + ident;
}

this.skip(ident);
});

if (!data) {
return suite;
return;
}

var ignoreTabsequencePattern = /svg/;
var ignoreTabsequenceFocusablePattern = null;
var skipTabsequence = {};
var ignorePattern = /(^|-> )(ignore|html|body|embed|param)/;
var skipUntestable = keysMap([
var skipUntestable = {
// known mismatch
'iframe',
'iframe[src=svg]',
'keygen',
'keygen[tabindex=-1]',
]);
'iframe': true,
'iframe[src=svg]': true,
'keygen': true,
'keygen[tabindex=-1]': true,
};

if (data.platform.layout === 'Blink' || data.platform.layout === 'WebKit') {
skipUntestable['svg rect[onfocus]'] = true;
Expand Down Expand Up @@ -178,59 +169,59 @@ define(function(require) {
};
}

if (!data) {
return suite;
}

Object.keys(data.elements).forEach(function(label) {
if (skipUntestable[label] || label.match(ignorePattern)) {
// silently skip what we know we can't test
return;
}
bdd.describe('focusable state', function() {
Object.keys(data.elements).forEach(function(label) {
if (skipUntestable[label] || label.match(ignorePattern)) {
// silently skip what we know we can't test
return;
}

suite[label] = generateTest(label);
bdd.it('should match for ' + label, generateTest(label));
});
});

suite.tabsequence = function() {
var ignored = function(label) {
return !skipUntestable[label]
&& !skipTabsequence[label]
&& !label.match(ignorePattern)
&& !label.match(ignoreTabsequencePattern)
&& label.indexOf(' -> ') === -1;
};

var expected = data.tabsequence.filter(ignored);
var sequence = queryTabsequence({
context: framed.document.body,
strategy: 'strict',
}).map(function(element) {
bdd.describe('tabbing sequence', function() {
function extractLabel(element) {
return element.getAttribute('data-label');
}).filter(ignored);

expect(sequence).to.deep.equal(expected);
};
}

suite['tabsequence with onlyTabbable'] = function() {
var ignored = function(label) {
return !skipUntestable[label]
&& !skipTabsequence[label]
&& !label.match(ignorePattern)
&& (!ignoreTabsequenceFocusablePattern || !label.match(ignoreTabsequenceFocusablePattern))
&& label.indexOf(' -> ') === -1;
};
bdd.it('should match for script focusable elements', function() {
var ignored = function(label) {
return !skipUntestable[label]
&& !skipTabsequence[label]
&& !label.match(ignorePattern)
&& !label.match(ignoreTabsequencePattern)
&& label.indexOf(' -> ') === -1;
};

var expected = data.tabsequence.filter(ignored);
var sequence = queryTabsequence({
context: framed.document.body,
strategy: 'strict',
}).map(extractLabel).filter(ignored);

expect(sequence).to.deep.equal(expected);
});

var expected = data.tabsequence.filter(ignored);
var sequence = queryTabsequence({
context: framed.document.body,
includeOnlyTabbable: true,
strategy: 'strict',
}).map(function(element) {
return element.getAttribute('data-label');
}).filter(ignored);
bdd.it('should match when including onlyTabbable', function() {
var ignored = function(label) {
return !skipUntestable[label]
&& !skipTabsequence[label]
&& !label.match(ignorePattern)
&& (!ignoreTabsequenceFocusablePattern || !label.match(ignoreTabsequenceFocusablePattern))
&& label.indexOf(' -> ') === -1;
};

var expected = data.tabsequence.filter(ignored);
var sequence = queryTabsequence({
context: framed.document.body,
includeOnlyTabbable: true,
strategy: 'strict',
}).map(extractLabel).filter(ignored);

expect(sequence).to.deep.equal(expected);
});
});

expect(sequence).to.deep.equal(expected);
};
return suite;
});
});
43 changes: 0 additions & 43 deletions test/unit/core.bundle.test.js

This file was deleted.

62 changes: 33 additions & 29 deletions test/unit/core.worker.test.js
@@ -1,11 +1,11 @@
define(function(require) {
'use strict';

var registerSuite = require('intern!object');
var bdd = require('intern!bdd');
var expect = require('intern/chai!expect');
var TestWorker = require('../helper/test-worker');

registerSuite(function() {
bdd.describe('core: loading in Worker', function() {
var worker;

// because all files are loaded in the same worker,
Expand Down Expand Up @@ -68,41 +68,45 @@ define(function(require) {
'ally.js/ally',
];

var suite = {
name: 'core: WebWorker',
bdd.before(function() {
if (!TestWorker) {
this.skip('Worker not supported');
}

before: function() {
if (!TestWorker) {
return;
}
worker = new TestWorker();
});

worker = new TestWorker();
},
after: function() {
worker && worker.terminate();
worker = null;
},
};
bdd.after(function() {
worker && worker.terminate();
worker = null;
});

function generateTestForModule(module) {
return function() {
if (!worker) {
this.skip('Worker not supported');
}
bdd.describe('for individual modules', function() {
modules.forEach(function(module) {
bdd.it('should load ' + module, function() {
var deferred = this.async(30000);

worker.run(module, function(_module) {
// we only care about the existence
return Boolean(_module);
}).test(deferred, function(_module) {
expect(_module).to.equal(true);
});
});
});
});

bdd.describe('for bundle', function() {
bdd.it('should load dist/ally.min.js', function() {
var deferred = this.async(30000);
worker.run(module, function(_module) {
return Boolean(_module);

worker.run('../../dist/ally.min.js', function(_module) {
return _module.version;
}).test(deferred, function(_module) {
expect(_module).to.equal(true);
expect(_module).to.be.a('string');
});
};
}

modules.forEach(function(module) {
suite['load ' + module] = generateTestForModule(module);
});
});

return suite;
});
});

0 comments on commit 79b04da

Please sign in to comment.