| /** | |
|  * Loop through all entries in our user agents object and test everything. | |
|  * | |
|  * @see  src/useragents.js | |
|  * @author hannes.diercks@jimdo.com | |
|  */ | |
| 
 | |
| var g | |
|   , ua | |
|   , p | |
|   , assert = require('assert') | |
|   , browser = require('../src/bowser') | |
|   , allUserAgents = require('../src/useragents').useragents | |
| 
 | |
| /** | |
|  * Get the length of an object. | |
|  * http://stackoverflow.com/questions/5223/length-of-javascript-object-ie-associative-array | |
|  * | |
|  * @param  {Object} obj | |
|  * @return {Number} | |
|  */ | |
| function objLength(obj) { | |
|   var size = 0 | |
|     , key | |
|   for (key in obj) { | |
|     if (obj.hasOwnProperty(key)) size++ | |
|   } | |
|   return size | |
| } | |
| 
 | |
| function objKeys(obj) { | |
|   var keys = [] | |
|     , key | |
|   for (key in obj) { | |
|     if (obj.hasOwnProperty(key)) { | |
|       keys.push(key) | |
|     } | |
|   } | |
|   keys.sort(); | |
|   return keys.join(', ') | |
| } | |
| 
 | |
| /* Groups */ | |
| for (g in allUserAgents) { (function(group, userAgents) { | |
|   describe(group, function() { | |
| 
 | |
|     /* User Agents */ | |
|     for (ua in userAgents) { (function(userAgent, expections) { | |
|       describe('user agent "' + userAgent + '"', function() { | |
| 
 | |
|         expections.name = group | |
| 
 | |
|         /* Get the result from bowser. */ | |
|         var result = browser._detect(userAgent) | |
| 
 | |
|         /* At first, check if the result has the correct length. */ | |
|         it('should have ' + objLength(expections) + ' properties', function() { | |
|           assert.equal(objKeys(result), objKeys(expections)) | |
|         }) | |
| 
 | |
|         /* Properties */ | |
|         for (p in expections) { (function(property, value, resultValue) { | |
| 
 | |
|           /* Now ensure correctness of every property. */ | |
|           it('\'s Property "' + property + '" should be ' + value, function() { | |
|             assert.equal(resultValue, value) | |
|           }) | |
| 
 | |
|         })(p, expections[p], result[p])} | |
| 
 | |
|       }) | |
|     })(ua, userAgents[ua])} | |
| 
 | |
|   }) | |
| })(g, allUserAgents[g])} | |
| 
 | |
| var comparisionsTasks = [ | |
|   ['9.0', '10', -1], | |
|   ['11', '10', 1], | |
|   ['1.10.2.1',  '1.8.2.1.90', 1], | |
|   ['1.010.2.1', '1.08.2.1.90', 1], | |
|   ['1.10.2.1', '1.10.2.1', 0], | |
|   ['1.10.2.1', '1.0800.2', -1], | |
|   ['1.0.0-alpha', '1.0.0-alpha.1', -1], | |
|   ['1.0.0-alpha.1', '1.0.0-alpha.beta', -1], | |
|   ['1.0.0-alpha.beta', '1.0.0-beta', -1], | |
|   ['1.0.0-beta', '1.0.0-beta.2', -1], | |
|   ['1.0.0-beta.11', '1.0.0-rc.1', -1], | |
|   ['1.0.0-rc.1', '1.0.0', -1] | |
| ]; | |
| 
 | |
| describe('Browser versions comparision', function() { | |
|   for(g in comparisionsTasks) { | |
|     var task = comparisionsTasks[g], | |
|         version = task[0], | |
|         version2 = task[1], | |
|         matching = task[2] === 0 ? ' == ' : (task[2] > 0) ? ' > ' : ' < '; | |
|     it('version ' + version + ' should be' + matching + 'version ' + version2, function(){ | |
|       assert.equal(browser.compareVersions([version, version2]), task[2]); | |
|     }); | |
|   } | |
| }); | |
| 
 | |
| describe('Unsupported browser check', function() { | |
| 
 | |
|   before(function() { | |
|     this.ie10_6 = "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0"; | |
|   }); | |
| 
 | |
|   it('should be passed by #isUnsupportedBrowser for IE10.6 and for IE10 miminal version specified', function() { | |
|     var unsupported = browser.isUnsupportedBrowser({msie: "10"}, this.ie10_6); | |
|     assert.equal(unsupported, false); | |
|   }); | |
| 
 | |
|   it('should be passed by #isUnsupportedBrowser for IE10.6 and for IE10 miminal version specified in strict mode', function() { | |
|     var unsupported = browser.isUnsupportedBrowser({msie: "10"}, true, this.ie10_6); | |
|     assert.equal(unsupported, false); | |
|   }); | |
| 
 | |
|   it('should NOT be passed by #isUnsupportedBrowser for IE10.6 and for IE10 miminal version specified in strict mode', function() { | |
|     var isUnsupported = browser.isUnsupportedBrowser({msie: "11"}, true, this.ie10_6); | |
|     assert.equal(isUnsupported, true); | |
|   }); | |
| 
 | |
|   it('should NOT be passed by #check for IE10.6 and for IE11 miminal version specified', function() { | |
|     var supported = browser.check({msie: "11"}, this.ie10_6); | |
|     assert.equal(supported, false); | |
|   }); | |
| 
 | |
|   it('should NOT be passed by #check for IE10.6 and for IE11 miminal version specified in strict mode', function() { | |
|     var supported = browser.check({msie: "11"}, true, this.ie10_6); | |
|     assert.equal(supported, false); | |
|   }); | |
| 
 | |
|   it('should throw an error when minVersion map has a number, but not a string', function() { | |
|     assert.throws(() => { | |
|       browser.check({msie: 11}, this.ie10_6); | |
|     }, /Browser version in the minVersion map should be a string/); | |
|   }); | |
| 
 | |
|   it('should be passed by #check for IE10.6 when version was not specified', function() { | |
|     var supported = browser.check({}, this.ie10_6); | |
|     assert.equal(supported, true); | |
|   }); | |
| 
 | |
|   it('should NOT be passed by #check for IE10.6 when version was not specified in strict mode', function() { | |
|     var supported = browser.check({}, true, this.ie10_6); | |
|     assert.equal(supported, false); | |
|   }); | |
| 
 | |
| })
 |