
PASS CustomElementRegistry interface must have define as a method
PASS customElements.define must throw when the element interface is not a constructor
PASS customElements.define must not throw the constructor is HTMLElement
PASS customElements.define must throw with an invalid name
PASS customElements.define must throw when there is already a custom element of the same name
PASS customElements.define must throw a NotSupportedError when there is already a custom element with the same class
PASS customElements.define must throw a NotSupportedError when element definition is running flag is set
PASS customElements.define must check IsConstructor on the constructor before checking the element definition is running flag
PASS customElements.define must validate the custom element name before checking the element definition is running flag
PASS customElements.define unset the element definition is running flag before upgrading custom elements
FAIL customElements.define must not throw when defining another custom element in a different global object during Get(constructor, "prototype") assert_array_equals: customElements.define must get "prototype", "disabledFeatures", and "formAssociated" on the constructor lengths differ, expected array ["prototype", "disabledFeatures", "formAssociated"] length 3, got ["prototype", "disabledFeatures"] length 2
PASS Custom Elements: CustomElementRegistry interface
FAIL customElements.define must get "prototype", "disabledFeatures", and "formAssociated" property of the constructor assert_array_equals: lengths differ, expected array ["prototype", "disabledFeatures", "formAssociated"] length 3, got ["prototype", "disabledFeatures"] length 2
PASS customElements.define must rethrow an exception thrown while getting "prototype" property of the constructor
PASS customElements.define must throw when "prototype" property of the constructor is not an object
PASS customElements.define must get callbacks of the constructor prototype
PASS customElements.define must rethrow an exception thrown while getting callbacks on the constructor prototype
PASS customElements.define must rethrow an exception thrown while converting a callback value to Function callback type
FAIL customElements.define must get "observedAttributes" property on the constructor prototype when "attributeChangedCallback" is present assert_array_equals: lengths differ, expected array [0, "prototype", 5, "observedAttributes", 6, "disabledFeatures", 7, "formAssociated"] length 8, got [0, "prototype", 5, "observedAttributes", 6, "disabledFeatures"] length 6
PASS customElements.define must rethrow an exception thrown while getting observedAttributes on the constructor prototype
PASS customElements.define must rethrow an exception thrown while converting the value of observedAttributes to sequence<DOMString>
PASS customElements.define must rethrow an exception thrown while iterating over observedAttributes to sequence<DOMString>
PASS customElements.define must rethrow an exception thrown while retrieving Symbol.iterator on observedAttributes
PASS customElements.define must not throw even if "observedAttributes" fails to convert if "attributeChangedCallback" is not defined
PASS customElements.define must rethrow an exception thrown while getting disabledFeatures on the constructor prototype
PASS customElements.define must rethrow an exception thrown while converting the value of disabledFeatures to sequence<DOMString>
PASS customElements.define must rethrow an exception thrown while iterating over disabledFeatures to sequence<DOMString>
PASS customElements.define must rethrow an exception thrown while retrieving Symbol.iterator on disabledFeatures
FAIL customElements.define must rethrow an exception thrown while getting formAssociated on the constructor prototype assert_throws_exactly: function "() => customElements.define('element-with-throwing-form-associated', proxy)" did not throw
FAIL customElements.define must get four additional callbacks on the prototype if formAssociated is converted to true assert_array_equals: customElements.define must get "prototype", "disabledFeatures", and "formAssociated" on the constructor lengths differ, expected array ["prototype", "disabledFeatures", "formAssociated"] length 3, got ["prototype", "disabledFeatures"] length 2
FAIL customElements.define must rethrow an exception thrown while getting additional formAssociated callbacks on the constructor prototype assert_throws_exactly: function "() => customElements.define('element-with-throwing-callback-2', proxy)" did not throw
PASS customElements.define must define an instantiatable custom element
PASS customElements.define must upgrade elements in the shadow-including tree order
PASS CustomElementRegistry interface must have get as a method
PASS customElements.get must return undefined when the registry does not contain an entry with the given name
PASS customElements.get must return undefined when the registry does not contain an entry with the given name even if the name was not a valid custom element name
PASS customElements.get return the constructor of the entry with the given name when there is a matching entry.
PASS customElements.whenDefined must return a promise for a valid custom element name
PASS customElements.whenDefined must return the same promise each time invoked for a valid custom element name which has not been defined
PASS customElements.whenDefined must return an unresolved promise when the registry does not contain the entry with the given name
PASS customElements.whenDefined must return a rejected promise when the given name is not a valid custom element name
PASS customElements.whenDefined must return a resolved promise when the registry contains the entry with the given name
PASS customElements.whenDefined must return a new resolved promise each time invoked when the registry contains the entry with the given name
PASS A promise returned by customElements.whenDefined must be resolved by "define"
PASS A promise returned by customElements.whenDefined must be resolved with the defined class
PASS A promise returned by customElements.whenDefined must be resolved with the defined class once such class is defined

