summaryrefslogtreecommitdiffstats
path: root/ecomp-portal-FE/client/bower_components/lodash/vendor/underscore/test/cross-document.js
blob: cb68a3d9b8be844f884679b6169b68545a9781eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
(function() {
  if (typeof document == 'undefined') return;

  var _ = typeof require == 'function' ? require('..') : window._;

  QUnit.module('Cross Document');
  /* global iObject, iElement, iArguments, iFunction, iArray, iError, iString, iNumber, iBoolean, iDate, iRegExp, iNaN, iNull, iUndefined, ActiveXObject */

  // Setup remote variables for iFrame tests.
  var iframe = document.createElement('iframe');
  iframe.frameBorder = iframe.height = iframe.width = 0;
  document.body.appendChild(iframe);
  var iDoc = (iDoc = iframe.contentDocument || iframe.contentWindow).document || iDoc;
  iDoc.write(
    [
      '<script>',
      'parent.iElement = document.createElement("div");',
      'parent.iArguments = (function(){ return arguments; })(1, 2, 3);',
      'parent.iArray = [1, 2, 3];',
      'parent.iString = new String("hello");',
      'parent.iNumber = new Number(100);',
      'parent.iFunction = (function(){});',
      'parent.iDate = new Date();',
      'parent.iRegExp = /hi/;',
      'parent.iNaN = NaN;',
      'parent.iNull = null;',
      'parent.iBoolean = new Boolean(false);',
      'parent.iUndefined = undefined;',
      'parent.iObject = {};',
      'parent.iError = new Error();',
      '</script>'
    ].join('\n')
  );
  iDoc.close();

  QUnit.test('isEqual', function(assert) {

    assert.ok(!_.isEqual(iNumber, 101));
    assert.ok(_.isEqual(iNumber, 100));

    // Objects from another frame.
    assert.ok(_.isEqual({}, iObject), 'Objects with equivalent members created in different documents are equal');

    // Array from another frame.
    assert.ok(_.isEqual([1, 2, 3], iArray), 'Arrays with equivalent elements created in different documents are equal');
  });

  QUnit.test('isEmpty', function(assert) {
    assert.ok(!_([iNumber]).isEmpty(), '[1] is not empty');
    assert.ok(!_.isEmpty(iArray), '[] is empty');
    assert.ok(_.isEmpty(iObject), '{} is empty');
  });

  QUnit.test('isElement', function(assert) {
    assert.ok(!_.isElement('div'), 'strings are not dom elements');
    assert.ok(_.isElement(document.body), 'the body tag is a DOM element');
    assert.ok(_.isElement(iElement), 'even from another frame');
  });

  QUnit.test('isArguments', function(assert) {
    assert.ok(_.isArguments(iArguments), 'even from another frame');
  });

  QUnit.test('isObject', function(assert) {
    assert.ok(_.isObject(iElement), 'even from another frame');
    assert.ok(_.isObject(iFunction), 'even from another frame');
  });

  QUnit.test('isArray', function(assert) {
    assert.ok(_.isArray(iArray), 'even from another frame');
  });

  QUnit.test('isString', function(assert) {
    assert.ok(_.isString(iString), 'even from another frame');
  });

  QUnit.test('isNumber', function(assert) {
    assert.ok(_.isNumber(iNumber), 'even from another frame');
  });

  QUnit.test('isBoolean', function(assert) {
    assert.ok(_.isBoolean(iBoolean), 'even from another frame');
  });

  QUnit.test('isFunction', function(assert) {
    assert.ok(_.isFunction(iFunction), 'even from another frame');
  });

  QUnit.test('isDate', function(assert) {
    assert.ok(_.isDate(iDate), 'even from another frame');
  });

  QUnit.test('isRegExp', function(assert) {
    assert.ok(_.isRegExp(iRegExp), 'even from another frame');
  });

  QUnit.test('isNaN', function(assert) {
    assert.ok(_.isNaN(iNaN), 'even from another frame');
  });

  QUnit.test('isNull', function(assert) {
    assert.ok(_.isNull(iNull), 'even from another frame');
  });

  QUnit.test('isUndefined', function(assert) {
    assert.ok(_.isUndefined(iUndefined), 'even from another frame');
  });

  QUnit.test('isError', function(assert) {
    assert.ok(_.isError(iError), 'even from another frame');
  });

  if (typeof ActiveXObject != 'undefined') {
    QUnit.test('IE host objects', function(assert) {
      var xml = new ActiveXObject('Msxml2.DOMDocument.3.0');
      assert.ok(!_.isNumber(xml));
      assert.ok(!_.isBoolean(xml));
      assert.ok(!_.isNaN(xml));
      assert.ok(!_.isFunction(xml));
      assert.ok(!_.isNull(xml));
      assert.ok(!_.isUndefined(xml));
    });

    QUnit.test('#1621 IE 11 compat mode DOM elements are not functions', function(assert) {
      var fn = function() {};
      var xml = new ActiveXObject('Msxml2.DOMDocument.3.0');
      var div = document.createElement('div');

      // JIT the function
      var count = 200;
      while (count--) {
        _.isFunction(fn);
      }

      assert.equal(_.isFunction(xml), false);
      assert.equal(_.isFunction(div), false);
      assert.equal(_.isFunction(fn), true);
    });
  }

}());