ende 0.5.20 → 0.5.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/component.json +1 -1
- data/components/indefinido/indemma/master/.gitignore +17 -0
- data/components/indefinido/indemma/master/.ruby-gemset +1 -0
- data/components/indefinido/indemma/master/.ruby-version +1 -0
- data/components/indefinido/indemma/master/Gemfile +12 -0
- data/components/indefinido/indemma/master/Guardfile +39 -0
- data/components/indefinido/indemma/master/History.md +0 -0
- data/components/indefinido/indemma/master/Readme.md +445 -0
- data/components/indefinido/indemma/master/build/development.js +26123 -0
- data/components/indefinido/indemma/master/build/release.js +16741 -0
- data/components/indefinido/indemma/master/build/test.js +26123 -0
- data/components/indefinido/indemma/master/component.json +1 -1
- data/components/indefinido/indemma/master/components/chaijs/assertion-error/1.0.0/component.json +18 -0
- data/components/indefinido/indemma/master/components/chaijs/assertion-error/1.0.0/index.js +110 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.gitignore +22 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.mailmap +1 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.npmignore +14 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/.travis.yml +14 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/CONTRIBUTING.md +173 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/History.md +895 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/Makefile +93 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/README.md +99 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/ReleaseNotes.md +482 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/bower.json +27 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/chai.js +4782 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/component.json +50 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/index.js +1 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/karma.conf.js +28 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/karma.sauce.js +41 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/assertion.js +130 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/config.js +50 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/core/assertions.js +1314 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/assert.js +1056 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/expect.js +12 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/interface/should.js +78 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addChainableMethod.js +111 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addMethod.js +43 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/addProperty.js +40 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/flag.js +32 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getActual.js +18 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getEnumerableProperties.js +25 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getMessage.js +49 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getName.js +20 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getPathValue.js +102 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/getProperties.js +35 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/index.js +114 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/inspect.js +320 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/objDisplay.js +49 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteChainableMethod.js +53 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteMethod.js +51 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/overwriteProperty.js +54 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/test.js +26 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/transferFlags.js +44 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai/utils/type.js +45 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/lib/chai.js +87 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/package.json +42 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/sauce.browsers.js +128 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/support/sauce/sauce_connect_block.sh +7 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/support/sauce/sauce_connect_setup.sh +53 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/assert.js +638 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/auth/.gitkeep +0 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/bootstrap/index.js +22 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/bootstrap/karma.js +22 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/configuration.js +133 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/display/errors.js +14 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/display/message.js +47 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/expect.js +814 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/globalShould.js +15 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/plugins.js +24 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/should.js +744 -0
- data/components/indefinido/indemma/master/components/chaijs/chai/1.9.1/test/utilities.js +309 -0
- data/components/indefinido/indemma/master/components/chaijs/deep-eql/0.1.3/component.json +20 -0
- data/components/indefinido/indemma/master/components/chaijs/deep-eql/0.1.3/lib/eql.js +257 -0
- data/components/indefinido/indemma/master/components/chaijs/type-detect/0.1.1/component.json +18 -0
- data/components/indefinido/indemma/master/components/chaijs/type-detect/0.1.1/lib/type.js +142 -0
- data/components/indefinido/indemma/master/components/component/bind/1.0.0/component.json +14 -0
- data/components/indefinido/indemma/master/components/component/bind/1.0.0/index.js +23 -0
- data/components/indefinido/indemma/master/components/component/jquery/1.0.0/component.json +10 -0
- data/components/indefinido/indemma/master/components/component/jquery/1.0.0/index.js +10308 -0
- data/components/indefinido/indemma/master/components/component/type/1.0.0/component.json +20 -0
- data/components/indefinido/indemma/master/components/component/type/1.0.0/index.js +32 -0
- data/components/indefinido/indemma/master/components/indefinido/advisable/master/component.json +21 -0
- data/components/indefinido/indemma/master/components/indefinido/advisable/master/index.js +1 -0
- data/components/indefinido/indemma/master/components/indefinido/advisable/master/lib/advisable.js +60 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/component.json +39 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/index.js +1 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/adapters/rivets.js +40 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/legacy/notifierable.js +145 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/legacy/schedulerable.js +147 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/lookup.js +38 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/keypath_observer.js +38 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/observation.js +45 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/selection.js +57 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable/self_observer.js +38 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/observable.js +97 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/lib/platform.js +12 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/observe-js/observe.js +1631 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/accessors-legacy.js +92 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/accessors.js +248 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/array.indexOf.js +8 -0
- data/components/indefinido/indemma/master/components/indefinido/observable/es6-modules/vendor/shims/object.create.js +77 -0
- data/components/indefinido/indemma/master/components/pluma/assimilate/0.4.0/component.json +25 -0
- data/components/indefinido/indemma/master/components/pluma/assimilate/0.4.0/dist/assimilate.js +127 -0
- data/components/indefinido/indemma/master/karma.conf.js +75 -0
- data/components/indefinido/indemma/master/lib/record/associable.js +4 -2
- data/components/indefinido/indemma/master/lib/record/dirtyable.js +1 -1
- data/components/indefinido/indemma/master/package.json +9 -0
- data/components/indefinido/indemma/master/spec/record/associable_spec.js +211 -0
- data/components/indefinido/indemma/master/spec/record/dirtyable_spec.js +57 -0
- data/components/indefinido/indemma/master/spec/record/maid_spec.js +40 -0
- data/components/indefinido/indemma/master/spec/record/persistable_spec.js +46 -0
- data/components/indefinido/indemma/master/spec/record/queryable_spec.js +39 -0
- data/components/indefinido/indemma/master/spec/record/resource_spec.js +93 -0
- data/components/indefinido/indemma/master/spec/record/rest_spec.js +32 -0
- data/components/indefinido/indemma/master/spec/record/restfulable_spec.js +346 -0
- data/components/indefinido/indemma/master/spec/record/scopable_spec.js +242 -0
- data/components/indefinido/indemma/master/spec/record/storable_spec.js +44 -0
- data/components/indefinido/indemma/master/spec/record/translationable.js +28 -0
- data/components/indefinido/indemma/master/spec/record/validatable_spec.js +142 -0
- data/components/indefinido/indemma/master/spec/record/validations/associated_spec.js +43 -0
- data/components/indefinido/indemma/master/spec/record/validations/confirmation_spec.js +36 -0
- data/components/indefinido/indemma/master/spec/record/validations/cpf_spec.js +34 -0
- data/components/indefinido/indemma/master/spec/record/validations/presence_spec.js +28 -0
- data/components/indefinido/indemma/master/spec/record/validations/remote_spec.js +87 -0
- data/components/indefinido/indemma/master/spec/record/validations/type_spec.js +48 -0
- data/components/indefinido/indemma/master/spec/record_spec.js +49 -0
- data/components/indefinido/indemma/master/spec/spec_helper.js +15 -0
- data/components/indefinido/indemma/master/spec/support/value_objects/phone.js +45 -0
- data/components/indefinido/indemma/master/src/lib/extensions/rivets.coffee +17 -0
- data/components/indefinido/indemma/master/src/lib/record/associable.coffee +419 -0
- data/components/indefinido/indemma/master/src/lib/record/dirtyable.coffee +47 -0
- data/components/indefinido/indemma/master/src/lib/record/errors.coffee +20 -0
- data/components/indefinido/indemma/master/src/lib/record/maid.coffee +16 -0
- data/components/indefinido/indemma/master/src/lib/record/persistable.coffee +34 -0
- data/components/indefinido/indemma/master/src/lib/record/queryable.coffee +29 -0
- data/components/indefinido/indemma/master/src/lib/record/resource.coffee +107 -0
- data/components/indefinido/indemma/master/src/lib/record/rest.coffee +34 -0
- data/components/indefinido/indemma/master/src/lib/record/restfulable.coffee +487 -0
- data/components/indefinido/indemma/master/src/lib/record/scopable.coffee +279 -0
- data/components/indefinido/indemma/master/src/lib/record/storable.coffee +49 -0
- data/components/indefinido/indemma/master/src/lib/record/translationable.coffee +18 -0
- data/components/indefinido/indemma/master/src/lib/record/validatable.coffee +241 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/associated.coffee +34 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/confirmation.coffee +17 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/cpf.coffee +57 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/presence.coffee +16 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/remote.coffee +61 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/type.coffee +31 -0
- data/components/indefinido/indemma/master/src/lib/record/validations/validatorable.coffee +5 -0
- data/components/indefinido/indemma/master/src/lib/record.coffee +143 -0
- data/components/indefinido/indemma/master/src/spec/record/associable_spec.coffee +205 -0
- data/components/indefinido/indemma/master/src/spec/record/dirtyable_spec.coffee +47 -0
- data/components/indefinido/indemma/master/src/spec/record/maid_spec.coffee +34 -0
- data/components/indefinido/indemma/master/src/spec/record/persistable_spec.coffee +39 -0
- data/components/indefinido/indemma/master/src/spec/record/queryable_spec.coffee +33 -0
- data/components/indefinido/indemma/master/src/spec/record/resource_spec.coffee +69 -0
- data/components/indefinido/indemma/master/src/spec/record/rest_spec.coffee +22 -0
- data/components/indefinido/indemma/master/src/spec/record/restfulable_spec.coffee +257 -0
- data/components/indefinido/indemma/master/src/spec/record/scopable_spec.coffee +227 -0
- data/components/indefinido/indemma/master/src/spec/record/storable_spec.coffee +39 -0
- data/components/indefinido/indemma/master/src/spec/record/translationable.coffee +19 -0
- data/components/indefinido/indemma/master/src/spec/record/validatable_spec.coffee +127 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/associated_spec.coffee +35 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/confirmation_spec.coffee +25 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/cpf_spec.coffee +27 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/presence_spec.coffee +24 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/remote_spec.coffee +74 -0
- data/components/indefinido/indemma/master/src/spec/record/validations/type_spec.coffee +33 -0
- data/components/indefinido/indemma/master/src/spec/record_spec.coffee +29 -0
- data/components/indefinido/indemma/master/src/spec/spec_helper.coffee +11 -0
- data/components/indefinido/indemma/master/src/spec/support/value_objects/phone.coffee +30 -0
- data/components/indefinido/indemma/master/vendor/object/mixin.js +196 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/assert.js +199 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/behavior.js +334 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/call.js +205 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/collection.js +155 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/match.js +245 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/mock.js +451 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/sandbox.js +144 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/spy.js +413 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/stub.js +161 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/test.js +77 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/test_case.js +99 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/event.js +94 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_server.js +212 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_server_with_clock.js +83 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_timers.js +405 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_xdomain_request.js +206 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/fake_xml_http_request.js +575 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/timers_ie.js +31 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/xdr_ie.js +14 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon/util/xhr_ie.js +19 -0
- data/components/indefinido/indemma/master/vendor/spec/sinon.js +383 -0
- data/lib/assets/javascripts/value_objects/phone.js.coffee +3 -1
- data/lib/assets/javascripts/widgets/viewer/plugins/scopable.js.coffee +5 -5
- data/lib/ende/version.rb +1 -1
- data/vendor/assets/components/ende_build.css +4 -4
- data/vendor/assets/components/ende_build.js +7974 -7889
- metadata +191 -5
- data/vendor/assets/component/build.css +0 -112
- data/vendor/assets/components/build.css +0 -112
- data/vendor/assets/components/indemma_with_none.js +0 -30553
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @depend ../../sinon.js
|
|
3
|
+
* @depend event.js
|
|
4
|
+
*/
|
|
5
|
+
/*jslint eqeqeq: false, onevar: false*/
|
|
6
|
+
/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
|
|
7
|
+
/**
|
|
8
|
+
* Fake XMLHttpRequest object
|
|
9
|
+
*
|
|
10
|
+
* @author Christian Johansen (christian@cjohansen.no)
|
|
11
|
+
* @license BSD
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
|
14
|
+
*/
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
// wrapper for global
|
|
18
|
+
(function(global) {
|
|
19
|
+
if (typeof sinon === "undefined") {
|
|
20
|
+
global.sinon = {};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var supportsProgress = typeof ProgressEvent !== "undefined";
|
|
24
|
+
var supportsCustomEvent = typeof CustomEvent !== "undefined";
|
|
25
|
+
sinon.xhr = { XMLHttpRequest: global.XMLHttpRequest };
|
|
26
|
+
var xhr = sinon.xhr;
|
|
27
|
+
xhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
|
|
28
|
+
xhr.GlobalActiveXObject = global.ActiveXObject;
|
|
29
|
+
xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined";
|
|
30
|
+
xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined";
|
|
31
|
+
xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX
|
|
32
|
+
? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
|
|
33
|
+
xhr.supportsCORS = 'withCredentials' in (new sinon.xhr.GlobalXMLHttpRequest());
|
|
34
|
+
|
|
35
|
+
/*jsl:ignore*/
|
|
36
|
+
var unsafeHeaders = {
|
|
37
|
+
"Accept-Charset": true,
|
|
38
|
+
"Accept-Encoding": true,
|
|
39
|
+
"Connection": true,
|
|
40
|
+
"Content-Length": true,
|
|
41
|
+
"Cookie": true,
|
|
42
|
+
"Cookie2": true,
|
|
43
|
+
"Content-Transfer-Encoding": true,
|
|
44
|
+
"Date": true,
|
|
45
|
+
"Expect": true,
|
|
46
|
+
"Host": true,
|
|
47
|
+
"Keep-Alive": true,
|
|
48
|
+
"Referer": true,
|
|
49
|
+
"TE": true,
|
|
50
|
+
"Trailer": true,
|
|
51
|
+
"Transfer-Encoding": true,
|
|
52
|
+
"Upgrade": true,
|
|
53
|
+
"User-Agent": true,
|
|
54
|
+
"Via": true
|
|
55
|
+
};
|
|
56
|
+
/*jsl:end*/
|
|
57
|
+
|
|
58
|
+
function FakeXMLHttpRequest() {
|
|
59
|
+
this.readyState = FakeXMLHttpRequest.UNSENT;
|
|
60
|
+
this.requestHeaders = {};
|
|
61
|
+
this.requestBody = null;
|
|
62
|
+
this.status = 0;
|
|
63
|
+
this.statusText = "";
|
|
64
|
+
this.upload = new UploadProgress();
|
|
65
|
+
if (sinon.xhr.supportsCORS) {
|
|
66
|
+
this.withCredentials = false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
var xhr = this;
|
|
71
|
+
var events = ["loadstart", "load", "abort", "loadend"];
|
|
72
|
+
|
|
73
|
+
function addEventListener(eventName) {
|
|
74
|
+
xhr.addEventListener(eventName, function (event) {
|
|
75
|
+
var listener = xhr["on" + eventName];
|
|
76
|
+
|
|
77
|
+
if (listener && typeof listener == "function") {
|
|
78
|
+
listener.call(this, event);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
for (var i = events.length - 1; i >= 0; i--) {
|
|
84
|
+
addEventListener(events[i]);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (typeof FakeXMLHttpRequest.onCreate == "function") {
|
|
88
|
+
FakeXMLHttpRequest.onCreate(this);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// An upload object is created for each
|
|
93
|
+
// FakeXMLHttpRequest and allows upload
|
|
94
|
+
// events to be simulated using uploadProgress
|
|
95
|
+
// and uploadError.
|
|
96
|
+
function UploadProgress() {
|
|
97
|
+
this.eventListeners = {
|
|
98
|
+
"progress": [],
|
|
99
|
+
"load": [],
|
|
100
|
+
"abort": [],
|
|
101
|
+
"error": []
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
UploadProgress.prototype.addEventListener = function(event, listener) {
|
|
106
|
+
this.eventListeners[event].push(listener);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
UploadProgress.prototype.removeEventListener = function(event, listener) {
|
|
110
|
+
var listeners = this.eventListeners[event] || [];
|
|
111
|
+
|
|
112
|
+
for (var i = 0, l = listeners.length; i < l; ++i) {
|
|
113
|
+
if (listeners[i] == listener) {
|
|
114
|
+
return listeners.splice(i, 1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
UploadProgress.prototype.dispatchEvent = function(event) {
|
|
120
|
+
var listeners = this.eventListeners[event.type] || [];
|
|
121
|
+
|
|
122
|
+
for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
|
|
123
|
+
listener(event);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
function verifyState(xhr) {
|
|
128
|
+
if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
|
|
129
|
+
throw new Error("INVALID_STATE_ERR");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (xhr.sendFlag) {
|
|
133
|
+
throw new Error("INVALID_STATE_ERR");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// filtering to enable a white-list version of Sinon FakeXhr,
|
|
138
|
+
// where whitelisted requests are passed through to real XHR
|
|
139
|
+
function each(collection, callback) {
|
|
140
|
+
if (!collection) return;
|
|
141
|
+
for (var i = 0, l = collection.length; i < l; i += 1) {
|
|
142
|
+
callback(collection[i]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function some(collection, callback) {
|
|
146
|
+
for (var index = 0; index < collection.length; index++) {
|
|
147
|
+
if(callback(collection[index]) === true) return true;
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
// largest arity in XHR is 5 - XHR#open
|
|
152
|
+
var apply = function(obj,method,args) {
|
|
153
|
+
switch(args.length) {
|
|
154
|
+
case 0: return obj[method]();
|
|
155
|
+
case 1: return obj[method](args[0]);
|
|
156
|
+
case 2: return obj[method](args[0],args[1]);
|
|
157
|
+
case 3: return obj[method](args[0],args[1],args[2]);
|
|
158
|
+
case 4: return obj[method](args[0],args[1],args[2],args[3]);
|
|
159
|
+
case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
FakeXMLHttpRequest.filters = [];
|
|
164
|
+
FakeXMLHttpRequest.addFilter = function(fn) {
|
|
165
|
+
this.filters.push(fn)
|
|
166
|
+
};
|
|
167
|
+
var IE6Re = /MSIE 6/;
|
|
168
|
+
FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) {
|
|
169
|
+
var xhr = new sinon.xhr.workingXHR();
|
|
170
|
+
each(["open","setRequestHeader","send","abort","getResponseHeader",
|
|
171
|
+
"getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"],
|
|
172
|
+
function(method) {
|
|
173
|
+
fakeXhr[method] = function() {
|
|
174
|
+
return apply(xhr,method,arguments);
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
var copyAttrs = function(args) {
|
|
179
|
+
each(args, function(attr) {
|
|
180
|
+
try {
|
|
181
|
+
fakeXhr[attr] = xhr[attr]
|
|
182
|
+
} catch(e) {
|
|
183
|
+
if(!IE6Re.test(navigator.userAgent)) throw e;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
var stateChange = function() {
|
|
189
|
+
fakeXhr.readyState = xhr.readyState;
|
|
190
|
+
if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
|
|
191
|
+
copyAttrs(["status","statusText"]);
|
|
192
|
+
}
|
|
193
|
+
if(xhr.readyState >= FakeXMLHttpRequest.LOADING) {
|
|
194
|
+
copyAttrs(["responseText"]);
|
|
195
|
+
}
|
|
196
|
+
if(xhr.readyState === FakeXMLHttpRequest.DONE) {
|
|
197
|
+
copyAttrs(["responseXML"]);
|
|
198
|
+
}
|
|
199
|
+
if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
|
|
200
|
+
};
|
|
201
|
+
if(xhr.addEventListener) {
|
|
202
|
+
for(var event in fakeXhr.eventListeners) {
|
|
203
|
+
if(fakeXhr.eventListeners.hasOwnProperty(event)) {
|
|
204
|
+
each(fakeXhr.eventListeners[event],function(handler) {
|
|
205
|
+
xhr.addEventListener(event, handler);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
xhr.addEventListener("readystatechange",stateChange);
|
|
210
|
+
} else {
|
|
211
|
+
xhr.onreadystatechange = stateChange;
|
|
212
|
+
}
|
|
213
|
+
apply(xhr,"open",xhrArgs);
|
|
214
|
+
};
|
|
215
|
+
FakeXMLHttpRequest.useFilters = false;
|
|
216
|
+
|
|
217
|
+
function verifyRequestOpened(xhr) {
|
|
218
|
+
if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
|
|
219
|
+
throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function verifyRequestSent(xhr) {
|
|
224
|
+
if (xhr.readyState == FakeXMLHttpRequest.DONE) {
|
|
225
|
+
throw new Error("Request done");
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function verifyHeadersReceived(xhr) {
|
|
230
|
+
if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
|
|
231
|
+
throw new Error("No headers received");
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function verifyResponseBodyType(body) {
|
|
236
|
+
if (typeof body != "string") {
|
|
237
|
+
var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
|
|
238
|
+
body + ", which is not a string.");
|
|
239
|
+
error.name = "InvalidBodyException";
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
|
|
245
|
+
async: true,
|
|
246
|
+
|
|
247
|
+
open: function open(method, url, async, username, password) {
|
|
248
|
+
this.method = method;
|
|
249
|
+
this.url = url;
|
|
250
|
+
this.async = typeof async == "boolean" ? async : true;
|
|
251
|
+
this.username = username;
|
|
252
|
+
this.password = password;
|
|
253
|
+
this.responseText = null;
|
|
254
|
+
this.responseXML = null;
|
|
255
|
+
this.requestHeaders = {};
|
|
256
|
+
this.sendFlag = false;
|
|
257
|
+
if(sinon.FakeXMLHttpRequest.useFilters === true) {
|
|
258
|
+
var xhrArgs = arguments;
|
|
259
|
+
var defake = some(FakeXMLHttpRequest.filters,function(filter) {
|
|
260
|
+
return filter.apply(this,xhrArgs)
|
|
261
|
+
});
|
|
262
|
+
if (defake) {
|
|
263
|
+
return sinon.FakeXMLHttpRequest.defake(this,arguments);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
this.readyStateChange(FakeXMLHttpRequest.OPENED);
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
readyStateChange: function readyStateChange(state) {
|
|
270
|
+
this.readyState = state;
|
|
271
|
+
|
|
272
|
+
if (typeof this.onreadystatechange == "function") {
|
|
273
|
+
try {
|
|
274
|
+
this.onreadystatechange();
|
|
275
|
+
} catch (e) {
|
|
276
|
+
sinon.logError("Fake XHR onreadystatechange handler", e);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
this.dispatchEvent(new sinon.Event("readystatechange"));
|
|
281
|
+
|
|
282
|
+
switch (this.readyState) {
|
|
283
|
+
case FakeXMLHttpRequest.DONE:
|
|
284
|
+
this.dispatchEvent(new sinon.Event("load", false, false, this));
|
|
285
|
+
this.dispatchEvent(new sinon.Event("loadend", false, false, this));
|
|
286
|
+
this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
|
|
287
|
+
if (supportsProgress) {
|
|
288
|
+
this.upload.dispatchEvent(new sinon.ProgressEvent('progress', {loaded: 100, total: 100}));
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
|
|
294
|
+
setRequestHeader: function setRequestHeader(header, value) {
|
|
295
|
+
verifyState(this);
|
|
296
|
+
|
|
297
|
+
if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
|
|
298
|
+
throw new Error("Refused to set unsafe header \"" + header + "\"");
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (this.requestHeaders[header]) {
|
|
302
|
+
this.requestHeaders[header] += "," + value;
|
|
303
|
+
} else {
|
|
304
|
+
this.requestHeaders[header] = value;
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
// Helps testing
|
|
309
|
+
setResponseHeaders: function setResponseHeaders(headers) {
|
|
310
|
+
verifyRequestOpened(this);
|
|
311
|
+
this.responseHeaders = {};
|
|
312
|
+
|
|
313
|
+
for (var header in headers) {
|
|
314
|
+
if (headers.hasOwnProperty(header)) {
|
|
315
|
+
this.responseHeaders[header] = headers[header];
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (this.async) {
|
|
320
|
+
this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
|
|
321
|
+
} else {
|
|
322
|
+
this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
|
|
326
|
+
// Currently treats ALL data as a DOMString (i.e. no Document)
|
|
327
|
+
send: function send(data) {
|
|
328
|
+
verifyState(this);
|
|
329
|
+
|
|
330
|
+
if (!/^(get|head)$/i.test(this.method)) {
|
|
331
|
+
if (this.requestHeaders["Content-Type"]) {
|
|
332
|
+
var value = this.requestHeaders["Content-Type"].split(";");
|
|
333
|
+
this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8";
|
|
334
|
+
} else {
|
|
335
|
+
this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
this.requestBody = data;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
this.errorFlag = false;
|
|
342
|
+
this.sendFlag = this.async;
|
|
343
|
+
this.readyStateChange(FakeXMLHttpRequest.OPENED);
|
|
344
|
+
|
|
345
|
+
if (typeof this.onSend == "function") {
|
|
346
|
+
this.onSend(this);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
|
|
350
|
+
},
|
|
351
|
+
|
|
352
|
+
abort: function abort() {
|
|
353
|
+
this.aborted = true;
|
|
354
|
+
this.responseText = null;
|
|
355
|
+
this.errorFlag = true;
|
|
356
|
+
this.requestHeaders = {};
|
|
357
|
+
|
|
358
|
+
if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) {
|
|
359
|
+
this.readyStateChange(sinon.FakeXMLHttpRequest.DONE);
|
|
360
|
+
this.sendFlag = false;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
|
|
364
|
+
|
|
365
|
+
this.dispatchEvent(new sinon.Event("abort", false, false, this));
|
|
366
|
+
|
|
367
|
+
this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
|
|
368
|
+
|
|
369
|
+
if (typeof this.onerror === "function") {
|
|
370
|
+
this.onerror();
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
getResponseHeader: function getResponseHeader(header) {
|
|
375
|
+
if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (/^Set-Cookie2?$/i.test(header)) {
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
header = header.toLowerCase();
|
|
384
|
+
|
|
385
|
+
for (var h in this.responseHeaders) {
|
|
386
|
+
if (h.toLowerCase() == header) {
|
|
387
|
+
return this.responseHeaders[h];
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
return null;
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
getAllResponseHeaders: function getAllResponseHeaders() {
|
|
395
|
+
if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
|
|
396
|
+
return "";
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
var headers = "";
|
|
400
|
+
|
|
401
|
+
for (var header in this.responseHeaders) {
|
|
402
|
+
if (this.responseHeaders.hasOwnProperty(header) &&
|
|
403
|
+
!/^Set-Cookie2?$/i.test(header)) {
|
|
404
|
+
headers += header + ": " + this.responseHeaders[header] + "\r\n";
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return headers;
|
|
409
|
+
},
|
|
410
|
+
|
|
411
|
+
setResponseBody: function setResponseBody(body) {
|
|
412
|
+
verifyRequestSent(this);
|
|
413
|
+
verifyHeadersReceived(this);
|
|
414
|
+
verifyResponseBodyType(body);
|
|
415
|
+
|
|
416
|
+
var chunkSize = this.chunkSize || 10;
|
|
417
|
+
var index = 0;
|
|
418
|
+
this.responseText = "";
|
|
419
|
+
|
|
420
|
+
do {
|
|
421
|
+
if (this.async) {
|
|
422
|
+
this.readyStateChange(FakeXMLHttpRequest.LOADING);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
this.responseText += body.substring(index, index + chunkSize);
|
|
426
|
+
index += chunkSize;
|
|
427
|
+
} while (index < body.length);
|
|
428
|
+
|
|
429
|
+
var type = this.getResponseHeader("Content-Type");
|
|
430
|
+
|
|
431
|
+
if (this.responseText &&
|
|
432
|
+
(!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
|
|
433
|
+
try {
|
|
434
|
+
this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
|
|
435
|
+
} catch (e) {
|
|
436
|
+
// Unable to parse XML - no biggie
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
if (this.async) {
|
|
441
|
+
this.readyStateChange(FakeXMLHttpRequest.DONE);
|
|
442
|
+
} else {
|
|
443
|
+
this.readyState = FakeXMLHttpRequest.DONE;
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
|
|
447
|
+
respond: function respond(status, headers, body) {
|
|
448
|
+
this.status = typeof status == "number" ? status : 200;
|
|
449
|
+
this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
|
|
450
|
+
this.setResponseHeaders(headers || {});
|
|
451
|
+
this.setResponseBody(body || "");
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
uploadProgress: function uploadProgress(progressEventRaw) {
|
|
455
|
+
if (supportsProgress) {
|
|
456
|
+
this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
|
|
460
|
+
uploadError: function uploadError(error) {
|
|
461
|
+
if (supportsCustomEvent) {
|
|
462
|
+
this.upload.dispatchEvent(new sinon.CustomEvent("error", {"detail": error}));
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
sinon.extend(FakeXMLHttpRequest, {
|
|
468
|
+
UNSENT: 0,
|
|
469
|
+
OPENED: 1,
|
|
470
|
+
HEADERS_RECEIVED: 2,
|
|
471
|
+
LOADING: 3,
|
|
472
|
+
DONE: 4
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// Borrowed from JSpec
|
|
476
|
+
FakeXMLHttpRequest.parseXML = function parseXML(text) {
|
|
477
|
+
var xmlDoc;
|
|
478
|
+
|
|
479
|
+
if (typeof DOMParser != "undefined") {
|
|
480
|
+
var parser = new DOMParser();
|
|
481
|
+
xmlDoc = parser.parseFromString(text, "text/xml");
|
|
482
|
+
} else {
|
|
483
|
+
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
|
|
484
|
+
xmlDoc.async = "false";
|
|
485
|
+
xmlDoc.loadXML(text);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
return xmlDoc;
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
FakeXMLHttpRequest.statusCodes = {
|
|
492
|
+
100: "Continue",
|
|
493
|
+
101: "Switching Protocols",
|
|
494
|
+
200: "OK",
|
|
495
|
+
201: "Created",
|
|
496
|
+
202: "Accepted",
|
|
497
|
+
203: "Non-Authoritative Information",
|
|
498
|
+
204: "No Content",
|
|
499
|
+
205: "Reset Content",
|
|
500
|
+
206: "Partial Content",
|
|
501
|
+
300: "Multiple Choice",
|
|
502
|
+
301: "Moved Permanently",
|
|
503
|
+
302: "Found",
|
|
504
|
+
303: "See Other",
|
|
505
|
+
304: "Not Modified",
|
|
506
|
+
305: "Use Proxy",
|
|
507
|
+
307: "Temporary Redirect",
|
|
508
|
+
400: "Bad Request",
|
|
509
|
+
401: "Unauthorized",
|
|
510
|
+
402: "Payment Required",
|
|
511
|
+
403: "Forbidden",
|
|
512
|
+
404: "Not Found",
|
|
513
|
+
405: "Method Not Allowed",
|
|
514
|
+
406: "Not Acceptable",
|
|
515
|
+
407: "Proxy Authentication Required",
|
|
516
|
+
408: "Request Timeout",
|
|
517
|
+
409: "Conflict",
|
|
518
|
+
410: "Gone",
|
|
519
|
+
411: "Length Required",
|
|
520
|
+
412: "Precondition Failed",
|
|
521
|
+
413: "Request Entity Too Large",
|
|
522
|
+
414: "Request-URI Too Long",
|
|
523
|
+
415: "Unsupported Media Type",
|
|
524
|
+
416: "Requested Range Not Satisfiable",
|
|
525
|
+
417: "Expectation Failed",
|
|
526
|
+
422: "Unprocessable Entity",
|
|
527
|
+
500: "Internal Server Error",
|
|
528
|
+
501: "Not Implemented",
|
|
529
|
+
502: "Bad Gateway",
|
|
530
|
+
503: "Service Unavailable",
|
|
531
|
+
504: "Gateway Timeout",
|
|
532
|
+
505: "HTTP Version Not Supported"
|
|
533
|
+
};
|
|
534
|
+
|
|
535
|
+
sinon.useFakeXMLHttpRequest = function () {
|
|
536
|
+
sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
|
|
537
|
+
if (xhr.supportsXHR) {
|
|
538
|
+
global.XMLHttpRequest = xhr.GlobalXMLHttpRequest;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
if (xhr.supportsActiveX) {
|
|
542
|
+
global.ActiveXObject = xhr.GlobalActiveXObject;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
delete sinon.FakeXMLHttpRequest.restore;
|
|
546
|
+
|
|
547
|
+
if (keepOnCreate !== true) {
|
|
548
|
+
delete sinon.FakeXMLHttpRequest.onCreate;
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
if (xhr.supportsXHR) {
|
|
552
|
+
global.XMLHttpRequest = sinon.FakeXMLHttpRequest;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
if (xhr.supportsActiveX) {
|
|
556
|
+
global.ActiveXObject = function ActiveXObject(objId) {
|
|
557
|
+
if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
|
|
558
|
+
|
|
559
|
+
return new sinon.FakeXMLHttpRequest();
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
return new xhr.GlobalActiveXObject(objId);
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
return sinon.FakeXMLHttpRequest;
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
|
|
570
|
+
|
|
571
|
+
})(typeof global === "object" ? global : this);
|
|
572
|
+
|
|
573
|
+
if (typeof module !== 'undefined' && module.exports) {
|
|
574
|
+
module.exports = sinon;
|
|
575
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/
|
|
2
|
+
/**
|
|
3
|
+
* Helps IE run the fake timers. By defining global functions, IE allows
|
|
4
|
+
* them to be overwritten at a later point. If these are not defined like
|
|
5
|
+
* this, overwriting them will result in anything from an exception to browser
|
|
6
|
+
* crash.
|
|
7
|
+
*
|
|
8
|
+
* If you don't require fake timers to work in IE, don't include this file.
|
|
9
|
+
*
|
|
10
|
+
* @author Christian Johansen (christian@cjohansen.no)
|
|
11
|
+
* @license BSD
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
|
14
|
+
*/
|
|
15
|
+
function setTimeout() {}
|
|
16
|
+
function clearTimeout() {}
|
|
17
|
+
function setImmediate() {}
|
|
18
|
+
function clearImmediate() {}
|
|
19
|
+
function setInterval() {}
|
|
20
|
+
function clearInterval() {}
|
|
21
|
+
function Date() {}
|
|
22
|
+
|
|
23
|
+
// Reassign the original functions. Now their writable attribute
|
|
24
|
+
// should be true. Hackish, I know, but it works.
|
|
25
|
+
setTimeout = sinon.timers.setTimeout;
|
|
26
|
+
clearTimeout = sinon.timers.clearTimeout;
|
|
27
|
+
setImmediate = sinon.timers.setImmediate;
|
|
28
|
+
clearImmediate = sinon.timers.clearImmediate;
|
|
29
|
+
setInterval = sinon.timers.setInterval;
|
|
30
|
+
clearInterval = sinon.timers.clearInterval;
|
|
31
|
+
Date = sinon.timers.Date;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*global sinon*/
|
|
2
|
+
/**
|
|
3
|
+
* Helps IE run the fake XDomainRequest. By defining global functions, IE allows
|
|
4
|
+
* them to be overwritten at a later point. If these are not defined like
|
|
5
|
+
* this, overwriting them will result in anything from an exception to browser
|
|
6
|
+
* crash.
|
|
7
|
+
*
|
|
8
|
+
* If you don't require fake XDR to work in IE, don't include this file.
|
|
9
|
+
*/
|
|
10
|
+
function XDomainRequest() {}
|
|
11
|
+
|
|
12
|
+
// Reassign the original function. Now its writable attribute
|
|
13
|
+
// should be true. Hackish, I know, but it works.
|
|
14
|
+
XDomainRequest = sinon.xdr.XDomainRequest || undefined;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*global sinon*/
|
|
2
|
+
/**
|
|
3
|
+
* Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows
|
|
4
|
+
* them to be overwritten at a later point. If these are not defined like
|
|
5
|
+
* this, overwriting them will result in anything from an exception to browser
|
|
6
|
+
* crash.
|
|
7
|
+
*
|
|
8
|
+
* If you don't require fake XHR to work in IE, don't include this file.
|
|
9
|
+
*
|
|
10
|
+
* @author Christian Johansen (christian@cjohansen.no)
|
|
11
|
+
* @license BSD
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
|
14
|
+
*/
|
|
15
|
+
function XMLHttpRequest() {}
|
|
16
|
+
|
|
17
|
+
// Reassign the original function. Now its writable attribute
|
|
18
|
+
// should be true. Hackish, I know, but it works.
|
|
19
|
+
XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
|