debian-mirror-gitlab/snowplow-javascript-tracker/tests/functional/detectors.js
2020-04-13 14:06:41 +05:30

201 lines
6.7 KiB
JavaScript

/*
* JavaScript tracker for Snowplow: tests/functional/detectors.js
*
* Significant portions copyright 2010 Anthon Pang. Remainder copyright
* 2012-2014 Snowplow Analytics Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Anthon Pang nor Snowplow Analytics Ltd nor the
* names of their contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
define([
'intern!object',
'intern/chai!assert'
], function(registerSuite, assert) {
var
// Expected viewport dimensions vary based on browser
expectedViewportWidths = [
996,
1008, // Windows 8, Windows 8.1
1016, // Linux, Firefox 27
1014, // Windows 7, Chrome 32
1022,
1024, // Windows 7, IE 9, Firefox 27; Mac OS, Safari
1020 // Windows 8, Windows 8.1
],
expectedViewportHeights = [
660, // Firefox 27.0, Linux
632, // Firefox 27.0, Linux
658, // Firefox 27.0, Windows 7
666,
670, // Safari 6/7
687, // Windows 7, IE 9
694, // Chrome 32, Windows 7 - 707
695, // Windows 7, IE 9
686, // Chrome 32, Linux - 686
705, // Windows 8/8.1
717 // Windows 8/8.1
],
// User fingerprint varies based on browser features
// TODO: try to hash this off the useragent -
// i.e. formal 1:1 relationship between viewport or signature and an individual browser
expectedSignatures = [
1587753772, // IE9, Windows 7
1101697779, // IE10, Windows 8
645783373, // IE11, Windows 8
580945094, // Firefox 27.0, Windows 7
1382842778, // Firefox 27.0, Linux
1727588738, // Chrome 32.0, Windows 7
3978691790, // Chrome 32.0, Linux
3552180943, // Safari 7, OS X 10.9
812921052 // Safari 6.2.7 Mac OS X 10.8
];
registerSuite({
name: 'Detectors test',
// These tests don't work as intended.
// I tend to blame SauceLabs on this, because it can fail on one of two subsequent runs
// on equal environments, while these functions are fully deterministic.
//
// 'Get viewport dimensions': function() {
//
// return this.remote
// .get(require.toUrl('tests/pages/detectors.html'))
// .setFindTimeout(5000)
// .setWindowSize(1024, 768)
// .findByCssSelector('body.loaded')
// .findById('detectViewport')
// .getVisibleText()
// .then(function (text) {
// var dimensions = text.split('x');
// assert.include(expectedViewportWidths, parseInt(dimensions[0]), 'Viewport width is valid');
// assert.include(expectedViewportHeights, parseInt(dimensions[1]), 'Viewport height is valid');
// });
// },
//
// 'Detect document size': function () {
// return this.remote
// .get(require.toUrl('tests/pages/detectors.html'))
// .setFindTimeout(5000)
// .setWindowSize(1024, 768)
// .findByCssSelector('body.loaded')
// .findById('detectDocumentDimensions')
// .getVisibleText()
// .then(function (text) {
// var dimensions = text.split('x');
// assert.include(expectedViewportWidths, parseInt(dimensions[0]), 'Document width is valid');
// assert.include(expectedViewportHeights, parseInt(dimensions[1]), 'Document height is valid');
// });
// },
//
// 'User fingerprinting': function() {
//
// return this.remote
// .get(require.toUrl('tests/pages/detectors.html'))
// .setFindTimeout(5000)
// .setWindowSize(1024, 768)
// .findByCssSelector('body.loaded')
// .findById('detectSignature')
// .getVisibleText()
// .then(function (text) {
// assert.include(expectedSignatures, parseInt(text), 'Create a user fingerprint based on browser features');
// });
// },
'Check localStorage availability': function() {
return this.remote
.get(require.toUrl('tests/pages/detectors.html'))
.setFindTimeout(5000)
.findByCssSelector('body.loaded')
.findById('localStorageAccessible')
.getVisibleText()
.then(function (text) {
assert.strictEqual(text, 'true', 'Detect localStorage accessibility');
});
},
'Check sessionStorage availability': function() {
return this.remote
.get(require.toUrl('tests/pages/detectors.html'))
.setFindTimeout(5000)
.findByCssSelector('body.loaded')
.findById('hasSessionStorage')
.getVisibleText()
.then(function (text) {
assert.strictEqual(text, 'true', 'Detect sessionStorage');
});
},
'Check whether cookies are enabled': function() {
return this.remote
.get(require.toUrl('tests/pages/detectors.html'))
.setFindTimeout(5000)
.findByCssSelector('body.loaded')
.findById('hasCookies')
.getVisibleText()
.then(function (text) {
assert.equal(text, '1', 'Detect whether cookies can be set');
});
},
'Detect timezone': function() {
return this.remote
.get(require.toUrl('tests/pages/detectors.html'))
.setFindTimeout(5000)
.findByCssSelector('body.loaded')
.findById('detectTimezone')
.getVisibleText()
.then(function (text) {
assert.include(['UTC', 'America/Los_Angeles'], text, 'Detect the timezone');
});
},
'Browser features': function() {
return this.remote
.get(require.toUrl('tests/pages/detectors.html'))
.setFindTimeout(5000)
.findByCssSelector('body.loaded')
.findById('detectBrowserFeatures')
.getVisibleText()
.then(function (text) {
var features = JSON.parse(text);
// The only features which are the same for all tested browsers
assert.equal('1', features.java, 'Detect Java');
assert.equal(24, features.cd, 'Detect color depth');
});
}
});
});