This is a testharness.js-based test.
PASS HTMLSlotElement must be defined on window 
PASS "name" attribute on HTMLSlotElement must reflect "name" attribute 
PASS assignedNodes() on a HTMLSlotElement must return an empty array when the slot element is not in a tree or in a document tree 
PASS assignedNodes({"flattened":false}) on a HTMLSlotElement must return an empty array when the slot element is not in a tree or in a document tree 
PASS assignedNodes({"flattened":true}) on a HTMLSlotElement must return an empty array when the slot element is not in a tree or in a document tree 
PASS assignedNodes() must return the list of assigned nodes when none of the assigned nodes themselves are slots 
PASS assignedNodes({"flattened":false}) must return the list of assigned nodes when none of the assigned nodes themselves are slots 
PASS assignedNodes({"flattened":true}) must return the list of assigned nodes when none of the assigned nodes themselves are slots 
PASS assignedNodes() must update when slot and name attributes are modified 
PASS assignedNodes({"flattened":false}) must update when slot and name attributes are modified 
PASS assignedNodes({"flattened":true}) must update when slot and name attributes are modified 
PASS assignedNodes must update when a default slot is introduced dynamically by a slot rename 
PASS assignedNodes must update when a default slot is introduced dynamically by a slot rename 
PASS assignedNodes must update when a default slot is introduced dynamically by a slot rename 
FAIL assignedNodes must update when slot elements are inserted or removed assert_array_equals: assignedNodes on a detached formerly-default slot must return an empty array lengths differ, expected 0 got 3
FAIL assignedNodes must update when slot elements are inserted or removed assert_array_equals: assignedNodes on a detached formerly-default slot must return an empty array lengths differ, expected 0 got 3
FAIL assignedNodes must update when slot elements are inserted or removed assert_array_equals: assignedNodes on a detached formerly-default slot must return an empty array lengths differ, expected 0 got 3
FAIL assignedNodes({flatten: true}) must return the distributed nodes, and assignedNodes() and assignedNodes({flatten: false}) must returned the assigned nodes assert_array_equals: assignedNodes() must return an empty array when the slot element is not in any tree lengths differ, expected 0 got 2
Harness: the test ran to completion.

