@@ -6,30 +6,96 @@ provides: ~
66...
77*/
88
9- /* todo
10- document.addListener = function(type, fn){
11- if (this.addEventListener) this.addEventListener(type, fn, false);
12- else this.attachEvent('on' + type, fn);
13- return this;
14- };
15-
16- document.removeListener = function(type, fn){
17- if (this.removeEventListener) this.removeEventListener(type, fn, false);
18- else this.detachEvent('on' + type, fn);
19- return this;
20- };
21-
22-
23- window.fireEvent =
24- document.fireEvent = function(type){
25- if (type == 'domready')
26- for (var i = 0; i < domreadyCallbacks.length; ++i){
9+ describe ( "DOMReady" , function ( ) {
10+
11+ var win , frame , cb , ready ;
12+ function checkStatus ( ) {
13+ ready = win && win . callbackFired ;
14+ if ( ready ) cb ( ) ;
15+ return ready ;
2716 }
28- domreadyCallbacks[i]();
29- };
3017
31- window.addEvent = function(){};
18+ function newFrame ( url ) {
19+ var iframe = new IFrame ( {
20+ src : 'specsserver/' + url
21+ } ) ;
22+ document . getElement ( 'body' ) . adopt ( iframe ) ;
23+ return iframe ;
24+ }
25+
26+ beforeEach ( function ( ) {
27+ cb = jasmine . createSpy ( 'DOMReady!' ) ;
28+ } ) ;
29+
30+ afterEach ( function ( ) {
31+ frame . destroy ( ) ;
32+ win = cb = frame = ready = null ;
33+ } ) ;
34+
35+ it ( 'should fire DOMReady, after flushing, when the DOM is ready' , function ( ) {
36+ frame = newFrame ( 'foo?assets=flush' ) ;
37+ frame . addEvent ( 'load' , function ( ) {
38+ win = frame . contentWindow ;
39+ expect ( win . moments [ 0 ] ) . toEqual ( 'loading' ) ;
40+ expect ( win . moments [ 1 ] ) . toEqual ( 'loading' ) ;
41+ expect ( win . moments [ 2 ] == 'interactive' || win . moments [ 2 ] == 'complete' ) . toBeTruthy ( ) ;
42+ } ) ;
43+
44+ waitsFor ( function ( ) {
45+ return checkStatus ( ) ;
46+ } , "the iframe to load" , 8000 ) ;
47+ runs ( function ( ) {
48+ expect ( cb ) . toHaveBeenCalled ( ) ;
49+ } ) ;
50+ } ) ;
51+
52+ it ( 'should fire DOMReady when the DOM is ready' , function ( ) {
53+ frame = newFrame ( 'DOMReady/DOMReady.head.html' ) ;
54+ frame . addEvent ( 'load' , function ( ) {
55+ win = frame . contentWindow ;
56+ } ) ;
57+ waitsFor ( function ( ) {
58+ return checkStatus ( ) ;
59+ } , "the iframe to load" , 1500 ) ;
60+ runs ( function ( ) {
61+ expect ( cb ) . toHaveBeenCalled ( ) ;
62+ } ) ;
63+ } ) ;
64+
65+ it ( 'should fire DOMReady when a new `addEvent("domready"` is added' , function ( ) {
66+ frame = newFrame ( 'DOMReady/DOMReady.onAdd.html' ) ;
67+ frame . addEvent ( 'load' , function ( ) {
68+ win = frame . contentWindow ;
69+ win . addEvent ( 'domready' , win . callback ) ;
70+ } ) ;
71+ waitsFor ( function ( ) {
72+ return checkStatus ( ) ;
73+ } , "the iframe to load" , 1500 ) ;
74+ runs ( function ( ) {
75+ expect ( cb ) . toHaveBeenCalled ( ) ;
76+ } ) ;
77+ } ) ;
78+
79+ it ( 'should fire when MooTools was loaded into a already-ready page' , function ( ) {
80+ frame = newFrame ( 'DOMReady/DOMReady.delayed.html' ) ;
81+ var ready ;
82+ frame . addEvent ( 'load' , function ( ) {
83+ win = frame . contentWindow ;
84+ expect ( win . MooTools ) . toBeFalsy ( ) ; // because MooTools should not be loaded yet
85+ var i = setInterval ( function ( ) {
86+ if ( win . addEvent && win . callback ) {
87+ win . addEvent ( 'domready' , win . callback ) ;
88+ if ( ready ) clearInterval ( i ) ;
89+ }
90+ } , 50 ) ;
91+ } ) ;
92+ waitsFor ( function ( ) {
93+ return checkStatus ( ) ;
94+ } , "the iframe to load and MooTools to be deployed" , 6000 ) ;
95+ runs ( function ( ) {
96+ expect ( cb ) . toHaveBeenCalled ( ) ;
97+ } ) ;
98+ } ) ;
99+
100+ } ) ;
32101
33- var Element = this.Element || {};
34- Element.Events = {};
35- */
0 commit comments