@@ -89,23 +89,77 @@ define(['requirejs'], function(requirejs) {
89
89
desc : "fireInitial fires change event with 'local' origin for initial cache content" ,
90
90
timeout : 250 ,
91
91
run : function ( env , test ) {
92
+ env . idb . putsRunning = 0 ;
92
93
env . idb . put ( '/foo/bla' , 'basdf' , 'text/plain' ) . then ( function ( ) {
93
94
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 ) ;
95
99
} ) ;
96
100
//the mock is just an in-memory object; need to explicitly set its .length and its .key() function now:
97
101
env . idb . fireInitial ( ) ;
98
102
} , function ( e ) {
99
103
test . result ( false , e ) ;
100
104
} ) ;
101
- setTimeout ( function ( ) {
102
- env . _puts [ 0 ] . onsuccess ( ) ;
103
- env . _transactions [ 1 ] . oncomplete ( ) ;
104
- } , 100 ) ;
105
105
env . _gets [ 0 ] . onsuccess ( { target : { } } ) ;
106
106
env . _transactions [ 0 ] . oncomplete ( ) ;
107
107
}
108
108
} ,
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
+ }
109
163
/* TODO: mock indexeddb with some nodejs library
110
164
{
111
165
desc: "getNodes, setNodes",
0 commit comments