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');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |