133 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Use of this source code is governed by an MIT-style license that can be
							 | 
						||
| 
								 | 
							
								 * found in the LICENSE file at https://angular.io/license
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe(
							 | 
						||
| 
								 | 
							
								    'IndexedDB', ifEnvSupports('IDBDatabase', function() {
							 | 
						||
| 
								 | 
							
								      var testZone = zone.fork();
							 | 
						||
| 
								 | 
							
								      var db;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      beforeEach(function(done) {
							 | 
						||
| 
								 | 
							
								        var openRequest = indexedDB.open('_zone_testdb');
							 | 
						||
| 
								 | 
							
								        openRequest.onupgradeneeded = function(event) {
							 | 
						||
| 
								 | 
							
								          db = event.target.result;
							 | 
						||
| 
								 | 
							
								          var objectStore = db.createObjectStore('test-object-store', {keyPath: 'key'});
							 | 
						||
| 
								 | 
							
								          objectStore.createIndex('key', 'key', {unique: true});
							 | 
						||
| 
								 | 
							
								          objectStore.createIndex('data', 'data', {unique: false});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          objectStore.transaction.oncomplete = function() {
							 | 
						||
| 
								 | 
							
								            var testStore =
							 | 
						||
| 
								 | 
							
								                db.transaction('test-object-store', 'readwrite').objectStore('test-object-store');
							 | 
						||
| 
								 | 
							
								            testStore.add({key: 1, data: 'Test data'});
							 | 
						||
| 
								 | 
							
								            testStore.transaction.oncomplete = function() { done(); }
							 | 
						||
| 
								 | 
							
								          };
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      afterEach(function(done) {
							 | 
						||
| 
								 | 
							
								        db.close();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var openRequest = indexedDB.deleteDatabase('_zone_testdb');
							 | 
						||
| 
								 | 
							
								        openRequest.onsuccess = function(event) { done(); };
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      describe('IDBRequest', function() {
							 | 
						||
| 
								 | 
							
								        it('should bind EventTarget.addEventListener', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store')
							 | 
						||
| 
								 | 
							
								                .objectStore('test-object-store')
							 | 
						||
| 
								 | 
							
								                .get(1)
							 | 
						||
| 
								 | 
							
								                .addEventListener('success', function(event) {
							 | 
						||
| 
								 | 
							
								                  expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								                  expect(event.target.result.data).toBe('Test data');
							 | 
						||
| 
								 | 
							
								                  done();
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        it('should bind onEventType listeners', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store').objectStore('test-object-store').get(1).onsuccess =
							 | 
						||
| 
								 | 
							
								                function(event) {
							 | 
						||
| 
								 | 
							
								              expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								              expect(event.target.result.data).toBe('Test data');
							 | 
						||
| 
								 | 
							
								              done();
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      describe('IDBCursor', function() {
							 | 
						||
| 
								 | 
							
								        it('should bind EventTarget.addEventListener', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store')
							 | 
						||
| 
								 | 
							
								                .objectStore('test-object-store')
							 | 
						||
| 
								 | 
							
								                .openCursor()
							 | 
						||
| 
								 | 
							
								                .addEventListener('success', function(event) {
							 | 
						||
| 
								 | 
							
								                  var cursor = event.target.result;
							 | 
						||
| 
								 | 
							
								                  if (cursor) {
							 | 
						||
| 
								 | 
							
								                    expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								                    expect(cursor.value.data).toBe('Test data');
							 | 
						||
| 
								 | 
							
								                    done();
							 | 
						||
| 
								 | 
							
								                  } else {
							 | 
						||
| 
								 | 
							
								                    throw 'Error while reading cursor!';
							 | 
						||
| 
								 | 
							
								                  }
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        it('should bind onEventType listeners', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store')
							 | 
						||
| 
								 | 
							
								                .objectStore('test-object-store')
							 | 
						||
| 
								 | 
							
								                .openCursor()
							 | 
						||
| 
								 | 
							
								                .onsuccess = function(event) {
							 | 
						||
| 
								 | 
							
								              var cursor = event.target.result;
							 | 
						||
| 
								 | 
							
								              if (cursor) {
							 | 
						||
| 
								 | 
							
								                expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								                expect(cursor.value.data).toBe('Test data');
							 | 
						||
| 
								 | 
							
								                done();
							 | 
						||
| 
								 | 
							
								              } else {
							 | 
						||
| 
								 | 
							
								                throw 'Error while reading cursor!';
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      describe('IDBIndex', function() {
							 | 
						||
| 
								 | 
							
								        it('should bind EventTarget.addEventListener', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store')
							 | 
						||
| 
								 | 
							
								                .objectStore('test-object-store')
							 | 
						||
| 
								 | 
							
								                .index('data')
							 | 
						||
| 
								 | 
							
								                .get('Test data')
							 | 
						||
| 
								 | 
							
								                .addEventListener('success', function(event) {
							 | 
						||
| 
								 | 
							
								                  expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								                  expect(event.target.result.key).toBe(1);
							 | 
						||
| 
								 | 
							
								                  done();
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        it('should bind onEventType listeners', function(done) {
							 | 
						||
| 
								 | 
							
								          testZone.run(function() {
							 | 
						||
| 
								 | 
							
								            db.transaction('test-object-store')
							 | 
						||
| 
								 | 
							
								                .objectStore('test-object-store')
							 | 
						||
| 
								 | 
							
								                .index('data')
							 | 
						||
| 
								 | 
							
								                .get('Test data')
							 | 
						||
| 
								 | 
							
								                .onsuccess = function(event) {
							 | 
						||
| 
								 | 
							
								              expect(zone).toBeDirectChildOf(testZone);
							 | 
						||
| 
								 | 
							
								              expect(event.target.result.key).toBe(1);
							 | 
						||
| 
								 | 
							
								              done();
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								          });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }));
							 |