@@ -89,23 +89,77 @@ define(['requirejs'], function(requirejs) {
8989 desc : "fireInitial fires change event with 'local' origin for initial cache content" ,
9090 timeout : 250 ,
9191 run : function ( env , test ) {
92+ env . idb . putsRunning = 0 ;
9293 env . idb . put ( '/foo/bla' , 'basdf' , 'text/plain' ) . then ( function ( ) {
9394 env . idb . on ( 'change' , function ( event ) {
94- test . assert ( event . origin , 'local' ) ;
95+ test . assertAnd ( event . origin , 'local' ) ;
96+ setTimeout ( function ( ) {
97+ test . done ( ) ;
98+ } , 50 ) ;
9599 } ) ;
96100 //the mock is just an in-memory object; need to explicitly set its .length and its .key() function now:
97101 env . idb . fireInitial ( ) ;
98102 } , function ( e ) {
99103 test . result ( false , e ) ;
100104 } ) ;
101- setTimeout ( function ( ) {
102- env . _puts [ 0 ] . onsuccess ( ) ;
103- env . _transactions [ 1 ] . oncomplete ( ) ;
104- } , 100 ) ;
105105 env . _gets [ 0 ] . onsuccess ( { target : { } } ) ;
106106 env . _transactions [ 0 ] . oncomplete ( ) ;
107107 }
108108 } ,
109+
110+ {
111+ desc : "setNodes calls setNodesInDb when putsRunning is 0" ,
112+ run : function ( env , test ) {
113+ var setNodesInDb = env . idb . setNodesInDb ,
114+ getNodesFromDb = env . idb . getNodesFromDb ;
115+ env . idb . setNodesInDb = function ( nodes ) {
116+ var promise = promising ( ) ;
117+ test . assertAnd ( nodes , { foo : { path : 'foo' } } ) ;
118+ setTimeout ( function ( ) {
119+ env . idb . setNodesInDb = setNodesInDb ;
120+ env . idb . getNodesFromDb = getNodesFromDb ;
121+ test . done ( ) ;
122+ } , 10 ) ;
123+ promise . fulfill ( ) ;
124+ return promise ;
125+ } ;
126+ env . idb . putsRunning = 0 ;
127+ env . idb . setNodes ( { foo : { path : 'foo' } } ) ;
128+ }
129+ } ,
130+
131+ {
132+ desc : "setNodes doesn't call setNodesInDb when putsRunning is 1, but will flush later" ,
133+ run : function ( env , test ) {
134+ var setNodesInDb = env . idb . setNodesInDb ,
135+ getNodesFromDb = env . idb . getNodesFromDb ;
136+ env . idb . changesQueued = { } ;
137+ env . idb . changesRunning = { } ;
138+ env . idb . setNodesInDb = function ( nodes ) {
139+ test . result ( false , 'should not have called this function' ) ;
140+ } ;
141+ env . idb . putsRunning = 1 ;
142+ env . idb . setNodes ( { foo : { path : 'foo' } } ) ;
143+ test . assertAnd ( env . idb . changesQueued , { foo : { path : 'foo' } } ) ;
144+ test . assertAnd ( env . idb . changesRunning , { } ) ;
145+
146+ env . idb . setNodesInDb = function ( nodes ) {
147+ var promise = promising ( ) ;
148+ test . assertAnd ( nodes , { foo : { path : 'foo' } } ) ;
149+ setTimeout ( function ( ) {
150+ env . idb . setNodesInDb = setNodesInDb ;
151+ env . idb . getNodesFromDb = getNodesFromDb ;
152+ test . done ( ) ;
153+ } , 10 ) ;
154+ promise . fulfill ( ) ;
155+ return promise ;
156+ } ;
157+ env . idb . putsRunning = 0 ;
158+ env . idb . maybeFlush ( ) ;
159+ test . assertAnd ( env . idb . changesQueued , { } ) ;
160+ test . assertAnd ( env . idb . changesRunning , { foo : { path : 'foo' } } ) ;
161+ }
162+ }
109163/* TODO: mock indexeddb with some nodejs library
110164 {
111165 desc: "getNodes, setNodes",
0 commit comments