97 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.5 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
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * check that document.registerElement(name, { prototype: proto });
 | |
|  * is properly patched
 | |
|  */
 | |
| 
 | |
| function customElementsSupport() {
 | |
|   return 'registerElement' in document;
 | |
| }
 | |
| customElementsSupport.message = 'window.customElements';
 | |
| 
 | |
| describe('customElements', function() {
 | |
|   const testZone = Zone.current.fork({name: 'test'});
 | |
|   const bridge = {
 | |
|     connectedCallback: () => {},
 | |
|     disconnectedCallback: () => {},
 | |
|     adoptedCallback: () => {},
 | |
|     attributeChangedCallback: () => {}
 | |
|   };
 | |
| 
 | |
|   class TestCustomElement extends HTMLElement {
 | |
|     constructor() { super(); }
 | |
| 
 | |
|     static get observedAttributes() { return ['attr1', 'attr2']; }
 | |
| 
 | |
|     connectedCallback() { return bridge.connectedCallback(); }
 | |
| 
 | |
|     disconnectedCallback() { return bridge.disconnectedCallback(); }
 | |
| 
 | |
|     attributeChangedCallback(attrName, oldVal, newVal) {
 | |
|       return bridge.attributeChangedCallback(attrName, oldVal, newVal);
 | |
|     }
 | |
| 
 | |
|     adoptedCallback() { return bridge.adoptedCallback(); }
 | |
|   }
 | |
| 
 | |
|   testZone.run(() => { customElements.define('x-test', TestCustomElement); });
 | |
| 
 | |
|   let elt;
 | |
| 
 | |
|   beforeEach(() => {
 | |
|     bridge.connectedCallback = () => {};
 | |
|     bridge.disconnectedCallback = () => {};
 | |
|     bridge.attributeChangedCallback = () => {};
 | |
|     bridge.adoptedCallback = () => {};
 | |
|   });
 | |
| 
 | |
|   afterEach(() => {
 | |
|     if (elt) {
 | |
|       document.body.removeChild(elt);
 | |
|       elt = null;
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   it('should work with connectedCallback', function(done) {
 | |
|     bridge.connectedCallback = function() {
 | |
|       expect(Zone.current.name).toBe(testZone.name);
 | |
|       done();
 | |
|     };
 | |
| 
 | |
|     elt = document.createElement('x-test');
 | |
|     document.body.appendChild(elt);
 | |
|   });
 | |
| 
 | |
|   it('should work with disconnectedCallback', function(done) {
 | |
|     bridge.disconnectedCallback = function() {
 | |
|       expect(Zone.current.name).toBe(testZone.name);
 | |
|       done();
 | |
|     };
 | |
| 
 | |
|     elt = document.createElement('x-test');
 | |
|     document.body.appendChild(elt);
 | |
|     document.body.removeChild(elt);
 | |
|     elt = null;
 | |
|   });
 | |
| 
 | |
|   it('should work with attributeChanged', function(done) {
 | |
|     bridge.attributeChangedCallback = function(attrName, oldVal, newVal) {
 | |
|       expect(Zone.current.name).toBe(testZone.name);
 | |
|       expect(attrName).toEqual('attr1');
 | |
|       expect(newVal).toEqual('value1');
 | |
|       done();
 | |
|     };
 | |
| 
 | |
|     elt = document.createElement('x-test');
 | |
|     document.body.appendChild(elt);
 | |
|     elt.setAttribute('attr1', 'value1');
 | |
|   });
 | |
| });
 |