1(function() { 2 if (typeof document == 'undefined') return; 3 4 var _ = typeof require == 'function' ? require('..') : window._; 5 6 QUnit.module('Cross Document'); 7 /* global iObject, iElement, iArguments, iFunction, iArray, iError, iString, iNumber, iBoolean, iDate, iRegExp, iNaN, iNull, iUndefined, ActiveXObject */ 8 9 // Setup remote variables for iFrame tests. 10 var iframe = document.createElement('iframe'); 11 iframe.frameBorder = iframe.height = iframe.width = 0; 12 document.body.appendChild(iframe); 13 var iDoc = (iDoc = iframe.contentDocument || iframe.contentWindow).document || iDoc; 14 iDoc.write( 15 [ 16 '<script>', 17 'parent.iElement = document.createElement("div");', 18 'parent.iArguments = (function(){ return arguments; })(1, 2, 3);', 19 'parent.iArray = [1, 2, 3];', 20 'parent.iString = new String("hello");', 21 'parent.iNumber = new Number(100);', 22 'parent.iFunction = (function(){});', 23 'parent.iDate = new Date();', 24 'parent.iRegExp = /hi/;', 25 'parent.iNaN = NaN;', 26 'parent.iNull = null;', 27 'parent.iBoolean = new Boolean(false);', 28 'parent.iUndefined = undefined;', 29 'parent.iObject = {};', 30 'parent.iError = new Error();', 31 '</script>' 32 ].join('\n') 33 ); 34 iDoc.close(); 35 36 QUnit.test('isEqual', function(assert) { 37 38 assert.notOk(_.isEqual(iNumber, 101)); 39 assert.ok(_.isEqual(iNumber, 100)); 40 41 // Objects from another frame. 42 assert.ok(_.isEqual({}, iObject), 'Objects with equivalent members created in different documents are equal'); 43 44 // Array from another frame. 45 assert.ok(_.isEqual([1, 2, 3], iArray), 'Arrays with equivalent elements created in different documents are equal'); 46 }); 47 48 QUnit.test('isEmpty', function(assert) { 49 assert.notOk(_([iNumber]).isEmpty(), '[1] is not empty'); 50 assert.notOk(_.isEmpty(iArray), '[] is empty'); 51 assert.ok(_.isEmpty(iObject), '{} is empty'); 52 }); 53 54 QUnit.test('isElement', function(assert) { 55 assert.notOk(_.isElement('div'), 'strings are not dom elements'); 56 assert.ok(_.isElement(document.body), 'the body tag is a DOM element'); 57 assert.ok(_.isElement(iElement), 'even from another frame'); 58 }); 59 60 QUnit.test('isArguments', function(assert) { 61 assert.ok(_.isArguments(iArguments), 'even from another frame'); 62 }); 63 64 QUnit.test('isObject', function(assert) { 65 assert.ok(_.isObject(iElement), 'even from another frame'); 66 assert.ok(_.isObject(iFunction), 'even from another frame'); 67 }); 68 69 QUnit.test('isArray', function(assert) { 70 assert.ok(_.isArray(iArray), 'even from another frame'); 71 }); 72 73 QUnit.test('isString', function(assert) { 74 assert.ok(_.isString(iString), 'even from another frame'); 75 }); 76 77 QUnit.test('isNumber', function(assert) { 78 assert.ok(_.isNumber(iNumber), 'even from another frame'); 79 }); 80 81 QUnit.test('isBoolean', function(assert) { 82 assert.ok(_.isBoolean(iBoolean), 'even from another frame'); 83 }); 84 85 QUnit.test('isFunction', function(assert) { 86 assert.ok(_.isFunction(iFunction), 'even from another frame'); 87 }); 88 89 QUnit.test('isDate', function(assert) { 90 assert.ok(_.isDate(iDate), 'even from another frame'); 91 }); 92 93 QUnit.test('isRegExp', function(assert) { 94 assert.ok(_.isRegExp(iRegExp), 'even from another frame'); 95 }); 96 97 QUnit.test('isNaN', function(assert) { 98 assert.ok(_.isNaN(iNaN), 'even from another frame'); 99 }); 100 101 QUnit.test('isNull', function(assert) { 102 assert.ok(_.isNull(iNull), 'even from another frame'); 103 }); 104 105 QUnit.test('isUndefined', function(assert) { 106 assert.ok(_.isUndefined(iUndefined), 'even from another frame'); 107 }); 108 109 QUnit.test('isError', function(assert) { 110 assert.ok(_.isError(iError), 'even from another frame'); 111 }); 112 113 if (typeof ActiveXObject != 'undefined') { 114 QUnit.test('IE host objects', function(assert) { 115 var xml = new ActiveXObject('Msxml2.DOMDocument.3.0'); 116 assert.notOk(_.isNumber(xml)); 117 assert.notOk(_.isBoolean(xml)); 118 assert.notOk(_.isNaN(xml)); 119 assert.notOk(_.isFunction(xml)); 120 assert.notOk(_.isNull(xml)); 121 assert.notOk(_.isUndefined(xml)); 122 }); 123 124 QUnit.test('#1621 IE 11 compat mode DOM elements are not functions', function(assert) { 125 var fn = function() {}; 126 var xml = new ActiveXObject('Msxml2.DOMDocument.3.0'); 127 var div = document.createElement('div'); 128 129 // JIT the function 130 var count = 200; 131 while (count--) { 132 _.isFunction(fn); 133 } 134 135 assert.equal(_.isFunction(xml), false); 136 assert.equal(_.isFunction(div), false); 137 assert.equal(_.isFunction(fn), true); 138 }); 139 } 140 141}()); 142