diff --git a/DEPS b/DEPS
index 363d30d8..a86196f 100644
--- a/DEPS
+++ b/DEPS
@@ -96,7 +96,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '71c4c9aba898fe6d112646d549cb94de1b41a54f',
+  'catapult_revision': 'cffd46cccece53549c5909d83acd111a371c6742',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -232,7 +232,7 @@
     Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067',
 
   'src/third_party/webrtc':
-    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '3a40828f8b801ca81849298e0c2b93a08e8188a5', # commit position 16713
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '0bdacd8a66daca88eafe178bcf7a36a70f5f07b8', # commit position 16733
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/base/logging.h b/base/logging.h
index 13661a76..b1075a4 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -510,9 +510,9 @@
 // TODO(scottmg): Reinvestigate a short sequence that will work on both
 // compilers once clang supports more intrinsics. See https://crbug.com/693713.
 #if defined(__clang__)
-#define IMMEDIATE_CRASH() \
-  (__debugbreak(),        \
-   (void)(*reinterpret_cast<volatile unsigned char*>(0) = __COUNTER__))
+#define IMMEDIATE_CRASH()                                                 \
+  (__debugbreak(), (void)(*reinterpret_cast<volatile unsigned char*>(0) = \
+                              static_cast<unsigned char>(__COUNTER__)))
 #else
 #define IMMEDIATE_CRASH() __debugbreak()
 #endif  // __clang__
diff --git a/chrome/VERSION b/chrome/VERSION
index 877af05..4d8a598e 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=58
 MINOR=0
-BUILD=3019
+BUILD=3020
 PATCH=0
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 03e4323d..1509877 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5906,6 +5906,12 @@
       <message name="IDS_FLAGS_MANUAL_PASSWORD_GENERATION_DESCRIPTION" desc="Description of the flag for manual password generation.">
         Allow the user to manually enforce to generate password on a password field.
       </message>
+      <message name="IDS_FLAGS_SHOW_AUTOFILL_SIGNATURES" desc="Name of the flag to show autofill signatures.">
+        Show autofill signatures.
+      </message>
+      <message name="IDS_FLAGS_SHOW_AUTOFILL_SIGNATURES_DESCRIPTION" desc="Description of the flag to show autofill signatures.">
+        Annotates web forms with Autofill signatures as HTML attributes.
+      </message>
       <message name="IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_TITLE_MANY_ACCOUNTS" desc="The title of the account chooser dialog/infobar for more than one account.">
         Choose your account saved with <ph name="PASSWORD_MANAGER_BRAND">$1<ex>Google Chrome</ex></ph> to sign in
       </message>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 91194646..c2ae2bb 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1085,6 +1085,9 @@
      IDS_FLAGS_MANUAL_PASSWORD_GENERATION_DESCRIPTION, kOsAll,
      FEATURE_VALUE_TYPE(
          password_manager::features::kEnableManualPasswordGeneration)},
+    {"enable-show-autofill-signatures", IDS_FLAGS_SHOW_AUTOFILL_SIGNATURES,
+     IDS_FLAGS_SHOW_AUTOFILL_SIGNATURES_DESCRIPTION, kOsAll,
+     SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillTypePredictions)},
     {"affiliation-based-matching", IDS_FLAGS_AFFILIATION_BASED_MATCHING_NAME,
      IDS_FLAGS_AFFILIATION_BASED_MATCHING_DESCRIPTION, kOsAll,
      FEATURE_VALUE_TYPE(password_manager::features::kAffiliationBasedMatching)},
diff --git a/chrome/browser/chromeos/base/locale_util.cc b/chrome/browser/chromeos/base/locale_util.cc
index 2ee1a76d..e062190 100644
--- a/chrome/browser/chromeos/base/locale_util.cc
+++ b/chrome/browser/chromeos/base/locale_util.cc
@@ -51,8 +51,6 @@
           data->result.requested_locale);
 
   data->result.success = !data->result.loaded_locale.empty();
-
-  ResourceBundle::GetSharedInstance().ReloadFonts();
 }
 
 // Callback after SwitchLanguageDoReloadLocale() back in UI thread.
@@ -93,6 +91,10 @@
       }
     }
   }
+
+  // The font clean up of ResourceBundle should be done on UI thread, since the
+  // cached fonts are thread unsafe.
+  ResourceBundle::GetSharedInstance().ReloadFonts();
   gfx::PlatformFontLinux::ReloadDefaultFont();
   if (!data->callback.is_null())
     data->callback.Run(data->result);
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
index 80d27f0..8db2cbc 100644
--- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
+++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
@@ -348,6 +348,11 @@
   std::unique_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
+  if (params->error == api::file_system_provider::PROVIDER_ERROR_OK) {
+    // It's incorrect to pass OK as an error code.
+    return ValidationFailure(this);
+  }
+
   const base::File::Error error = ProviderErrorToFileError(params->error);
   return RejectRequest(RequestValue::CreateForOperationError(std::move(params)),
                        error);
diff --git a/chrome/browser/profile_resetter/reset_report_uploader.cc b/chrome/browser/profile_resetter/reset_report_uploader.cc
index 453c2c91..76cfde3 100644
--- a/chrome/browser/profile_resetter/reset_report_uploader.cc
+++ b/chrome/browser/profile_resetter/reset_report_uploader.cc
@@ -12,6 +12,7 @@
 #include "google_apis/google_api_keys.h"
 #include "net/base/escape.h"
 #include "net/base/load_flags.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_request_context_getter.h"
 
@@ -42,10 +43,39 @@
   std::string request_data;
   CHECK(report.SerializeToString(&request_data));
 
+  // Create traffic annotation tag.
+  net::NetworkTrafficAnnotationTag traffic_annotation =
+      net::DefineNetworkTrafficAnnotation("profile_resetter_upload", R"(
+        semantics {
+          sender: "Profile Resetter"
+          description:
+            "When users choose to reset their profile, they are offered the "
+            "choice to report to Google the settings and their values that are "
+            "affected by the reset. The user can inspect the values before "
+            "they are sent to Google and needs to consent to sending them."
+          trigger:
+            "Users reset their profile in Chrome settings and consent to "
+            "sending a report."
+          data:
+            "Startup URLs, homepage URL, default search engine, installed "
+            "extensions, Chrome shortcut on the desktop and the Windows start "
+            "menu, some settings. See "
+            "chrome/browser/profile_resetter/profile_reset_report.proto "
+            "for details."
+          destination: GOOGLE_OWNED_SERVICE
+        }
+        policy {
+          cookies_allowed: false
+          setting: "None, the user needs to actively send the data."
+          policy_exception_justification:
+            "None, considered not useful because the user needs to actively "
+            "send the data."
+        })");
+
   // Note fetcher will be deleted by OnURLFetchComplete.
   net::URLFetcher* fetcher =
       net::URLFetcher::Create(GetClientReportUrl(kResetReportUrl),
-                              net::URLFetcher::POST, this)
+                              net::URLFetcher::POST, this, traffic_annotation)
           .release();
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                         net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc
index 0e20516..43d7fefa 100644
--- a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc
+++ b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc
@@ -82,8 +82,10 @@
   ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_;
 
   // Test the input.ime.commitText API.
-  ASSERT_EQ(1, client->insert_text_count());
-  EXPECT_EQ(base::UTF8ToUTF16("test_commit_text"), client->last_insert_text());
+  const std::vector<base::string16>& insert_text_history =
+      client->insert_text_history();
+  ASSERT_EQ(1UL, insert_text_history.size());
+  EXPECT_EQ(base::UTF8ToUTF16("test_commit_text"), insert_text_history[0]);
 
   // Test the input.ime.setComposition API.
   ui::CompositionText composition;
@@ -92,8 +94,12 @@
       ui::CompositionUnderline(0, composition.text.length(), SK_ColorBLACK,
                                false /* thick */, SK_ColorTRANSPARENT));
   composition.selection = gfx::Range(2, 2);
-  ASSERT_EQ(1, client->set_composition_count());
-  ASSERT_EQ(composition, client->last_composition());
+  const std::vector<ui::CompositionText>& composition_history =
+      client->composition_history();
+  ASSERT_EQ(2UL, composition_history.size());
+  EXPECT_EQ(base::UTF8ToUTF16("test_set_composition"),
+            composition_history[0].text);
+  EXPECT_EQ(base::UTF8ToUTF16(""), composition_history[1].text);
 
   // Tests input.ime.onBlur API should get event when focusing to another
   // text input client.
diff --git a/chrome/browser/webshare/share_service_impl.cc b/chrome/browser/webshare/share_service_impl.cc
index 608707fc..2ae7404a 100644
--- a/chrome/browser/webshare/share_service_impl.cc
+++ b/chrome/browser/webshare/share_service_impl.cc
@@ -237,11 +237,13 @@
       chosen_target.data(),
       chosen_target.size() - GURL(chosen_target).ExtractFileName().size());
   const GURL target(url_base.as_string() + url_template_filled);
-  if (!target.is_valid()) {
-    callback.Run(base::Optional<std::string>(
-        "Error: url of share target is not a valid url."));
-    return;
-  }
+  // User should not be able to cause an invalid target URL. Possibilities are:
+  // - The base URL: can't be invalid since it's derived from the manifest URL.
+  // - The template: can only be invalid if it contains a NUL character or
+  //   invalid UTF-8 sequence (which it can't have).
+  // - The replaced pieces: these are escaped.
+  // If somehow we slip through this DCHECK, it will just open about:blank.
+  DCHECK(target.is_valid());
   OpenTargetURL(target);
 
   callback.Run(base::nullopt);
diff --git a/chrome/browser/webshare/share_service_impl_unittest.cc b/chrome/browser/webshare/share_service_impl_unittest.cc
index f00bb8c..82bf6b8 100644
--- a/chrome/browser/webshare/share_service_impl_unittest.cc
+++ b/chrome/browser/webshare/share_service_impl_unittest.cc
@@ -255,6 +255,39 @@
   EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty());
 }
 
+// Tests a target with a broken URL template (ReplacePlaceholders failure).
+TEST_F(ShareServiceImplUnittest, ShareBrokenUrl) {
+  // Invalid placeholders. Detailed tests for broken templates are in the
+  // ReplacePlaceholders test; this just tests the share response.
+  constexpr char kBrokenUrlTemplate[] = "share?title={title";
+  share_service_helper()->AddShareTargetToPrefs(kManifestUrlHigh, kTargetName,
+                                                kBrokenUrlTemplate);
+
+  // Expect an error message in response.
+  base::Callback<void(const base::Optional<std::string>&)> callback =
+      base::Bind(&DidShare,
+                 base::Optional<std::string>(
+                     "Error: unable to replace placeholders in url template"));
+
+  base::RunLoop run_loop;
+  share_service_helper()->set_run_loop(&run_loop);
+
+  const GURL url(kUrlSpec);
+  share_service()->Share(kTitle, kText, url, callback);
+
+  run_loop.Run();
+
+  const std::vector<std::pair<base::string16, GURL>> kExpectedTargets{
+      make_pair(base::UTF8ToUTF16(kTargetName), GURL(kManifestUrlHigh))};
+  EXPECT_EQ(kExpectedTargets, share_service_helper()->GetTargetsInPicker());
+
+  // Pick example-high.com.
+  share_service_helper()->picker_callback().Run(
+      base::Optional<std::string>(kManifestUrlHigh));
+
+  EXPECT_TRUE(share_service_helper()->GetLastUsedTargetURL().empty());
+}
+
 // Test to check that only targets with enough engagement were in picker.
 TEST_F(ShareServiceImplUnittest, ShareWithSomeInsufficientlyEngagedTargets) {
   share_service_helper()->AddShareTargetToPrefs(kManifestUrlMin, kTargetName,
diff --git a/chrome/common/extensions/api/file_system_provider.idl b/chrome/common/extensions/api/file_system_provider.idl
index 9f6b058..83f539f3 100644
--- a/chrome/common/extensions/api/file_system_provider.idl
+++ b/chrome/common/extensions/api/file_system_provider.idl
@@ -518,6 +518,7 @@
   [nocompile] callback ProviderSuccessCallback = void();
 
   // Callback to be called by the providing extension in case of an error.
+  // Any error code is allowed except <code>OK</code>.
   [nocompile] callback ProviderErrorCallback = void(ProviderError error);
 
   // Success callback for the $(ref:onGetMetadataRequested) event.
diff --git a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js
index 91a2718..c4bdfa0 100644
--- a/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/file_system_provider_custom_bindings.js
@@ -120,6 +120,20 @@
 }
 
 /**
+ * Verifies if the passed error code is valid when used to indicate
+ * a failure.
+ * @param {!string} error
+ * @return {boolean} True if valid, false if invalid.
+ */
+function verifyErrorForFailure(error) {
+  if (error === 'OK') {
+    console.error('Error code cannot be OK in case of failures.');
+    return false;
+  }
+  return true;
+}
+
+/**
  * Annotates an entry metadata by serializing its modifiedTime value.
  * @param {EntryMetadata} metadata Input metadata.
  * @return {EntryMetadata} metadata Annotated metadata, which can be passed
@@ -156,6 +170,8 @@
         options.fileSystemId, options.requestId, Date.now() - executionStart);
   };
   var onErrorCallback = function(error) {
+    if (!verifyErrorForFailure(error))
+      return;
     fileSystemProviderInternal.operationRequestedError(
         options.fileSystemId, options.requestId, error,
         Date.now() - executionStart);
@@ -188,6 +204,8 @@
       };
 
       var onErrorCallback = function(error) {
+        if (!verifyErrorForFailure(error))
+          return;
         fileSystemProviderInternal.operationRequestedError(
             options.fileSystemId, options.requestId, error,
             Date.now() - executionStart);
@@ -210,6 +228,8 @@
       };
 
       var onErrorCallback = function(error) {
+        if (!verifyErrorForFailure(error))
+          return;
         fileSystemProviderInternal.operationRequestedError(
             options.fileSystemId, options.requestId, error,
             Date.now() - executionStart);
@@ -246,6 +266,8 @@
       };
 
       var onErrorCallback = function(error) {
+        if (!verifyErrorForFailure(error))
+          return;
         fileSystemProviderInternal.operationRequestedError(
             options.fileSystemId, options.requestId, error,
             Date.now() - executionStart);
@@ -272,6 +294,8 @@
             Date.now() - executionStart);
       };
       var onErrorCallback = function(error) {
+        if (!verifyErrorForFailure(error))
+          return;
         fileSystemProviderInternal.operationRequestedError(
             options.fileSystemId, options.requestId, error,
             Date.now() - executionStart);
@@ -339,10 +363,16 @@
     'fileSystemProvider.onMountRequested',
     function(args, dispatch) {
       var onSuccessCallback = function() {
-        // TODO(mtomasz): To be implemented.
+        // chrome.fileManagerPrivate.addProvidedFileSystem doesn't accept
+        // any callbacks, so ignore the callback calls here.
+        // The callbacks exist for consistency with other on*Requested events.
       };
       var onErrorCallback = function(error) {
-        // TODO(mtomasz): To be implemented.
+        if (!verifyErrorForFailure(error))
+          return;
+        // chrome.fileManagerPrivate.addProvidedFileSystem doesn't accept
+        // any callbacks, so ignore the callback calls here.
+        // The callbacks exist for consistency with other on*Requested events.
       }
       dispatch([onSuccessCallback, onErrorCallback]);
     });
diff --git a/chrome/test/data/extensions/api_test/input_ime_nonchromeos/background.js b/chrome/test/data/extensions/api_test/input_ime_nonchromeos/background.js
index 6f0b371a..18a89150 100644
--- a/chrome/test/data/extensions/api_test/input_ime_nonchromeos/background.js
+++ b/chrome/test/data/extensions/api_test/input_ime_nonchromeos/background.js
@@ -83,6 +83,19 @@
       chrome.test.succeed();
     });
   },
+  function testEmptyComposition() {
+    chrome.input.ime.setComposition({
+      contextID: 1,
+      text: '',
+      cursor: 0
+    }, function() {
+      if(chrome.runtime.lastError) {
+        chrome.test.fail();
+        return;
+      }
+      chrome.test.succeed();
+    });
+  },
   // Test input.ime.sendKeyEvents API.
   function testSendKeyEvents() {
     // Sends a normal character key.
diff --git a/cloud_print/virtual_driver/win/install/inf/gcp_driver.inf b/cloud_print/virtual_driver/win/install/inf/gcp_driver.inf
index 9a2fed5..ad57e0a 100644
--- a/cloud_print/virtual_driver/win/install/inf/gcp_driver.inf
+++ b/cloud_print/virtual_driver/win/install/inf/gcp_driver.inf
Binary files differ
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index e134d84..9677f8c18 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -102,13 +102,6 @@
   return node.isElementNode() && node.toConst<WebElement>().hasHTMLTagName(tag);
 }
 
-bool IsAutofillableElement(const WebFormControlElement& element) {
-  const WebInputElement* input_element = toWebInputElement(&element);
-  return IsAutofillableInputElement(input_element) ||
-         IsSelectElement(element) ||
-         IsTextAreaElement(element);
-}
-
 bool IsElementInControlElementSet(
     const WebElement& element,
     const std::vector<WebFormControlElement>& control_elements) {
@@ -1319,6 +1312,12 @@
          IsCheckableElement(element);
 }
 
+bool IsAutofillableElement(const WebFormControlElement& element) {
+  const WebInputElement* input_element = toWebInputElement(&element);
+  return IsAutofillableInputElement(input_element) ||
+         IsSelectElement(element) || IsTextAreaElement(element);
+}
+
 const base::string16 GetFormIdentifier(const WebFormElement& form) {
   base::string16 identifier = form.name().utf16();
   CR_DEFINE_STATIC_LOCAL(WebString, kId, ("id"));
diff --git a/components/autofill/content/renderer/form_autofill_util.h b/components/autofill/content/renderer/form_autofill_util.h
index d268c7c..ccf2915 100644
--- a/components/autofill/content/renderer/form_autofill_util.h
+++ b/components/autofill/content/renderer/form_autofill_util.h
@@ -127,6 +127,10 @@
 // autofilled. {Text, Radiobutton, Checkbox}.
 bool IsAutofillableInputElement(const blink::WebInputElement* element);
 
+// Returns true if |element| is one of the element types that can be autofilled.
+// {Text, Radiobutton, Checkbox, Select, TextArea}.
+bool IsAutofillableElement(const blink::WebFormControlElement& element);
+
 // True if this node takes up space in the layout, ie. this node or a descendant
 // has a non-empty bounding bounding client rect.
 //
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index aee3f94..5c2ade8 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -12,11 +12,13 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/command_line.h"
 #include "base/i18n/case_conversion.h"
 #include "base/memory/linked_ptr.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -25,6 +27,7 @@
 #include "components/autofill/content/renderer/password_form_conversion_utils.h"
 #include "components/autofill/content/renderer/renderer_save_password_progress_logger.h"
 #include "components/autofill/core/common/autofill_constants.h"
+#include "components/autofill/core/common/autofill_switches.h"
 #include "components/autofill/core/common/autofill_util.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/password_form_fill_data.h"
@@ -60,6 +63,9 @@
 const char kDummyUsernameField[] = "anonymous_username";
 const char kDummyPasswordField[] = "anonymous_password";
 
+const char kDebugAttributeForFormSignature[] = "form_signature";
+const char kDebugAttributeForFieldSignature[] = "field_signature";
+
 // Maps element names to the actual elements to simplify form filling.
 typedef std::map<base::string16, blink::WebInputElement> FormInputElementMap;
 
@@ -562,6 +568,37 @@
       field_value_and_properties_map, registration_callback, logger);
 }
 
+// Annotate |forms| with form and field signatures as HTML attributes.
+void AnnotateFormsWithSignatures(
+    blink::WebVector<blink::WebFormElement> forms) {
+  for (blink::WebFormElement form : forms) {
+    std::unique_ptr<PasswordForm> password_form(
+        CreatePasswordFormFromWebForm(form, nullptr, nullptr));
+    if (password_form) {
+      form.setAttribute(
+          blink::WebString::fromASCII(kDebugAttributeForFormSignature),
+          blink::WebString::fromUTF8(base::Uint64ToString(
+              CalculateFormSignature(password_form->form_data))));
+
+      blink::WebVector<blink::WebFormControlElement> control_elements =
+          form_util::ExtractAutofillableElementsInForm(form);
+      DCHECK(control_elements.size() == password_form->form_data.fields.size());
+      for (size_t i = 0; i < control_elements.size(); ++i) {
+        blink::WebFormControlElement& control_element = control_elements[i];
+        if (!form_util::IsAutofillableElement(control_element))
+          continue;
+
+        const FormFieldData& field = password_form->form_data.fields[i];
+        DCHECK(field.name == control_element.nameForAutofill().utf16());
+        control_element.setAttribute(
+            blink::WebString::fromASCII(kDebugAttributeForFieldSignature),
+            blink::WebString::fromUTF8(
+                base::Uint64ToString(CalculateFieldSignatureForField(field))));
+      }
+    }
+  }
+}
+
 }  // namespace
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -1016,6 +1053,10 @@
 
   blink::WebVector<blink::WebFormElement> forms;
   frame->document().forms(forms);
+  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kShowAutofillSignatures)) {
+    AnnotateFormsWithSignatures(forms);
+  }
   if (logger)
     logger->LogNumber(Logger::STRING_NUMBER_OF_ALL_FORMS, forms.size());
 
diff --git a/components/autofill/core/common/autofill_switches.cc b/components/autofill/core/common/autofill_switches.cc
index 8aadec54..217408a 100644
--- a/components/autofill/core/common/autofill_switches.cc
+++ b/components/autofill/core/common/autofill_switches.cc
@@ -56,6 +56,9 @@
 // Annotates forms with Autofill field type predictions.
 const char kShowAutofillTypePredictions[]   = "show-autofill-type-predictions";
 
+// Annotates forms and fields with Autofill signatures.
+const char kShowAutofillSignatures[] = "show-autofill-signatures";
+
 // Use the sandbox Online Wallet service URL (for developer testing).
 const char kWalletServiceUseSandbox[]       = "wallet-service-use-sandbox";
 
diff --git a/components/autofill/core/common/autofill_switches.h b/components/autofill/core/common/autofill_switches.h
index e423cca..b1c7d90 100644
--- a/components/autofill/core/common/autofill_switches.h
+++ b/components/autofill/core/common/autofill_switches.h
@@ -24,6 +24,7 @@
 extern const char kIgnoreAutocompleteOffForAutofill[];
 extern const char kLocalHeuristicsOnlyForPasswordGeneration[];
 extern const char kShowAutofillTypePredictions[];
+extern const char kShowAutofillSignatures[];
 extern const char kWalletServiceUseSandbox[];
 
 #if defined(OS_ANDROID)
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index 02d3a3f..05a6ce8 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -677,6 +677,9 @@
         ['linux', 'nvidia'], bug=618447)
     self.Fail('conformance/glsl/bugs/unary-minus-operator-float-bug.html',
         ['linux', 'nvidia'], bug=672380)
+    self.Fail('conformance2/textures/canvas_sub_rectangle/' +
+        'tex-2d-r11f_g11f_b10f-rgb-half_float.html',
+        ['linux', 'nvidia'], bug=694359)
     self.Fail('conformance2/textures/image_bitmap_from_canvas/' +
         'tex-3d-srgb8_alpha8-rgba-unsigned_byte.html',
         ['linux', 'nvidia'], bug=679677)
@@ -690,6 +693,9 @@
     self.Fail('conformance2/textures/image_bitmap_from_blob/' +
         'tex-2d-rgb565-rgb-unsigned_byte.html',
         ['linux', 'nvidia'], bug=684399)
+    self.Flaky('conformance2/textures/image_bitmap_from_image_data/' +
+        'tex-2d-srgb8-rgb-unsigned_byte.html',
+        ['linux', 'nvidia'], bug=694354)
 
     # Linux Intel
     self.Fail('conformance2/extensions/ext-color-buffer-float.html',
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
index 71ffec5..242f0e64 100644
--- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
+++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -56,6 +56,9 @@
   suggestion.title = base::SysUTF16ToNSString(contentSuggestion.title());
   suggestion.text = base::SysUTF16ToNSString(contentSuggestion.snippet_text());
   suggestion.url = contentSuggestion.url();
+  suggestion.publisher =
+      base::SysUTF16ToNSString(contentSuggestion.publisher_name());
+  suggestion.publishDate = contentSuggestion.publish_date();
 
   return suggestion;
 }
diff --git a/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm b/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm
index 2dfd71b..d02e65fd 100644
--- a/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm
+++ b/ios/chrome/browser/native_app_launcher/native_app_navigation_util_unittest.mm
@@ -37,10 +37,9 @@
   void AddItem(const std::string& url_spec, ui::PageTransition transition) {
     CRWSessionController* session_controller =
         web_state_->GetNavigationManagerImpl().GetSessionController();
-    [session_controller addPendingItem:GURL(url_spec)
-                              referrer:web::Referrer()
-                            transition:transition
-                     rendererInitiated:NO];
+    web_state_->GetNavigationManagerImpl().AddPendingItem(
+        GURL(url_spec), web::Referrer(), transition,
+        web::NavigationInitiationType::USER_INITIATED);
     [session_controller commitPendingItem];
   }
 
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm
index 8e017f53..0e52721 100644
--- a/ios/chrome/browser/tabs/tab.mm
+++ b/ios/chrome/browser/tabs/tab.mm
@@ -1533,8 +1533,7 @@
 - (void)enableDesktopUserAgent {
   DCHECK_EQ(self.useDesktopUserAgent, NO);
   DCHECK([self navigationManager]);
-  [[self navigationManager]->GetSessionController()
-          useDesktopUserAgentForNextPendingItem];
+  [self navigationManager]->OverrideDesktopUserAgentForNextPendingItem();
 }
 
 - (void)reloadForDesktopUserAgent {
diff --git a/ios/chrome/browser/tabs/tab_unittest.mm b/ios/chrome/browser/tabs/tab_unittest.mm
index d863fa3..1136415 100644
--- a/ios/chrome/browser/tabs/tab_unittest.mm
+++ b/ios/chrome/browser/tabs/tab_unittest.mm
@@ -228,22 +228,25 @@
 
   void BrowseTo(const GURL& userUrl, const GURL& redirectUrl, NSString* title) {
     DCHECK_EQ(tab_.get().webState, web_state_impl_);
-    web::Referrer empty_referrer;
+
     [tab_ webWillAddPendingURL:userUrl transition:ui::PAGE_TRANSITION_TYPED];
     web_state_impl_->OnProvisionalNavigationStarted(userUrl);
     [tab_ webWillAddPendingURL:redirectUrl
                     transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT];
-    [[tab_ navigationManager]->GetSessionController()
-           addPendingItem:redirectUrl
-                 referrer:empty_referrer
-               transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-        rendererInitiated:YES];
+
+    web::Referrer empty_referrer;
+    [tab_ navigationManager]->AddPendingItem(
+        redirectUrl, empty_referrer, ui::PAGE_TRANSITION_CLIENT_REDIRECT,
+        web::NavigationInitiationType::RENDERER_INITIATED);
+
     web_state_impl_->OnProvisionalNavigationStarted(redirectUrl);
     [[tab_ navigationManager]->GetSessionController() commitPendingItem];
     [[tab_ webController] webStateImpl]->OnNavigationCommitted(redirectUrl);
     [tab_ webDidStartLoadingURL:redirectUrl shouldUpdateHistory:YES];
+
     base::string16 new_title = base::SysNSStringToUTF16(title);
     [tab_ navigationManager]->GetLastCommittedItem()->SetTitle(new_title);
+
     [tab_ webController:mock_web_controller_ titleDidChange:title];
     [[[(id)mock_web_controller_ expect]
         andReturnValue:OCMOCK_VALUE(kPageLoaded)] loadPhase];
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestion.h b/ios/chrome/browser/ui/content_suggestions/content_suggestion.h
index 518958eb..7a13b0a 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestion.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestion.h
@@ -9,6 +9,10 @@
 
 #include "url/gurl.h"
 
+namespace base {
+class Time;
+}
+
 @class ContentSuggestionsSectionInformation;
 
 // Enum defining the type of a ContentSuggestions.
@@ -28,6 +32,10 @@
 @property(nonatomic, strong, nullable) UIImage* image;
 // URL associated with the suggestion.
 @property(nonatomic, assign) GURL url;
+// The name of the publisher.
+@property(nonatomic, copy, nullable) NSString* publisher;
+// The date of publication.
+@property(nonatomic, assign) base::Time publishDate;
 
 // Section information in which this suggestion should be.
 @property(nonatomic, strong, nullable)
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestion.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestion.mm
index b9877af..0df2426 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestion.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestion.mm
@@ -4,6 +4,8 @@
 
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestion.h"
 
+#include "base/time/time.h"
+
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
@@ -14,6 +16,8 @@
 @synthesize image = _image;
 @synthesize text = _text;
 @synthesize url = _url;
+@synthesize publisher = _publisher;
+@synthesize publishDate = _publishDate;
 @synthesize section = _section;
 @synthesize type = _type;
 
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h
index 87422a9..39ac7dd 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h
@@ -9,6 +9,10 @@
 #import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
 #include "url/gurl.h"
 
+namespace base {
+class Time;
+}
+
 // Item for an article in the suggestions.
 @interface ContentSuggestionsArticleItem : CollectionViewItem
 
@@ -25,6 +29,8 @@
 @property(nonatomic, copy, readonly) NSString* title;
 @property(nonatomic, strong) UIImage* image;
 @property(nonatomic, readonly, assign) GURL articleURL;
+@property(nonatomic, copy) NSString* publisher;
+@property(nonatomic, assign) base::Time publishDate;
 
 @end
 
@@ -35,6 +41,8 @@
 @property(nonatomic, readonly, strong) UILabel* subtitleLabel;
 @property(nonatomic, readonly, strong) UIImageView* imageView;
 
+- (void)setPublisherName:(NSString*)publisherName date:(base::Time)publishDate;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_CONTENT_SUGGESTIONS_ARTICLE_ITEM_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
index 7b956b32..8bfb2525 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_article_item.h"
 
+#include "base/time/time.h"
 #import "ios/chrome/browser/ui/uikit_ui_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -29,6 +30,8 @@
 @synthesize subtitle = _subtitle;
 @synthesize image = _image;
 @synthesize articleURL = _articleURL;
+@synthesize publisher = _publisher;
+@synthesize publishDate = _publishDate;
 
 - (instancetype)initWithType:(NSInteger)type
                        title:(NSString*)title
@@ -51,17 +54,25 @@
   cell.titleLabel.text = _title;
   cell.subtitleLabel.text = _subtitle;
   cell.imageView.image = _image;
+  [cell setPublisherName:self.publisher date:self.publishDate];
 }
 
 @end
 
 #pragma mark - ContentSuggestionsArticleCell
 
+@interface ContentSuggestionsArticleCell ()
+
+@property(nonatomic, strong) UILabel* publisherLabel;
+
+@end
+
 @implementation ContentSuggestionsArticleCell
 
 @synthesize titleLabel = _titleLabel;
 @synthesize subtitleLabel = _subtitleLabel;
 @synthesize imageView = _imageView;
+@synthesize publisherLabel = _publisherLabel;
 
 - (instancetype)initWithFrame:(CGRect)frame {
   self = [super initWithFrame:frame];
@@ -69,45 +80,67 @@
     _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
     _subtitleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
     _imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
+    _publisherLabel = [[UILabel alloc] initWithFrame:CGRectZero];
 
     _subtitleLabel.numberOfLines = 0;
+    [_subtitleLabel setContentHuggingPriority:UILayoutPriorityDefaultHigh
+                                      forAxis:UILayoutConstraintAxisVertical];
+    [_titleLabel setContentHuggingPriority:UILayoutPriorityDefaultHigh
+                                   forAxis:UILayoutConstraintAxisVertical];
     _imageView.contentMode = UIViewContentModeScaleAspectFit;
 
     _imageView.translatesAutoresizingMaskIntoConstraints = NO;
     _titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
     _subtitleLabel.translatesAutoresizingMaskIntoConstraints = NO;
+    _publisherLabel.translatesAutoresizingMaskIntoConstraints = NO;
 
     [self.contentView addSubview:_imageView];
     [self.contentView addSubview:_titleLabel];
     [self.contentView addSubview:_subtitleLabel];
+    [self.contentView addSubview:_publisherLabel];
 
     [NSLayoutConstraint activateConstraints:@[
-      [self.contentView.bottomAnchor
+      [_imageView.widthAnchor constraintLessThanOrEqualToConstant:kImageSize],
+      [_imageView.heightAnchor constraintLessThanOrEqualToConstant:kImageSize],
+      [_publisherLabel.topAnchor
           constraintGreaterThanOrEqualToAnchor:_imageView.bottomAnchor
                                       constant:kStandardSpacing],
-      [self.contentView.bottomAnchor
+      [_publisherLabel.topAnchor
           constraintGreaterThanOrEqualToAnchor:_subtitleLabel.bottomAnchor
                                       constant:kStandardSpacing],
-      [_imageView.widthAnchor constraintLessThanOrEqualToConstant:kImageSize],
-      [_imageView.heightAnchor constraintLessThanOrEqualToConstant:kImageSize]
     ]];
 
     ApplyVisualConstraints(
         @[
           @"H:|-[title]-[image]-|",
           @"H:|-[text]-[image]",
-          @"V:|-[title]-[text]-|",
+          @"V:|-[title]-[text]",
           @"V:|-[image]",
+          @"H:|-[publish]-|",
+          @"V:[publish]-|",
         ],
         @{
           @"image" : _imageView,
           @"title" : _titleLabel,
-          @"text" : _subtitleLabel
+          @"text" : _subtitleLabel,
+          @"publish" : _publisherLabel,
         });
   }
   return self;
 }
 
+- (void)setPublisherName:(NSString*)publisherName date:(base::Time)publishDate {
+  NSDate* date = [NSDate dateWithTimeIntervalSince1970:publishDate.ToDoubleT()];
+  NSString* dateString =
+      [NSDateFormatter localizedStringFromDate:date
+                                     dateStyle:NSDateFormatterMediumStyle
+                                     timeStyle:NSDateFormatterNoStyle];
+
+  // TODO(crbug.com/694423): Make it RTL friendly.
+  self.publisherLabel.text =
+      [NSString stringWithFormat:@"%@ - %@.", publisherName, dateString];
+}
+
 #pragma mark - UIView
 
 // Implements -layoutSubviews as per instructions in documentation for
@@ -118,7 +151,8 @@
   // Adjust the text label preferredMaxLayoutWidth when the parent's width
   // changes, for instance on screen rotation.
   CGFloat parentWidth = CGRectGetWidth(self.contentView.bounds);
-  self.subtitleLabel.preferredMaxLayoutWidth = parentWidth - kImageSize - 3 * 8;
+  self.subtitleLabel.preferredMaxLayoutWidth =
+      parentWidth - self.imageView.bounds.size.width - 3 * 8;
 
   // Re-layout with the new preferred width to allow the label to adjust its
   // height.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
index 6e2c9a3..84b0761 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
+#include "base/time/time.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestion.h"
@@ -192,6 +193,8 @@
                 subtitle:suggestion.text
                    image:suggestion.image
                      url:suggestion.url];
+    articleItem.publisher = suggestion.publisher;
+    articleItem.publishDate = suggestion.publishDate;
 
     [model addItem:articleItem toSectionWithIdentifier:sectionIdentifier];
   }
diff --git a/ios/web/navigation/crw_session_controller.h b/ios/web/navigation/crw_session_controller.h
index d2ef342..d5cfeb5 100644
--- a/ios/web/navigation/crw_session_controller.h
+++ b/ios/web/navigation/crw_session_controller.h
@@ -19,6 +19,7 @@
 class BrowserState;
 class NavigationItemImpl;
 class NavigationManagerImpl;
+enum class NavigationInitiationType;
 struct Referrer;
 }
 
@@ -96,13 +97,13 @@
 - (void)setBrowserState:(web::BrowserState*)browserState;
 
 // Add a new item with the given url, referrer, and navigation type, making it
-// the current item. If |url| is the same as the current item's url, this
-// does nothing. |referrer| may be nil if there isn't one. The item starts
-// out as pending, and will be lost unless |-commitPendingItem| is called.
+// the current item. If pending item is the same as current item, this does
+// nothing. |referrer| may be nil if there isn't one. The item starts out as
+// pending, and will be lost unless |-commitPendingItem| is called.
 - (void)addPendingItem:(const GURL&)url
               referrer:(const web::Referrer&)referrer
             transition:(ui::PageTransition)type
-     rendererInitiated:(BOOL)rendererInitiated;
+        initiationType:(web::NavigationInitiationType)initiationType;
 
 // Updates the URL of the yet to be committed pending item. Useful for page
 // redirects. Does nothing if there is no pending item.
@@ -152,10 +153,6 @@
 - (BOOL)isSameDocumentNavigationBetweenItem:(web::NavigationItem*)firstItem
                                     andItem:(web::NavigationItem*)secondItem;
 
-// Set |useDesktopUserAgentForNextPendingItem_| to YES if there is no pending
-// entry, otherwise set |useDesktopUserAgent| in the pending entry.
-- (void)useDesktopUserAgentForNextPendingItem;
-
 // Returns the index of |item| in |items|.
 - (NSInteger)indexOfItem:(const web::NavigationItem*)item;
 
diff --git a/ios/web/navigation/crw_session_controller.mm b/ios/web/navigation/crw_session_controller.mm
index 2afdc55..d03bf94 100644
--- a/ios/web/navigation/crw_session_controller.mm
+++ b/ios/web/navigation/crw_session_controller.mm
@@ -111,8 +111,8 @@
 - (CRWSessionEntry*)sessionEntryWithURL:(const GURL&)url
                                referrer:(const web::Referrer&)referrer
                              transition:(ui::PageTransition)transition
-                    useDesktopUserAgent:(BOOL)useDesktopUserAgent
-                      rendererInitiated:(BOOL)rendererInitiated;
+                         initiationType:
+                             (web::NavigationInitiationType)initiationType;
 // Returns YES if the PageTransition for the underlying navigationItem at
 // |index| in |entries_| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK.
 - (BOOL)isRedirectTransitionForItemAtIndex:(NSInteger)index;
@@ -312,12 +312,16 @@
   // Only return the pending_entry for new (non-history), browser-initiated
   // navigations in order to prevent URL spoof attacks.
   web::NavigationItemImpl* pendingItem = [_pendingEntry navigationItemImpl];
-  bool safeToShowPending = pendingItem &&
-                           !pendingItem->is_renderer_initiated() &&
-                           _pendingItemIndex == -1;
-  if (safeToShowPending) {
-    return _pendingEntry.get();
+
+  if (pendingItem) {
+    bool isUserInitiated = pendingItem->NavigationInitiationType() ==
+                           web::NavigationInitiationType::USER_INITIATED;
+    bool safeToShowPending = isUserInitiated && _pendingItemIndex == -1;
+
+    if (safeToShowPending)
+      return _pendingEntry.get();
   }
+
   return [self lastCommittedEntry];
 }
 
@@ -345,7 +349,7 @@
 - (void)addPendingItem:(const GURL&)url
               referrer:(const web::Referrer&)ref
             transition:(ui::PageTransition)trans
-     rendererInitiated:(BOOL)rendererInitiated {
+        initiationType:(web::NavigationInitiationType)initiationType {
   [self discardTransientItem];
   _pendingItemIndex = -1;
 
@@ -361,10 +365,17 @@
   CRWSessionEntry* currentEntry = self.currentEntry;
   if (currentEntry) {
     web::NavigationItem* item = [currentEntry navigationItem];
-    if (item->GetURL() == url &&
-        (!PageTransitionCoreTypeIs(trans, ui::PAGE_TRANSITION_FORM_SUBMIT) ||
-         PageTransitionCoreTypeIs(item->GetTransitionType(),
-                                  ui::PAGE_TRANSITION_FORM_SUBMIT))) {
+
+    BOOL hasSameURL = item->GetURL() == url;
+    BOOL isPendingTransitionFormSubmit =
+        PageTransitionCoreTypeIs(trans, ui::PAGE_TRANSITION_FORM_SUBMIT);
+    BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
+        item->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT);
+    BOOL shouldCreatePendingItem =
+        !hasSameURL ||
+        (isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit);
+
+    if (!shouldCreatePendingItem) {
       // Send the notification anyway, to preserve old behavior. It's unknown
       // whether anything currently relies on this, but since both this whole
       // hack and the content facade will both be going away, it's not worth
@@ -376,16 +387,10 @@
     }
   }
 
-  BOOL useDesktopUserAgent =
-      _useDesktopUserAgentForNextPendingItem ||
-      (self.currentEntry.navigationItem &&
-       self.currentEntry.navigationItem->IsOverridingUserAgent());
-  _useDesktopUserAgentForNextPendingItem = NO;
   _pendingEntry.reset([self sessionEntryWithURL:url
                                        referrer:ref
                                      transition:trans
-                            useDesktopUserAgent:useDesktopUserAgent
-                              rendererInitiated:rendererInitiated]);
+                                 initiationType:initiationType]);
 
   if (_navigationManager && _navigationManager->GetFacadeDelegate()) {
     _navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
@@ -478,8 +483,7 @@
       sessionEntryWithURL:URL
                  referrer:web::Referrer()
                transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-      useDesktopUserAgent:NO
-        rendererInitiated:NO]);
+           initiationType:web::NavigationInitiationType::USER_INITIATED]);
 
   web::NavigationItem* navigationItem = [_transientEntry navigationItem];
   DCHECK(navigationItem);
@@ -492,19 +496,19 @@
                 transition:(ui::PageTransition)transition {
   DCHECK(![self pendingEntry]);
   DCHECK([self currentEntry]);
-  web::NavigationItem* item = [self currentEntry].navigationItem;
-  CHECK(
-      web::history_state_util::IsHistoryStateChangeValid(item->GetURL(), URL));
-  web::Referrer referrer(item->GetURL(), web::ReferrerPolicyDefault);
-  bool overrideUserAgent =
-      self.currentEntry.navigationItem->IsOverridingUserAgent();
+  web::NavigationItem* currentItem = [self currentEntry].navigationItem;
+  CHECK(web::history_state_util::IsHistoryStateChangeValid(
+      currentItem->GetURL(), URL));
+  web::Referrer referrer(currentItem->GetURL(), web::ReferrerPolicyDefault);
+
   base::scoped_nsobject<CRWSessionEntry> pushedEntry([self
       sessionEntryWithURL:URL
                  referrer:referrer
                transition:transition
-      useDesktopUserAgent:overrideUserAgent
-        rendererInitiated:NO]);
+           initiationType:web::NavigationInitiationType::USER_INITIATED]);
+
   web::NavigationItemImpl* pushedItem = [pushedEntry navigationItemImpl];
+  pushedItem->SetIsOverridingUserAgent(currentItem->IsOverridingUserAgent());
   pushedItem->SetSerializedStateObject(stateObject);
   pushedItem->SetIsCreatedFromPushState(true);
   web::SSLStatus& sslStatus = [self currentEntry].navigationItem->GetSSL();
@@ -673,13 +677,6 @@
   return [_entries objectAtIndex:index];
 }
 
-- (void)useDesktopUserAgentForNextPendingItem {
-  if (_pendingEntry)
-    [_pendingEntry navigationItem]->SetIsOverridingUserAgent(true);
-  else
-    _useDesktopUserAgentForNextPendingItem = YES;
-}
-
 - (NSInteger)indexOfItem:(const web::NavigationItem*)item {
   web::NavigationItemList items = self.items;
   for (NSInteger i = 0; i < static_cast<NSInteger>(items.size()); ++i) {
@@ -695,8 +692,8 @@
 - (CRWSessionEntry*)sessionEntryWithURL:(const GURL&)url
                                referrer:(const web::Referrer&)referrer
                              transition:(ui::PageTransition)transition
-                    useDesktopUserAgent:(BOOL)useDesktopUserAgent
-                      rendererInitiated:(BOOL)rendererInitiated {
+                         initiationType:
+                             (web::NavigationInitiationType)initiationType {
   GURL loaded_url(url);
   BOOL urlWasRewritten = NO;
   if (_navigationManager) {
@@ -711,13 +708,13 @@
     web::BrowserURLRewriter::GetInstance()->RewriteURLIfNecessary(
         &loaded_url, _browserState);
   }
+
   std::unique_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl());
   item->SetOriginalRequestURL(loaded_url);
   item->SetURL(loaded_url);
   item->SetReferrer(referrer);
   item->SetTransitionType(transition);
-  item->SetIsOverridingUserAgent(useDesktopUserAgent);
-  item->set_is_renderer_initiated(rendererInitiated);
+  item->SetNavigationInitiationType(initiationType);
   return [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item)];
 }
 
diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
index 40b2c18..5e9057f 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -15,6 +15,7 @@
 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
 #import "ios/web/navigation/crw_session_entry.h"
 #import "ios/web/navigation/navigation_item_impl.h"
+#import "ios/web/navigation/navigation_manager_impl.h"
 #include "ios/web/public/referrer.h"
 #include "ios/web/public/test/fakes/test_browser_state.h"
 #include "ios/web/public/test/test_web_thread_bundle.h"
@@ -73,10 +74,11 @@
 
 // Tests session controller state after setting a pending index.
 TEST_F(CRWSessionControllerTest, SetPendingIndex) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
@@ -87,10 +89,11 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItem) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   EXPECT_EQ(0U, [[session_controller_ entries] count]);
   EXPECT_EQ(
@@ -99,16 +102,18 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedEntries) {
-  [session_controller_ addPendingItem:GURL("http://www.committed.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.committed.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   EXPECT_EQ(1U, [[session_controller_ entries] count]);
   EXPECT_EQ(
@@ -121,15 +126,17 @@
 
 // Tests that adding a pending entry resets pending entry index.
 TEST_F(CRWSessionControllerTest, addPendingItemWithExisingPendingEntryIndex) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // Set 0 as pending entry index.
@@ -139,25 +146,27 @@
   EXPECT_EQ(0, [session_controller_ pendingItemIndex]);
 
   // Add a pending entry, which should drop pending navigation index.
-  [session_controller_ addPendingItem:GURL("http://www.example.com/1")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/1")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   EXPECT_EQ(GURL("http://www.example.com/1"),
             [[session_controller_ pendingEntry] navigationItem]->GetURL());
   EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemOverriding) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
   [session_controller_
-         addPendingItem:GURL("http://www.another.url.com")
-               referrer:MakeReferrer("http://www.another.referer.com")
-             transition:ui::PAGE_TRANSITION_TYPED
-      rendererInitiated:NO];
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
+  [session_controller_
+      addPendingItem:GURL("http://www.another.url.com")
+            referrer:MakeReferrer("http://www.another.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   EXPECT_EQ(0U, [[session_controller_ entries] count]);
   EXPECT_EQ(
@@ -166,10 +175,11 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [[session_controller_ entries] count]);
@@ -182,15 +192,16 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
   [session_controller_
-         addPendingItem:GURL("http://www.another.url.com")
-               referrer:MakeReferrer("http://www.another.referer.com")
-             transition:ui::PAGE_TRANSITION_TYPED
-      rendererInitiated:NO];
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
+  [session_controller_
+      addPendingItem:GURL("http://www.another.url.com")
+            referrer:MakeReferrer("http://www.another.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [[session_controller_ entries] count]);
@@ -203,17 +214,18 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   [session_controller_
-         addPendingItem:GURL("http://www.another.url.com")
-               referrer:MakeReferrer("http://www.another.referer.com")
-             transition:ui::PAGE_TRANSITION_TYPED
-      rendererInitiated:NO];
+      addPendingItem:GURL("http://www.another.url.com")
+            referrer:MakeReferrer("http://www.another.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(2U, [[session_controller_ entries] count]);
@@ -229,10 +241,11 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ discardNonCommittedItems];
 
   EXPECT_EQ(0U, [[session_controller_ entries] count]);
@@ -241,10 +254,11 @@
 
 // Tests discarding pending entry added via |setPendingItemIndex:| call.
 TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   [session_controller_ setPendingItemIndex:0];
@@ -257,16 +271,18 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ discardNonCommittedItems];
 
-  [session_controller_ addPendingItem:GURL("http://www.another.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.another.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(1U, [[session_controller_ entries] count]);
@@ -279,16 +295,18 @@
 }
 
 TEST_F(CRWSessionControllerTest, addPendingItemAndCommitAndAddAndDiscard) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
-  [session_controller_ addPendingItem:GURL("http://www.another.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.another.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ discardNonCommittedItems];
 
   EXPECT_EQ(1U, [[session_controller_ entries] count]);
@@ -311,10 +329,11 @@
 TEST_F(CRWSessionControllerTest,
        commitPendingItemWithoutPendingEntryWithCommittedEntry) {
   // Setup committed entry
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // Commit pending entry when there is no such one
@@ -329,30 +348,34 @@
 // Tests that forward entries are discarded after navigation entry is committed.
 TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardEntries) {
   // Make 3 entries.
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/1")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/1")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/2")
-                             referrer:MakeReferrer("http://www.example.com/c")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/2")
+            referrer:MakeReferrer("http://www.example.com/c")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // Go back to the first entry.
   [session_controller_ goToItemAtIndex:0];
 
   // Create and commit a new pending entry.
-  [session_controller_ addPendingItem:GURL("http://www.example.com/2")
-                             referrer:MakeReferrer("http://www.example.com/c")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/2")
+            referrer:MakeReferrer("http://www.example.com/c")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // All forward entries should go away.
@@ -364,20 +387,23 @@
 
 // Tests committing pending entry index from the middle.
 TEST_F(CRWSessionControllerTest, commitPendingItemIndex) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/1")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/1")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/2")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/2")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   ASSERT_EQ(3U, [[session_controller_ entries] count]);
 
@@ -413,10 +439,11 @@
 TEST_F(CRWSessionControllerTest,
        DiscardPendingEntryWithoutPendingEntryWithCommittedEntry) {
   // Setup committed entry
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // Discard noncommitted entries when there is no such one
@@ -437,10 +464,11 @@
 }
 
 TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingEntry) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
 
   EXPECT_EQ(
@@ -450,10 +478,11 @@
 
 TEST_F(CRWSessionControllerTest,
        updatePendingItemWithPendingEntryAlreadyCommited) {
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
   [session_controller_ commitPendingItem];
@@ -470,15 +499,17 @@
 // Tests inserting session controller state.
 TEST_F(CRWSessionControllerTest, InsertState) {
   // Add 1 committed and 1 pending entry to target controller.
-  [session_controller_ addPendingItem:GURL("http://www.url.com/2")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/2")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.url.com/3")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/3")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   // Create source session controller with 1 committed entry.
   base::scoped_nsobject<CRWSessionController> other_session_controller(
@@ -488,15 +519,17 @@
                                  openerNavigationIndex:0
                                           browserState:&browser_state_]);
   [other_session_controller setWindowName:@"test-window"];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/0")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [other_session_controller commitPendingItem];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/1")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/1")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   // Insert and verify the state of target session controller.
   [session_controller_
@@ -519,15 +552,17 @@
 // Tests inserting session controller state from empty session controller.
 TEST_F(CRWSessionControllerTest, InsertStateFromEmptySessionController) {
   // Add 2 committed entries to target controller.
-  [session_controller_ addPendingItem:GURL("http://www.url.com/0")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.url.com/1")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/1")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   // Create empty source session controller.
@@ -566,20 +601,23 @@
                                  openerNavigationIndex:0
                                           browserState:&browser_state_]);
   [other_session_controller setWindowName:@"test-window"];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/0")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [other_session_controller commitPendingItem];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/1")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/1")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [other_session_controller commitPendingItem];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/2")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/2")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
 
   // Insert and verify the state of target session controller.
   [session_controller_
@@ -602,15 +640,17 @@
 TEST_F(CRWSessionControllerTest,
        InsertStateWithPendingEntryIndexInTargetController) {
   // Add 2 committed entries and make the first entry pending.
-  [session_controller_ addPendingItem:GURL("http://www.url.com/2")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/2")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.url.com/3")
-                             referrer:web::Referrer()
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com/3")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   [session_controller_ setPendingItemIndex:0];
 
@@ -622,10 +662,11 @@
                                  openerNavigationIndex:0
                                           browserState:&browser_state_]);
   [other_session_controller setWindowName:@"test-window"];
-  [other_session_controller addPendingItem:GURL("http://www.url.com/0")
-                                  referrer:web::Referrer()
-                                transition:ui::PAGE_TRANSITION_TYPED
-                         rendererInitiated:NO];
+  [other_session_controller
+      addPendingItem:GURL("http://www.url.com/0")
+            referrer:web::Referrer()
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [other_session_controller commitPendingItem];
 
   // Insert and verify the state of target session controller.
@@ -711,22 +752,25 @@
 // Tests index of previous navigation entry.
 TEST_F(CRWSessionControllerTest, PreviousNavigationEntry) {
   EXPECT_EQ(session_controller_.get().previousNavigationIndex, -1);
-  [session_controller_ addPendingItem:GURL("http://www.url.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(session_controller_.get().previousNavigationIndex, -1);
-  [session_controller_ addPendingItem:GURL("http://www.url1.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url1.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(session_controller_.get().previousNavigationIndex, 0);
-  [session_controller_ addPendingItem:GURL("http://www.url2.com")
-                             referrer:MakeReferrer("http://www.referer.com")
-                           transition:ui::PAGE_TRANSITION_TYPED
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.url2.com")
+            referrer:MakeReferrer("http://www.referer.com")
+          transition:ui::PAGE_TRANSITION_TYPED
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
@@ -884,25 +928,29 @@
 }
 
 TEST_F(CRWSessionControllerTest, TestBackwardForwardEntries) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/1")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/1")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/redirect")
-                             referrer:MakeReferrer("http://www.example.com/r")
-                           transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/redirect")
+            referrer:MakeReferrer("http://www.example.com/r")
+          transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/2")
-                             referrer:MakeReferrer("http://www.example.com/c")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/2")
+            referrer:MakeReferrer("http://www.example.com/c")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
@@ -926,30 +974,35 @@
 
 // Tests going to entries with existing and non-existing indices.
 TEST_F(CRWSessionControllerTest, GoToEntryAtIndex) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/1")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/1")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/redirect")
-                             referrer:MakeReferrer("http://www.example.com/r")
-                           transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/redirect")
+            referrer:MakeReferrer("http://www.example.com/r")
+          transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/2")
-                             referrer:MakeReferrer("http://www.example.com/c")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/2")
+            referrer:MakeReferrer("http://www.example.com/c")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/3")
-                             referrer:MakeReferrer("http://www.example.com/d")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/3")
+            referrer:MakeReferrer("http://www.example.com/d")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
   EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
   EXPECT_EQ(2, session_controller_.get().previousNavigationIndex);
@@ -998,10 +1051,11 @@
 // Tests that visible URL is the same as transient URL if there is a committed
 // entry.
 TEST_F(CRWSessionControllerTest, VisibleEntryWithCommittedAndTransientEntries) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
   [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
   web::NavigationItem* visible_item =
@@ -1013,10 +1067,11 @@
 // Tests that visible URL is the same as pending URL if it was user-initiated.
 TEST_F(CRWSessionControllerTest,
        VisibleEntryWithSingleUserInitiatedPendingEntry) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   web::NavigationItem* visible_item =
       [[session_controller_ visibleEntry] navigationItem];
   ASSERT_TRUE(visible_item);
@@ -1027,15 +1082,17 @@
 // and there is a committed entry.
 TEST_F(CRWSessionControllerTest,
        VisibleEntryWithCommittedAndUserInitiatedPendingEntry) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   web::NavigationItem* visible_item =
       [[session_controller_ visibleEntry] navigationItem];
   ASSERT_TRUE(visible_item);
@@ -1046,10 +1103,11 @@
 // renderer-initiated.
 TEST_F(CRWSessionControllerTest,
        VisibleEntryWithSingleRendererInitiatedPendingEntry) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   web::NavigationItem* visible_item =
       [[session_controller_ visibleEntry] navigationItem];
   ASSERT_FALSE(visible_item);
@@ -1059,15 +1117,17 @@
 // renderer-initiated and there is a committed entry.
 TEST_F(CRWSessionControllerTest,
        VisibleEntryWithCommittedAndRendererInitiatedPendingEntry) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   web::NavigationItem* visible_item =
       [[session_controller_ visibleEntry] navigationItem];
   ASSERT_TRUE(visible_item);
@@ -1077,15 +1137,17 @@
 // Tests that visible URL is not the same as pending URL created via pending
 // navigation index.
 TEST_F(CRWSessionControllerTest, VisibleEntryWithPendingNavigationIndex) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_LINK
-                    rendererInitiated:NO];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_LINK
+      initiationType:web::NavigationInitiationType::USER_INITIATED];
   [session_controller_ commitPendingItem];
 
   [session_controller_ setPendingItemIndex:0];
@@ -1099,15 +1161,17 @@
 // Tests that |-backwardEntries| is empty if all preceding entries are
 // redirects.
 TEST_F(CRWSessionControllerTest, BackwardEntriesForAllRedirects) {
-  [session_controller_ addPendingItem:GURL("http://www.example.com")
-                             referrer:MakeReferrer("http://www.example.com/a")
-                           transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com")
+            referrer:MakeReferrer("http://www.example.com/a")
+          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
-  [session_controller_ addPendingItem:GURL("http://www.example.com/0")
-                             referrer:MakeReferrer("http://www.example.com/b")
-                           transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
-                    rendererInitiated:YES];
+  [session_controller_
+      addPendingItem:GURL("http://www.example.com/0")
+            referrer:MakeReferrer("http://www.example.com/b")
+          transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
+      initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
   [session_controller_ commitPendingItem];
   EXPECT_EQ(0U, [session_controller_ backwardEntries].count);
 }
diff --git a/ios/web/navigation/navigation_item_impl.h b/ios/web/navigation/navigation_item_impl.h
index 1b57b3d..f42cacc 100644
--- a/ios/web/navigation/navigation_item_impl.h
+++ b/ios/web/navigation/navigation_item_impl.h
@@ -22,6 +22,7 @@
 
 class NavigationItemFacadeDelegate;
 class NavigationItemStorageBuilder;
+enum class NavigationInitiationType;
 
 // Implementation of NavigationItem.
 class NavigationItemImpl : public web::NavigationItem {
@@ -94,6 +95,12 @@
   void SetIsCreatedFromHashChange(bool hash_change);
   bool IsCreatedFromHashChange() const;
 
+  // The initiation type of this pending navigation. Resets to user-initiated
+  // after commit.
+  void SetNavigationInitiationType(
+      web::NavigationInitiationType navigation_initiation_type);
+  web::NavigationInitiationType NavigationInitiationType() const;
+
   // Whether or not to bypass showing the repost form confirmation when loading
   // a POST request. Set to YES for browser-generated POST requests.
   void SetShouldSkipRepostFormConfirmation(bool skip);
@@ -113,13 +120,6 @@
   // non-persisted state, as documented on the members below.
   void ResetForCommit();
 
-  // Whether this (pending) navigation is renderer-initiated.  Resets to false
-  // for all types of navigations after commit.
-  void set_is_renderer_initiated(bool is_renderer_initiated) {
-    is_renderer_initiated_ = is_renderer_initiated;
-  }
-  bool is_renderer_initiated() const { return is_renderer_initiated_; }
-
  private:
   // The NavigationManItemStorageBuilder functions require access to
   // private variables of NavigationItemImpl.
@@ -146,10 +146,10 @@
   bool should_skip_repost_form_confirmation_;
   base::scoped_nsobject<NSData> post_data_;
 
-  // Whether the item, while loading, was created for a renderer-initiated
-  // navigation.  This dictates whether the URL should be displayed before the
-  // navigation commits.  It is cleared in |ResetForCommit| and not persisted.
-  bool is_renderer_initiated_;
+  // The navigation initiation type of the item.  This decides whether the URL
+  // should be displayed before the navigation commits.  It is cleared in
+  // |ResetForCommit| and not persisted.
+  web::NavigationInitiationType navigation_initiation_type_;
 
   // Whether the navigation contains unsafe resources.
   bool is_unsafe_;
diff --git a/ios/web/navigation/navigation_item_impl.mm b/ios/web/navigation/navigation_item_impl.mm
index 3b62690..1757cd9 100644
--- a/ios/web/navigation/navigation_item_impl.mm
+++ b/ios/web/navigation/navigation_item_impl.mm
@@ -11,6 +11,7 @@
 
 #include "base/logging.h"
 #include "components/url_formatter/url_formatter.h"
+#import "ios/web/navigation/navigation_manager_impl.h"
 #include "ui/base/page_transition_types.h"
 #include "ui/gfx/text_elider.h"
 
@@ -44,7 +45,8 @@
       has_state_been_replaced_(false),
       is_created_from_hash_change_(false),
       should_skip_repost_form_confirmation_(false),
-      is_renderer_initiated_(false),
+      navigation_initiation_type_(
+          web::NavigationInitiationType::USER_INITIATED),
       is_unsafe_(false),
       facade_delegate_(nullptr) {}
 
@@ -72,7 +74,7 @@
       should_skip_repost_form_confirmation_(
           item.should_skip_repost_form_confirmation_),
       post_data_([item.post_data_ copy]),
-      is_renderer_initiated_(item.is_renderer_initiated_),
+      navigation_initiation_type_(item.navigation_initiation_type_),
       is_unsafe_(item.is_unsafe_),
       cached_display_title_(item.cached_display_title_),
       facade_delegate_(nullptr) {}
@@ -250,6 +252,16 @@
   return is_created_from_push_state_;
 }
 
+void NavigationItemImpl::SetNavigationInitiationType(
+    web::NavigationInitiationType navigation_initiation_type) {
+  navigation_initiation_type_ = navigation_initiation_type;
+}
+
+web::NavigationInitiationType NavigationItemImpl::NavigationInitiationType()
+    const {
+  return navigation_initiation_type_;
+}
+
 void NavigationItemImpl::SetHasStateBeenReplaced(bool replace_state) {
   has_state_been_replaced_ = replace_state;
 }
@@ -296,7 +308,7 @@
 void NavigationItemImpl::ResetForCommit() {
   // Any state that only matters when a navigation item is pending should be
   // cleared here.
-  set_is_renderer_initiated(false);
+  SetNavigationInitiationType(web::NavigationInitiationType::USER_INITIATED);
 }
 
 }  // namespace web
diff --git a/ios/web/navigation/navigation_manager_impl.h b/ios/web/navigation/navigation_manager_impl.h
index cf1b295..11663bd 100644
--- a/ios/web/navigation/navigation_manager_impl.h
+++ b/ios/web/navigation/navigation_manager_impl.h
@@ -26,6 +26,20 @@
 class NavigationManagerFacadeDelegate;
 class SessionStorageBuilder;
 
+// Defines the ways how a pending navigation can be initiated.
+enum class NavigationInitiationType {
+  // Navigation was initiated by actual user action.
+  USER_INITIATED = 1,
+
+  // Navigation was initiated by renderer. Examples of renderer-initiated
+  // navigations include:
+  //  * <a> link click
+  //  * changing window.location.href
+  //  * redirect via the <meta http-equiv="refresh"> tag
+  //  * using window.history.pushState
+  RENDERER_INITIATED,
+};
+
 // Implementation of NavigationManager.
 // Generally mirrors upstream's NavigationController.
 class NavigationManagerImpl : public NavigationManager {
@@ -82,6 +96,16 @@
                const Referrer& referrer,
                ui::PageTransition type);
 
+  // Adds a new item with the given url, referrer, navigation type, and
+  // initiation type, making it the pending item. If pending item is the same as
+  // the current item, this does nothing. |referrer| may be nil if there isn't
+  // one. The item starts out as pending, and will be lost unless
+  // |-commitPendingItem| is called.
+  void AddPendingItem(const GURL& url,
+                      const web::Referrer& referrer,
+                      ui::PageTransition navigation_type,
+                      NavigationInitiationType initiation_type);
+
   // Convenience accessors to get the underlying NavigationItems from the
   // SessionEntries returned from |session_controller_|'s -lastUserEntry and
   // -previousEntry methods.
@@ -119,6 +143,7 @@
   void GoForward() override;
   void GoToIndex(int index) override;
   void Reload(bool check_for_reposts) override;
+  void OverrideDesktopUserAgentForNextPendingItem() override;
 
   // Returns the current list of transient url rewriters, passing ownership to
   // the caller.
@@ -150,6 +175,12 @@
   // |index| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK.
   bool IsRedirectItemAtIndex(int index) const;
 
+  // If true, override navigation item's useDesktopUserAgent flag and always
+  // create the pending entry using the desktop user agent.
+  // TODO(crbug.com/692303): Remove this when overriding the user agent doesn't
+  // create a new NavigationItem.
+  bool override_desktop_user_agent_for_next_pending_item_;
+
   // The primary delegate for this manager.
   NavigationManagerDelegate* delegate_;
 
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm
index b246e7e1..140c760 100644
--- a/ios/web/navigation/navigation_manager_impl.mm
+++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -68,7 +68,10 @@
 }
 
 NavigationManagerImpl::NavigationManagerImpl()
-    : delegate_(nullptr), browser_state_(nullptr), facade_delegate_(nullptr) {}
+    : override_desktop_user_agent_for_next_pending_item_(false),
+      delegate_(nullptr),
+      browser_state_(nullptr),
+      facade_delegate_(nullptr) {}
 
 NavigationManagerImpl::~NavigationManagerImpl() {
   // The facade layer should be deleted before this object.
@@ -173,6 +176,27 @@
   delegate_->GetWebState()->OpenURL(params);
 }
 
+void NavigationManagerImpl::AddPendingItem(
+    const GURL& url,
+    const web::Referrer& referrer,
+    ui::PageTransition navigation_type,
+    NavigationInitiationType initiation_type) {
+  [session_controller_ addPendingItem:url
+                             referrer:referrer
+                           transition:navigation_type
+                       initiationType:initiation_type];
+
+  // Do nothing if pending item is the same as last committed item.
+  if (GetPendingItem()) {
+    bool use_desktop_user_agent =
+        override_desktop_user_agent_for_next_pending_item_ ||
+        (GetLastCommittedItem() &&
+         GetLastCommittedItem()->IsOverridingUserAgent());
+    GetPendingItem()->SetIsOverridingUserAgent(use_desktop_user_agent);
+    override_desktop_user_agent_for_next_pending_item_ = false;
+  }
+}
+
 NavigationItem* NavigationManagerImpl::GetLastUserItem() const {
   CRWSessionEntry* entry = [session_controller_ lastUserEntry];
   return [entry navigationItem];
@@ -396,6 +420,13 @@
   return result;
 }
 
+void NavigationManagerImpl::OverrideDesktopUserAgentForNextPendingItem() {
+  if (GetPendingItem())
+    GetPendingItem()->SetIsOverridingUserAgent(true);
+  else
+    override_desktop_user_agent_for_next_pending_item_ = true;
+}
+
 bool NavigationManagerImpl::IsRedirectItemAtIndex(int index) const {
   DCHECK_GT(index, 0);
   DCHECK_LT(index, GetItemCount());
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm
index 7506a80c..420beea8 100644
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -8,6 +8,7 @@
 #import "base/mac/scoped_nsobject.h"
 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
 #import "ios/web/navigation/navigation_manager_delegate.h"
+#include "ios/web/public/navigation_item.h"
 #include "ios/web/public/test/fakes/test_browser_state.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
@@ -62,10 +63,9 @@
 
 // Tests that GetPendingItemIndex() returns -1 if there is no pending entry.
 TEST_F(NavigationManagerTest, GetPendingItemIndexWithoutPendingEntry) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
   EXPECT_EQ(-1, navigation_manager()->GetPendingItemIndex());
 }
@@ -73,30 +73,26 @@
 // Tests that GetPendingItemIndex() returns current item index if there is a
 // pending entry.
 TEST_F(NavigationManagerTest, GetPendingItemIndexWithPendingEntry) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   EXPECT_EQ(0, navigation_manager()->GetPendingItemIndex());
 }
 
 // Tests that GetPendingItemIndex() returns same index as was set by
 // -[CRWSessionController setPendingItemIndex:].
 TEST_F(NavigationManagerTest, GetPendingItemIndexWithIndexedPendingEntry) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
 
   EXPECT_EQ(-1, navigation_manager()->GetPendingItemIndex());
@@ -123,10 +119,9 @@
 // Tests that going back or negative offset is possible if there is a transient
 // item and at least one committed item.
 TEST_F(NavigationManagerTest, CanGoBackWithTransientItemAndCommittedItem) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
   [session_controller() addTransientItemWithURL:GURL("http://www.url.com/0")];
 
@@ -137,10 +132,9 @@
 // Tests that going back or negative offset is not possible if there is ony one
 // committed item and no transient item.
 TEST_F(NavigationManagerTest, CanGoBackWithSingleCommitedItem) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
 
   EXPECT_FALSE(navigation_manager()->CanGoBack());
@@ -149,20 +143,17 @@
 
 // Tests going back possibility with multiple committed items.
 TEST_F(NavigationManagerTest, CanGoBackWithMultipleCommitedItems) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/1")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
 
   EXPECT_TRUE(navigation_manager()->CanGoBack());
@@ -184,21 +175,18 @@
 // Tests that going forward or positive offset is not possible if there is a
 // pending entry.
 TEST_F(NavigationManagerTest, CanGoForwardWithPendingItem) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
   [session_controller() goToItemAtIndex:0];
-  [session_controller() addPendingItem:GURL("http://www.url.com/1")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
 
   // Pending entry should not allow going forward.
   EXPECT_FALSE(navigation_manager()->CanGoForward());
@@ -215,10 +203,9 @@
 // Tests that going forward or positive offset is not possible if there is ony
 // one committed item and no transient item.
 TEST_F(NavigationManagerTest, CanGoForwardWithSingleCommitedItem) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
 
   EXPECT_FALSE(navigation_manager()->CanGoForward());
@@ -227,20 +214,17 @@
 
 // Tests going forward possibility with multiple committed items.
 TEST_F(NavigationManagerTest, CanGoForwardWithMultipleCommitedEntries) {
-  [session_controller() addPendingItem:GURL("http://www.url.com")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/1")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_TYPED
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
 
   EXPECT_FALSE(navigation_manager()->CanGoForward());
@@ -267,30 +251,27 @@
 // navigation manager will have redirect entries to make sure they are
 // appropriately skipped.
 TEST_F(NavigationManagerTest, OffsetsWithoutPendingIndex) {
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/redirect")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/redirect"), Referrer(),
+      ui::PAGE_TRANSITION_IS_REDIRECT_MASK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/1")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/2")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/2"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/redirect")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/redirect"), Referrer(),
+      ui::PAGE_TRANSITION_IS_REDIRECT_MASK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
   ASSERT_EQ(5, navigation_manager()->GetItemCount());
   ASSERT_EQ(4, navigation_manager()->GetCurrentItemIndex());
@@ -494,20 +475,17 @@
 TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) {
   // Create a transient item in the middle of the navigation stack and go back
   // to it (pending index is 1, current index is 2).
-  [session_controller() addPendingItem:GURL("http://www.url.com/0")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/1")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
-  [session_controller() addPendingItem:GURL("http://www.url.com/2")
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com/2"), Referrer(), ui::PAGE_TRANSITION_LINK,
+      web::NavigationInitiationType::USER_INITIATED);
   [session_controller() commitPendingItem];
   [session_controller() addTransientItemWithURL:GURL("http://www.url.com/1")];
   [session_controller() setPendingItemIndex:1];
@@ -529,4 +507,15 @@
   EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1));
 }
 
+// Tests that desktop user agent can be enforced to use for next pending item.
+TEST_F(NavigationManagerTest, OverrideDesktopUserAgent) {
+  navigation_manager()->OverrideDesktopUserAgentForNextPendingItem();
+  navigation_manager()->AddPendingItem(
+      GURL("http://www.url.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
+      web::NavigationInitiationType::USER_INITIATED);
+  [session_controller() commitPendingItem];
+  NavigationItem* visible_item = navigation_manager()->GetVisibleItem();
+  EXPECT_TRUE(visible_item->IsOverridingUserAgent());
+}
+
 }  // namespace web
diff --git a/ios/web/net/crw_ssl_status_updater_unittest.mm b/ios/web/net/crw_ssl_status_updater_unittest.mm
index ee4243a..e7fe2f28 100644
--- a/ios/web/net/crw_ssl_status_updater_unittest.mm
+++ b/ios/web/net/crw_ssl_status_updater_unittest.mm
@@ -109,10 +109,11 @@
             initWithNavigationItems:std::move(nav_items)
                        currentIndex:0
                        browserState:GetBrowserState()]);
-    [session_controller addPendingItem:GURL(item_url_spec)
-                              referrer:Referrer()
-                            transition:ui::PAGE_TRANSITION_LINK
-                     rendererInitiated:NO];
+    [session_controller
+        addPendingItem:GURL(item_url_spec)
+              referrer:Referrer()
+            transition:ui::PAGE_TRANSITION_LINK
+        initiationType:web::NavigationInitiationType::USER_INITIATED];
     [session_controller commitPendingItem];
 
     return session_controller.autorelease();
diff --git a/ios/web/public/navigation_manager.h b/ios/web/public/navigation_manager.h
index f3e106d..bec6c696 100644
--- a/ios/web/public/navigation_manager.h
+++ b/ios/web/public/navigation_manager.h
@@ -148,6 +148,12 @@
   // reload the page. In nearly all cases pass in true.  If a transient item is
   // showing, initiates a new navigation to its URL.
   virtual void Reload(bool check_for_repost) = 0;
+
+  // Forces the pending item to be loaded using desktop user agent. Note that
+  // the pending item may or may not already exist.
+  // TODO(crbug.com/692303): Remove this when overriding the user agent doesn't
+  // create a new NavigationItem.
+  virtual void OverrideDesktopUserAgentForNextPendingItem() = 0;
 };
 
 }  // namespace web
diff --git a/ios/web/public/test/fakes/test_navigation_manager.h b/ios/web/public/test/fakes/test_navigation_manager.h
index ca6c49b..812077a 100644
--- a/ios/web/public/test/fakes/test_navigation_manager.h
+++ b/ios/web/public/test/fakes/test_navigation_manager.h
@@ -39,6 +39,7 @@
   void GoForward() override;
   void GoToIndex(int index) override;
   void Reload(bool check_for_reposts) override;
+  void OverrideDesktopUserAgentForNextPendingItem() override;
 
   // Setters for test data.
   void SetLastCommittedItem(NavigationItem* item);
diff --git a/ios/web/public/test/fakes/test_navigation_manager.mm b/ios/web/public/test/fakes/test_navigation_manager.mm
index 38eafcac..954d59a 100644
--- a/ios/web/public/test/fakes/test_navigation_manager.mm
+++ b/ios/web/public/test/fakes/test_navigation_manager.mm
@@ -54,24 +54,20 @@
 
 void TestNavigationManager::DiscardNonCommittedItems() {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::LoadIfNecessary() {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::LoadURLWithParams(
     const NavigationManager::WebLoadParams& params) {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::AddTransientURLRewriter(
     BrowserURLRewriter::URLRewriter rewriter) {
   NOTREACHED();
-  return;
 }
 
 int TestNavigationManager::GetItemCount() const {
@@ -121,22 +117,22 @@
 
 void TestNavigationManager::GoBack() {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::GoForward() {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::GoToIndex(int index) {
   NOTREACHED();
-  return;
 }
 
 void TestNavigationManager::Reload(bool check_for_repost) {
   NOTREACHED();
-  return;
+}
+
+void TestNavigationManager::OverrideDesktopUserAgentForNextPendingItem() {
+  NOTREACHED();
 }
 
 }  // namespace web
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index aff3c438..d7b23f9 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -435,6 +435,8 @@
 @property(nonatomic, readwrite) id<CRWNativeContent> nativeController;
 // Returns NavigationManager's session controller.
 @property(nonatomic, readonly) CRWSessionController* sessionController;
+// The associated NavigationManagerImpl.
+@property(nonatomic, readonly) NavigationManagerImpl* navigationManagerImpl;
 // Dictionary where keys are the names of WKWebView properties and values are
 // selector names which should be called when a corresponding property has
 // changed. e.g. @{ @"URL" : @"webViewURLDidChange" } means that
@@ -1376,8 +1378,8 @@
 
 - (void)setNavigationItemTitle:(NSString*)title {
   DCHECK(title);
-  auto& navigationManager = _webStateImpl->GetNavigationManagerImpl();
-  web::NavigationItem* item = navigationManager.GetLastCommittedItem();
+  web::NavigationItem* item =
+      self.navigationManagerImpl->GetLastCommittedItem();
   if (!item)
     return;
 
@@ -1389,7 +1391,7 @@
   // TODO(crbug.com/546218): See if this can be removed; it's not clear that
   // other platforms send this (tab sync triggers need to be compared against
   // upstream).
-  navigationManager.OnNavigationItemChanged();
+  self.navigationManagerImpl->OnNavigationItemChanged();
 
   if ([_delegate respondsToSelector:@selector(webController:titleDidChange:)]) {
     [_delegate webController:self titleDidChange:title];
@@ -1572,16 +1574,15 @@
 
   [_delegate webWillAddPendingURL:requestURL transition:transition];
   // Add or update pending url.
-  if (_webStateImpl->GetNavigationManagerImpl().GetPendingItem()) {
+  if (self.navigationManagerImpl->GetPendingItem()) {
     // Update the existing pending entry.
     // Typically on PAGE_TRANSITION_CLIENT_REDIRECT.
     [[self sessionController] updatePendingItem:requestURL];
   } else {
     // A new session history entry needs to be created.
-    [[self sessionController] addPendingItem:requestURL
-                                    referrer:referrer
-                                  transition:transition
-                           rendererInitiated:YES];
+    self.navigationManagerImpl->AddPendingItem(
+        requestURL, referrer, transition,
+        web::NavigationInitiationType::RENDERER_INITIATED);
   }
   _webStateImpl->SetIsLoading(true);
   _webStateImpl->OnProvisionalNavigationStarted(requestURL);
@@ -1619,7 +1620,7 @@
 
   // TODO(stuartmorgan): Make CRWSessionController manage this internally (or
   // remove it; it's not clear this matches other platforms' behavior).
-  _webStateImpl->GetNavigationManagerImpl().OnNavigationItemCommitted();
+  self.navigationManagerImpl->OnNavigationItemCommitted();
   // Record that a same-document hashchange event will be fired.  This flag will
   // be reset when resonding to the hashchange message.  Note that resetting the
   // flag in the completion block below is too early, as that block is called
@@ -1915,14 +1916,16 @@
     // forward/back transitions?
     [self recordStateInHistory];
 
-    CRWSessionController* history =
-        _webStateImpl->GetNavigationManagerImpl().GetSessionController();
     if (!self.currentSessionEntry)
       initialNavigation = YES;
-    [history addPendingItem:navUrl
-                   referrer:params.referrer
-                 transition:transition
-          rendererInitiated:params.is_renderer_initiated];
+
+    web::NavigationInitiationType navigationInitiationType =
+        params.is_renderer_initiated
+            ? web::NavigationInitiationType::RENDERER_INITIATED
+            : web::NavigationInitiationType::USER_INITIATED;
+    self.navigationManagerImpl->AddPendingItem(
+        navUrl, params.referrer, transition, navigationInitiationType);
+
     web::NavigationItemImpl* addedItem =
         [self currentSessionEntry].navigationItemImpl;
     DCHECK(addedItem);
@@ -2061,8 +2064,7 @@
 - (BOOL)shouldReload:(const GURL&)destinationURL
           transition:(ui::PageTransition)transition {
   // Do a reload if the user hits enter in the address bar or re-types a URL.
-  web::NavigationItem* item =
-      _webStateImpl->GetNavigationManagerImpl().GetVisibleItem();
+  web::NavigationItem* item = self.navigationManagerImpl->GetVisibleItem();
   return (transition & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR) && item &&
          (destinationURL == item->GetURL() ||
           destinationURL == item->GetOriginalRequestURL());
@@ -2079,7 +2081,7 @@
   base::RecordAction(UserMetricsAction("Reload"));
   if (_webView) {
     web::NavigationItem* transientItem =
-        _webStateImpl->GetNavigationManagerImpl().GetTransientItem();
+        self.navigationManagerImpl->GetTransientItem();
     if (transientItem) {
       // If there's a transient item, a reload is considered a new navigation to
       // the transient item's URL (as on other platforms).
@@ -2273,10 +2275,9 @@
     return;
   }
 
-  web::NavigationManagerImpl& navigationManager =
-      _webStateImpl->GetNavigationManagerImpl();
-  if (navigationManager.CanGoToOffset(delta)) {
-    [self goToItemAtIndex:navigationManager.GetIndexForOffset(delta)];
+  if (self.navigationManagerImpl->CanGoToOffset(delta)) {
+    NSInteger index = self.navigationManagerImpl->GetIndexForOffset(delta);
+    [self goToItemAtIndex:index];
   }
 }
 
@@ -2286,10 +2287,9 @@
   // Only load the new URL if it has a different document than |fromEntry| to
   // prevent extra page loads from NavigationItems created by hash changes or
   // calls to window.history.pushState().
-  BOOL shouldLoadURL =
-      ![_webStateImpl->GetNavigationManagerImpl().GetSessionController()
-          isSameDocumentNavigationBetweenItem:fromEntry.navigationItem
-                                      andItem:self.currentNavItem];
+  BOOL shouldLoadURL = ![self.sessionController
+      isSameDocumentNavigationBetweenItem:fromEntry.navigationItem
+                                  andItem:self.currentNavItem];
   web::NavigationItemImpl* currentItem =
       self.currentSessionEntry.navigationItemImpl;
   GURL endURL = [self URLForHistoryNavigationFromItem:fromEntry.navigationItem
@@ -2358,8 +2358,7 @@
   // opened from another application.
   BOOL rendererInitiatedWithoutInteraction =
       self.sessionController.openedByDOM && !_userInteractedWithWebController;
-  BOOL noNavigationItems =
-      !_webStateImpl->GetNavigationManagerImpl().GetItemCount();
+  BOOL noNavigationItems = !(self.navigationManagerImpl->GetItemCount());
   return rendererInitiatedWithoutInteraction || noNavigationItems;
 }
 
@@ -3003,13 +3002,12 @@
   replaceURL = URLEscapedForHistory(replaceURL);
   if (!replaceURL.is_valid())
     return YES;
-  const NavigationManagerImpl& navigationManager =
-      _webStateImpl->GetNavigationManagerImpl();
+
   web::NavigationItem* navItem = [self currentNavItem];
   // ReplaceState happened before first navigation entry or called right
   // after window.open when the url is empty/not valid.
-  if (!navItem ||
-      (navigationManager.GetItemCount() <= 1 && navItem->GetURL().is_empty()))
+  if (!navItem || (self.navigationManagerImpl->GetItemCount() <= 1 &&
+                   navItem->GetURL().is_empty()))
     return YES;
   if (!web::history_state_util::IsHistoryStateChangeValid(
           [self currentNavItem]->GetURL(), replaceURL)) {
@@ -3185,8 +3183,7 @@
   // Check if the link navigation leads to a launch of an external app.
   // TODO(crbug.com/607780): Revise the logic of allowing external app launch
   // and move it to externalAppLauncher.
-  BOOL isOpenInNewTabNavigation =
-      !_webStateImpl->GetNavigationManager()->GetItemCount();
+  BOOL isOpenInNewTabNavigation = !(self.navigationManagerImpl->GetItemCount());
   BOOL isPossibleLinkClick = [self isLinkNavigation:action.navigationType];
   if (isPossibleLinkClick || isOpenInNewTabNavigation ||
       PageTransitionCoreTypeIs([self currentTransition],
@@ -3657,9 +3654,12 @@
 #pragma mark Session Information
 
 - (CRWSessionController*)sessionController {
-  return _webStateImpl
-      ? _webStateImpl->GetNavigationManagerImpl().GetSessionController()
-      : nil;
+  NavigationManagerImpl* navigationManager = self.navigationManagerImpl;
+  return navigationManager ? navigationManager->GetSessionController() : nil;
+}
+
+- (NavigationManagerImpl*)navigationManagerImpl {
+  return _webStateImpl ? &(_webStateImpl->GetNavigationManagerImpl()) : nil;
 }
 
 - (CRWSessionEntry*)currentSessionEntry {
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm
index 749b5b6c..16fad14 100644
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -218,11 +218,10 @@
     NavigationManagerImpl& navigationManager =
         [web_controller() webStateImpl]->GetNavigationManagerImpl();
     navigationManager.InitializeSession(@"name", nil, NO, 0);
-    [navigationManager.GetSessionController()
-           addPendingItem:GURL("http://www.google.com/?q=foo#bar")
-                 referrer:web::Referrer()
-               transition:ui::PAGE_TRANSITION_TYPED
-        rendererInitiated:NO];
+    navigationManager.AddPendingItem(
+        GURL("http://www.google.com/?q=foo#bar"), web::Referrer(),
+        ui::PAGE_TRANSITION_TYPED,
+        web::NavigationInitiationType::USER_INITIATED);
   }
 
   void TearDown() override {
@@ -810,11 +809,9 @@
     NavigationManagerImpl& navigation_manager =
         [web_controller() webStateImpl]->GetNavigationManagerImpl();
     navigation_manager.InitializeSession(@"name", nil, NO, 0);
-    [navigation_manager.GetSessionController()
-           addPendingItem:URL
-                 referrer:web::Referrer()
-               transition:ui::PAGE_TRANSITION_TYPED
-        rendererInitiated:NO];
+    navigation_manager.AddPendingItem(
+        URL, web::Referrer(), ui::PAGE_TRANSITION_TYPED,
+        web::NavigationInitiationType::USER_INITIATED);
     [web_controller() loadCurrentURL];
   }
 
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 4fd4294..31b114f 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2547,10 +2547,10 @@
 crbug.com/688486 external/wpt/service-workers/service-worker/fetch-request-redirect.https.html [ Failure Pass ]
 crbug.com/688486 external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ]
 
-# Sheriff failures 2017-02-06
-crbug.com/688515 [ Linux ] http/tests/media/video-play-stall.html [ Pass Failure ]
-
 # Sheriff failures 2017-02-13
 crbug.com/691423 [ Mac ] fast/frames/location-change-no-file-access.html [ Failure Pass ]
 
-# Sheriff failures 2017-02-16
+# Sheriff failures 2017-02-21
+crbug.com/73609 http/tests/media/video-play-stall.html [ Pass Timeout ]
+crbug.com/73609 virtual/mojo-loading/http/tests/media/video-play-stall.html [ Pass Timeout ]
+crbug.com/694467 fast/text/line-break-8bit-after-16bit.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/editing/assert_selection.html b/third_party/WebKit/LayoutTests/editing/assert_selection.html
index 007df49..5bebfd2 100644
--- a/third_party/WebKit/LayoutTests/editing/assert_selection.html
+++ b/third_party/WebKit/LayoutTests/editing/assert_selection.html
@@ -313,4 +313,25 @@
     const sample4 = assert_selection('abc', '', 'abc', 'description');
     assert_equals(sample4.iframe_.parentNode, null, 'with description');
 }, 'removeSampleIfSucceeded');
+
+test(() => {
+    assert_exists(window, 'internals');
+    assert_exists(window, 'eventSender');
+    assert_selection(
+        'foo|bar',
+        () => { assert_equals(internals.textAffinity, 'Downstream'); },
+        'foo|bar');
+    assert_selection(
+        '<div contenteditable style="width: 25px;">foobar</div>',
+        selection => {
+            eventSender.dragMode = false;
+            var document =  selection.document;
+            var div = document.querySelector('div');
+            eventSender.mouseMoveTo(document.offsetLeft + div.offsetLeft + 20,
+                document.offsetTop + div.offsetTop + 5);
+            eventSender.mouseDown();
+            eventSender.mouseUp();
+            assert_equals(internals.textAffinity, 'Upstream'); },
+        '<div contenteditable style="width: 25px;">foo|bar</div>');
+}, 'Textaffinity');
 </script>
diff --git a/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-types.html b/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-types.html
index 3b74ce48..8dd357f 100644
--- a/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-types.html
+++ b/third_party/WebKit/LayoutTests/editing/pasteboard/onpaste-text-html-types.html
@@ -1,4 +1,5 @@
-<div id="test" onpaste="paste(event)">This test verifies that we can get types from the clipboard
+<body onpaste="paste(event)">
+<div id="test">This test verifies that we can get types from the clipboard
 during an onpaste event.  This test requires DRT.</div>
 
 <div id="results">FAIL</div>
@@ -24,3 +25,4 @@
 
 runDumpAsTextEditingTest(false);
 </script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/editing/selection/extend-expected.txt b/third_party/WebKit/LayoutTests/editing/selection/extend-expected.txt
index 7d79bdf..83532dc4 100644
--- a/third_party/WebKit/LayoutTests/editing/selection/extend-expected.txt
+++ b/third_party/WebKit/LayoutTests/editing/selection/extend-expected.txt
@@ -1,7 +1,7 @@
 foobarbaz
 Success: window.getSelection() is ar.
 Success: s.extend(span2.firstChild, 4) raised IndexSizeError: Failed to execute 'extend' on 'Selection': The offset 4 is larger than or equal to the node's length (3)..
-Success: s.extend(span2.firstChild, -1) raised IndexSizeError: Failed to execute 'extend' on 'Selection': -1 is not a valid offset..
+Success: s.extend(span2.firstChild, -1) raised IndexSizeError: Failed to execute 'extend' on 'Selection': The offset -1 is larger than or equal to the node's length (3)..
 Success: window.getSelection() is b.
 Success: window.getSelection() is arbaz.
 Success: s.extend() raised TypeError: Failed to execute 'extend' on 'Selection': 1 argument required, but only 0 present..
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-00-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-00-expected.txt
deleted file mode 100644
index aa947fb..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-00-expected.txt
+++ /dev/null
@@ -1,3174 +0,0 @@
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-This is a testharness.js-based test.
-Found 2670 tests; 2640 PASS, 30 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Set up range 0 [] 
-PASS Set up range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] 
-PASS Set up range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] 
-PASS Set up range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] 
-PASS Set up range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] 
-PASS Set up range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] 
-PASS Set up range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] 
-PASS Set up range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] 
-PASS Set up range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] 
-PASS Set up range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] 
-PASS Set up range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] 
-PASS Set up range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] 
-PASS Set up range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] 
-PASS Set up range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] 
-PASS Set up range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] 
-PASS Set up range 15 [document.documentElement, 0, document.documentElement, 1] 
-PASS Set up range 16 [document.documentElement, 0, document.documentElement, 2] 
-PASS Set up range 17 [document.documentElement, 1, document.documentElement, 2] 
-PASS Set up range 18 [document.head, 1, document.head, 1] 
-PASS Set up range 19 [document.body, 0, document.body, 1] 
-PASS Set up range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] 
-PASS Set up range 21 [foreignDoc.head, 1, foreignDoc.head, 1] 
-PASS Set up range 22 [foreignDoc.body, 0, foreignDoc.body, 0] 
-PASS Set up range 23 [paras[0], 0, paras[0], 0] 
-PASS Set up range 24 [paras[0], 0, paras[0], 1] 
-PASS Set up range 25 [detachedPara1, 0, detachedPara1, 0] 
-PASS Set up range 26 [detachedPara1, 0, detachedPara1, 1] 
-PASS Set up range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] 
-PASS Set up range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] 
-PASS Set up range 29 [paras[0].firstChild, 3, paras[3], 1] 
-PASS Range 0 [], point 0 [paras[0].firstChild, -1] 
-PASS Range 0 [], point 1 [paras[0].firstChild, 0] 
-PASS Range 0 [], point 2 [paras[0].firstChild, 1] 
-PASS Range 0 [], point 3 [paras[0].firstChild, 2] 
-PASS Range 0 [], point 4 [paras[0].firstChild, 8] 
-PASS Range 0 [], point 5 [paras[0].firstChild, 9] 
-PASS Range 0 [], point 6 [paras[0].firstChild, 10] 
-PASS Range 0 [], point 7 [paras[0].firstChild, 65535] 
-PASS Range 0 [], point 8 [paras[1].firstChild, -1] 
-PASS Range 0 [], point 9 [paras[1].firstChild, 0] 
-PASS Range 0 [], point 10 [paras[1].firstChild, 1] 
-PASS Range 0 [], point 11 [paras[1].firstChild, 2] 
-PASS Range 0 [], point 12 [paras[1].firstChild, 8] 
-PASS Range 0 [], point 13 [paras[1].firstChild, 9] 
-PASS Range 0 [], point 14 [paras[1].firstChild, 10] 
-PASS Range 0 [], point 15 [paras[1].firstChild, 65535] 
-PASS Range 0 [], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 0 [], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 0 [], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 0 [], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 0 [], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 0 [], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 0 [], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 0 [], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 0 [], point 24 [document.documentElement, -1] 
-PASS Range 0 [], point 25 [document.documentElement, 0] 
-PASS Range 0 [], point 26 [document.documentElement, 1] 
-PASS Range 0 [], point 27 [document.documentElement, 2] 
-PASS Range 0 [], point 28 [document.documentElement, 7] 
-PASS Range 0 [], point 29 [document.head, 1] 
-PASS Range 0 [], point 30 [document.body, 3] 
-PASS Range 0 [], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 0 [], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 0 [], point 33 [foreignDoc.head, 0] 
-PASS Range 0 [], point 34 [foreignDoc.body, 1] 
-PASS Range 0 [], point 35 [paras[0], 0] 
-PASS Range 0 [], point 36 [paras[0], 1] 
-PASS Range 0 [], point 37 [paras[0], 2] 
-PASS Range 0 [], point 38 [paras[1], 0] 
-PASS Range 0 [], point 39 [paras[1], 1] 
-PASS Range 0 [], point 40 [paras[1], 2] 
-PASS Range 0 [], point 41 [detachedPara1, 0] 
-PASS Range 0 [], point 42 [detachedPara1, 1] 
-PASS Range 0 [], point 43 [testDiv, 0] 
-PASS Range 0 [], point 44 [testDiv, 3] 
-PASS Range 0 [], point 45 [document, -1] 
-PASS Range 0 [], point 46 [document, 0] 
-PASS Range 0 [], point 47 [document, 1] 
-PASS Range 0 [], point 48 [document, 2] 
-PASS Range 0 [], point 49 [document, 3] 
-PASS Range 0 [], point 50 [comment, -1] 
-PASS Range 0 [], point 51 [comment, 0] 
-PASS Range 0 [], point 52 [comment, 4] 
-PASS Range 0 [], point 53 [comment, 96] 
-PASS Range 0 [], point 54 [foreignDoc, 0] 
-PASS Range 0 [], point 55 [foreignDoc, 1] 
-PASS Range 0 [], point 56 [foreignComment, 2] 
-PASS Range 0 [], point 57 [foreignTextNode, 0] 
-PASS Range 0 [], point 58 [foreignTextNode, 36] 
-PASS Range 0 [], point 59 [xmlDoc, -1] 
-PASS Range 0 [], point 60 [xmlDoc, 0] 
-PASS Range 0 [], point 61 [xmlDoc, 1] 
-PASS Range 0 [], point 62 [xmlDoc, 5] 
-PASS Range 0 [], point 63 [xmlComment, 0] 
-PASS Range 0 [], point 64 [xmlComment, 4] 
-PASS Range 0 [], point 65 [processingInstruction, 0] 
-PASS Range 0 [], point 66 [processingInstruction, 5] 
-PASS Range 0 [], point 67 [processingInstruction, 9] 
-PASS Range 0 [], point 68 [detachedTextNode, 0] 
-PASS Range 0 [], point 69 [detachedTextNode, 8] 
-PASS Range 0 [], point 70 [detachedForeignTextNode, 0] 
-PASS Range 0 [], point 71 [detachedForeignTextNode, 8] 
-PASS Range 0 [], point 72 [detachedXmlTextNode, 0] 
-PASS Range 0 [], point 73 [detachedXmlTextNode, 8] 
-PASS Range 0 [], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 0 [], point 75 [detachedComment, 3] 
-PASS Range 0 [], point 76 [detachedComment, 5] 
-PASS Range 0 [], point 77 [detachedForeignComment, 0] 
-PASS Range 0 [], point 78 [detachedForeignComment, 4] 
-PASS Range 0 [], point 79 [detachedXmlComment, 2] 
-PASS Range 0 [], point 80 [docfrag, 0] 
-PASS Range 0 [], point 81 [foreignDocfrag, 0] 
-PASS Range 0 [], point 82 [xmlDocfrag, 0] 
-PASS Range 0 [], point 83 [doctype, 0] 
-FAIL Range 0 [], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 0 [], point 85 [doctype, 1] 
-PASS Range 0 [], point 86 [foreignDoctype, 0] 
-PASS Range 0 [], point 87 [xmlDoctype, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 24 [document.documentElement, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 25 [document.documentElement, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 26 [document.documentElement, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 27 [document.documentElement, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 28 [document.documentElement, 7] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 29 [document.head, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 30 [document.body, 3] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 35 [paras[0], 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 36 [paras[0], 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 37 [paras[0], 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 38 [paras[1], 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 39 [paras[1], 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 40 [paras[1], 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 41 [detachedPara1, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 42 [detachedPara1, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 43 [testDiv, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 44 [testDiv, 3] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 45 [document, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 46 [document, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 47 [document, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 48 [document, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 49 [document, 3] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 50 [comment, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 51 [comment, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 52 [comment, 4] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 53 [comment, 96] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 54 [foreignDoc, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 55 [foreignDoc, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 56 [foreignComment, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 57 [foreignTextNode, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 58 [foreignTextNode, 36] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 59 [xmlDoc, -1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 60 [xmlDoc, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 61 [xmlDoc, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 62 [xmlDoc, 5] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 63 [xmlComment, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 64 [xmlComment, 4] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 65 [processingInstruction, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 66 [processingInstruction, 5] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 67 [processingInstruction, 9] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 68 [detachedTextNode, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 69 [detachedTextNode, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 75 [detachedComment, 3] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 76 [detachedComment, 5] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 80 [docfrag, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 83 [doctype, 0] 
-FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 85 [doctype, 1] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 86 [foreignDoctype, 0] 
-PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 87 [xmlDoctype, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 24 [document.documentElement, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 25 [document.documentElement, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 26 [document.documentElement, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 27 [document.documentElement, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 28 [document.documentElement, 7] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 29 [document.head, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 30 [document.body, 3] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 35 [paras[0], 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 36 [paras[0], 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 37 [paras[0], 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 38 [paras[1], 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 39 [paras[1], 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 40 [paras[1], 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 41 [detachedPara1, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 42 [detachedPara1, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 43 [testDiv, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 44 [testDiv, 3] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 45 [document, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 46 [document, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 47 [document, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 48 [document, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 49 [document, 3] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 50 [comment, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 51 [comment, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 52 [comment, 4] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 53 [comment, 96] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 54 [foreignDoc, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 55 [foreignDoc, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 56 [foreignComment, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 57 [foreignTextNode, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 58 [foreignTextNode, 36] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 59 [xmlDoc, -1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 60 [xmlDoc, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 61 [xmlDoc, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 62 [xmlDoc, 5] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 63 [xmlComment, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 64 [xmlComment, 4] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 65 [processingInstruction, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 66 [processingInstruction, 5] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 67 [processingInstruction, 9] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 68 [detachedTextNode, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 69 [detachedTextNode, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 75 [detachedComment, 3] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 76 [detachedComment, 5] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 80 [docfrag, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 83 [doctype, 0] 
-FAIL Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 85 [doctype, 1] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 86 [foreignDoctype, 0] 
-PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 87 [xmlDoctype, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 24 [document.documentElement, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 25 [document.documentElement, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 26 [document.documentElement, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 27 [document.documentElement, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 28 [document.documentElement, 7] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 29 [document.head, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 30 [document.body, 3] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 35 [paras[0], 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 36 [paras[0], 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 37 [paras[0], 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 38 [paras[1], 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 39 [paras[1], 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 40 [paras[1], 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 41 [detachedPara1, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 42 [detachedPara1, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 43 [testDiv, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 44 [testDiv, 3] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 45 [document, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 46 [document, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 47 [document, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 48 [document, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 49 [document, 3] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 50 [comment, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 51 [comment, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 52 [comment, 4] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 53 [comment, 96] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 54 [foreignDoc, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 55 [foreignDoc, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 56 [foreignComment, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 57 [foreignTextNode, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 58 [foreignTextNode, 36] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 59 [xmlDoc, -1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 60 [xmlDoc, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 61 [xmlDoc, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 62 [xmlDoc, 5] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 63 [xmlComment, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 64 [xmlComment, 4] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 65 [processingInstruction, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 66 [processingInstruction, 5] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 67 [processingInstruction, 9] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 68 [detachedTextNode, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 69 [detachedTextNode, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 75 [detachedComment, 3] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 76 [detachedComment, 5] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 80 [docfrag, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 83 [doctype, 0] 
-FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 85 [doctype, 1] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 86 [foreignDoctype, 0] 
-PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 87 [xmlDoctype, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 0 [paras[0].firstChild, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 1 [paras[0].firstChild, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 2 [paras[0].firstChild, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 3 [paras[0].firstChild, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 4 [paras[0].firstChild, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 5 [paras[0].firstChild, 9] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 6 [paras[0].firstChild, 10] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 7 [paras[0].firstChild, 65535] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 8 [paras[1].firstChild, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 9 [paras[1].firstChild, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 10 [paras[1].firstChild, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 11 [paras[1].firstChild, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 12 [paras[1].firstChild, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 13 [paras[1].firstChild, 9] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 14 [paras[1].firstChild, 10] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 15 [paras[1].firstChild, 65535] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 24 [document.documentElement, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 25 [document.documentElement, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 26 [document.documentElement, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 27 [document.documentElement, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 28 [document.documentElement, 7] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 29 [document.head, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 30 [document.body, 3] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 33 [foreignDoc.head, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 34 [foreignDoc.body, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 35 [paras[0], 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 36 [paras[0], 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 37 [paras[0], 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 38 [paras[1], 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 39 [paras[1], 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 40 [paras[1], 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 41 [detachedPara1, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 42 [detachedPara1, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 43 [testDiv, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 44 [testDiv, 3] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 45 [document, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 46 [document, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 47 [document, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 48 [document, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 49 [document, 3] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 50 [comment, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 51 [comment, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 52 [comment, 4] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 53 [comment, 96] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 54 [foreignDoc, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 55 [foreignDoc, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 56 [foreignComment, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 57 [foreignTextNode, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 58 [foreignTextNode, 36] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 59 [xmlDoc, -1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 60 [xmlDoc, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 61 [xmlDoc, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 62 [xmlDoc, 5] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 63 [xmlComment, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 64 [xmlComment, 4] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 65 [processingInstruction, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 66 [processingInstruction, 5] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 67 [processingInstruction, 9] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 68 [detachedTextNode, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 69 [detachedTextNode, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 70 [detachedForeignTextNode, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 71 [detachedForeignTextNode, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 72 [detachedXmlTextNode, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 73 [detachedXmlTextNode, 8] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 75 [detachedComment, 3] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 76 [detachedComment, 5] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 77 [detachedForeignComment, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 78 [detachedForeignComment, 4] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 79 [detachedXmlComment, 2] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 80 [docfrag, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 81 [foreignDocfrag, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 82 [xmlDocfrag, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 83 [doctype, 0] 
-FAIL Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 85 [doctype, 1] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 86 [foreignDoctype, 0] 
-PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 87 [xmlDoctype, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] 
-FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] 
-PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 24 [document.documentElement, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 25 [document.documentElement, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 26 [document.documentElement, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 27 [document.documentElement, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 28 [document.documentElement, 7] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 29 [document.head, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 30 [document.body, 3] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 35 [paras[0], 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 36 [paras[0], 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 37 [paras[0], 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 38 [paras[1], 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 39 [paras[1], 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 40 [paras[1], 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 41 [detachedPara1, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 42 [detachedPara1, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 43 [testDiv, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 44 [testDiv, 3] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 45 [document, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 46 [document, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 47 [document, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 48 [document, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 49 [document, 3] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 50 [comment, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 51 [comment, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 52 [comment, 4] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 53 [comment, 96] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 54 [foreignDoc, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 55 [foreignDoc, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 56 [foreignComment, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 57 [foreignTextNode, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 58 [foreignTextNode, 36] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 59 [xmlDoc, -1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 60 [xmlDoc, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 61 [xmlDoc, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 62 [xmlDoc, 5] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 63 [xmlComment, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 64 [xmlComment, 4] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 65 [processingInstruction, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 66 [processingInstruction, 5] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 67 [processingInstruction, 9] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 68 [detachedTextNode, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 69 [detachedTextNode, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 75 [detachedComment, 3] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 76 [detachedComment, 5] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 80 [docfrag, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 83 [doctype, 0] 
-FAIL Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 85 [doctype, 1] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 86 [foreignDoctype, 0] 
-PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1], point 87 [xmlDoctype, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 24 [document.documentElement, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 25 [document.documentElement, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 26 [document.documentElement, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 27 [document.documentElement, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 28 [document.documentElement, 7] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 29 [document.head, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 30 [document.body, 3] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 35 [paras[0], 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 36 [paras[0], 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 37 [paras[0], 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 38 [paras[1], 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 39 [paras[1], 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 40 [paras[1], 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 41 [detachedPara1, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 42 [detachedPara1, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 43 [testDiv, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 44 [testDiv, 3] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 45 [document, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 46 [document, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 47 [document, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 48 [document, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 49 [document, 3] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 50 [comment, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 51 [comment, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 52 [comment, 4] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 53 [comment, 96] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 54 [foreignDoc, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 55 [foreignDoc, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 56 [foreignComment, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 57 [foreignTextNode, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 58 [foreignTextNode, 36] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 59 [xmlDoc, -1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 60 [xmlDoc, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 61 [xmlDoc, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 62 [xmlDoc, 5] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 63 [xmlComment, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 64 [xmlComment, 4] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 65 [processingInstruction, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 66 [processingInstruction, 5] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 67 [processingInstruction, 9] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 68 [detachedTextNode, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 69 [detachedTextNode, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 75 [detachedComment, 3] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 76 [detachedComment, 5] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 80 [docfrag, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 83 [doctype, 0] 
-FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 85 [doctype, 1] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 86 [foreignDoctype, 0] 
-PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8], point 87 [xmlDoctype, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 0 [paras[0].firstChild, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 1 [paras[0].firstChild, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 2 [paras[0].firstChild, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 3 [paras[0].firstChild, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 4 [paras[0].firstChild, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 5 [paras[0].firstChild, 9] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 6 [paras[0].firstChild, 10] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 7 [paras[0].firstChild, 65535] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 8 [paras[1].firstChild, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 9 [paras[1].firstChild, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 10 [paras[1].firstChild, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 11 [paras[1].firstChild, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 12 [paras[1].firstChild, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 13 [paras[1].firstChild, 9] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 14 [paras[1].firstChild, 10] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 15 [paras[1].firstChild, 65535] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 24 [document.documentElement, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 25 [document.documentElement, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 26 [document.documentElement, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 27 [document.documentElement, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 28 [document.documentElement, 7] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 29 [document.head, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 30 [document.body, 3] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 33 [foreignDoc.head, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 34 [foreignDoc.body, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 35 [paras[0], 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 36 [paras[0], 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 37 [paras[0], 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 38 [paras[1], 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 39 [paras[1], 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 40 [paras[1], 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 41 [detachedPara1, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 42 [detachedPara1, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 43 [testDiv, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 44 [testDiv, 3] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 45 [document, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 46 [document, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 47 [document, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 48 [document, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 49 [document, 3] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 50 [comment, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 51 [comment, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 52 [comment, 4] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 53 [comment, 96] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 54 [foreignDoc, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 55 [foreignDoc, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 56 [foreignComment, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 57 [foreignTextNode, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 58 [foreignTextNode, 36] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 59 [xmlDoc, -1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 60 [xmlDoc, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 61 [xmlDoc, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 62 [xmlDoc, 5] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 63 [xmlComment, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 64 [xmlComment, 4] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 65 [processingInstruction, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 66 [processingInstruction, 5] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 67 [processingInstruction, 9] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 68 [detachedTextNode, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 69 [detachedTextNode, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 70 [detachedForeignTextNode, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 71 [detachedForeignTextNode, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 72 [detachedXmlTextNode, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 73 [detachedXmlTextNode, 8] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 75 [detachedComment, 3] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 76 [detachedComment, 5] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 77 [detachedForeignComment, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 78 [detachedForeignComment, 4] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 79 [detachedXmlComment, 2] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 80 [docfrag, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 81 [foreignDocfrag, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 82 [xmlDocfrag, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 83 [doctype, 0] 
-FAIL Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 85 [doctype, 1] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 86 [foreignDoctype, 0] 
-PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 87 [xmlDoctype, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 24 [document.documentElement, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 25 [document.documentElement, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 26 [document.documentElement, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 27 [document.documentElement, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 28 [document.documentElement, 7] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 29 [document.head, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 30 [document.body, 3] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 35 [paras[0], 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 36 [paras[0], 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 37 [paras[0], 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 38 [paras[1], 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 39 [paras[1], 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 40 [paras[1], 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 41 [detachedPara1, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 42 [detachedPara1, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 43 [testDiv, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 44 [testDiv, 3] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 45 [document, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 46 [document, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 47 [document, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 48 [document, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 49 [document, 3] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 50 [comment, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 51 [comment, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 52 [comment, 4] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 53 [comment, 96] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 54 [foreignDoc, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 55 [foreignDoc, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 56 [foreignComment, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 57 [foreignTextNode, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 58 [foreignTextNode, 36] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 59 [xmlDoc, -1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 60 [xmlDoc, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 61 [xmlDoc, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 62 [xmlDoc, 5] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 63 [xmlComment, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 64 [xmlComment, 4] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 65 [processingInstruction, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 66 [processingInstruction, 5] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 67 [processingInstruction, 9] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 68 [detachedTextNode, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 69 [detachedTextNode, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 75 [detachedComment, 3] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 76 [detachedComment, 5] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 80 [docfrag, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 83 [doctype, 0] 
-FAIL Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 85 [doctype, 1] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 86 [foreignDoctype, 0] 
-PASS Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 87 [xmlDoctype, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 24 [document.documentElement, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 25 [document.documentElement, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 26 [document.documentElement, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 27 [document.documentElement, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 28 [document.documentElement, 7] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 29 [document.head, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 30 [document.body, 3] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 35 [paras[0], 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 36 [paras[0], 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 37 [paras[0], 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 38 [paras[1], 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 39 [paras[1], 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 40 [paras[1], 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 41 [detachedPara1, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 42 [detachedPara1, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 43 [testDiv, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 44 [testDiv, 3] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 45 [document, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 46 [document, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 47 [document, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 48 [document, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 49 [document, 3] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 50 [comment, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 51 [comment, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 52 [comment, 4] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 53 [comment, 96] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 54 [foreignDoc, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 55 [foreignDoc, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 56 [foreignComment, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 57 [foreignTextNode, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 58 [foreignTextNode, 36] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 59 [xmlDoc, -1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 60 [xmlDoc, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 61 [xmlDoc, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 62 [xmlDoc, 5] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 63 [xmlComment, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 64 [xmlComment, 4] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 65 [processingInstruction, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 66 [processingInstruction, 5] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 67 [processingInstruction, 9] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 68 [detachedTextNode, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 69 [detachedTextNode, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 75 [detachedComment, 3] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 76 [detachedComment, 5] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 80 [docfrag, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 83 [doctype, 0] 
-FAIL Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 85 [doctype, 1] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 86 [foreignDoctype, 0] 
-PASS Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], point 87 [xmlDoctype, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 24 [document.documentElement, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 25 [document.documentElement, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 26 [document.documentElement, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 27 [document.documentElement, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 28 [document.documentElement, 7] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 29 [document.head, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 30 [document.body, 3] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 35 [paras[0], 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 36 [paras[0], 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 37 [paras[0], 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 38 [paras[1], 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 39 [paras[1], 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 40 [paras[1], 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 41 [detachedPara1, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 42 [detachedPara1, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 43 [testDiv, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 44 [testDiv, 3] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 45 [document, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 46 [document, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 47 [document, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 48 [document, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 49 [document, 3] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 50 [comment, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 51 [comment, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 52 [comment, 4] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 53 [comment, 96] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 54 [foreignDoc, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 55 [foreignDoc, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 56 [foreignComment, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 57 [foreignTextNode, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 58 [foreignTextNode, 36] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 59 [xmlDoc, -1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 60 [xmlDoc, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 61 [xmlDoc, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 62 [xmlDoc, 5] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 63 [xmlComment, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 64 [xmlComment, 4] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 65 [processingInstruction, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 66 [processingInstruction, 5] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 67 [processingInstruction, 9] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 68 [detachedTextNode, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 69 [detachedTextNode, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 75 [detachedComment, 3] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 76 [detachedComment, 5] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 80 [docfrag, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 83 [doctype, 0] 
-FAIL Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 85 [doctype, 1] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 86 [foreignDoctype, 0] 
-PASS Range 11 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 87 [xmlDoctype, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 24 [document.documentElement, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 25 [document.documentElement, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 26 [document.documentElement, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 27 [document.documentElement, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 28 [document.documentElement, 7] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 29 [document.head, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 30 [document.body, 3] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 35 [paras[0], 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 36 [paras[0], 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 37 [paras[0], 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 38 [paras[1], 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 39 [paras[1], 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 40 [paras[1], 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 41 [detachedPara1, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 42 [detachedPara1, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 43 [testDiv, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 44 [testDiv, 3] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 45 [document, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 46 [document, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 47 [document, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 48 [document, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 49 [document, 3] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 50 [comment, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 51 [comment, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 52 [comment, 4] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 53 [comment, 96] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 54 [foreignDoc, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 55 [foreignDoc, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 56 [foreignComment, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 57 [foreignTextNode, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 58 [foreignTextNode, 36] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 59 [xmlDoc, -1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 60 [xmlDoc, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 61 [xmlDoc, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 62 [xmlDoc, 5] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 63 [xmlComment, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 64 [xmlComment, 4] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 65 [processingInstruction, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 66 [processingInstruction, 5] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 67 [processingInstruction, 9] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 68 [detachedTextNode, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 69 [detachedTextNode, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 75 [detachedComment, 3] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 76 [detachedComment, 5] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 80 [docfrag, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 83 [doctype, 0] 
-FAIL Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 85 [doctype, 1] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 86 [foreignDoctype, 0] 
-PASS Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 87 [xmlDoctype, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 24 [document.documentElement, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 25 [document.documentElement, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 26 [document.documentElement, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 27 [document.documentElement, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 28 [document.documentElement, 7] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 29 [document.head, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 30 [document.body, 3] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 35 [paras[0], 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 36 [paras[0], 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 37 [paras[0], 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 38 [paras[1], 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 39 [paras[1], 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 40 [paras[1], 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 41 [detachedPara1, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 42 [detachedPara1, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 43 [testDiv, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 44 [testDiv, 3] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 45 [document, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 46 [document, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 47 [document, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 48 [document, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 49 [document, 3] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 50 [comment, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 51 [comment, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 52 [comment, 4] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 53 [comment, 96] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 54 [foreignDoc, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 55 [foreignDoc, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 56 [foreignComment, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 57 [foreignTextNode, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 58 [foreignTextNode, 36] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 59 [xmlDoc, -1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 60 [xmlDoc, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 61 [xmlDoc, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 62 [xmlDoc, 5] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 63 [xmlComment, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 64 [xmlComment, 4] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 65 [processingInstruction, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 66 [processingInstruction, 5] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 67 [processingInstruction, 9] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 68 [detachedTextNode, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 69 [detachedTextNode, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 75 [detachedComment, 3] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 76 [detachedComment, 5] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 80 [docfrag, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 83 [doctype, 0] 
-FAIL Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 85 [doctype, 1] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 86 [foreignDoctype, 0] 
-PASS Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], point 87 [xmlDoctype, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 24 [document.documentElement, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 25 [document.documentElement, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 26 [document.documentElement, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 27 [document.documentElement, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 28 [document.documentElement, 7] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 29 [document.head, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 30 [document.body, 3] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 35 [paras[0], 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 36 [paras[0], 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 37 [paras[0], 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 38 [paras[1], 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 39 [paras[1], 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 40 [paras[1], 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 41 [detachedPara1, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 42 [detachedPara1, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 43 [testDiv, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 44 [testDiv, 3] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 45 [document, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 46 [document, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 47 [document, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 48 [document, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 49 [document, 3] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 50 [comment, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 51 [comment, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 52 [comment, 4] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 53 [comment, 96] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 54 [foreignDoc, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 55 [foreignDoc, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 56 [foreignComment, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 57 [foreignTextNode, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 58 [foreignTextNode, 36] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 59 [xmlDoc, -1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 60 [xmlDoc, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 61 [xmlDoc, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 62 [xmlDoc, 5] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 63 [xmlComment, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 64 [xmlComment, 4] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 65 [processingInstruction, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 66 [processingInstruction, 5] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 67 [processingInstruction, 9] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 68 [detachedTextNode, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 69 [detachedTextNode, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 75 [detachedComment, 3] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 76 [detachedComment, 5] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 80 [docfrag, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 83 [doctype, 0] 
-FAIL Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 85 [doctype, 1] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 86 [foreignDoctype, 0] 
-PASS Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 87 [xmlDoctype, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 24 [document.documentElement, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 25 [document.documentElement, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 26 [document.documentElement, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 27 [document.documentElement, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 28 [document.documentElement, 7] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 29 [document.head, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 30 [document.body, 3] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 35 [paras[0], 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 36 [paras[0], 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 37 [paras[0], 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 38 [paras[1], 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 39 [paras[1], 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 40 [paras[1], 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 41 [detachedPara1, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 42 [detachedPara1, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 43 [testDiv, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 44 [testDiv, 3] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 45 [document, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 46 [document, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 47 [document, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 48 [document, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 49 [document, 3] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 50 [comment, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 51 [comment, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 52 [comment, 4] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 53 [comment, 96] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 54 [foreignDoc, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 55 [foreignDoc, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 56 [foreignComment, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 57 [foreignTextNode, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 58 [foreignTextNode, 36] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 59 [xmlDoc, -1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 60 [xmlDoc, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 61 [xmlDoc, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 62 [xmlDoc, 5] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 63 [xmlComment, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 64 [xmlComment, 4] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 65 [processingInstruction, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 66 [processingInstruction, 5] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 67 [processingInstruction, 9] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 68 [detachedTextNode, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 69 [detachedTextNode, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 75 [detachedComment, 3] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 76 [detachedComment, 5] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 80 [docfrag, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 83 [doctype, 0] 
-FAIL Range 15 [document.documentElement, 0, document.documentElement, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 85 [doctype, 1] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 86 [foreignDoctype, 0] 
-PASS Range 15 [document.documentElement, 0, document.documentElement, 1], point 87 [xmlDoctype, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 24 [document.documentElement, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 25 [document.documentElement, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 26 [document.documentElement, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 27 [document.documentElement, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 28 [document.documentElement, 7] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 29 [document.head, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 30 [document.body, 3] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 35 [paras[0], 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 36 [paras[0], 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 37 [paras[0], 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 38 [paras[1], 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 39 [paras[1], 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 40 [paras[1], 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 41 [detachedPara1, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 42 [detachedPara1, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 43 [testDiv, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 44 [testDiv, 3] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 45 [document, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 46 [document, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 47 [document, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 48 [document, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 49 [document, 3] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 50 [comment, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 51 [comment, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 52 [comment, 4] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 53 [comment, 96] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 54 [foreignDoc, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 55 [foreignDoc, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 56 [foreignComment, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 57 [foreignTextNode, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 58 [foreignTextNode, 36] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 59 [xmlDoc, -1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 60 [xmlDoc, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 61 [xmlDoc, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 62 [xmlDoc, 5] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 63 [xmlComment, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 64 [xmlComment, 4] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 65 [processingInstruction, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 66 [processingInstruction, 5] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 67 [processingInstruction, 9] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 68 [detachedTextNode, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 69 [detachedTextNode, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 75 [detachedComment, 3] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 76 [detachedComment, 5] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 80 [docfrag, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 83 [doctype, 0] 
-FAIL Range 16 [document.documentElement, 0, document.documentElement, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 85 [doctype, 1] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 86 [foreignDoctype, 0] 
-PASS Range 16 [document.documentElement, 0, document.documentElement, 2], point 87 [xmlDoctype, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 24 [document.documentElement, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 25 [document.documentElement, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 26 [document.documentElement, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 27 [document.documentElement, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 28 [document.documentElement, 7] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 29 [document.head, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 30 [document.body, 3] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 35 [paras[0], 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 36 [paras[0], 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 37 [paras[0], 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 38 [paras[1], 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 39 [paras[1], 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 40 [paras[1], 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 41 [detachedPara1, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 42 [detachedPara1, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 43 [testDiv, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 44 [testDiv, 3] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 45 [document, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 46 [document, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 47 [document, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 48 [document, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 49 [document, 3] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 50 [comment, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 51 [comment, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 52 [comment, 4] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 53 [comment, 96] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 54 [foreignDoc, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 55 [foreignDoc, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 56 [foreignComment, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 57 [foreignTextNode, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 58 [foreignTextNode, 36] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 59 [xmlDoc, -1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 60 [xmlDoc, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 61 [xmlDoc, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 62 [xmlDoc, 5] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 63 [xmlComment, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 64 [xmlComment, 4] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 65 [processingInstruction, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 66 [processingInstruction, 5] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 67 [processingInstruction, 9] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 68 [detachedTextNode, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 69 [detachedTextNode, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 75 [detachedComment, 3] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 76 [detachedComment, 5] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 80 [docfrag, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 83 [doctype, 0] 
-FAIL Range 17 [document.documentElement, 1, document.documentElement, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 85 [doctype, 1] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 86 [foreignDoctype, 0] 
-PASS Range 17 [document.documentElement, 1, document.documentElement, 2], point 87 [xmlDoctype, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 18 [document.head, 1, document.head, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 18 [document.head, 1, document.head, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 18 [document.head, 1, document.head, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 18 [document.head, 1, document.head, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 18 [document.head, 1, document.head, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 18 [document.head, 1, document.head, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 18 [document.head, 1, document.head, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 18 [document.head, 1, document.head, 1], point 24 [document.documentElement, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 25 [document.documentElement, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 26 [document.documentElement, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 27 [document.documentElement, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 28 [document.documentElement, 7] 
-PASS Range 18 [document.head, 1, document.head, 1], point 29 [document.head, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 30 [document.body, 3] 
-PASS Range 18 [document.head, 1, document.head, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 35 [paras[0], 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 36 [paras[0], 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 37 [paras[0], 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 38 [paras[1], 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 39 [paras[1], 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 40 [paras[1], 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 41 [detachedPara1, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 42 [detachedPara1, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 43 [testDiv, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 44 [testDiv, 3] 
-PASS Range 18 [document.head, 1, document.head, 1], point 45 [document, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 46 [document, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 47 [document, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 48 [document, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 49 [document, 3] 
-PASS Range 18 [document.head, 1, document.head, 1], point 50 [comment, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 51 [comment, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 52 [comment, 4] 
-PASS Range 18 [document.head, 1, document.head, 1], point 53 [comment, 96] 
-PASS Range 18 [document.head, 1, document.head, 1], point 54 [foreignDoc, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 55 [foreignDoc, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 56 [foreignComment, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 57 [foreignTextNode, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 58 [foreignTextNode, 36] 
-PASS Range 18 [document.head, 1, document.head, 1], point 59 [xmlDoc, -1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 60 [xmlDoc, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 61 [xmlDoc, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 62 [xmlDoc, 5] 
-PASS Range 18 [document.head, 1, document.head, 1], point 63 [xmlComment, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 64 [xmlComment, 4] 
-PASS Range 18 [document.head, 1, document.head, 1], point 65 [processingInstruction, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 66 [processingInstruction, 5] 
-PASS Range 18 [document.head, 1, document.head, 1], point 67 [processingInstruction, 9] 
-PASS Range 18 [document.head, 1, document.head, 1], point 68 [detachedTextNode, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 69 [detachedTextNode, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 18 [document.head, 1, document.head, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 18 [document.head, 1, document.head, 1], point 75 [detachedComment, 3] 
-PASS Range 18 [document.head, 1, document.head, 1], point 76 [detachedComment, 5] 
-PASS Range 18 [document.head, 1, document.head, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 18 [document.head, 1, document.head, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 18 [document.head, 1, document.head, 1], point 80 [docfrag, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 83 [doctype, 0] 
-FAIL Range 18 [document.head, 1, document.head, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 18 [document.head, 1, document.head, 1], point 85 [doctype, 1] 
-PASS Range 18 [document.head, 1, document.head, 1], point 86 [foreignDoctype, 0] 
-PASS Range 18 [document.head, 1, document.head, 1], point 87 [xmlDoctype, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 19 [document.body, 0, document.body, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 19 [document.body, 0, document.body, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 19 [document.body, 0, document.body, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 19 [document.body, 0, document.body, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 19 [document.body, 0, document.body, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 19 [document.body, 0, document.body, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 19 [document.body, 0, document.body, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 19 [document.body, 0, document.body, 1], point 24 [document.documentElement, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 25 [document.documentElement, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 26 [document.documentElement, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 27 [document.documentElement, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 28 [document.documentElement, 7] 
-PASS Range 19 [document.body, 0, document.body, 1], point 29 [document.head, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 30 [document.body, 3] 
-PASS Range 19 [document.body, 0, document.body, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 35 [paras[0], 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 36 [paras[0], 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 37 [paras[0], 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 38 [paras[1], 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 39 [paras[1], 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 40 [paras[1], 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 41 [detachedPara1, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 42 [detachedPara1, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 43 [testDiv, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 44 [testDiv, 3] 
-PASS Range 19 [document.body, 0, document.body, 1], point 45 [document, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 46 [document, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 47 [document, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 48 [document, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 49 [document, 3] 
-PASS Range 19 [document.body, 0, document.body, 1], point 50 [comment, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 51 [comment, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 52 [comment, 4] 
-PASS Range 19 [document.body, 0, document.body, 1], point 53 [comment, 96] 
-PASS Range 19 [document.body, 0, document.body, 1], point 54 [foreignDoc, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 55 [foreignDoc, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 56 [foreignComment, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 57 [foreignTextNode, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 58 [foreignTextNode, 36] 
-PASS Range 19 [document.body, 0, document.body, 1], point 59 [xmlDoc, -1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 60 [xmlDoc, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 61 [xmlDoc, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 62 [xmlDoc, 5] 
-PASS Range 19 [document.body, 0, document.body, 1], point 63 [xmlComment, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 64 [xmlComment, 4] 
-PASS Range 19 [document.body, 0, document.body, 1], point 65 [processingInstruction, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 66 [processingInstruction, 5] 
-PASS Range 19 [document.body, 0, document.body, 1], point 67 [processingInstruction, 9] 
-PASS Range 19 [document.body, 0, document.body, 1], point 68 [detachedTextNode, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 69 [detachedTextNode, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 19 [document.body, 0, document.body, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 19 [document.body, 0, document.body, 1], point 75 [detachedComment, 3] 
-PASS Range 19 [document.body, 0, document.body, 1], point 76 [detachedComment, 5] 
-PASS Range 19 [document.body, 0, document.body, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 19 [document.body, 0, document.body, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 19 [document.body, 0, document.body, 1], point 80 [docfrag, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 83 [doctype, 0] 
-FAIL Range 19 [document.body, 0, document.body, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 19 [document.body, 0, document.body, 1], point 85 [doctype, 1] 
-PASS Range 19 [document.body, 0, document.body, 1], point 86 [foreignDoctype, 0] 
-PASS Range 19 [document.body, 0, document.body, 1], point 87 [xmlDoctype, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 24 [document.documentElement, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 25 [document.documentElement, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 26 [document.documentElement, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 27 [document.documentElement, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 28 [document.documentElement, 7] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 29 [document.head, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 30 [document.body, 3] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 35 [paras[0], 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 36 [paras[0], 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 37 [paras[0], 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 38 [paras[1], 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 39 [paras[1], 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 40 [paras[1], 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 41 [detachedPara1, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 42 [detachedPara1, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 43 [testDiv, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 44 [testDiv, 3] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 45 [document, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 46 [document, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 47 [document, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 48 [document, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 49 [document, 3] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 50 [comment, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 51 [comment, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 52 [comment, 4] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 53 [comment, 96] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 54 [foreignDoc, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 55 [foreignDoc, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 56 [foreignComment, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 57 [foreignTextNode, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 58 [foreignTextNode, 36] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 59 [xmlDoc, -1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 60 [xmlDoc, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 61 [xmlDoc, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 62 [xmlDoc, 5] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 63 [xmlComment, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 64 [xmlComment, 4] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 65 [processingInstruction, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 66 [processingInstruction, 5] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 67 [processingInstruction, 9] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 68 [detachedTextNode, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 69 [detachedTextNode, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 75 [detachedComment, 3] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 76 [detachedComment, 5] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 80 [docfrag, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 83 [doctype, 0] 
-FAIL Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 85 [doctype, 1] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 86 [foreignDoctype, 0] 
-PASS Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 87 [xmlDoctype, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 24 [document.documentElement, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 25 [document.documentElement, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 26 [document.documentElement, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 27 [document.documentElement, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 28 [document.documentElement, 7] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 29 [document.head, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 30 [document.body, 3] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 35 [paras[0], 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 36 [paras[0], 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 37 [paras[0], 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 38 [paras[1], 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 39 [paras[1], 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 40 [paras[1], 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 41 [detachedPara1, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 42 [detachedPara1, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 43 [testDiv, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 44 [testDiv, 3] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 45 [document, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 46 [document, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 47 [document, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 48 [document, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 49 [document, 3] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 50 [comment, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 51 [comment, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 52 [comment, 4] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 53 [comment, 96] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 54 [foreignDoc, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 55 [foreignDoc, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 56 [foreignComment, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 57 [foreignTextNode, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 58 [foreignTextNode, 36] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 59 [xmlDoc, -1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 60 [xmlDoc, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 61 [xmlDoc, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 62 [xmlDoc, 5] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 63 [xmlComment, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 64 [xmlComment, 4] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 65 [processingInstruction, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 66 [processingInstruction, 5] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 67 [processingInstruction, 9] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 68 [detachedTextNode, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 69 [detachedTextNode, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 75 [detachedComment, 3] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 76 [detachedComment, 5] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 80 [docfrag, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 83 [doctype, 0] 
-FAIL Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 85 [doctype, 1] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 86 [foreignDoctype, 0] 
-PASS Range 21 [foreignDoc.head, 1, foreignDoc.head, 1], point 87 [xmlDoctype, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 24 [document.documentElement, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 25 [document.documentElement, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 26 [document.documentElement, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 27 [document.documentElement, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 28 [document.documentElement, 7] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 29 [document.head, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 30 [document.body, 3] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 35 [paras[0], 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 36 [paras[0], 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 37 [paras[0], 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 38 [paras[1], 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 39 [paras[1], 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 40 [paras[1], 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 41 [detachedPara1, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 42 [detachedPara1, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 43 [testDiv, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 44 [testDiv, 3] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 45 [document, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 46 [document, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 47 [document, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 48 [document, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 49 [document, 3] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 50 [comment, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 51 [comment, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 52 [comment, 4] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 53 [comment, 96] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 54 [foreignDoc, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 55 [foreignDoc, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 56 [foreignComment, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 57 [foreignTextNode, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 58 [foreignTextNode, 36] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 59 [xmlDoc, -1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 60 [xmlDoc, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 61 [xmlDoc, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 62 [xmlDoc, 5] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 63 [xmlComment, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 64 [xmlComment, 4] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 65 [processingInstruction, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 66 [processingInstruction, 5] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 67 [processingInstruction, 9] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 68 [detachedTextNode, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 69 [detachedTextNode, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 75 [detachedComment, 3] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 76 [detachedComment, 5] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 80 [docfrag, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 83 [doctype, 0] 
-FAIL Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 85 [doctype, 1] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 86 [foreignDoctype, 0] 
-PASS Range 22 [foreignDoc.body, 0, foreignDoc.body, 0], point 87 [xmlDoctype, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 24 [document.documentElement, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 25 [document.documentElement, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 26 [document.documentElement, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 27 [document.documentElement, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 28 [document.documentElement, 7] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 29 [document.head, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 30 [document.body, 3] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 33 [foreignDoc.head, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 34 [foreignDoc.body, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 35 [paras[0], 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 36 [paras[0], 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 37 [paras[0], 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 38 [paras[1], 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 39 [paras[1], 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 40 [paras[1], 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 41 [detachedPara1, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 42 [detachedPara1, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 43 [testDiv, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 44 [testDiv, 3] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 45 [document, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 46 [document, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 47 [document, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 48 [document, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 49 [document, 3] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 50 [comment, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 51 [comment, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 52 [comment, 4] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 53 [comment, 96] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 54 [foreignDoc, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 55 [foreignDoc, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 56 [foreignComment, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 57 [foreignTextNode, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 58 [foreignTextNode, 36] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 59 [xmlDoc, -1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 60 [xmlDoc, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 61 [xmlDoc, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 62 [xmlDoc, 5] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 63 [xmlComment, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 64 [xmlComment, 4] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 65 [processingInstruction, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 66 [processingInstruction, 5] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 67 [processingInstruction, 9] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 68 [detachedTextNode, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 69 [detachedTextNode, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 75 [detachedComment, 3] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 76 [detachedComment, 5] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 77 [detachedForeignComment, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 78 [detachedForeignComment, 4] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 79 [detachedXmlComment, 2] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 80 [docfrag, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 81 [foreignDocfrag, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 82 [xmlDocfrag, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 83 [doctype, 0] 
-FAIL Range 23 [paras[0], 0, paras[0], 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 23 [paras[0], 0, paras[0], 0], point 85 [doctype, 1] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 86 [foreignDoctype, 0] 
-PASS Range 23 [paras[0], 0, paras[0], 0], point 87 [xmlDoctype, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 24 [document.documentElement, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 25 [document.documentElement, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 26 [document.documentElement, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 27 [document.documentElement, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 28 [document.documentElement, 7] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 29 [document.head, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 30 [document.body, 3] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 33 [foreignDoc.head, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 34 [foreignDoc.body, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 35 [paras[0], 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 36 [paras[0], 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 37 [paras[0], 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 38 [paras[1], 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 39 [paras[1], 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 40 [paras[1], 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 41 [detachedPara1, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 42 [detachedPara1, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 43 [testDiv, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 44 [testDiv, 3] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 45 [document, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 46 [document, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 47 [document, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 48 [document, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 49 [document, 3] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 50 [comment, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 51 [comment, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 52 [comment, 4] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 53 [comment, 96] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 54 [foreignDoc, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 55 [foreignDoc, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 56 [foreignComment, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 57 [foreignTextNode, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 58 [foreignTextNode, 36] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 59 [xmlDoc, -1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 60 [xmlDoc, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 61 [xmlDoc, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 62 [xmlDoc, 5] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 63 [xmlComment, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 64 [xmlComment, 4] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 65 [processingInstruction, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 66 [processingInstruction, 5] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 67 [processingInstruction, 9] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 68 [detachedTextNode, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 69 [detachedTextNode, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 75 [detachedComment, 3] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 76 [detachedComment, 5] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 77 [detachedForeignComment, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 78 [detachedForeignComment, 4] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 79 [detachedXmlComment, 2] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 80 [docfrag, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 81 [foreignDocfrag, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 82 [xmlDocfrag, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 83 [doctype, 0] 
-FAIL Range 24 [paras[0], 0, paras[0], 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 24 [paras[0], 0, paras[0], 1], point 85 [doctype, 1] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 86 [foreignDoctype, 0] 
-PASS Range 24 [paras[0], 0, paras[0], 1], point 87 [xmlDoctype, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 24 [document.documentElement, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 25 [document.documentElement, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 26 [document.documentElement, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 27 [document.documentElement, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 28 [document.documentElement, 7] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 29 [document.head, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 30 [document.body, 3] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 35 [paras[0], 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 36 [paras[0], 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 37 [paras[0], 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 38 [paras[1], 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 39 [paras[1], 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 40 [paras[1], 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 41 [detachedPara1, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 42 [detachedPara1, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 43 [testDiv, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 44 [testDiv, 3] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 45 [document, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 46 [document, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 47 [document, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 48 [document, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 49 [document, 3] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 50 [comment, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 51 [comment, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 52 [comment, 4] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 53 [comment, 96] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 54 [foreignDoc, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 55 [foreignDoc, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 56 [foreignComment, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 57 [foreignTextNode, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 58 [foreignTextNode, 36] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 59 [xmlDoc, -1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 60 [xmlDoc, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 61 [xmlDoc, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 62 [xmlDoc, 5] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 63 [xmlComment, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 64 [xmlComment, 4] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 65 [processingInstruction, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 66 [processingInstruction, 5] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 67 [processingInstruction, 9] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 68 [detachedTextNode, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 69 [detachedTextNode, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 75 [detachedComment, 3] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 76 [detachedComment, 5] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 80 [docfrag, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 83 [doctype, 0] 
-FAIL Range 25 [detachedPara1, 0, detachedPara1, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 85 [doctype, 1] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 86 [foreignDoctype, 0] 
-PASS Range 25 [detachedPara1, 0, detachedPara1, 0], point 87 [xmlDoctype, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 24 [document.documentElement, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 25 [document.documentElement, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 26 [document.documentElement, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 27 [document.documentElement, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 28 [document.documentElement, 7] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 29 [document.head, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 30 [document.body, 3] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 35 [paras[0], 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 36 [paras[0], 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 37 [paras[0], 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 38 [paras[1], 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 39 [paras[1], 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 40 [paras[1], 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 41 [detachedPara1, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 42 [detachedPara1, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 43 [testDiv, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 44 [testDiv, 3] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 45 [document, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 46 [document, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 47 [document, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 48 [document, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 49 [document, 3] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 50 [comment, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 51 [comment, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 52 [comment, 4] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 53 [comment, 96] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 54 [foreignDoc, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 55 [foreignDoc, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 56 [foreignComment, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 57 [foreignTextNode, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 58 [foreignTextNode, 36] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 59 [xmlDoc, -1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 60 [xmlDoc, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 61 [xmlDoc, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 62 [xmlDoc, 5] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 63 [xmlComment, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 64 [xmlComment, 4] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 65 [processingInstruction, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 66 [processingInstruction, 5] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 67 [processingInstruction, 9] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 68 [detachedTextNode, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 69 [detachedTextNode, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 75 [detachedComment, 3] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 76 [detachedComment, 5] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 80 [docfrag, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 83 [doctype, 0] 
-FAIL Range 26 [detachedPara1, 0, detachedPara1, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 85 [doctype, 1] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 86 [foreignDoctype, 0] 
-PASS Range 26 [detachedPara1, 0, detachedPara1, 1], point 87 [xmlDoctype, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] 
-FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] 
-PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 24 [document.documentElement, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 25 [document.documentElement, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 26 [document.documentElement, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 27 [document.documentElement, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 28 [document.documentElement, 7] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 29 [document.head, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 30 [document.body, 3] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 35 [paras[0], 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 36 [paras[0], 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 37 [paras[0], 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 38 [paras[1], 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 39 [paras[1], 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 40 [paras[1], 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 41 [detachedPara1, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 42 [detachedPara1, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 43 [testDiv, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 44 [testDiv, 3] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 45 [document, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 46 [document, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 47 [document, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 48 [document, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 49 [document, 3] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 50 [comment, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 51 [comment, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 52 [comment, 4] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 53 [comment, 96] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 54 [foreignDoc, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 55 [foreignDoc, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 56 [foreignComment, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 57 [foreignTextNode, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 58 [foreignTextNode, 36] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 59 [xmlDoc, -1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 60 [xmlDoc, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 61 [xmlDoc, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 62 [xmlDoc, 5] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 63 [xmlComment, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 64 [xmlComment, 4] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 65 [processingInstruction, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 66 [processingInstruction, 5] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 67 [processingInstruction, 9] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 68 [detachedTextNode, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 69 [detachedTextNode, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 75 [detachedComment, 3] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 76 [detachedComment, 5] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 80 [docfrag, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 83 [doctype, 0] 
-FAIL Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 85 [doctype, 1] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 86 [foreignDoctype, 0] 
-PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 87 [xmlDoctype, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 24 [document.documentElement, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 25 [document.documentElement, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 26 [document.documentElement, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 27 [document.documentElement, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 28 [document.documentElement, 7] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 29 [document.head, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 30 [document.body, 3] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 33 [foreignDoc.head, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 34 [foreignDoc.body, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 35 [paras[0], 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 36 [paras[0], 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 37 [paras[0], 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 38 [paras[1], 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 39 [paras[1], 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 40 [paras[1], 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 41 [detachedPara1, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 42 [detachedPara1, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 43 [testDiv, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 44 [testDiv, 3] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 45 [document, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 46 [document, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 47 [document, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 48 [document, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 49 [document, 3] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 50 [comment, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 51 [comment, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 52 [comment, 4] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 53 [comment, 96] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 54 [foreignDoc, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 55 [foreignDoc, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 56 [foreignComment, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 57 [foreignTextNode, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 58 [foreignTextNode, 36] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 59 [xmlDoc, -1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 60 [xmlDoc, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 61 [xmlDoc, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 62 [xmlDoc, 5] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 63 [xmlComment, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 64 [xmlComment, 4] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 65 [processingInstruction, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 66 [processingInstruction, 5] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 67 [processingInstruction, 9] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 68 [detachedTextNode, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 69 [detachedTextNode, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 75 [detachedComment, 3] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 76 [detachedComment, 5] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 77 [detachedForeignComment, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 78 [detachedForeignComment, 4] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 79 [detachedXmlComment, 2] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 80 [docfrag, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 81 [foreignDocfrag, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 82 [xmlDocfrag, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 83 [doctype, 0] 
-FAIL Range 29 [paras[0].firstChild, 3, paras[3], 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 85 [doctype, 1] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 86 [foreignDoctype, 0] 
-PASS Range 29 [paras[0].firstChild, 3, paras[3], 1], point 87 [xmlDoctype, 0] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-30-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-30-expected.txt
deleted file mode 100644
index f9ef654c..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/collapse-30-expected.txt
+++ /dev/null
@@ -1,2995 +0,0 @@
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-CONSOLE ERROR: line 8: The given range isn't in document.
-This is a testharness.js-based test.
-Found 2581 tests; 2552 PASS, 29 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Set up range 30 [paras[0], 0, paras[0].firstChild, 7] 
-PASS Set up range 31 [testDiv, 2, paras[4], 1] 
-PASS Set up range 32 [testDiv, 1, paras[2].firstChild, 5] 
-PASS Set up range 33 [document.documentElement, 1, document.body, 0] 
-PASS Set up range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0] 
-PASS Set up range 35 [document, 0, document, 1] 
-PASS Set up range 36 [document, 0, document, 2] 
-PASS Set up range 37 [document, 1, document, 2] 
-PASS Set up range 38 [testDiv, 0, comment, 5] 
-PASS Set up range 39 [paras[2].firstChild, 4, comment, 2] 
-PASS Set up range 40 [paras[3], 1, comment, 8] 
-PASS Set up range 41 [foreignDoc, 0, foreignDoc, 0] 
-PASS Set up range 42 [foreignDoc, 1, foreignComment, 2] 
-PASS Set up range 43 [foreignDoc.body, 0, foreignTextNode, 36] 
-PASS Set up range 44 [xmlDoc, 0, xmlDoc, 0] 
-PASS Set up range 45 [xmlDoc, 1, xmlComment, 0] 
-PASS Set up range 46 [detachedTextNode, 0, detachedTextNode, 8] 
-PASS Set up range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] 
-PASS Set up range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] 
-PASS Set up range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] 
-PASS Set up range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] 
-PASS Set up range 51 [detachedComment, 3, detachedComment, 4] 
-PASS Set up range 52 [detachedComment, 5, detachedComment, 5] 
-PASS Set up range 53 [detachedForeignComment, 0, detachedForeignComment, 1] 
-PASS Set up range 54 [detachedForeignComment, 4, detachedForeignComment, 4] 
-PASS Set up range 55 [detachedXmlComment, 2, detachedXmlComment, 6] 
-PASS Set up range 56 [docfrag, 0, docfrag, 0] 
-PASS Set up range 57 [foreignDocfrag, 0, foreignDocfrag, 0] 
-PASS Set up range 58 [xmlDocfrag, 0, xmlDocfrag, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 0 [paras[0].firstChild, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 1 [paras[0].firstChild, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 2 [paras[0].firstChild, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 3 [paras[0].firstChild, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 4 [paras[0].firstChild, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 5 [paras[0].firstChild, 9] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 6 [paras[0].firstChild, 10] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 7 [paras[0].firstChild, 65535] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 8 [paras[1].firstChild, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 9 [paras[1].firstChild, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 10 [paras[1].firstChild, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 11 [paras[1].firstChild, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 12 [paras[1].firstChild, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 13 [paras[1].firstChild, 9] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 14 [paras[1].firstChild, 10] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 15 [paras[1].firstChild, 65535] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 24 [document.documentElement, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 25 [document.documentElement, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 26 [document.documentElement, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 27 [document.documentElement, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 28 [document.documentElement, 7] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 29 [document.head, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 30 [document.body, 3] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 33 [foreignDoc.head, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 34 [foreignDoc.body, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 35 [paras[0], 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 36 [paras[0], 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 37 [paras[0], 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 38 [paras[1], 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 39 [paras[1], 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 40 [paras[1], 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 41 [detachedPara1, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 42 [detachedPara1, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 43 [testDiv, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 44 [testDiv, 3] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 45 [document, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 46 [document, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 47 [document, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 48 [document, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 49 [document, 3] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 50 [comment, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 51 [comment, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 52 [comment, 4] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 53 [comment, 96] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 54 [foreignDoc, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 55 [foreignDoc, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 56 [foreignComment, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 57 [foreignTextNode, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 58 [foreignTextNode, 36] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 59 [xmlDoc, -1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 60 [xmlDoc, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 61 [xmlDoc, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 62 [xmlDoc, 5] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 63 [xmlComment, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 64 [xmlComment, 4] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 65 [processingInstruction, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 66 [processingInstruction, 5] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 67 [processingInstruction, 9] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 68 [detachedTextNode, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 69 [detachedTextNode, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 70 [detachedForeignTextNode, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 71 [detachedForeignTextNode, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 72 [detachedXmlTextNode, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 73 [detachedXmlTextNode, 8] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 75 [detachedComment, 3] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 76 [detachedComment, 5] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 77 [detachedForeignComment, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 78 [detachedForeignComment, 4] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 79 [detachedXmlComment, 2] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 80 [docfrag, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 81 [foreignDocfrag, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 82 [xmlDocfrag, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 83 [doctype, 0] 
-FAIL Range 30 [paras[0], 0, paras[0].firstChild, 7], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 85 [doctype, 1] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 86 [foreignDoctype, 0] 
-PASS Range 30 [paras[0], 0, paras[0].firstChild, 7], point 87 [xmlDoctype, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 24 [document.documentElement, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 25 [document.documentElement, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 26 [document.documentElement, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 27 [document.documentElement, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 28 [document.documentElement, 7] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 29 [document.head, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 30 [document.body, 3] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 33 [foreignDoc.head, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 34 [foreignDoc.body, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 35 [paras[0], 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 36 [paras[0], 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 37 [paras[0], 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 38 [paras[1], 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 39 [paras[1], 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 40 [paras[1], 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 41 [detachedPara1, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 42 [detachedPara1, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 43 [testDiv, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 44 [testDiv, 3] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 45 [document, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 46 [document, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 47 [document, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 48 [document, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 49 [document, 3] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 50 [comment, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 51 [comment, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 52 [comment, 4] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 53 [comment, 96] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 54 [foreignDoc, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 55 [foreignDoc, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 56 [foreignComment, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 57 [foreignTextNode, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 58 [foreignTextNode, 36] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 59 [xmlDoc, -1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 60 [xmlDoc, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 61 [xmlDoc, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 62 [xmlDoc, 5] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 63 [xmlComment, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 64 [xmlComment, 4] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 65 [processingInstruction, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 66 [processingInstruction, 5] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 67 [processingInstruction, 9] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 68 [detachedTextNode, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 69 [detachedTextNode, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 75 [detachedComment, 3] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 76 [detachedComment, 5] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 77 [detachedForeignComment, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 78 [detachedForeignComment, 4] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 79 [detachedXmlComment, 2] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 80 [docfrag, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 81 [foreignDocfrag, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 82 [xmlDocfrag, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 83 [doctype, 0] 
-FAIL Range 31 [testDiv, 2, paras[4], 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 31 [testDiv, 2, paras[4], 1], point 85 [doctype, 1] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 86 [foreignDoctype, 0] 
-PASS Range 31 [testDiv, 2, paras[4], 1], point 87 [xmlDoctype, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 0 [paras[0].firstChild, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 1 [paras[0].firstChild, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 2 [paras[0].firstChild, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 3 [paras[0].firstChild, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 4 [paras[0].firstChild, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 5 [paras[0].firstChild, 9] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 6 [paras[0].firstChild, 10] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 7 [paras[0].firstChild, 65535] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 8 [paras[1].firstChild, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 9 [paras[1].firstChild, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 10 [paras[1].firstChild, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 11 [paras[1].firstChild, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 12 [paras[1].firstChild, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 13 [paras[1].firstChild, 9] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 14 [paras[1].firstChild, 10] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 15 [paras[1].firstChild, 65535] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 24 [document.documentElement, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 25 [document.documentElement, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 26 [document.documentElement, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 27 [document.documentElement, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 28 [document.documentElement, 7] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 29 [document.head, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 30 [document.body, 3] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 33 [foreignDoc.head, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 34 [foreignDoc.body, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 35 [paras[0], 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 36 [paras[0], 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 37 [paras[0], 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 38 [paras[1], 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 39 [paras[1], 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 40 [paras[1], 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 41 [detachedPara1, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 42 [detachedPara1, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 43 [testDiv, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 44 [testDiv, 3] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 45 [document, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 46 [document, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 47 [document, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 48 [document, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 49 [document, 3] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 50 [comment, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 51 [comment, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 52 [comment, 4] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 53 [comment, 96] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 54 [foreignDoc, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 55 [foreignDoc, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 56 [foreignComment, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 57 [foreignTextNode, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 58 [foreignTextNode, 36] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 59 [xmlDoc, -1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 60 [xmlDoc, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 61 [xmlDoc, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 62 [xmlDoc, 5] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 63 [xmlComment, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 64 [xmlComment, 4] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 65 [processingInstruction, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 66 [processingInstruction, 5] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 67 [processingInstruction, 9] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 68 [detachedTextNode, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 69 [detachedTextNode, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 70 [detachedForeignTextNode, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 71 [detachedForeignTextNode, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 72 [detachedXmlTextNode, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 73 [detachedXmlTextNode, 8] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 75 [detachedComment, 3] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 76 [detachedComment, 5] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 77 [detachedForeignComment, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 78 [detachedForeignComment, 4] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 79 [detachedXmlComment, 2] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 80 [docfrag, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 81 [foreignDocfrag, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 82 [xmlDocfrag, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 83 [doctype, 0] 
-FAIL Range 32 [testDiv, 1, paras[2].firstChild, 5], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 85 [doctype, 1] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 86 [foreignDoctype, 0] 
-PASS Range 32 [testDiv, 1, paras[2].firstChild, 5], point 87 [xmlDoctype, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 24 [document.documentElement, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 25 [document.documentElement, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 26 [document.documentElement, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 27 [document.documentElement, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 28 [document.documentElement, 7] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 29 [document.head, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 30 [document.body, 3] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 35 [paras[0], 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 36 [paras[0], 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 37 [paras[0], 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 38 [paras[1], 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 39 [paras[1], 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 40 [paras[1], 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 41 [detachedPara1, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 42 [detachedPara1, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 43 [testDiv, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 44 [testDiv, 3] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 45 [document, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 46 [document, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 47 [document, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 48 [document, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 49 [document, 3] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 50 [comment, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 51 [comment, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 52 [comment, 4] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 53 [comment, 96] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 54 [foreignDoc, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 55 [foreignDoc, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 56 [foreignComment, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 57 [foreignTextNode, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 58 [foreignTextNode, 36] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 59 [xmlDoc, -1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 60 [xmlDoc, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 61 [xmlDoc, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 62 [xmlDoc, 5] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 63 [xmlComment, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 64 [xmlComment, 4] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 65 [processingInstruction, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 66 [processingInstruction, 5] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 67 [processingInstruction, 9] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 68 [detachedTextNode, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 69 [detachedTextNode, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 75 [detachedComment, 3] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 76 [detachedComment, 5] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 80 [docfrag, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 83 [doctype, 0] 
-FAIL Range 33 [document.documentElement, 1, document.body, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 85 [doctype, 1] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 86 [foreignDoctype, 0] 
-PASS Range 33 [document.documentElement, 1, document.body, 0], point 87 [xmlDoctype, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 24 [document.documentElement, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 25 [document.documentElement, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 26 [document.documentElement, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 27 [document.documentElement, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 28 [document.documentElement, 7] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 29 [document.head, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 30 [document.body, 3] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 35 [paras[0], 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 36 [paras[0], 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 37 [paras[0], 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 38 [paras[1], 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 39 [paras[1], 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 40 [paras[1], 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 41 [detachedPara1, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 42 [detachedPara1, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 43 [testDiv, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 44 [testDiv, 3] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 45 [document, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 46 [document, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 47 [document, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 48 [document, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 49 [document, 3] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 50 [comment, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 51 [comment, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 52 [comment, 4] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 53 [comment, 96] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 54 [foreignDoc, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 55 [foreignDoc, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 56 [foreignComment, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 57 [foreignTextNode, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 58 [foreignTextNode, 36] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 59 [xmlDoc, -1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 60 [xmlDoc, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 61 [xmlDoc, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 62 [xmlDoc, 5] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 63 [xmlComment, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 64 [xmlComment, 4] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 65 [processingInstruction, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 66 [processingInstruction, 5] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 67 [processingInstruction, 9] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 68 [detachedTextNode, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 69 [detachedTextNode, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 75 [detachedComment, 3] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 76 [detachedComment, 5] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 80 [docfrag, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 83 [doctype, 0] 
-FAIL Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 85 [doctype, 1] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 86 [foreignDoctype, 0] 
-PASS Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0], point 87 [xmlDoctype, 0] 
-PASS Range 35 [document, 0, document, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 35 [document, 0, document, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 35 [document, 0, document, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 35 [document, 0, document, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 35 [document, 0, document, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 35 [document, 0, document, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 35 [document, 0, document, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 35 [document, 0, document, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 35 [document, 0, document, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 35 [document, 0, document, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 35 [document, 0, document, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 35 [document, 0, document, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 35 [document, 0, document, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 35 [document, 0, document, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 35 [document, 0, document, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 35 [document, 0, document, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 35 [document, 0, document, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 35 [document, 0, document, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 35 [document, 0, document, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 35 [document, 0, document, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 35 [document, 0, document, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 35 [document, 0, document, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 35 [document, 0, document, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 35 [document, 0, document, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 35 [document, 0, document, 1], point 24 [document.documentElement, -1] 
-PASS Range 35 [document, 0, document, 1], point 25 [document.documentElement, 0] 
-PASS Range 35 [document, 0, document, 1], point 26 [document.documentElement, 1] 
-PASS Range 35 [document, 0, document, 1], point 27 [document.documentElement, 2] 
-PASS Range 35 [document, 0, document, 1], point 28 [document.documentElement, 7] 
-PASS Range 35 [document, 0, document, 1], point 29 [document.head, 1] 
-PASS Range 35 [document, 0, document, 1], point 30 [document.body, 3] 
-PASS Range 35 [document, 0, document, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 35 [document, 0, document, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 35 [document, 0, document, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 35 [document, 0, document, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 35 [document, 0, document, 1], point 35 [paras[0], 0] 
-PASS Range 35 [document, 0, document, 1], point 36 [paras[0], 1] 
-PASS Range 35 [document, 0, document, 1], point 37 [paras[0], 2] 
-PASS Range 35 [document, 0, document, 1], point 38 [paras[1], 0] 
-PASS Range 35 [document, 0, document, 1], point 39 [paras[1], 1] 
-PASS Range 35 [document, 0, document, 1], point 40 [paras[1], 2] 
-PASS Range 35 [document, 0, document, 1], point 41 [detachedPara1, 0] 
-PASS Range 35 [document, 0, document, 1], point 42 [detachedPara1, 1] 
-PASS Range 35 [document, 0, document, 1], point 43 [testDiv, 0] 
-PASS Range 35 [document, 0, document, 1], point 44 [testDiv, 3] 
-PASS Range 35 [document, 0, document, 1], point 45 [document, -1] 
-PASS Range 35 [document, 0, document, 1], point 46 [document, 0] 
-PASS Range 35 [document, 0, document, 1], point 47 [document, 1] 
-PASS Range 35 [document, 0, document, 1], point 48 [document, 2] 
-PASS Range 35 [document, 0, document, 1], point 49 [document, 3] 
-PASS Range 35 [document, 0, document, 1], point 50 [comment, -1] 
-PASS Range 35 [document, 0, document, 1], point 51 [comment, 0] 
-PASS Range 35 [document, 0, document, 1], point 52 [comment, 4] 
-PASS Range 35 [document, 0, document, 1], point 53 [comment, 96] 
-PASS Range 35 [document, 0, document, 1], point 54 [foreignDoc, 0] 
-PASS Range 35 [document, 0, document, 1], point 55 [foreignDoc, 1] 
-PASS Range 35 [document, 0, document, 1], point 56 [foreignComment, 2] 
-PASS Range 35 [document, 0, document, 1], point 57 [foreignTextNode, 0] 
-PASS Range 35 [document, 0, document, 1], point 58 [foreignTextNode, 36] 
-PASS Range 35 [document, 0, document, 1], point 59 [xmlDoc, -1] 
-PASS Range 35 [document, 0, document, 1], point 60 [xmlDoc, 0] 
-PASS Range 35 [document, 0, document, 1], point 61 [xmlDoc, 1] 
-PASS Range 35 [document, 0, document, 1], point 62 [xmlDoc, 5] 
-PASS Range 35 [document, 0, document, 1], point 63 [xmlComment, 0] 
-PASS Range 35 [document, 0, document, 1], point 64 [xmlComment, 4] 
-PASS Range 35 [document, 0, document, 1], point 65 [processingInstruction, 0] 
-PASS Range 35 [document, 0, document, 1], point 66 [processingInstruction, 5] 
-PASS Range 35 [document, 0, document, 1], point 67 [processingInstruction, 9] 
-PASS Range 35 [document, 0, document, 1], point 68 [detachedTextNode, 0] 
-PASS Range 35 [document, 0, document, 1], point 69 [detachedTextNode, 8] 
-PASS Range 35 [document, 0, document, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 35 [document, 0, document, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 35 [document, 0, document, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 35 [document, 0, document, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 35 [document, 0, document, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 35 [document, 0, document, 1], point 75 [detachedComment, 3] 
-PASS Range 35 [document, 0, document, 1], point 76 [detachedComment, 5] 
-PASS Range 35 [document, 0, document, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 35 [document, 0, document, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 35 [document, 0, document, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 35 [document, 0, document, 1], point 80 [docfrag, 0] 
-PASS Range 35 [document, 0, document, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 35 [document, 0, document, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 35 [document, 0, document, 1], point 83 [doctype, 0] 
-FAIL Range 35 [document, 0, document, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 35 [document, 0, document, 1], point 85 [doctype, 1] 
-PASS Range 35 [document, 0, document, 1], point 86 [foreignDoctype, 0] 
-PASS Range 35 [document, 0, document, 1], point 87 [xmlDoctype, 0] 
-PASS Range 36 [document, 0, document, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 36 [document, 0, document, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 36 [document, 0, document, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 36 [document, 0, document, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 36 [document, 0, document, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 36 [document, 0, document, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 36 [document, 0, document, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 36 [document, 0, document, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 36 [document, 0, document, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 36 [document, 0, document, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 36 [document, 0, document, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 36 [document, 0, document, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 36 [document, 0, document, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 36 [document, 0, document, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 36 [document, 0, document, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 36 [document, 0, document, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 36 [document, 0, document, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 36 [document, 0, document, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 36 [document, 0, document, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 36 [document, 0, document, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 36 [document, 0, document, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 36 [document, 0, document, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 36 [document, 0, document, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 36 [document, 0, document, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 36 [document, 0, document, 2], point 24 [document.documentElement, -1] 
-PASS Range 36 [document, 0, document, 2], point 25 [document.documentElement, 0] 
-PASS Range 36 [document, 0, document, 2], point 26 [document.documentElement, 1] 
-PASS Range 36 [document, 0, document, 2], point 27 [document.documentElement, 2] 
-PASS Range 36 [document, 0, document, 2], point 28 [document.documentElement, 7] 
-PASS Range 36 [document, 0, document, 2], point 29 [document.head, 1] 
-PASS Range 36 [document, 0, document, 2], point 30 [document.body, 3] 
-PASS Range 36 [document, 0, document, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 36 [document, 0, document, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 36 [document, 0, document, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 36 [document, 0, document, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 36 [document, 0, document, 2], point 35 [paras[0], 0] 
-PASS Range 36 [document, 0, document, 2], point 36 [paras[0], 1] 
-PASS Range 36 [document, 0, document, 2], point 37 [paras[0], 2] 
-PASS Range 36 [document, 0, document, 2], point 38 [paras[1], 0] 
-PASS Range 36 [document, 0, document, 2], point 39 [paras[1], 1] 
-PASS Range 36 [document, 0, document, 2], point 40 [paras[1], 2] 
-PASS Range 36 [document, 0, document, 2], point 41 [detachedPara1, 0] 
-PASS Range 36 [document, 0, document, 2], point 42 [detachedPara1, 1] 
-PASS Range 36 [document, 0, document, 2], point 43 [testDiv, 0] 
-PASS Range 36 [document, 0, document, 2], point 44 [testDiv, 3] 
-PASS Range 36 [document, 0, document, 2], point 45 [document, -1] 
-PASS Range 36 [document, 0, document, 2], point 46 [document, 0] 
-PASS Range 36 [document, 0, document, 2], point 47 [document, 1] 
-PASS Range 36 [document, 0, document, 2], point 48 [document, 2] 
-PASS Range 36 [document, 0, document, 2], point 49 [document, 3] 
-PASS Range 36 [document, 0, document, 2], point 50 [comment, -1] 
-PASS Range 36 [document, 0, document, 2], point 51 [comment, 0] 
-PASS Range 36 [document, 0, document, 2], point 52 [comment, 4] 
-PASS Range 36 [document, 0, document, 2], point 53 [comment, 96] 
-PASS Range 36 [document, 0, document, 2], point 54 [foreignDoc, 0] 
-PASS Range 36 [document, 0, document, 2], point 55 [foreignDoc, 1] 
-PASS Range 36 [document, 0, document, 2], point 56 [foreignComment, 2] 
-PASS Range 36 [document, 0, document, 2], point 57 [foreignTextNode, 0] 
-PASS Range 36 [document, 0, document, 2], point 58 [foreignTextNode, 36] 
-PASS Range 36 [document, 0, document, 2], point 59 [xmlDoc, -1] 
-PASS Range 36 [document, 0, document, 2], point 60 [xmlDoc, 0] 
-PASS Range 36 [document, 0, document, 2], point 61 [xmlDoc, 1] 
-PASS Range 36 [document, 0, document, 2], point 62 [xmlDoc, 5] 
-PASS Range 36 [document, 0, document, 2], point 63 [xmlComment, 0] 
-PASS Range 36 [document, 0, document, 2], point 64 [xmlComment, 4] 
-PASS Range 36 [document, 0, document, 2], point 65 [processingInstruction, 0] 
-PASS Range 36 [document, 0, document, 2], point 66 [processingInstruction, 5] 
-PASS Range 36 [document, 0, document, 2], point 67 [processingInstruction, 9] 
-PASS Range 36 [document, 0, document, 2], point 68 [detachedTextNode, 0] 
-PASS Range 36 [document, 0, document, 2], point 69 [detachedTextNode, 8] 
-PASS Range 36 [document, 0, document, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 36 [document, 0, document, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 36 [document, 0, document, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 36 [document, 0, document, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 36 [document, 0, document, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 36 [document, 0, document, 2], point 75 [detachedComment, 3] 
-PASS Range 36 [document, 0, document, 2], point 76 [detachedComment, 5] 
-PASS Range 36 [document, 0, document, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 36 [document, 0, document, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 36 [document, 0, document, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 36 [document, 0, document, 2], point 80 [docfrag, 0] 
-PASS Range 36 [document, 0, document, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 36 [document, 0, document, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 36 [document, 0, document, 2], point 83 [doctype, 0] 
-FAIL Range 36 [document, 0, document, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 36 [document, 0, document, 2], point 85 [doctype, 1] 
-PASS Range 36 [document, 0, document, 2], point 86 [foreignDoctype, 0] 
-PASS Range 36 [document, 0, document, 2], point 87 [xmlDoctype, 0] 
-PASS Range 37 [document, 1, document, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 37 [document, 1, document, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 37 [document, 1, document, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 37 [document, 1, document, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 37 [document, 1, document, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 37 [document, 1, document, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 37 [document, 1, document, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 37 [document, 1, document, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 37 [document, 1, document, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 37 [document, 1, document, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 37 [document, 1, document, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 37 [document, 1, document, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 37 [document, 1, document, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 37 [document, 1, document, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 37 [document, 1, document, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 37 [document, 1, document, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 37 [document, 1, document, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 37 [document, 1, document, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 37 [document, 1, document, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 37 [document, 1, document, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 37 [document, 1, document, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 37 [document, 1, document, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 37 [document, 1, document, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 37 [document, 1, document, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 37 [document, 1, document, 2], point 24 [document.documentElement, -1] 
-PASS Range 37 [document, 1, document, 2], point 25 [document.documentElement, 0] 
-PASS Range 37 [document, 1, document, 2], point 26 [document.documentElement, 1] 
-PASS Range 37 [document, 1, document, 2], point 27 [document.documentElement, 2] 
-PASS Range 37 [document, 1, document, 2], point 28 [document.documentElement, 7] 
-PASS Range 37 [document, 1, document, 2], point 29 [document.head, 1] 
-PASS Range 37 [document, 1, document, 2], point 30 [document.body, 3] 
-PASS Range 37 [document, 1, document, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 37 [document, 1, document, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 37 [document, 1, document, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 37 [document, 1, document, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 37 [document, 1, document, 2], point 35 [paras[0], 0] 
-PASS Range 37 [document, 1, document, 2], point 36 [paras[0], 1] 
-PASS Range 37 [document, 1, document, 2], point 37 [paras[0], 2] 
-PASS Range 37 [document, 1, document, 2], point 38 [paras[1], 0] 
-PASS Range 37 [document, 1, document, 2], point 39 [paras[1], 1] 
-PASS Range 37 [document, 1, document, 2], point 40 [paras[1], 2] 
-PASS Range 37 [document, 1, document, 2], point 41 [detachedPara1, 0] 
-PASS Range 37 [document, 1, document, 2], point 42 [detachedPara1, 1] 
-PASS Range 37 [document, 1, document, 2], point 43 [testDiv, 0] 
-PASS Range 37 [document, 1, document, 2], point 44 [testDiv, 3] 
-PASS Range 37 [document, 1, document, 2], point 45 [document, -1] 
-PASS Range 37 [document, 1, document, 2], point 46 [document, 0] 
-PASS Range 37 [document, 1, document, 2], point 47 [document, 1] 
-PASS Range 37 [document, 1, document, 2], point 48 [document, 2] 
-PASS Range 37 [document, 1, document, 2], point 49 [document, 3] 
-PASS Range 37 [document, 1, document, 2], point 50 [comment, -1] 
-PASS Range 37 [document, 1, document, 2], point 51 [comment, 0] 
-PASS Range 37 [document, 1, document, 2], point 52 [comment, 4] 
-PASS Range 37 [document, 1, document, 2], point 53 [comment, 96] 
-PASS Range 37 [document, 1, document, 2], point 54 [foreignDoc, 0] 
-PASS Range 37 [document, 1, document, 2], point 55 [foreignDoc, 1] 
-PASS Range 37 [document, 1, document, 2], point 56 [foreignComment, 2] 
-PASS Range 37 [document, 1, document, 2], point 57 [foreignTextNode, 0] 
-PASS Range 37 [document, 1, document, 2], point 58 [foreignTextNode, 36] 
-PASS Range 37 [document, 1, document, 2], point 59 [xmlDoc, -1] 
-PASS Range 37 [document, 1, document, 2], point 60 [xmlDoc, 0] 
-PASS Range 37 [document, 1, document, 2], point 61 [xmlDoc, 1] 
-PASS Range 37 [document, 1, document, 2], point 62 [xmlDoc, 5] 
-PASS Range 37 [document, 1, document, 2], point 63 [xmlComment, 0] 
-PASS Range 37 [document, 1, document, 2], point 64 [xmlComment, 4] 
-PASS Range 37 [document, 1, document, 2], point 65 [processingInstruction, 0] 
-PASS Range 37 [document, 1, document, 2], point 66 [processingInstruction, 5] 
-PASS Range 37 [document, 1, document, 2], point 67 [processingInstruction, 9] 
-PASS Range 37 [document, 1, document, 2], point 68 [detachedTextNode, 0] 
-PASS Range 37 [document, 1, document, 2], point 69 [detachedTextNode, 8] 
-PASS Range 37 [document, 1, document, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 37 [document, 1, document, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 37 [document, 1, document, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 37 [document, 1, document, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 37 [document, 1, document, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 37 [document, 1, document, 2], point 75 [detachedComment, 3] 
-PASS Range 37 [document, 1, document, 2], point 76 [detachedComment, 5] 
-PASS Range 37 [document, 1, document, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 37 [document, 1, document, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 37 [document, 1, document, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 37 [document, 1, document, 2], point 80 [docfrag, 0] 
-PASS Range 37 [document, 1, document, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 37 [document, 1, document, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 37 [document, 1, document, 2], point 83 [doctype, 0] 
-FAIL Range 37 [document, 1, document, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 37 [document, 1, document, 2], point 85 [doctype, 1] 
-PASS Range 37 [document, 1, document, 2], point 86 [foreignDoctype, 0] 
-PASS Range 37 [document, 1, document, 2], point 87 [xmlDoctype, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 0 [paras[0].firstChild, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 1 [paras[0].firstChild, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 2 [paras[0].firstChild, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 3 [paras[0].firstChild, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 4 [paras[0].firstChild, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 5 [paras[0].firstChild, 9] 
-PASS Range 38 [testDiv, 0, comment, 5], point 6 [paras[0].firstChild, 10] 
-PASS Range 38 [testDiv, 0, comment, 5], point 7 [paras[0].firstChild, 65535] 
-PASS Range 38 [testDiv, 0, comment, 5], point 8 [paras[1].firstChild, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 9 [paras[1].firstChild, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 10 [paras[1].firstChild, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 11 [paras[1].firstChild, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 12 [paras[1].firstChild, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 13 [paras[1].firstChild, 9] 
-PASS Range 38 [testDiv, 0, comment, 5], point 14 [paras[1].firstChild, 10] 
-PASS Range 38 [testDiv, 0, comment, 5], point 15 [paras[1].firstChild, 65535] 
-PASS Range 38 [testDiv, 0, comment, 5], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 38 [testDiv, 0, comment, 5], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 38 [testDiv, 0, comment, 5], point 24 [document.documentElement, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 25 [document.documentElement, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 26 [document.documentElement, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 27 [document.documentElement, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 28 [document.documentElement, 7] 
-PASS Range 38 [testDiv, 0, comment, 5], point 29 [document.head, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 30 [document.body, 3] 
-PASS Range 38 [testDiv, 0, comment, 5], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 33 [foreignDoc.head, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 34 [foreignDoc.body, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 35 [paras[0], 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 36 [paras[0], 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 37 [paras[0], 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 38 [paras[1], 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 39 [paras[1], 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 40 [paras[1], 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 41 [detachedPara1, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 42 [detachedPara1, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 43 [testDiv, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 44 [testDiv, 3] 
-PASS Range 38 [testDiv, 0, comment, 5], point 45 [document, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 46 [document, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 47 [document, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 48 [document, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 49 [document, 3] 
-PASS Range 38 [testDiv, 0, comment, 5], point 50 [comment, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 51 [comment, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 52 [comment, 4] 
-PASS Range 38 [testDiv, 0, comment, 5], point 53 [comment, 96] 
-PASS Range 38 [testDiv, 0, comment, 5], point 54 [foreignDoc, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 55 [foreignDoc, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 56 [foreignComment, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 57 [foreignTextNode, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 58 [foreignTextNode, 36] 
-PASS Range 38 [testDiv, 0, comment, 5], point 59 [xmlDoc, -1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 60 [xmlDoc, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 61 [xmlDoc, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 62 [xmlDoc, 5] 
-PASS Range 38 [testDiv, 0, comment, 5], point 63 [xmlComment, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 64 [xmlComment, 4] 
-PASS Range 38 [testDiv, 0, comment, 5], point 65 [processingInstruction, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 66 [processingInstruction, 5] 
-PASS Range 38 [testDiv, 0, comment, 5], point 67 [processingInstruction, 9] 
-PASS Range 38 [testDiv, 0, comment, 5], point 68 [detachedTextNode, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 69 [detachedTextNode, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 70 [detachedForeignTextNode, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 71 [detachedForeignTextNode, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 72 [detachedXmlTextNode, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 73 [detachedXmlTextNode, 8] 
-PASS Range 38 [testDiv, 0, comment, 5], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 38 [testDiv, 0, comment, 5], point 75 [detachedComment, 3] 
-PASS Range 38 [testDiv, 0, comment, 5], point 76 [detachedComment, 5] 
-PASS Range 38 [testDiv, 0, comment, 5], point 77 [detachedForeignComment, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 78 [detachedForeignComment, 4] 
-PASS Range 38 [testDiv, 0, comment, 5], point 79 [detachedXmlComment, 2] 
-PASS Range 38 [testDiv, 0, comment, 5], point 80 [docfrag, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 81 [foreignDocfrag, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 82 [xmlDocfrag, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 83 [doctype, 0] 
-FAIL Range 38 [testDiv, 0, comment, 5], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 38 [testDiv, 0, comment, 5], point 85 [doctype, 1] 
-PASS Range 38 [testDiv, 0, comment, 5], point 86 [foreignDoctype, 0] 
-PASS Range 38 [testDiv, 0, comment, 5], point 87 [xmlDoctype, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 24 [document.documentElement, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 25 [document.documentElement, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 26 [document.documentElement, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 27 [document.documentElement, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 28 [document.documentElement, 7] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 29 [document.head, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 30 [document.body, 3] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 35 [paras[0], 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 36 [paras[0], 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 37 [paras[0], 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 38 [paras[1], 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 39 [paras[1], 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 40 [paras[1], 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 41 [detachedPara1, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 42 [detachedPara1, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 43 [testDiv, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 44 [testDiv, 3] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 45 [document, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 46 [document, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 47 [document, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 48 [document, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 49 [document, 3] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 50 [comment, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 51 [comment, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 52 [comment, 4] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 53 [comment, 96] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 54 [foreignDoc, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 55 [foreignDoc, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 56 [foreignComment, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 57 [foreignTextNode, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 58 [foreignTextNode, 36] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 59 [xmlDoc, -1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 60 [xmlDoc, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 61 [xmlDoc, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 62 [xmlDoc, 5] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 63 [xmlComment, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 64 [xmlComment, 4] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 65 [processingInstruction, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 66 [processingInstruction, 5] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 67 [processingInstruction, 9] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 68 [detachedTextNode, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 69 [detachedTextNode, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 75 [detachedComment, 3] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 76 [detachedComment, 5] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 80 [docfrag, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 83 [doctype, 0] 
-FAIL Range 39 [paras[2].firstChild, 4, comment, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 85 [doctype, 1] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 86 [foreignDoctype, 0] 
-PASS Range 39 [paras[2].firstChild, 4, comment, 2], point 87 [xmlDoctype, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 40 [paras[3], 1, comment, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 40 [paras[3], 1, comment, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 40 [paras[3], 1, comment, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 40 [paras[3], 1, comment, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 40 [paras[3], 1, comment, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 40 [paras[3], 1, comment, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 40 [paras[3], 1, comment, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 40 [paras[3], 1, comment, 8], point 24 [document.documentElement, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 25 [document.documentElement, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 26 [document.documentElement, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 27 [document.documentElement, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 28 [document.documentElement, 7] 
-PASS Range 40 [paras[3], 1, comment, 8], point 29 [document.head, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 30 [document.body, 3] 
-PASS Range 40 [paras[3], 1, comment, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 35 [paras[0], 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 36 [paras[0], 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 37 [paras[0], 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 38 [paras[1], 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 39 [paras[1], 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 40 [paras[1], 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 41 [detachedPara1, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 42 [detachedPara1, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 43 [testDiv, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 44 [testDiv, 3] 
-PASS Range 40 [paras[3], 1, comment, 8], point 45 [document, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 46 [document, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 47 [document, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 48 [document, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 49 [document, 3] 
-PASS Range 40 [paras[3], 1, comment, 8], point 50 [comment, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 51 [comment, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 52 [comment, 4] 
-PASS Range 40 [paras[3], 1, comment, 8], point 53 [comment, 96] 
-PASS Range 40 [paras[3], 1, comment, 8], point 54 [foreignDoc, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 55 [foreignDoc, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 56 [foreignComment, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 57 [foreignTextNode, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 58 [foreignTextNode, 36] 
-PASS Range 40 [paras[3], 1, comment, 8], point 59 [xmlDoc, -1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 60 [xmlDoc, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 61 [xmlDoc, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 62 [xmlDoc, 5] 
-PASS Range 40 [paras[3], 1, comment, 8], point 63 [xmlComment, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 64 [xmlComment, 4] 
-PASS Range 40 [paras[3], 1, comment, 8], point 65 [processingInstruction, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 66 [processingInstruction, 5] 
-PASS Range 40 [paras[3], 1, comment, 8], point 67 [processingInstruction, 9] 
-PASS Range 40 [paras[3], 1, comment, 8], point 68 [detachedTextNode, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 69 [detachedTextNode, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 40 [paras[3], 1, comment, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 40 [paras[3], 1, comment, 8], point 75 [detachedComment, 3] 
-PASS Range 40 [paras[3], 1, comment, 8], point 76 [detachedComment, 5] 
-PASS Range 40 [paras[3], 1, comment, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 40 [paras[3], 1, comment, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 40 [paras[3], 1, comment, 8], point 80 [docfrag, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 83 [doctype, 0] 
-FAIL Range 40 [paras[3], 1, comment, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 40 [paras[3], 1, comment, 8], point 85 [doctype, 1] 
-PASS Range 40 [paras[3], 1, comment, 8], point 86 [foreignDoctype, 0] 
-PASS Range 40 [paras[3], 1, comment, 8], point 87 [xmlDoctype, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 24 [document.documentElement, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 25 [document.documentElement, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 26 [document.documentElement, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 27 [document.documentElement, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 28 [document.documentElement, 7] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 29 [document.head, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 30 [document.body, 3] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 35 [paras[0], 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 36 [paras[0], 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 37 [paras[0], 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 38 [paras[1], 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 39 [paras[1], 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 40 [paras[1], 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 41 [detachedPara1, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 42 [detachedPara1, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 43 [testDiv, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 44 [testDiv, 3] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 45 [document, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 46 [document, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 47 [document, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 48 [document, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 49 [document, 3] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 50 [comment, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 51 [comment, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 52 [comment, 4] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 53 [comment, 96] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 54 [foreignDoc, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 55 [foreignDoc, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 56 [foreignComment, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 57 [foreignTextNode, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 58 [foreignTextNode, 36] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 59 [xmlDoc, -1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 60 [xmlDoc, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 61 [xmlDoc, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 62 [xmlDoc, 5] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 63 [xmlComment, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 64 [xmlComment, 4] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 65 [processingInstruction, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 66 [processingInstruction, 5] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 67 [processingInstruction, 9] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 68 [detachedTextNode, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 69 [detachedTextNode, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 75 [detachedComment, 3] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 76 [detachedComment, 5] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 80 [docfrag, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 83 [doctype, 0] 
-FAIL Range 41 [foreignDoc, 0, foreignDoc, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 85 [doctype, 1] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 86 [foreignDoctype, 0] 
-PASS Range 41 [foreignDoc, 0, foreignDoc, 0], point 87 [xmlDoctype, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 0 [paras[0].firstChild, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 1 [paras[0].firstChild, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 2 [paras[0].firstChild, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 3 [paras[0].firstChild, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 4 [paras[0].firstChild, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 5 [paras[0].firstChild, 9] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 6 [paras[0].firstChild, 10] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 7 [paras[0].firstChild, 65535] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 8 [paras[1].firstChild, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 9 [paras[1].firstChild, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 10 [paras[1].firstChild, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 11 [paras[1].firstChild, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 12 [paras[1].firstChild, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 13 [paras[1].firstChild, 9] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 14 [paras[1].firstChild, 10] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 15 [paras[1].firstChild, 65535] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 24 [document.documentElement, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 25 [document.documentElement, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 26 [document.documentElement, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 27 [document.documentElement, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 28 [document.documentElement, 7] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 29 [document.head, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 30 [document.body, 3] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 33 [foreignDoc.head, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 34 [foreignDoc.body, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 35 [paras[0], 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 36 [paras[0], 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 37 [paras[0], 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 38 [paras[1], 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 39 [paras[1], 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 40 [paras[1], 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 41 [detachedPara1, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 42 [detachedPara1, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 43 [testDiv, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 44 [testDiv, 3] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 45 [document, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 46 [document, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 47 [document, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 48 [document, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 49 [document, 3] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 50 [comment, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 51 [comment, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 52 [comment, 4] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 53 [comment, 96] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 54 [foreignDoc, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 55 [foreignDoc, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 56 [foreignComment, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 57 [foreignTextNode, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 58 [foreignTextNode, 36] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 59 [xmlDoc, -1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 60 [xmlDoc, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 61 [xmlDoc, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 62 [xmlDoc, 5] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 63 [xmlComment, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 64 [xmlComment, 4] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 65 [processingInstruction, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 66 [processingInstruction, 5] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 67 [processingInstruction, 9] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 68 [detachedTextNode, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 69 [detachedTextNode, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 70 [detachedForeignTextNode, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 71 [detachedForeignTextNode, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 72 [detachedXmlTextNode, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 73 [detachedXmlTextNode, 8] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 75 [detachedComment, 3] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 76 [detachedComment, 5] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 77 [detachedForeignComment, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 78 [detachedForeignComment, 4] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 79 [detachedXmlComment, 2] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 80 [docfrag, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 81 [foreignDocfrag, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 82 [xmlDocfrag, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 83 [doctype, 0] 
-FAIL Range 42 [foreignDoc, 1, foreignComment, 2], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 85 [doctype, 1] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 86 [foreignDoctype, 0] 
-PASS Range 42 [foreignDoc, 1, foreignComment, 2], point 87 [xmlDoctype, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 0 [paras[0].firstChild, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 1 [paras[0].firstChild, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 2 [paras[0].firstChild, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 3 [paras[0].firstChild, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 4 [paras[0].firstChild, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 5 [paras[0].firstChild, 9] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 6 [paras[0].firstChild, 10] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 7 [paras[0].firstChild, 65535] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 8 [paras[1].firstChild, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 9 [paras[1].firstChild, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 10 [paras[1].firstChild, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 11 [paras[1].firstChild, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 12 [paras[1].firstChild, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 13 [paras[1].firstChild, 9] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 14 [paras[1].firstChild, 10] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 15 [paras[1].firstChild, 65535] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 24 [document.documentElement, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 25 [document.documentElement, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 26 [document.documentElement, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 27 [document.documentElement, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 28 [document.documentElement, 7] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 29 [document.head, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 30 [document.body, 3] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 33 [foreignDoc.head, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 34 [foreignDoc.body, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 35 [paras[0], 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 36 [paras[0], 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 37 [paras[0], 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 38 [paras[1], 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 39 [paras[1], 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 40 [paras[1], 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 41 [detachedPara1, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 42 [detachedPara1, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 43 [testDiv, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 44 [testDiv, 3] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 45 [document, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 46 [document, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 47 [document, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 48 [document, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 49 [document, 3] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 50 [comment, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 51 [comment, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 52 [comment, 4] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 53 [comment, 96] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 54 [foreignDoc, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 55 [foreignDoc, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 56 [foreignComment, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 57 [foreignTextNode, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 58 [foreignTextNode, 36] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 59 [xmlDoc, -1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 60 [xmlDoc, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 61 [xmlDoc, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 62 [xmlDoc, 5] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 63 [xmlComment, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 64 [xmlComment, 4] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 65 [processingInstruction, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 66 [processingInstruction, 5] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 67 [processingInstruction, 9] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 68 [detachedTextNode, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 69 [detachedTextNode, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 70 [detachedForeignTextNode, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 71 [detachedForeignTextNode, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 72 [detachedXmlTextNode, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 73 [detachedXmlTextNode, 8] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 75 [detachedComment, 3] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 76 [detachedComment, 5] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 77 [detachedForeignComment, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 78 [detachedForeignComment, 4] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 79 [detachedXmlComment, 2] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 80 [docfrag, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 81 [foreignDocfrag, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 82 [xmlDocfrag, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 83 [doctype, 0] 
-FAIL Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 85 [doctype, 1] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 86 [foreignDoctype, 0] 
-PASS Range 43 [foreignDoc.body, 0, foreignTextNode, 36], point 87 [xmlDoctype, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 24 [document.documentElement, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 25 [document.documentElement, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 26 [document.documentElement, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 27 [document.documentElement, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 28 [document.documentElement, 7] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 29 [document.head, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 30 [document.body, 3] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 35 [paras[0], 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 36 [paras[0], 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 37 [paras[0], 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 38 [paras[1], 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 39 [paras[1], 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 40 [paras[1], 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 41 [detachedPara1, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 42 [detachedPara1, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 43 [testDiv, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 44 [testDiv, 3] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 45 [document, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 46 [document, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 47 [document, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 48 [document, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 49 [document, 3] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 50 [comment, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 51 [comment, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 52 [comment, 4] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 53 [comment, 96] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 54 [foreignDoc, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 55 [foreignDoc, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 56 [foreignComment, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 57 [foreignTextNode, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 58 [foreignTextNode, 36] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 59 [xmlDoc, -1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 60 [xmlDoc, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 61 [xmlDoc, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 62 [xmlDoc, 5] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 63 [xmlComment, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 64 [xmlComment, 4] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 65 [processingInstruction, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 66 [processingInstruction, 5] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 67 [processingInstruction, 9] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 68 [detachedTextNode, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 69 [detachedTextNode, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 75 [detachedComment, 3] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 76 [detachedComment, 5] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 80 [docfrag, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 83 [doctype, 0] 
-FAIL Range 44 [xmlDoc, 0, xmlDoc, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 85 [doctype, 1] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 86 [foreignDoctype, 0] 
-PASS Range 44 [xmlDoc, 0, xmlDoc, 0], point 87 [xmlDoctype, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 24 [document.documentElement, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 25 [document.documentElement, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 26 [document.documentElement, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 27 [document.documentElement, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 28 [document.documentElement, 7] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 29 [document.head, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 30 [document.body, 3] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 35 [paras[0], 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 36 [paras[0], 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 37 [paras[0], 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 38 [paras[1], 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 39 [paras[1], 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 40 [paras[1], 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 41 [detachedPara1, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 42 [detachedPara1, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 43 [testDiv, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 44 [testDiv, 3] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 45 [document, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 46 [document, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 47 [document, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 48 [document, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 49 [document, 3] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 50 [comment, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 51 [comment, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 52 [comment, 4] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 53 [comment, 96] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 54 [foreignDoc, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 55 [foreignDoc, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 56 [foreignComment, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 57 [foreignTextNode, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 58 [foreignTextNode, 36] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 59 [xmlDoc, -1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 60 [xmlDoc, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 61 [xmlDoc, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 62 [xmlDoc, 5] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 63 [xmlComment, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 64 [xmlComment, 4] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 65 [processingInstruction, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 66 [processingInstruction, 5] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 67 [processingInstruction, 9] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 68 [detachedTextNode, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 69 [detachedTextNode, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 75 [detachedComment, 3] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 76 [detachedComment, 5] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 80 [docfrag, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 83 [doctype, 0] 
-FAIL Range 45 [xmlDoc, 1, xmlComment, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 85 [doctype, 1] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 86 [foreignDoctype, 0] 
-PASS Range 45 [xmlDoc, 1, xmlComment, 0], point 87 [xmlDoctype, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 24 [document.documentElement, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 25 [document.documentElement, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 26 [document.documentElement, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 27 [document.documentElement, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 28 [document.documentElement, 7] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 29 [document.head, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 30 [document.body, 3] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 35 [paras[0], 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 36 [paras[0], 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 37 [paras[0], 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 38 [paras[1], 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 39 [paras[1], 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 40 [paras[1], 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 41 [detachedPara1, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 42 [detachedPara1, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 43 [testDiv, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 44 [testDiv, 3] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 45 [document, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 46 [document, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 47 [document, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 48 [document, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 49 [document, 3] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 50 [comment, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 51 [comment, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 52 [comment, 4] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 53 [comment, 96] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 54 [foreignDoc, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 55 [foreignDoc, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 56 [foreignComment, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 57 [foreignTextNode, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 58 [foreignTextNode, 36] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 59 [xmlDoc, -1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 60 [xmlDoc, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 61 [xmlDoc, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 62 [xmlDoc, 5] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 63 [xmlComment, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 64 [xmlComment, 4] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 65 [processingInstruction, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 66 [processingInstruction, 5] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 67 [processingInstruction, 9] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 68 [detachedTextNode, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 69 [detachedTextNode, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 75 [detachedComment, 3] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 76 [detachedComment, 5] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 80 [docfrag, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 83 [doctype, 0] 
-FAIL Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 85 [doctype, 1] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 86 [foreignDoctype, 0] 
-PASS Range 46 [detachedTextNode, 0, detachedTextNode, 8], point 87 [xmlDoctype, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 0 [paras[0].firstChild, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 1 [paras[0].firstChild, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 2 [paras[0].firstChild, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 3 [paras[0].firstChild, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 4 [paras[0].firstChild, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 5 [paras[0].firstChild, 9] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 6 [paras[0].firstChild, 10] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 7 [paras[0].firstChild, 65535] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 8 [paras[1].firstChild, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 9 [paras[1].firstChild, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 10 [paras[1].firstChild, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 11 [paras[1].firstChild, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 12 [paras[1].firstChild, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 13 [paras[1].firstChild, 9] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 14 [paras[1].firstChild, 10] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 15 [paras[1].firstChild, 65535] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 24 [document.documentElement, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 25 [document.documentElement, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 26 [document.documentElement, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 27 [document.documentElement, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 28 [document.documentElement, 7] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 29 [document.head, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 30 [document.body, 3] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 33 [foreignDoc.head, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 34 [foreignDoc.body, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 35 [paras[0], 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 36 [paras[0], 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 37 [paras[0], 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 38 [paras[1], 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 39 [paras[1], 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 40 [paras[1], 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 41 [detachedPara1, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 42 [detachedPara1, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 43 [testDiv, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 44 [testDiv, 3] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 45 [document, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 46 [document, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 47 [document, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 48 [document, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 49 [document, 3] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 50 [comment, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 51 [comment, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 52 [comment, 4] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 53 [comment, 96] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 54 [foreignDoc, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 55 [foreignDoc, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 56 [foreignComment, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 57 [foreignTextNode, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 58 [foreignTextNode, 36] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 59 [xmlDoc, -1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 60 [xmlDoc, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 61 [xmlDoc, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 62 [xmlDoc, 5] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 63 [xmlComment, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 64 [xmlComment, 4] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 65 [processingInstruction, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 66 [processingInstruction, 5] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 67 [processingInstruction, 9] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 68 [detachedTextNode, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 69 [detachedTextNode, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 70 [detachedForeignTextNode, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 71 [detachedForeignTextNode, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 72 [detachedXmlTextNode, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 73 [detachedXmlTextNode, 8] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 75 [detachedComment, 3] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 76 [detachedComment, 5] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 77 [detachedForeignComment, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 78 [detachedForeignComment, 4] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 79 [detachedXmlComment, 2] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 80 [docfrag, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 81 [foreignDocfrag, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 82 [xmlDocfrag, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 83 [doctype, 0] 
-FAIL Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 85 [doctype, 1] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 86 [foreignDoctype, 0] 
-PASS Range 47 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], point 87 [xmlDoctype, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 24 [document.documentElement, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 25 [document.documentElement, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 26 [document.documentElement, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 27 [document.documentElement, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 28 [document.documentElement, 7] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 29 [document.head, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 30 [document.body, 3] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 35 [paras[0], 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 36 [paras[0], 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 37 [paras[0], 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 38 [paras[1], 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 39 [paras[1], 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 40 [paras[1], 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 41 [detachedPara1, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 42 [detachedPara1, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 43 [testDiv, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 44 [testDiv, 3] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 45 [document, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 46 [document, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 47 [document, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 48 [document, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 49 [document, 3] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 50 [comment, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 51 [comment, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 52 [comment, 4] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 53 [comment, 96] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 54 [foreignDoc, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 55 [foreignDoc, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 56 [foreignComment, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 57 [foreignTextNode, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 58 [foreignTextNode, 36] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 59 [xmlDoc, -1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 60 [xmlDoc, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 61 [xmlDoc, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 62 [xmlDoc, 5] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 63 [xmlComment, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 64 [xmlComment, 4] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 65 [processingInstruction, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 66 [processingInstruction, 5] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 67 [processingInstruction, 9] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 68 [detachedTextNode, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 69 [detachedTextNode, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 75 [detachedComment, 3] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 76 [detachedComment, 5] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 80 [docfrag, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 83 [doctype, 0] 
-FAIL Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 85 [doctype, 1] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 86 [foreignDoctype, 0] 
-PASS Range 48 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 87 [xmlDoctype, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 0 [paras[0].firstChild, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 1 [paras[0].firstChild, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 2 [paras[0].firstChild, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 3 [paras[0].firstChild, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 4 [paras[0].firstChild, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 5 [paras[0].firstChild, 9] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 6 [paras[0].firstChild, 10] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 7 [paras[0].firstChild, 65535] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 8 [paras[1].firstChild, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 9 [paras[1].firstChild, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 10 [paras[1].firstChild, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 11 [paras[1].firstChild, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 12 [paras[1].firstChild, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 13 [paras[1].firstChild, 9] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 14 [paras[1].firstChild, 10] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 15 [paras[1].firstChild, 65535] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 24 [document.documentElement, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 25 [document.documentElement, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 26 [document.documentElement, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 27 [document.documentElement, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 28 [document.documentElement, 7] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 29 [document.head, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 30 [document.body, 3] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 33 [foreignDoc.head, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 34 [foreignDoc.body, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 35 [paras[0], 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 36 [paras[0], 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 37 [paras[0], 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 38 [paras[1], 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 39 [paras[1], 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 40 [paras[1], 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 41 [detachedPara1, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 42 [detachedPara1, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 43 [testDiv, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 44 [testDiv, 3] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 45 [document, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 46 [document, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 47 [document, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 48 [document, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 49 [document, 3] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 50 [comment, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 51 [comment, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 52 [comment, 4] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 53 [comment, 96] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 54 [foreignDoc, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 55 [foreignDoc, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 56 [foreignComment, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 57 [foreignTextNode, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 58 [foreignTextNode, 36] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 59 [xmlDoc, -1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 60 [xmlDoc, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 61 [xmlDoc, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 62 [xmlDoc, 5] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 63 [xmlComment, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 64 [xmlComment, 4] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 65 [processingInstruction, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 66 [processingInstruction, 5] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 67 [processingInstruction, 9] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 68 [detachedTextNode, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 69 [detachedTextNode, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 70 [detachedForeignTextNode, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 71 [detachedForeignTextNode, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 72 [detachedXmlTextNode, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 73 [detachedXmlTextNode, 8] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 75 [detachedComment, 3] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 76 [detachedComment, 5] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 77 [detachedForeignComment, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 78 [detachedForeignComment, 4] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 79 [detachedXmlComment, 2] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 80 [docfrag, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 81 [foreignDocfrag, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 82 [xmlDocfrag, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 83 [doctype, 0] 
-FAIL Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 85 [doctype, 1] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 86 [foreignDoctype, 0] 
-PASS Range 49 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], point 87 [xmlDoctype, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 0 [paras[0].firstChild, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 1 [paras[0].firstChild, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 2 [paras[0].firstChild, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 3 [paras[0].firstChild, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 4 [paras[0].firstChild, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 5 [paras[0].firstChild, 9] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 6 [paras[0].firstChild, 10] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 7 [paras[0].firstChild, 65535] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 8 [paras[1].firstChild, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 9 [paras[1].firstChild, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 10 [paras[1].firstChild, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 11 [paras[1].firstChild, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 12 [paras[1].firstChild, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 13 [paras[1].firstChild, 9] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 14 [paras[1].firstChild, 10] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 15 [paras[1].firstChild, 65535] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 24 [document.documentElement, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 25 [document.documentElement, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 26 [document.documentElement, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 27 [document.documentElement, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 28 [document.documentElement, 7] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 29 [document.head, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 30 [document.body, 3] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 33 [foreignDoc.head, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 34 [foreignDoc.body, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 35 [paras[0], 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 36 [paras[0], 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 37 [paras[0], 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 38 [paras[1], 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 39 [paras[1], 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 40 [paras[1], 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 41 [detachedPara1, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 42 [detachedPara1, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 43 [testDiv, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 44 [testDiv, 3] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 45 [document, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 46 [document, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 47 [document, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 48 [document, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 49 [document, 3] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 50 [comment, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 51 [comment, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 52 [comment, 4] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 53 [comment, 96] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 54 [foreignDoc, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 55 [foreignDoc, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 56 [foreignComment, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 57 [foreignTextNode, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 58 [foreignTextNode, 36] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 59 [xmlDoc, -1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 60 [xmlDoc, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 61 [xmlDoc, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 62 [xmlDoc, 5] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 63 [xmlComment, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 64 [xmlComment, 4] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 65 [processingInstruction, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 66 [processingInstruction, 5] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 67 [processingInstruction, 9] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 68 [detachedTextNode, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 69 [detachedTextNode, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 70 [detachedForeignTextNode, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 71 [detachedForeignTextNode, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 72 [detachedXmlTextNode, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 73 [detachedXmlTextNode, 8] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 75 [detachedComment, 3] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 76 [detachedComment, 5] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 77 [detachedForeignComment, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 78 [detachedForeignComment, 4] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 79 [detachedXmlComment, 2] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 80 [docfrag, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 81 [foreignDocfrag, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 82 [xmlDocfrag, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 83 [doctype, 0] 
-FAIL Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 85 [doctype, 1] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 86 [foreignDoctype, 0] 
-PASS Range 50 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 87 [xmlDoctype, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 0 [paras[0].firstChild, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 1 [paras[0].firstChild, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 2 [paras[0].firstChild, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 3 [paras[0].firstChild, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 4 [paras[0].firstChild, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 5 [paras[0].firstChild, 9] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 6 [paras[0].firstChild, 10] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 7 [paras[0].firstChild, 65535] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 8 [paras[1].firstChild, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 9 [paras[1].firstChild, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 10 [paras[1].firstChild, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 11 [paras[1].firstChild, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 12 [paras[1].firstChild, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 13 [paras[1].firstChild, 9] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 14 [paras[1].firstChild, 10] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 15 [paras[1].firstChild, 65535] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 24 [document.documentElement, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 25 [document.documentElement, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 26 [document.documentElement, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 27 [document.documentElement, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 28 [document.documentElement, 7] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 29 [document.head, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 30 [document.body, 3] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 33 [foreignDoc.head, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 34 [foreignDoc.body, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 35 [paras[0], 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 36 [paras[0], 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 37 [paras[0], 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 38 [paras[1], 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 39 [paras[1], 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 40 [paras[1], 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 41 [detachedPara1, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 42 [detachedPara1, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 43 [testDiv, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 44 [testDiv, 3] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 45 [document, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 46 [document, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 47 [document, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 48 [document, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 49 [document, 3] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 50 [comment, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 51 [comment, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 52 [comment, 4] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 53 [comment, 96] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 54 [foreignDoc, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 55 [foreignDoc, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 56 [foreignComment, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 57 [foreignTextNode, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 58 [foreignTextNode, 36] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 59 [xmlDoc, -1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 60 [xmlDoc, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 61 [xmlDoc, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 62 [xmlDoc, 5] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 63 [xmlComment, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 64 [xmlComment, 4] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 65 [processingInstruction, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 66 [processingInstruction, 5] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 67 [processingInstruction, 9] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 68 [detachedTextNode, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 69 [detachedTextNode, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 70 [detachedForeignTextNode, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 71 [detachedForeignTextNode, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 72 [detachedXmlTextNode, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 73 [detachedXmlTextNode, 8] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 75 [detachedComment, 3] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 76 [detachedComment, 5] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 77 [detachedForeignComment, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 78 [detachedForeignComment, 4] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 79 [detachedXmlComment, 2] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 80 [docfrag, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 81 [foreignDocfrag, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 82 [xmlDocfrag, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 83 [doctype, 0] 
-FAIL Range 51 [detachedComment, 3, detachedComment, 4], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 85 [doctype, 1] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 86 [foreignDoctype, 0] 
-PASS Range 51 [detachedComment, 3, detachedComment, 4], point 87 [xmlDoctype, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 0 [paras[0].firstChild, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 1 [paras[0].firstChild, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 2 [paras[0].firstChild, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 3 [paras[0].firstChild, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 4 [paras[0].firstChild, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 5 [paras[0].firstChild, 9] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 6 [paras[0].firstChild, 10] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 7 [paras[0].firstChild, 65535] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 8 [paras[1].firstChild, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 9 [paras[1].firstChild, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 10 [paras[1].firstChild, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 11 [paras[1].firstChild, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 12 [paras[1].firstChild, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 13 [paras[1].firstChild, 9] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 14 [paras[1].firstChild, 10] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 15 [paras[1].firstChild, 65535] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 24 [document.documentElement, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 25 [document.documentElement, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 26 [document.documentElement, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 27 [document.documentElement, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 28 [document.documentElement, 7] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 29 [document.head, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 30 [document.body, 3] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 33 [foreignDoc.head, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 34 [foreignDoc.body, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 35 [paras[0], 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 36 [paras[0], 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 37 [paras[0], 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 38 [paras[1], 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 39 [paras[1], 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 40 [paras[1], 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 41 [detachedPara1, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 42 [detachedPara1, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 43 [testDiv, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 44 [testDiv, 3] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 45 [document, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 46 [document, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 47 [document, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 48 [document, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 49 [document, 3] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 50 [comment, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 51 [comment, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 52 [comment, 4] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 53 [comment, 96] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 54 [foreignDoc, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 55 [foreignDoc, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 56 [foreignComment, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 57 [foreignTextNode, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 58 [foreignTextNode, 36] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 59 [xmlDoc, -1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 60 [xmlDoc, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 61 [xmlDoc, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 62 [xmlDoc, 5] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 63 [xmlComment, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 64 [xmlComment, 4] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 65 [processingInstruction, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 66 [processingInstruction, 5] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 67 [processingInstruction, 9] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 68 [detachedTextNode, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 69 [detachedTextNode, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 70 [detachedForeignTextNode, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 71 [detachedForeignTextNode, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 72 [detachedXmlTextNode, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 73 [detachedXmlTextNode, 8] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 75 [detachedComment, 3] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 76 [detachedComment, 5] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 77 [detachedForeignComment, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 78 [detachedForeignComment, 4] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 79 [detachedXmlComment, 2] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 80 [docfrag, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 81 [foreignDocfrag, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 82 [xmlDocfrag, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 83 [doctype, 0] 
-FAIL Range 52 [detachedComment, 5, detachedComment, 5], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 85 [doctype, 1] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 86 [foreignDoctype, 0] 
-PASS Range 52 [detachedComment, 5, detachedComment, 5], point 87 [xmlDoctype, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 0 [paras[0].firstChild, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 1 [paras[0].firstChild, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 2 [paras[0].firstChild, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 3 [paras[0].firstChild, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 4 [paras[0].firstChild, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 5 [paras[0].firstChild, 9] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 6 [paras[0].firstChild, 10] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 7 [paras[0].firstChild, 65535] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 8 [paras[1].firstChild, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 9 [paras[1].firstChild, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 10 [paras[1].firstChild, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 11 [paras[1].firstChild, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 12 [paras[1].firstChild, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 13 [paras[1].firstChild, 9] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 14 [paras[1].firstChild, 10] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 15 [paras[1].firstChild, 65535] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 24 [document.documentElement, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 25 [document.documentElement, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 26 [document.documentElement, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 27 [document.documentElement, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 28 [document.documentElement, 7] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 29 [document.head, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 30 [document.body, 3] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 33 [foreignDoc.head, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 34 [foreignDoc.body, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 35 [paras[0], 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 36 [paras[0], 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 37 [paras[0], 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 38 [paras[1], 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 39 [paras[1], 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 40 [paras[1], 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 41 [detachedPara1, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 42 [detachedPara1, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 43 [testDiv, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 44 [testDiv, 3] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 45 [document, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 46 [document, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 47 [document, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 48 [document, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 49 [document, 3] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 50 [comment, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 51 [comment, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 52 [comment, 4] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 53 [comment, 96] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 54 [foreignDoc, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 55 [foreignDoc, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 56 [foreignComment, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 57 [foreignTextNode, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 58 [foreignTextNode, 36] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 59 [xmlDoc, -1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 60 [xmlDoc, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 61 [xmlDoc, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 62 [xmlDoc, 5] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 63 [xmlComment, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 64 [xmlComment, 4] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 65 [processingInstruction, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 66 [processingInstruction, 5] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 67 [processingInstruction, 9] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 68 [detachedTextNode, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 69 [detachedTextNode, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 70 [detachedForeignTextNode, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 71 [detachedForeignTextNode, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 72 [detachedXmlTextNode, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 73 [detachedXmlTextNode, 8] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 75 [detachedComment, 3] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 76 [detachedComment, 5] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 77 [detachedForeignComment, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 78 [detachedForeignComment, 4] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 79 [detachedXmlComment, 2] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 80 [docfrag, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 81 [foreignDocfrag, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 82 [xmlDocfrag, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 83 [doctype, 0] 
-FAIL Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 85 [doctype, 1] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 86 [foreignDoctype, 0] 
-PASS Range 53 [detachedForeignComment, 0, detachedForeignComment, 1], point 87 [xmlDoctype, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 0 [paras[0].firstChild, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 1 [paras[0].firstChild, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 2 [paras[0].firstChild, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 3 [paras[0].firstChild, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 4 [paras[0].firstChild, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 5 [paras[0].firstChild, 9] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 6 [paras[0].firstChild, 10] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 7 [paras[0].firstChild, 65535] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 8 [paras[1].firstChild, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 9 [paras[1].firstChild, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 10 [paras[1].firstChild, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 11 [paras[1].firstChild, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 12 [paras[1].firstChild, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 13 [paras[1].firstChild, 9] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 14 [paras[1].firstChild, 10] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 15 [paras[1].firstChild, 65535] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 24 [document.documentElement, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 25 [document.documentElement, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 26 [document.documentElement, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 27 [document.documentElement, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 28 [document.documentElement, 7] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 29 [document.head, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 30 [document.body, 3] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 33 [foreignDoc.head, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 34 [foreignDoc.body, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 35 [paras[0], 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 36 [paras[0], 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 37 [paras[0], 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 38 [paras[1], 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 39 [paras[1], 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 40 [paras[1], 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 41 [detachedPara1, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 42 [detachedPara1, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 43 [testDiv, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 44 [testDiv, 3] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 45 [document, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 46 [document, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 47 [document, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 48 [document, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 49 [document, 3] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 50 [comment, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 51 [comment, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 52 [comment, 4] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 53 [comment, 96] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 54 [foreignDoc, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 55 [foreignDoc, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 56 [foreignComment, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 57 [foreignTextNode, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 58 [foreignTextNode, 36] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 59 [xmlDoc, -1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 60 [xmlDoc, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 61 [xmlDoc, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 62 [xmlDoc, 5] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 63 [xmlComment, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 64 [xmlComment, 4] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 65 [processingInstruction, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 66 [processingInstruction, 5] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 67 [processingInstruction, 9] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 68 [detachedTextNode, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 69 [detachedTextNode, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 70 [detachedForeignTextNode, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 71 [detachedForeignTextNode, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 72 [detachedXmlTextNode, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 73 [detachedXmlTextNode, 8] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 75 [detachedComment, 3] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 76 [detachedComment, 5] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 77 [detachedForeignComment, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 78 [detachedForeignComment, 4] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 79 [detachedXmlComment, 2] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 80 [docfrag, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 81 [foreignDocfrag, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 82 [xmlDocfrag, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 83 [doctype, 0] 
-FAIL Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 85 [doctype, 1] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 86 [foreignDoctype, 0] 
-PASS Range 54 [detachedForeignComment, 4, detachedForeignComment, 4], point 87 [xmlDoctype, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 0 [paras[0].firstChild, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 1 [paras[0].firstChild, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 2 [paras[0].firstChild, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 3 [paras[0].firstChild, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 4 [paras[0].firstChild, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 5 [paras[0].firstChild, 9] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 6 [paras[0].firstChild, 10] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 7 [paras[0].firstChild, 65535] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 8 [paras[1].firstChild, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 9 [paras[1].firstChild, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 10 [paras[1].firstChild, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 11 [paras[1].firstChild, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 12 [paras[1].firstChild, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 13 [paras[1].firstChild, 9] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 14 [paras[1].firstChild, 10] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 15 [paras[1].firstChild, 65535] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 24 [document.documentElement, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 25 [document.documentElement, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 26 [document.documentElement, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 27 [document.documentElement, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 28 [document.documentElement, 7] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 29 [document.head, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 30 [document.body, 3] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 33 [foreignDoc.head, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 34 [foreignDoc.body, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 35 [paras[0], 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 36 [paras[0], 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 37 [paras[0], 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 38 [paras[1], 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 39 [paras[1], 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 40 [paras[1], 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 41 [detachedPara1, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 42 [detachedPara1, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 43 [testDiv, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 44 [testDiv, 3] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 45 [document, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 46 [document, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 47 [document, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 48 [document, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 49 [document, 3] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 50 [comment, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 51 [comment, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 52 [comment, 4] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 53 [comment, 96] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 54 [foreignDoc, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 55 [foreignDoc, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 56 [foreignComment, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 57 [foreignTextNode, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 58 [foreignTextNode, 36] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 59 [xmlDoc, -1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 60 [xmlDoc, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 61 [xmlDoc, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 62 [xmlDoc, 5] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 63 [xmlComment, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 64 [xmlComment, 4] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 65 [processingInstruction, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 66 [processingInstruction, 5] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 67 [processingInstruction, 9] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 68 [detachedTextNode, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 69 [detachedTextNode, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 70 [detachedForeignTextNode, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 71 [detachedForeignTextNode, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 72 [detachedXmlTextNode, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 73 [detachedXmlTextNode, 8] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 75 [detachedComment, 3] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 76 [detachedComment, 5] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 77 [detachedForeignComment, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 78 [detachedForeignComment, 4] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 79 [detachedXmlComment, 2] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 80 [docfrag, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 81 [foreignDocfrag, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 82 [xmlDocfrag, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 83 [doctype, 0] 
-FAIL Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 85 [doctype, 1] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 86 [foreignDoctype, 0] 
-PASS Range 55 [detachedXmlComment, 2, detachedXmlComment, 6], point 87 [xmlDoctype, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 24 [document.documentElement, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 25 [document.documentElement, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 26 [document.documentElement, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 27 [document.documentElement, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 28 [document.documentElement, 7] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 29 [document.head, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 30 [document.body, 3] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 35 [paras[0], 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 36 [paras[0], 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 37 [paras[0], 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 38 [paras[1], 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 39 [paras[1], 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 40 [paras[1], 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 41 [detachedPara1, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 42 [detachedPara1, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 43 [testDiv, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 44 [testDiv, 3] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 45 [document, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 46 [document, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 47 [document, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 48 [document, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 49 [document, 3] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 50 [comment, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 51 [comment, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 52 [comment, 4] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 53 [comment, 96] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 54 [foreignDoc, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 55 [foreignDoc, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 56 [foreignComment, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 57 [foreignTextNode, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 58 [foreignTextNode, 36] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 59 [xmlDoc, -1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 60 [xmlDoc, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 61 [xmlDoc, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 62 [xmlDoc, 5] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 63 [xmlComment, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 64 [xmlComment, 4] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 65 [processingInstruction, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 66 [processingInstruction, 5] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 67 [processingInstruction, 9] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 68 [detachedTextNode, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 69 [detachedTextNode, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 75 [detachedComment, 3] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 76 [detachedComment, 5] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 80 [docfrag, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 83 [doctype, 0] 
-FAIL Range 56 [docfrag, 0, docfrag, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 56 [docfrag, 0, docfrag, 0], point 85 [doctype, 1] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 86 [foreignDoctype, 0] 
-PASS Range 56 [docfrag, 0, docfrag, 0], point 87 [xmlDoctype, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 24 [document.documentElement, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 25 [document.documentElement, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 26 [document.documentElement, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 27 [document.documentElement, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 28 [document.documentElement, 7] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 29 [document.head, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 30 [document.body, 3] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 35 [paras[0], 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 36 [paras[0], 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 37 [paras[0], 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 38 [paras[1], 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 39 [paras[1], 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 40 [paras[1], 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 41 [detachedPara1, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 42 [detachedPara1, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 43 [testDiv, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 44 [testDiv, 3] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 45 [document, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 46 [document, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 47 [document, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 48 [document, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 49 [document, 3] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 50 [comment, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 51 [comment, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 52 [comment, 4] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 53 [comment, 96] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 54 [foreignDoc, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 55 [foreignDoc, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 56 [foreignComment, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 57 [foreignTextNode, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 58 [foreignTextNode, 36] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 59 [xmlDoc, -1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 60 [xmlDoc, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 61 [xmlDoc, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 62 [xmlDoc, 5] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 63 [xmlComment, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 64 [xmlComment, 4] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 65 [processingInstruction, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 66 [processingInstruction, 5] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 67 [processingInstruction, 9] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 68 [detachedTextNode, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 69 [detachedTextNode, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 75 [detachedComment, 3] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 76 [detachedComment, 5] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 80 [docfrag, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 83 [doctype, 0] 
-FAIL Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 85 [doctype, 1] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 86 [foreignDoctype, 0] 
-PASS Range 57 [foreignDocfrag, 0, foreignDocfrag, 0], point 87 [xmlDoctype, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 0 [paras[0].firstChild, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 1 [paras[0].firstChild, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 2 [paras[0].firstChild, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 3 [paras[0].firstChild, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 4 [paras[0].firstChild, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 5 [paras[0].firstChild, 9] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 6 [paras[0].firstChild, 10] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 7 [paras[0].firstChild, 65535] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 8 [paras[1].firstChild, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 9 [paras[1].firstChild, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 10 [paras[1].firstChild, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 11 [paras[1].firstChild, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 12 [paras[1].firstChild, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 13 [paras[1].firstChild, 9] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 14 [paras[1].firstChild, 10] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 15 [paras[1].firstChild, 65535] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 16 [detachedPara1.firstChild, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 17 [detachedPara1.firstChild, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 18 [detachedPara1.firstChild, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 19 [detachedPara1.firstChild, 9] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 20 [foreignPara1.firstChild, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 21 [foreignPara1.firstChild, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 22 [foreignPara1.firstChild, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 23 [foreignPara1.firstChild, 9] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 24 [document.documentElement, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 25 [document.documentElement, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 26 [document.documentElement, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 27 [document.documentElement, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 28 [document.documentElement, 7] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 29 [document.head, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 30 [document.body, 3] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 31 [foreignDoc.documentElement, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 32 [foreignDoc.documentElement, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 33 [foreignDoc.head, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 34 [foreignDoc.body, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 35 [paras[0], 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 36 [paras[0], 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 37 [paras[0], 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 38 [paras[1], 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 39 [paras[1], 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 40 [paras[1], 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 41 [detachedPara1, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 42 [detachedPara1, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 43 [testDiv, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 44 [testDiv, 3] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 45 [document, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 46 [document, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 47 [document, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 48 [document, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 49 [document, 3] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 50 [comment, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 51 [comment, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 52 [comment, 4] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 53 [comment, 96] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 54 [foreignDoc, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 55 [foreignDoc, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 56 [foreignComment, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 57 [foreignTextNode, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 58 [foreignTextNode, 36] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 59 [xmlDoc, -1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 60 [xmlDoc, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 61 [xmlDoc, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 62 [xmlDoc, 5] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 63 [xmlComment, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 64 [xmlComment, 4] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 65 [processingInstruction, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 66 [processingInstruction, 5] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 67 [processingInstruction, 9] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 68 [detachedTextNode, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 69 [detachedTextNode, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 70 [detachedForeignTextNode, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 71 [detachedForeignTextNode, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 72 [detachedXmlTextNode, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 73 [detachedXmlTextNode, 8] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 74 [detachedProcessingInstruction, 12] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 75 [detachedComment, 3] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 76 [detachedComment, 5] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 77 [detachedForeignComment, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 78 [detachedForeignComment, 4] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 79 [detachedXmlComment, 2] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 80 [docfrag, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 81 [foreignDocfrag, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 82 [xmlDocfrag, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 83 [doctype, 0] 
-FAIL Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 84 [doctype, -17] assert_throws: Must throw INVALID_NODE_TYPE_ERR when collapse()ing if the node is a DocumentType function "function () {
-            selection.collapse(point[0], point[1]);
-        }" threw object "IndexSizeError: Failed to execute 'collapse' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 85 [doctype, 1] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 86 [foreignDoctype, 0] 
-PASS Range 58 [xmlDocfrag, 0, xmlDocfrag, 0], point 87 [xmlDoctype, 0] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-00-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/extend-00-expected.txt
deleted file mode 100644
index 9f670cf..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-00-expected.txt
+++ /dev/null
@@ -1,2074 +0,0 @@
-This is a testharness.js-based test.
-Found 2024 tests; 2001 PASS, 23 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 24 [document.documentElement, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 25 [document.documentElement, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 26 [document.documentElement, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 27 [document.documentElement, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 28 [document.documentElement, 7] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 29 [document.head, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 30 [document.body, 3] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 35 [paras[0], 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 36 [paras[0], 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 37 [paras[0], 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 38 [paras[1], 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 39 [paras[1], 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 40 [paras[1], 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 41 [detachedPara1, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 42 [detachedPara1, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 43 [testDiv, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 44 [testDiv, 3] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 45 [document, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 46 [document, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 47 [document, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 48 [document, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 49 [document, 3] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 50 [comment, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 51 [comment, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 52 [comment, 4] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 53 [comment, 96] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 54 [foreignDoc, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 55 [foreignDoc, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 56 [foreignComment, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 59 [xmlDoc, -1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 60 [xmlDoc, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 61 [xmlDoc, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 62 [xmlDoc, 5] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 63 [xmlComment, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 64 [xmlComment, 4] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 65 [processingInstruction, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 66 [processingInstruction, 5] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 67 [processingInstruction, 9] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 75 [detachedComment, 3] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 76 [detachedComment, 5] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 80 [docfrag, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 83 [doctype, 0] 
-FAIL extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 85 [doctype, 1] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 45 [document, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 45 [document, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 46 [document, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 46 [document, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 47 [document, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 47 [document, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 48 [document, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 48 [document, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 49 [document, 3] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 49 [document, 3] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 45 [document, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 45 [document, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 46 [document, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 46 [document, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 47 [document, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 47 [document, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 48 [document, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 48 [document, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 49 [document, 3] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 49 [document, 3] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 83 [doctype, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 29 [document.head, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 29 [document.head, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 30 [document.body, 3] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 30 [document.body, 3] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 45 [document, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 45 [document, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 46 [document, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 46 [document, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 47 [document, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 47 [document, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 48 [document, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 48 [document, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 49 [document, 3] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 49 [document, 3] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 50 [comment, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 50 [comment, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 51 [comment, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 51 [comment, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 52 [comment, 4] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 52 [comment, 4] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 53 [comment, 96] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 53 [comment, 96] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 83 [doctype, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 85 [doctype, 1] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 85 [doctype, 1] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] and point 87 [xmlDoctype, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 24 [document.documentElement, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 25 [document.documentElement, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 26 [document.documentElement, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 27 [document.documentElement, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 28 [document.documentElement, 7] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 29 [document.head, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 30 [document.body, 3] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 35 [paras[0], 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 36 [paras[0], 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 37 [paras[0], 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 38 [paras[1], 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 39 [paras[1], 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 40 [paras[1], 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 41 [detachedPara1, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 42 [detachedPara1, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 43 [testDiv, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 44 [testDiv, 3] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 45 [document, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 46 [document, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 47 [document, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 48 [document, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 49 [document, 3] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 50 [comment, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 51 [comment, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 52 [comment, 4] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 53 [comment, 96] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 54 [foreignDoc, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 55 [foreignDoc, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 56 [foreignComment, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 59 [xmlDoc, -1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 60 [xmlDoc, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 61 [xmlDoc, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 62 [xmlDoc, 5] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 63 [xmlComment, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 64 [xmlComment, 4] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 65 [processingInstruction, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 66 [processingInstruction, 5] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 67 [processingInstruction, 9] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 75 [detachedComment, 3] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 76 [detachedComment, 5] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 80 [docfrag, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 83 [doctype, 0] 
-FAIL extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 85 [doctype, 1] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() with range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 45 [document, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 45 [document, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 46 [document, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 46 [document, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 47 [document, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 47 [document, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 48 [document, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 48 [document, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 49 [document, 3] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 49 [document, 3] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 45 [document, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 45 [document, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 46 [document, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 46 [document, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 47 [document, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 47 [document, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 48 [document, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 48 [document, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 49 [document, 3] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 49 [document, 3] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 83 [doctype, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 29 [document.head, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 29 [document.head, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 30 [document.body, 3] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 30 [document.body, 3] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 45 [document, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 45 [document, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 46 [document, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 46 [document, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 47 [document, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 47 [document, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 48 [document, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 48 [document, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 49 [document, 3] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 49 [document, 3] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 50 [comment, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 50 [comment, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 51 [comment, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 51 [comment, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 52 [comment, 4] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 52 [comment, 4] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 53 [comment, 96] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 53 [comment, 96] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 83 [doctype, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 85 [doctype, 1] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 85 [doctype, 1] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 45 [document, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 45 [document, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 46 [document, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 46 [document, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 47 [document, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 47 [document, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 48 [document, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 48 [document, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 49 [document, 3] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 49 [document, 3] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 15 [document.documentElement, 0, document.documentElement, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 29 [document.head, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 29 [document.head, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 30 [document.body, 3] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 30 [document.body, 3] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 45 [document, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 45 [document, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 46 [document, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 46 [document, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 47 [document, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 47 [document, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 48 [document, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 48 [document, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 49 [document, 3] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 49 [document, 3] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 50 [comment, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 50 [comment, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 51 [comment, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 51 [comment, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 52 [comment, 4] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 52 [comment, 4] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 53 [comment, 96] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 53 [comment, 96] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 83 [doctype, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 85 [doctype, 1] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 85 [doctype, 1] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 16 [document.documentElement, 0, document.documentElement, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 29 [document.head, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 29 [document.head, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 30 [document.body, 3] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 30 [document.body, 3] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 45 [document, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 45 [document, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 46 [document, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 46 [document, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 47 [document, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 47 [document, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 48 [document, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 48 [document, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 49 [document, 3] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 49 [document, 3] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 50 [comment, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 50 [comment, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 51 [comment, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 51 [comment, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 52 [comment, 4] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 52 [comment, 4] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 53 [comment, 96] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 53 [comment, 96] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 83 [doctype, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 85 [doctype, 1] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 85 [doctype, 1] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 17 [document.documentElement, 1, document.documentElement, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 24 [document.documentElement, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 25 [document.documentElement, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 26 [document.documentElement, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 27 [document.documentElement, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 28 [document.documentElement, 7] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 29 [document.head, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 30 [document.body, 3] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 35 [paras[0], 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 36 [paras[0], 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 37 [paras[0], 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 38 [paras[1], 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 39 [paras[1], 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 40 [paras[1], 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 41 [detachedPara1, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 42 [detachedPara1, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 43 [testDiv, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 44 [testDiv, 3] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 45 [document, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 46 [document, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 47 [document, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 48 [document, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 49 [document, 3] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 50 [comment, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 51 [comment, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 52 [comment, 4] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 53 [comment, 96] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 54 [foreignDoc, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 55 [foreignDoc, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 56 [foreignComment, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 59 [xmlDoc, -1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 60 [xmlDoc, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 61 [xmlDoc, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 62 [xmlDoc, 5] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 63 [xmlComment, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 64 [xmlComment, 4] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 65 [processingInstruction, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 66 [processingInstruction, 5] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 67 [processingInstruction, 9] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 75 [detachedComment, 3] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 76 [detachedComment, 5] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 80 [docfrag, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 83 [doctype, 0] 
-FAIL extend() with range 18 [document.head, 1, document.head, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 85 [doctype, 1] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() with range 18 [document.head, 1, document.head, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 45 [document, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 45 [document, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 46 [document, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 46 [document, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 47 [document, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 47 [document, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 48 [document, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 48 [document, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 49 [document, 3] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 49 [document, 3] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 19 [document.body, 0, document.body, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 19 [document.body, 0, document.body, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 19 [document.body, 0, document.body, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 19 [document.body, 0, document.body, 1] and point 87 [xmlDoctype, 0] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-20-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/extend-20-expected.txt
deleted file mode 100644
index 800aadb..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-20-expected.txt
+++ /dev/null
@@ -1,2434 +0,0 @@
-This is a testharness.js-based test.
-Found 2376 tests; 2349 PASS, 27 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 24 [document.documentElement, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 25 [document.documentElement, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 26 [document.documentElement, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 27 [document.documentElement, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 28 [document.documentElement, 7] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 29 [document.head, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 30 [document.body, 3] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 35 [paras[0], 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 36 [paras[0], 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 37 [paras[0], 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 38 [paras[1], 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 39 [paras[1], 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 40 [paras[1], 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 41 [detachedPara1, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 42 [detachedPara1, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 43 [testDiv, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 44 [testDiv, 3] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 45 [document, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 46 [document, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 47 [document, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 48 [document, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 49 [document, 3] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 50 [comment, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 51 [comment, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 52 [comment, 4] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 53 [comment, 96] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 54 [foreignDoc, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 55 [foreignDoc, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 56 [foreignComment, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 57 [foreignTextNode, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 58 [foreignTextNode, 36] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 59 [xmlDoc, -1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 60 [xmlDoc, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 61 [xmlDoc, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 62 [xmlDoc, 5] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 63 [xmlComment, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 64 [xmlComment, 4] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 65 [processingInstruction, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 66 [processingInstruction, 5] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 67 [processingInstruction, 9] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 68 [detachedTextNode, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 69 [detachedTextNode, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 75 [detachedComment, 3] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 76 [detachedComment, 5] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 80 [docfrag, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 83 [doctype, 0] 
-FAIL extend() with range 23 [paras[0], 0, paras[0], 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 85 [doctype, 1] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 86 [foreignDoctype, 0] 
-PASS extend() with range 23 [paras[0], 0, paras[0], 0] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 45 [document, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 45 [document, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 46 [document, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 46 [document, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 47 [document, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 47 [document, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 48 [document, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 48 [document, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 49 [document, 3] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 49 [document, 3] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 24 [paras[0], 0, paras[0], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 24 [paras[0], 0, paras[0], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 29 [document.head, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 29 [document.head, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 30 [document.body, 3] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 30 [document.body, 3] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 45 [document, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 45 [document, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 46 [document, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 46 [document, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 47 [document, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 47 [document, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 48 [document, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 48 [document, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 49 [document, 3] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 49 [document, 3] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 50 [comment, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 50 [comment, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 51 [comment, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 51 [comment, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 52 [comment, 4] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 52 [comment, 4] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 53 [comment, 96] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 53 [comment, 96] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 83 [doctype, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 85 [doctype, 1] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 85 [doctype, 1] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 29 [document.head, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 30 [document.body, 3] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 45 [document, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 45 [document, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 46 [document, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 46 [document, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 47 [document, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 47 [document, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 48 [document, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 48 [document, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 49 [document, 3] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 49 [document, 3] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 50 [comment, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 51 [comment, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 52 [comment, 4] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 53 [comment, 96] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 83 [doctype, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 85 [doctype, 1] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 45 [document, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 45 [document, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 46 [document, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 46 [document, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 47 [document, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 47 [document, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 48 [document, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 48 [document, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 49 [document, 3] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 49 [document, 3] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 29 [paras[0].firstChild, 3, paras[3], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 29 [document.head, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 29 [document.head, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 30 [document.body, 3] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 30 [document.body, 3] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 45 [document, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 45 [document, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 46 [document, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 46 [document, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 47 [document, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 47 [document, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 48 [document, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 48 [document, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 49 [document, 3] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 49 [document, 3] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 50 [comment, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 50 [comment, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 51 [comment, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 51 [comment, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 52 [comment, 4] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 52 [comment, 4] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 53 [comment, 96] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 53 [comment, 96] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 83 [doctype, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 85 [doctype, 1] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 85 [doctype, 1] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 30 [paras[0], 0, paras[0].firstChild, 7] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 45 [document, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 45 [document, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 46 [document, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 46 [document, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 47 [document, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 47 [document, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 48 [document, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 48 [document, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 49 [document, 3] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 49 [document, 3] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 31 [testDiv, 2, paras[4], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 31 [testDiv, 2, paras[4], 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 29 [document.head, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 29 [document.head, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 30 [document.body, 3] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 30 [document.body, 3] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 45 [document, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 45 [document, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 46 [document, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 46 [document, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 47 [document, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 47 [document, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 48 [document, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 48 [document, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 49 [document, 3] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 49 [document, 3] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 50 [comment, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 50 [comment, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 51 [comment, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 51 [comment, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 52 [comment, 4] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 52 [comment, 4] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 53 [comment, 96] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 53 [comment, 96] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 83 [doctype, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 85 [doctype, 1] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 85 [doctype, 1] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 32 [testDiv, 1, paras[2].firstChild, 5] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 29 [document.head, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 29 [document.head, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 30 [document.body, 3] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 30 [document.body, 3] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 45 [document, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 45 [document, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 46 [document, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 46 [document, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 47 [document, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 47 [document, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 48 [document, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 48 [document, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 49 [document, 3] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 49 [document, 3] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 50 [comment, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 50 [comment, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 51 [comment, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 51 [comment, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 52 [comment, 4] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 52 [comment, 4] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 53 [comment, 96] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 53 [comment, 96] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 83 [doctype, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 85 [doctype, 1] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 85 [doctype, 1] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 33 [document.documentElement, 1, document.body, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 33 [document.documentElement, 1, document.body, 0] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 29 [document.head, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 29 [document.head, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 30 [document.body, 3] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 30 [document.body, 3] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 45 [document, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 45 [document, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 46 [document, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 46 [document, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 47 [document, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 47 [document, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 48 [document, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 48 [document, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 49 [document, 3] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 49 [document, 3] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 50 [comment, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 50 [comment, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 51 [comment, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 51 [comment, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 52 [comment, 4] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 52 [comment, 4] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 53 [comment, 96] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 53 [comment, 96] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 83 [doctype, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 35 [document, 0, document, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 35 [document, 0, document, 1] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 85 [doctype, 1] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 85 [doctype, 1] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 35 [document, 0, document, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 35 [document, 0, document, 1] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 29 [document.head, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 29 [document.head, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 30 [document.body, 3] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 30 [document.body, 3] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 45 [document, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 45 [document, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 46 [document, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 46 [document, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 47 [document, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 47 [document, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 48 [document, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 48 [document, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 49 [document, 3] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 49 [document, 3] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 50 [comment, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 50 [comment, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 51 [comment, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 51 [comment, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 52 [comment, 4] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 52 [comment, 4] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 53 [comment, 96] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 53 [comment, 96] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 83 [doctype, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 36 [document, 0, document, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 36 [document, 0, document, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 85 [doctype, 1] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 85 [doctype, 1] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 36 [document, 0, document, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 36 [document, 0, document, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 29 [document.head, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 29 [document.head, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 30 [document.body, 3] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 30 [document.body, 3] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 45 [document, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 45 [document, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 46 [document, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 46 [document, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 47 [document, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 47 [document, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 48 [document, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 48 [document, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 49 [document, 3] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 49 [document, 3] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 50 [comment, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 50 [comment, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 51 [comment, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 51 [comment, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 52 [comment, 4] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 52 [comment, 4] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 53 [comment, 96] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 53 [comment, 96] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 83 [doctype, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 37 [document, 1, document, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 37 [document, 1, document, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 85 [doctype, 1] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 85 [doctype, 1] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 37 [document, 1, document, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 37 [document, 1, document, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 29 [document.head, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 29 [document.head, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 30 [document.body, 3] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 30 [document.body, 3] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 45 [document, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 45 [document, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 46 [document, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 46 [document, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 47 [document, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 47 [document, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 48 [document, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 48 [document, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 49 [document, 3] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 49 [document, 3] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 50 [comment, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 50 [comment, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 51 [comment, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 51 [comment, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 52 [comment, 4] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 52 [comment, 4] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 53 [comment, 96] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 53 [comment, 96] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 83 [doctype, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 38 [testDiv, 0, comment, 5] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 38 [testDiv, 0, comment, 5] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 85 [doctype, 1] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 85 [doctype, 1] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 38 [testDiv, 0, comment, 5] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 38 [testDiv, 0, comment, 5] and point 87 [xmlDoctype, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 29 [document.head, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 29 [document.head, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 30 [document.body, 3] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 30 [document.body, 3] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 45 [document, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 45 [document, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 46 [document, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 46 [document, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 47 [document, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 47 [document, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 48 [document, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 48 [document, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 49 [document, 3] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 49 [document, 3] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 50 [comment, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 50 [comment, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 51 [comment, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 51 [comment, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 52 [comment, 4] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 52 [comment, 4] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 53 [comment, 96] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 53 [comment, 96] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 83 [doctype, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 85 [doctype, 1] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 85 [doctype, 1] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 39 [paras[2].firstChild, 4, comment, 2] and point 87 [xmlDoctype, 0] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-40-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/extend-40-expected.txt
deleted file mode 100644
index 7684a3d..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/extend-40-expected.txt
+++ /dev/null
@@ -1,184 +0,0 @@
-This is a testharness.js-based test.
-Found 176 tests; 174 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 0 [paras[0].firstChild, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 1 [paras[0].firstChild, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 2 [paras[0].firstChild, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 3 [paras[0].firstChild, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 4 [paras[0].firstChild, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 5 [paras[0].firstChild, 9] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 6 [paras[0].firstChild, 10] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 7 [paras[0].firstChild, 65535] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 8 [paras[1].firstChild, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 9 [paras[1].firstChild, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 10 [paras[1].firstChild, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 11 [paras[1].firstChild, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 12 [paras[1].firstChild, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 13 [paras[1].firstChild, 9] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 14 [paras[1].firstChild, 10] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 15 [paras[1].firstChild, 65535] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 16 [detachedPara1.firstChild, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 17 [detachedPara1.firstChild, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 18 [detachedPara1.firstChild, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 19 [detachedPara1.firstChild, 9] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 20 [foreignPara1.firstChild, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 21 [foreignPara1.firstChild, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 22 [foreignPara1.firstChild, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 23 [foreignPara1.firstChild, 9] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 24 [document.documentElement, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 24 [document.documentElement, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 25 [document.documentElement, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 25 [document.documentElement, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 26 [document.documentElement, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 26 [document.documentElement, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 27 [document.documentElement, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 27 [document.documentElement, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 28 [document.documentElement, 7] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 28 [document.documentElement, 7] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 29 [document.head, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 29 [document.head, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 30 [document.body, 3] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 30 [document.body, 3] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 31 [foreignDoc.documentElement, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 32 [foreignDoc.documentElement, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 33 [foreignDoc.head, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 34 [foreignDoc.body, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 35 [paras[0], 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 35 [paras[0], 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 36 [paras[0], 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 36 [paras[0], 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 37 [paras[0], 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 37 [paras[0], 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 38 [paras[1], 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 38 [paras[1], 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 39 [paras[1], 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 39 [paras[1], 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 40 [paras[1], 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 40 [paras[1], 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 41 [detachedPara1, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 41 [detachedPara1, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 42 [detachedPara1, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 42 [detachedPara1, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 43 [testDiv, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 43 [testDiv, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 44 [testDiv, 3] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 44 [testDiv, 3] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 45 [document, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 45 [document, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 46 [document, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 46 [document, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 47 [document, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 47 [document, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 48 [document, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 48 [document, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 49 [document, 3] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 49 [document, 3] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 50 [comment, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 50 [comment, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 51 [comment, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 51 [comment, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 52 [comment, 4] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 52 [comment, 4] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 53 [comment, 96] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 53 [comment, 96] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 54 [foreignDoc, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 54 [foreignDoc, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 55 [foreignDoc, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 55 [foreignDoc, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 56 [foreignComment, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 56 [foreignComment, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 57 [foreignTextNode, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 58 [foreignTextNode, 36] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 59 [xmlDoc, -1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 59 [xmlDoc, -1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 60 [xmlDoc, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 60 [xmlDoc, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 61 [xmlDoc, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 61 [xmlDoc, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 62 [xmlDoc, 5] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 62 [xmlDoc, 5] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 63 [xmlComment, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 63 [xmlComment, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 64 [xmlComment, 4] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 64 [xmlComment, 4] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 65 [processingInstruction, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 65 [processingInstruction, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 66 [processingInstruction, 5] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 66 [processingInstruction, 5] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 67 [processingInstruction, 9] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 67 [processingInstruction, 9] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 68 [detachedTextNode, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 69 [detachedTextNode, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 70 [detachedForeignTextNode, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 71 [detachedForeignTextNode, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 72 [detachedXmlTextNode, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 73 [detachedXmlTextNode, 8] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 74 [detachedProcessingInstruction, 12] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 75 [detachedComment, 3] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 75 [detachedComment, 3] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 76 [detachedComment, 5] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 76 [detachedComment, 5] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 77 [detachedForeignComment, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 78 [detachedForeignComment, 4] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 79 [detachedXmlComment, 2] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 80 [docfrag, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 80 [docfrag, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 81 [foreignDocfrag, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 82 [xmlDocfrag, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 83 [doctype, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 83 [doctype, 0] 
-FAIL extend() forwards with range 40 [paras[3], 1, comment, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-FAIL extend() backwards with range 40 [paras[3], 1, comment, 8] and point 84 [doctype, -17] assert_throws: extend() to a doctype must throw InvalidNodeTypeError function "function () {
-            selection.extend(node, offset);
-        }" threw object "IndexSizeError: Failed to execute 'extend' on 'Selection': -17 is not a valid offset." that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 1, expected 24
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 85 [doctype, 1] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 85 [doctype, 1] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 86 [foreignDoctype, 0] 
-PASS extend() forwards with range 40 [paras[3], 1, comment, 8] and point 87 [xmlDoctype, 0] 
-PASS extend() backwards with range 40 [paras[3], 1, comment, 8] and point 87 [xmlDoctype, 0] 
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Selection/use-counters.html b/third_party/WebKit/LayoutTests/fast/dom/Selection/use-counters.html
index 9682116..352726c 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/Selection/use-counters.html
+++ b/third_party/WebKit/LayoutTests/fast/dom/Selection/use-counters.html
@@ -13,10 +13,6 @@
 test(function() {
   var SelectionSetBaseAndExtentNull = 1084; // From UseCounter.h
   assert_false(internals.isUseCounted(document, SelectionSetBaseAndExtentNull));
-  assert_throws('IndexSizeError', function() {
-    document.getSelection().setBaseAndExtent(null, -1, null, -1);
-  });
-  assert_false(internals.isUseCounted(document, SelectionSetBaseAndExtentNull));
   document.getSelection().setBaseAndExtent(null, 0, null, 0)
   assert_true(internals.isUseCounted(document, SelectionSetBaseAndExtentNull));
 }, 'selection.setBaseAndExtent(null, 0, null, 0)');
diff --git a/third_party/WebKit/LayoutTests/fast/text/selection-exceptions-expected.txt b/third_party/WebKit/LayoutTests/fast/text/selection-exceptions-expected.txt
index 2b962cb..6ed111c 100644
--- a/third_party/WebKit/LayoutTests/fast/text/selection-exceptions-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/text/selection-exceptions-expected.txt
@@ -3,15 +3,15 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS getSelection().collapse(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'collapse' on 'Selection': -1 is not a valid offset..
+PASS getSelection().collapse(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'collapse' on 'Selection': There is no child at offset -1..
 PASS getSelection().collapseToStart() threw exception InvalidStateError: Failed to execute 'collapseToStart' on 'Selection': there is no selection..
 PASS getSelection().collapseToEnd() threw exception InvalidStateError: Failed to execute 'collapseToEnd' on 'Selection': there is no selection..
-PASS getSelection().setBaseAndExtent(document.documentElement, -1, document.documentElement, 0) threw exception IndexSizeError: Failed to execute 'setBaseAndExtent' on 'Selection': -1 is not a valid base offset..
-PASS getSelection().setBaseAndExtent(document.documentElement, 0, document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'setBaseAndExtent' on 'Selection': -1 is not a valid extent offset..
-PASS getSelection().collapse(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'collapse' on 'Selection': -1 is not a valid offset..
+PASS getSelection().setBaseAndExtent(document.documentElement, -1, document.documentElement, 0) threw exception IndexSizeError: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset -1..
+PASS getSelection().setBaseAndExtent(document.documentElement, 0, document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset -1..
+PASS getSelection().collapse(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'collapse' on 'Selection': There is no child at offset -1..
 PASS getSelection().getRangeAt(-1) threw exception IndexSizeError: Failed to execute 'getRangeAt' on 'Selection': -1 is not a valid index..
 PASS getSelection().extend(0, -1) threw exception TypeError: Failed to execute 'extend' on 'Selection': parameter 1 is not of type 'Node'..
-PASS getSelection().extend(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'extend' on 'Selection': -1 is not a valid offset..
+PASS getSelection().extend(document.documentElement, -1) threw exception IndexSizeError: Failed to execute 'extend' on 'Selection': There is no child at offset -1..
 PASS getSelection().extend(document.documentElement, 1000) threw exception IndexSizeError: Failed to execute 'extend' on 'Selection': There is no child at offset 1000..
 PASS successfullyParsed is true
 
diff --git a/third_party/WebKit/LayoutTests/fast/text/selection-exceptions.html b/third_party/WebKit/LayoutTests/fast/text/selection-exceptions.html
index e00f3c9..d2bf0bf 100644
--- a/third_party/WebKit/LayoutTests/fast/text/selection-exceptions.html
+++ b/third_party/WebKit/LayoutTests/fast/text/selection-exceptions.html
@@ -7,22 +7,22 @@
     <script>
         description("This tests that 'Selection' methods throw exceptions with reasonable messages.");
 
-        shouldThrow('getSelection().collapse(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'collapse\' on \'Selection\': -1 is not a valid offset."');
+        shouldThrow('getSelection().collapse(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'collapse\' on \'Selection\': There is no child at offset -1."');
 
         getSelection().empty();
         shouldThrow('getSelection().collapseToStart()', '"InvalidStateError: Failed to execute \'collapseToStart\' on \'Selection\': there is no selection."');
         shouldThrow('getSelection().collapseToEnd()', '"InvalidStateError: Failed to execute \'collapseToEnd\' on \'Selection\': there is no selection."');
 
-        shouldThrow('getSelection().setBaseAndExtent(document.documentElement, -1, document.documentElement, 0)', '"IndexSizeError: Failed to execute \'setBaseAndExtent\' on \'Selection\': -1 is not a valid base offset."');
-        shouldThrow('getSelection().setBaseAndExtent(document.documentElement, 0, document.documentElement, -1)', '"IndexSizeError: Failed to execute \'setBaseAndExtent\' on \'Selection\': -1 is not a valid extent offset."');
+        shouldThrow('getSelection().setBaseAndExtent(document.documentElement, -1, document.documentElement, 0)', '"IndexSizeError: Failed to execute \'setBaseAndExtent\' on \'Selection\': There is no child at offset -1."');
+        shouldThrow('getSelection().setBaseAndExtent(document.documentElement, 0, document.documentElement, -1)', '"IndexSizeError: Failed to execute \'setBaseAndExtent\' on \'Selection\': There is no child at offset -1."');
 
-        shouldThrow('getSelection().collapse(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'collapse\' on \'Selection\': -1 is not a valid offset."');
+        shouldThrow('getSelection().collapse(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'collapse\' on \'Selection\': There is no child at offset -1."');
 
         shouldThrow('getSelection().getRangeAt(-1)', '"IndexSizeError: Failed to execute \'getRangeAt\' on \'Selection\': -1 is not a valid index."');
 
         shouldThrow('getSelection().extend(0, -1)', '"TypeError: Failed to execute \'extend\' on \'Selection\': parameter 1 is not of type \'Node\'."');
         getSelection().addRange(document.createRange());
-        shouldThrow('getSelection().extend(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'extend\' on \'Selection\': -1 is not a valid offset."');
+        shouldThrow('getSelection().extend(document.documentElement, -1)', '"IndexSizeError: Failed to execute \'extend\' on \'Selection\': There is no child at offset -1."');
         shouldThrow('getSelection().extend(document.documentElement, 1000)', '"IndexSizeError: Failed to execute \'extend\' on \'Selection\': There is no child at offset 1000."');
     </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/ftp-subresource-blocked.html b/third_party/WebKit/LayoutTests/http/tests/security/ftp-subresource-blocked.html
new file mode 100644
index 0000000..f03deb1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/security/ftp-subresource-blocked.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  async_test(t => {
+    var i = document.createElement('img');
+    i.onload = t.unreached_func('The image should not load.');
+    i.onerror = t.step_func_done(e => {
+      assert_equals(i.naturalWidth, 0);
+      assert_equals(i.naturalHeight, 0);
+    });
+
+    i.src = 'ftp://example.test/image.png';
+  }, "'ftp:' subresource requests fail.");
+</script>
diff --git a/third_party/WebKit/LayoutTests/security/block-test-expected.txt b/third_party/WebKit/LayoutTests/security/block-test-expected.txt
index 846c463..e3acd12 100644
--- a/third_party/WebKit/LayoutTests/security/block-test-expected.txt
+++ b/third_party/WebKit/LayoutTests/security/block-test-expected.txt
@@ -132,11 +132,8 @@
 CONSOLE MESSAGE: line 32: PASS: error event fired for http://255.255.255.255:4294967295/test.jpg
 CONSOLE MESSAGE: line 32: PASS: error event fired for http://255.255.255.255:4294967296/test.jpg
 CONSOLE WARNING: Subresource requests using legacy protocols (like `ftp:`) are deprecated, and will be blocked in M59, around June 2017. Please deliver web-accessible resources over modern protocols like HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for more details.
-ftp://255.255.255.255/test.jpg - willSendRequest <NSURLRequest URL ftp://255.255.255.255/test.jpg, main document URL block-test.html, http method GET>
 CONSOLE MESSAGE: line 32: PASS: error event fired for ftp://255.255.255.255/test.jpg
-ftp://255.255.255.255/test.jpg - willSendRequest <NSURLRequest URL ftp://255.255.255.255/test.jpg, main document URL block-test.html, http method GET>
 CONSOLE MESSAGE: line 32: PASS: error event fired for ftp://255.255.255.255:21/test.jpg
-ftp://255.255.255.255:22/test.jpg - willSendRequest <NSURLRequest URL ftp://255.255.255.255:22/test.jpg, main document URL block-test.html, http method GET>
 CONSOLE MESSAGE: line 32: PASS: error event fired for ftp://255.255.255.255:22/test.jpg
 http://255.255.255.255:0/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255:0/test.jpg, main document URL block-test.html, http method GET>
 CONSOLE MESSAGE: line 32: PASS: error event fired for http://255.255.255.255:0/test.jpg
diff --git a/third_party/WebKit/Source/build/scripts/make_css_property_apis.py b/third_party/WebKit/Source/build/scripts/make_css_property_apis.py
index ed317cd..5b5376b 100755
--- a/third_party/WebKit/Source/build/scripts/make_css_property_apis.py
+++ b/third_party/WebKit/Source/build/scripts/make_css_property_apis.py
@@ -44,6 +44,7 @@
 
         self._outputs = {
             'CSSPropertyDescriptor.cpp': self.generate_property_descriptor_cpp,
+            'CSSPropertyDescriptor.h': self.generate_property_descriptor_h,
             'CSSPropertyAPI.h': self.generate_property_api,
         }
 
@@ -93,6 +94,13 @@
             'ordered_api_method_names': self.ordered_api_method_names,
         }
 
+    @template_expander.use_jinja('CSSPropertyDescriptor.h.tmpl')
+    def generate_property_descriptor_h(self):
+        return {
+            'ordered_api_method_names': self.ordered_api_method_names,
+            'all_api_methods': self.all_api_methods,
+        }
+
     @template_expander.use_jinja('CSSPropertyAPI.h.tmpl')
     def generate_property_api(self):
         return {
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyDescriptor.h b/third_party/WebKit/Source/build/scripts/templates/CSSPropertyDescriptor.h.tmpl
similarity index 76%
rename from third_party/WebKit/Source/core/css/properties/CSSPropertyDescriptor.h
rename to third_party/WebKit/Source/build/scripts/templates/CSSPropertyDescriptor.h.tmpl
index e44adfb1..6012ba2 100644
--- a/third_party/WebKit/Source/core/css/properties/CSSPropertyDescriptor.h
+++ b/third_party/WebKit/Source/build/scripts/templates/CSSPropertyDescriptor.h.tmpl
@@ -12,9 +12,9 @@
 
 // Stores function pointers matching those declared in CSSPropertyAPI.
 struct CSSPropertyDescriptor {
-  const CSSValue* (*parseSingleValue)(CSSParserTokenRange&,
-                                      const CSSParserContext*);
-  bool (*parseShorthand)(bool, CSSParserTokenRange&, const CSSParserContext*);
+  {% for api_method_name in ordered_api_method_names %}
+  {{all_api_methods[api_method_name].return_type}} (*{{api_method_name}}){{all_api_methods[api_method_name].parameters}};
+  {% endfor %}
 
   // Returns the corresponding CSSPropertyDescriptor for a given CSSPropertyID.
   // Use this function to access the API for a property. Returns a descriptor
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn
index 4345d43..d501553 100644
--- a/third_party/WebKit/Source/core/BUILD.gn
+++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -417,12 +417,14 @@
   script = "../build/scripts/make_css_property_apis.py"
   other_inputs = [
     "../build/scripts/templates/CSSPropertyDescriptor.cpp.tmpl",
+    "../build/scripts/templates/CSSPropertyDescriptor.h.tmpl",
     "../build/scripts/templates/CSSPropertyAPIFiles.h.tmpl",
     "../build/scripts/templates/CSSPropertyAPI.h.tmpl",
   ]
   in_files = [ "css/properties/CSSPropertyAPIMethods.json5" ]
   outputs = [
     "$blink_core_output_dir/css/properties/CSSPropertyDescriptor.cpp",
+    "$blink_core_output_dir/css/properties/CSSPropertyDescriptor.h",
     "$blink_core_output_dir/css/properties/CSSPropertyAPI.h",
     "$blink_core_output_dir/css/properties/CSSPropertyAPIColumnCount.h",
     "$blink_core_output_dir/css/properties/CSSPropertyAPIVerticalAlign.h",
diff --git a/third_party/WebKit/Source/core/css/BUILD.gn b/third_party/WebKit/Source/core/css/BUILD.gn
index 6b2783ac..1302b64 100644
--- a/third_party/WebKit/Source/core/css/BUILD.gn
+++ b/third_party/WebKit/Source/core/css/BUILD.gn
@@ -453,7 +453,6 @@
     "properties/CSSPropertyAlignmentUtils.h",
     "properties/CSSPropertyColumnUtils.cpp",
     "properties/CSSPropertyColumnUtils.h",
-    "properties/CSSPropertyDescriptor.h",
     "properties/CSSPropertyLengthUtils.cpp",
     "properties/CSSPropertyLengthUtils.h",
     "properties/CSSPropertyMarginUtils.cpp",
diff --git a/third_party/WebKit/Source/core/dom/Document.idl b/third_party/WebKit/Source/core/dom/Document.idl
index 87ca6f5..84e147b7 100644
--- a/third_party/WebKit/Source/core/dom/Document.idl
+++ b/third_party/WebKit/Source/core/dom/Document.idl
@@ -40,7 +40,7 @@
     readonly attribute DOMString URL;
     // FIXME: documentURI should not be nullable.
     [ImplementedAs=url] readonly attribute DOMString? documentURI;
-    readonly attribute DOMString origin;
+    [MeasureAs=DocumentOrigin] readonly attribute DOMString origin;
     [RuntimeEnabled=suborigins] readonly attribute DOMString suborigin;
     readonly attribute DOMString compatMode;
 
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn
index ac3beb0f..a570fab3 100644
--- a/third_party/WebKit/Source/core/editing/BUILD.gn
+++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -222,6 +222,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "ClipboardEventFlowTest.cpp",
     "CompositionUnderlineTest.cpp",
     "EditingCommandTest.cpp",
     "EditingStrategyTest.cpp",
diff --git a/third_party/WebKit/Source/core/editing/ClipboardEventFlowTest.cpp b/third_party/WebKit/Source/core/editing/ClipboardEventFlowTest.cpp
new file mode 100644
index 0000000..c04a974
--- /dev/null
+++ b/third_party/WebKit/Source/core/editing/ClipboardEventFlowTest.cpp
@@ -0,0 +1,149 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/dom/Document.h"
+#include "core/editing/EditingTestBase.h"
+#include "core/editing/FrameSelection.h"
+#include "core/editing/Position.h"
+#include "core/editing/SelectionTemplate.h"
+#include "core/events/EventListener.h"
+#include "core/frame/LocalFrame.h"
+#include "core/frame/Settings.h"
+#include "core/html/HTMLBodyElement.h"
+#include "core/html/HTMLButtonElement.h"
+#include "core/html/HTMLDivElement.h"
+#include "core/html/HTMLHtmlElement.h"
+#include "core/layout/LayoutObject.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace blink {
+
+namespace {
+class MockEventListener : public EventListener {
+ public:
+  MockEventListener() : EventListener(EventListener::CPPEventListenerType) {}
+
+  bool operator==(const EventListener& other) const final {
+    return this == &other;
+  }
+
+  MOCK_METHOD2(handleEvent, void(ExecutionContext*, Event*));
+};
+}  // namespace
+
+class ClipboardEventFlowTest : public EditingTestBase {
+ private:
+  void makeDocumentEmpty() {
+    while (document().firstChild())
+      document().removeChild(document().firstChild());
+  }
+
+  void setElementText(Element& element, const std::string& text) {
+    element.setInnerHTML(String::fromUTF8(text.c_str()), ASSERT_NO_EXCEPTION);
+    updateAllLifecyclePhases();
+  }
+
+  void setElementTextAndSelectIt(Element& element,
+                                 const std::string& text,
+                                 bool selectionEditable) {
+    setElementText(element, text);
+
+    frame().selection().setSelection(
+        SelectionInDOMTree::Builder()
+            .collapse(Position(element.firstChild(), 0))
+            .extend(Position(element.firstChild(), text.size()))
+            .build());
+
+    element.setAttribute(HTMLNames::contenteditableAttr,
+                         selectionEditable ? "true" : "false");
+  }
+
+ protected:
+  void clipboardEventTargetDependsOnSelectionEditabilityTest(
+      const char* command,
+      bool selectionEditable) {
+    using testing::_;
+
+    auto* html = HTMLHtmlElement::create(document());
+    auto* body = HTMLBodyElement::create(document());
+    auto* focusableElement = HTMLButtonElement::create(document());
+    auto* elementWithSelection = HTMLDivElement::create(document());
+
+    auto* eventListenerInstalledOnFocusedElement = new MockEventListener;
+    auto* eventListenerInstalledOnElementWithSelection = new MockEventListener;
+
+    focusableElement->addEventListener(command,
+                                       eventListenerInstalledOnFocusedElement);
+    elementWithSelection->addEventListener(
+        command, eventListenerInstalledOnElementWithSelection);
+
+    makeDocumentEmpty();
+    document().setDesignMode("on");
+
+    body->appendChild(focusableElement);
+    body->appendChild(elementWithSelection);
+    html->appendChild(body);
+    document().appendChild(html);
+
+    focusableElement->focus();
+
+    setElementTextAndSelectIt(*elementWithSelection, "some dummy text",
+                              selectionEditable);
+
+    // allow |document.execCommand| to access clipboard
+    frame().settings()->setJavaScriptCanAccessClipboard(true);
+
+    // test expectations
+    EXPECT_CALL(*eventListenerInstalledOnFocusedElement, handleEvent(_, _))
+        .Times(selectionEditable ? 0 : 1);
+
+    EXPECT_CALL(*eventListenerInstalledOnElementWithSelection,
+                handleEvent(_, _))
+        .Times(selectionEditable ? 1 : 0);
+
+    // execute command
+    NonThrowableExceptionState exceptionState;
+    document().execCommand(command, false, "", exceptionState);
+  }
+};
+
+TEST_F(ClipboardEventFlowTest,
+       copySetsClipboardEventTargetToActiveElementWhenSelectionIsNotEditable) {
+  clipboardEventTargetDependsOnSelectionEditabilityTest("copy", false);
+}
+
+TEST_F(
+    ClipboardEventFlowTest,
+    copySetsClipboardEventTargetToElementWithSelectionWhenSelectionIsEditable) {
+  clipboardEventTargetDependsOnSelectionEditabilityTest("copy", true);
+}
+
+TEST_F(ClipboardEventFlowTest,
+       cutSetsClipboardEventTargetToActiveElementWhenSelectionIsNotEditable) {
+  clipboardEventTargetDependsOnSelectionEditabilityTest("cut", false);
+}
+
+TEST_F(
+    ClipboardEventFlowTest,
+    cutSetsClipboardEventTargetToElementWithSelectionWhenSelectionIsEditable) {
+  clipboardEventTargetDependsOnSelectionEditabilityTest("cut", true);
+}
+
+TEST_F(ClipboardEventFlowTest,
+       pasteSetsClipboardEventTargetToActiveElementWhenSelectionIsNotEditable) {
+  // allow |document.execCommand| to execute 'paste' command
+  frame().settings()->setDOMPasteAllowed(true);
+
+  clipboardEventTargetDependsOnSelectionEditabilityTest("paste", false);
+}
+
+TEST_F(
+    ClipboardEventFlowTest,
+    pasteSetsClipboardEventTargetToElementWithSelectionWhenSelectionIsEditable) {
+  // allow |document.execCommand| to execute 'paste'
+  frame().settings()->setDOMPasteAllowed(true);
+
+  clipboardEventTargetDependsOnSelectionEditabilityTest("paste", true);
+}
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/DOMSelection.cpp b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
index e38f0d7..5d1af9d 100644
--- a/third_party/WebKit/Source/core/editing/DOMSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
@@ -224,11 +224,6 @@
 
   // 2. The method must throw an IndexSizeError exception if offset is longer
   // than node's length ([DOM4]) and abort these steps.
-  if (offset < 0) {
-    exceptionState.throwDOMException(
-        IndexSizeError, String::number(offset) + " is not a valid offset.");
-    return;
-  }
   Range::checkNodeWOffset(node, offset, exceptionState);
   if (exceptionState.hadException())
     return;
@@ -322,20 +317,6 @@
   if (!isAvailable())
     return;
 
-  if (baseOffset < 0) {
-    exceptionState.throwDOMException(
-        IndexSizeError,
-        String::number(baseOffset) + " is not a valid base offset.");
-    return;
-  }
-
-  if (extentOffset < 0) {
-    exceptionState.throwDOMException(
-        IndexSizeError,
-        String::number(extentOffset) + " is not a valid extent offset.");
-    return;
-  }
-
   // TODO(editing-dev): Behavior on where base or extent is null is still
   // under discussion: https://github.com/w3c/selection-api/issues/72
   if (!baseNode) {
@@ -471,11 +452,6 @@
     return;
   }
 
-  if (offset < 0) {
-    exceptionState.throwDOMException(
-        IndexSizeError, String::number(offset) + " is not a valid offset.");
-    return;
-  }
   Range::checkNodeWOffset(node, offset, exceptionState);
   if (exceptionState.hadException())
     return;
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp
index e312d48..ff28ffad 100644
--- a/third_party/WebKit/Source/core/editing/Editor.cpp
+++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -267,7 +267,10 @@
 }
 
 bool Editor::canEditRichly() const {
-  return frame().selection().isContentRichlyEditable();
+  return frame()
+      .selection()
+      .computeVisibleSelectionInDOMTreeDeprecated()
+      .isContentRichlyEditable();
 }
 
 // WinIE uses onbeforecut and onbeforepaste to enables the cut and paste menu
@@ -741,7 +744,9 @@
 }
 
 Element* Editor::findEventTargetFrom(const VisibleSelection& selection) const {
-  Element* target = associatedElementOf(selection.start());
+  Element* target = selection.hasEditableStyle()
+                        ? associatedElementOf(selection.start())
+                        : frame().document()->activeElement();
   if (!target)
     target = frame().document()->body();
 
@@ -1146,7 +1151,9 @@
   ResourceFetcher* loader = frame().document()->fetcher();
   ResourceCacheValidationSuppressor validationSuppressor(loader);
 
-  PasteMode pasteMode = frame().selection().isContentRichlyEditable()
+  PasteMode pasteMode = frame().selection()
+                                .computeVisibleSelectionInDOMTreeDeprecated()
+                                .isContentRichlyEditable()
                             ? AllMimeTypes
                             : PlainTextOnly;
 
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.h b/third_party/WebKit/Source/core/editing/FrameSelection.h
index af41e3b..bcb452c 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.h
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.h
@@ -89,8 +89,6 @@
     DoNotSetFocus = 1 << 3,
     DoNotUpdateAppearance = 1 << 4,
     DoNotClearStrategy = 1 << 5,
-    // TODO(yosin): We should get rid of |DoNotAdjustInFlatTree|.
-    DoNotAdjustInFlatTree = 1 << 6,
   };
   // Union of values in SetSelectionOption and EUserTriggered
   typedef unsigned SetSelectionOptions;
@@ -115,10 +113,6 @@
   bool isContentEditable() const {
     return computeVisibleSelectionInDOMTreeDeprecated().isContentEditable();
   }
-  bool isContentRichlyEditable() const {
-    return computeVisibleSelectionInDOMTreeDeprecated()
-        .isContentRichlyEditable();
-  }
 
   // An implementation of |WebFrame::moveCaretSelection()|
   void moveCaretSelection(const IntPoint&);
diff --git a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
index 7587722..f82a155 100644
--- a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
@@ -1915,7 +1915,9 @@
   // before accessing |FrameSelection::selection()|.
   frame.selection().updateIfNeeded();
   return !frame.selection().isNone() &&
-         frame.selection().isContentRichlyEditable() &&
+         frame.selection()
+             .computeVisibleSelectionInDOMTreeDeprecated()
+             .isContentRichlyEditable() &&
          frame.selection().rootEditableElement();
 }
 
@@ -1947,7 +1949,9 @@
   // before accessing |FrameSelection::selection()|.
   frame.selection().updateIfNeeded();
   return frame.selection().isRange() &&
-         frame.selection().isContentRichlyEditable();
+         frame.selection()
+             .computeVisibleSelectionInDOMTreeDeprecated()
+             .isContentRichlyEditable();
 }
 
 static bool enabledRedo(LocalFrame& frame, Event*, EditorCommandSource) {
diff --git a/third_party/WebKit/Source/core/frame/Location.idl b/third_party/WebKit/Source/core/frame/Location.idl
index 24b40ea..6f62693 100644
--- a/third_party/WebKit/Source/core/frame/Location.idl
+++ b/third_party/WebKit/Source/core/frame/Location.idl
@@ -60,7 +60,7 @@
     // using DOMString instead of USVString.
     [SetterCallWith=(CurrentWindow,EnteredWindow), CrossOrigin=Setter, RaisesException=Setter] attribute DOMString href;
     [NotEnumerable, ImplementedAs=href] DOMString toString();
-    readonly attribute DOMString origin;
+    [MeasureAs=LocationOrigin] readonly attribute DOMString origin;
 
     [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString protocol;
     [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString host;
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 9f8b010b..f0e2f9e0 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1474,6 +1474,8 @@
     DOMClobberedVariableAccessed = 1824,
     HTMLDocumentCreateProcessingInstruction = 1825,
     FetchResponseConstructionWithStream = 1826,
+    LocationOrigin = 1827,
+    DocumentOrigin = 1828,
 
     // Add new features immediately above this line. Don't change assigned
     // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/Source/core/html/HTMLButtonElement.h b/third_party/WebKit/Source/core/html/HTMLButtonElement.h
index 83576c4..eea1848e 100644
--- a/third_party/WebKit/Source/core/html/HTMLButtonElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLButtonElement.h
@@ -24,11 +24,12 @@
 #ifndef HTMLButtonElement_h
 #define HTMLButtonElement_h
 
+#include "core/CoreExport.h"
 #include "core/html/HTMLFormControlElement.h"
 
 namespace blink {
 
-class HTMLButtonElement final : public HTMLFormControlElement {
+class CORE_EXPORT HTMLButtonElement final : public HTMLFormControlElement {
   DEFINE_WRAPPERTYPEINFO();
 
  public:
diff --git a/third_party/WebKit/Source/core/html/TextControlElement.cpp b/third_party/WebKit/Source/core/html/TextControlElement.cpp
index 273579c..0eebaaf 100644
--- a/third_party/WebKit/Source/core/html/TextControlElement.cpp
+++ b/third_party/WebKit/Source/core/html/TextControlElement.cpp
@@ -442,8 +442,8 @@
                                                              : endPosition)
           .setIsDirectional(direction != SelectionHasNoDirection)
           .build(),
-      FrameSelection::DoNotAdjustInFlatTree | FrameSelection::CloseTyping |
-          FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus);
+      FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle |
+          FrameSelection::DoNotSetFocus);
   return true;
 }
 
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
index e301c9d..dc641a6 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -796,6 +796,11 @@
             frame()->document()->getSecurityOrigin()->protocol())) {
       Deprecation::countDeprecation(
           frame()->document(), UseCounter::LegacyProtocolEmbeddedAsSubresource);
+
+      // TODO(mkwst): Drop the runtime-enabled check in M59:
+      // https://www.chromestatus.com/feature/5709390967472128
+      if (RuntimeEnabledFeatures::blockLegacySubresourcesEnabled())
+        return ResourceRequestBlockedReason::Origin;
     }
     if (!url.user().isEmpty() || !url.pass().isEmpty()) {
       Deprecation::countDeprecation(
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp
index dc9440c..c13b7b9 100644
--- a/third_party/WebKit/Source/core/testing/Internals.cpp
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -913,6 +913,19 @@
   return ClientRect::create(frame()->selection().absoluteCaretBounds());
 }
 
+String Internals::textAffinity() {
+  if (frame()
+          ->page()
+          ->focusController()
+          .focusedFrame()
+          ->selection()
+          .selectionInDOMTree()
+          .affinity() == TextAffinity::Upstream) {
+    return "Upstream";
+  }
+  return "Downstream";
+}
+
 ClientRect* Internals::boundingBox(Element* element) {
   DCHECK(element);
 
diff --git a/third_party/WebKit/Source/core/testing/Internals.h b/third_party/WebKit/Source/core/testing/Internals.h
index e0d42cc..43d7c79 100644
--- a/third_party/WebKit/Source/core/testing/Internals.h
+++ b/third_party/WebKit/Source/core/testing/Internals.h
@@ -422,6 +422,7 @@
   Node* visibleSelectionFocusNode();
   unsigned visibleSelectionFocusOffset();
   ClientRect* selectionBounds(ExceptionState&);
+  String textAffinity();
 
   bool loseSharedGraphicsContext3D();
 
diff --git a/third_party/WebKit/Source/core/testing/Internals.idl b/third_party/WebKit/Source/core/testing/Internals.idl
index 44b8cd32..0dd93729 100644
--- a/third_party/WebKit/Source/core/testing/Internals.idl
+++ b/third_party/WebKit/Source/core/testing/Internals.idl
@@ -277,6 +277,7 @@
     readonly attribute Node? visibleSelectionFocusNode;
     readonly attribute unsigned long visibleSelectionFocusOffset;
     [RaisesException] ClientRect selectionBounds();
+    readonly attribute DOMString textAffinity;
 
     boolean loseSharedGraphicsContext3D();
 
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn
index a7bae8a..f93120e 100644
--- a/third_party/WebKit/Source/platform/BUILD.gn
+++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -1761,6 +1761,7 @@
     "network/HTTPParsersTest.cpp",
     "network/LinkHeaderTest.cpp",
     "network/NetworkUtilsTest.cpp",
+    "network/ParsedContentTypeTest.cpp",
     "network/ResourceRequestTest.cpp",
     "network/mime/MIMETypeRegistryTest.cpp",
     "scheduler/base/intrusive_heap_unittest.cc",
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index 69a12661..c976938c 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -1019,5 +1019,9 @@
       name: "RestrictCompleteURLCharacterSet",
       status: "experimental",
     },
+    {
+      name: "BlockLegacySubresources",
+      status: "experimental",
+    }
   ],
 }
diff --git a/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp b/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
new file mode 100644
index 0000000..64ed0d1
--- /dev/null
+++ b/third_party/WebKit/Source/platform/network/ParsedContentTypeTest.cpp
@@ -0,0 +1,93 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "platform/network/ParsedContentType.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+
+TEST(ParsedContentTypeTest, MimeTypeWithoutCharset) {
+  ParsedContentType t("text/plain");
+
+  EXPECT_EQ("text/plain", t.mimeType());
+  EXPECT_EQ(String(), t.charset());
+}
+
+TEST(ParsedContentTypeTest, MimeTypeWithCharSet) {
+  ParsedContentType t(" text/plain  ;  x=y;charset=utf-8 ");
+
+  EXPECT_EQ("text/plain", t.mimeType());
+  EXPECT_EQ("utf-8", t.charset());
+}
+
+TEST(ParsedContentTypeTest, MimeTypeWithQuotedCharSet) {
+  ParsedContentType t("text/plain; \"charset\"=\"x=y;y=z; ;;\"");
+
+  EXPECT_EQ("text/plain", t.mimeType());
+  EXPECT_EQ("x=y;y=z; ;;", t.charset());
+}
+
+// TODO(yhirano): Add tests for escaped quotation: it's currently
+// mis-implemented.
+
+TEST(ParsedContentTypeTest, InvalidMimeTypeWithoutCharset) {
+  ParsedContentType t(" ");
+
+  EXPECT_EQ(String(), t.mimeType());
+  EXPECT_EQ(String(), t.charset());
+}
+
+TEST(ParsedContentTypeTest, InvalidMimeTypeWithCharset) {
+  ParsedContentType t("text/plain; charset;");
+
+  EXPECT_EQ("text/plain", t.mimeType());
+  EXPECT_EQ(String(), t.charset());
+}
+
+TEST(ParsedContentTypeTest, Validity) {
+  EXPECT_TRUE(isValidContentType("text/plain"));
+  EXPECT_TRUE(isValidContentType("text/plain; charset=utf-8"));
+  EXPECT_TRUE(isValidContentType("  text/plain  "));
+  EXPECT_TRUE(isValidContentType(" text/plain;charset=utf-8  "));
+  EXPECT_TRUE(isValidContentType("unknown/unknown"));
+  EXPECT_TRUE(isValidContentType("unknown/unknown; charset=unknown"));
+  EXPECT_TRUE(isValidContentType("x/y;\"z=\\\"q;t\"=\"ttx&r=z;;kd==\""));
+
+  EXPECT_FALSE(isValidContentType("text/plain\r"));
+  EXPECT_FALSE(isValidContentType("text/plain\n"));
+  EXPECT_FALSE(isValidContentType(""));
+  EXPECT_FALSE(isValidContentType("   "));
+  EXPECT_FALSE(isValidContentType("text/plain;"));
+  EXPECT_FALSE(isValidContentType("text/plain;  "));
+  EXPECT_FALSE(isValidContentType("text/plain; charset"));
+  EXPECT_FALSE(isValidContentType("text/plain; charset;"));
+  EXPECT_FALSE(isValidContentType("x/y;\"xx"));
+  EXPECT_FALSE(isValidContentType("x/y;\"xx=y"));
+
+  // TODO(yhirano): Add tests for non-tokens. They are currently accepted.
+}
+
+TEST(ParsedContentTypeTest, ParameterName) {
+  String input = "x; y=z; y=u;  t=r;s=x;\"Q\"=U;\"T\"=S;\"z u\"=\"q a\"";
+
+  ParsedContentType t(input);
+
+  EXPECT_EQ(6u, t.parameterCount());
+  EXPECT_EQ(String(), t.parameterValueForName("a"));
+  EXPECT_EQ(String(), t.parameterValueForName("x"));
+  EXPECT_EQ("u", t.parameterValueForName("y"));
+  EXPECT_EQ("r", t.parameterValueForName("t"));
+  EXPECT_EQ("x", t.parameterValueForName("s"));
+  EXPECT_EQ("U", t.parameterValueForName("Q"));
+  EXPECT_EQ("S", t.parameterValueForName("T"));
+  EXPECT_EQ("q a", t.parameterValueForName("z u"));
+
+  // TODO(yhirano): Case-sensitivity is mis-implemented.
+  // TODO(yhirano): Add tests for escaped quotations.
+  // TODO(yhirano): Leading spaces of a parameter value should be ignored.
+  // TODO(yhirano): Trailing spaces of a parameter value should be ignored.
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.cc b/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.cc
index 312136a..7406dc4 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.cc
@@ -39,11 +39,16 @@
   return task_queue_manager_->delegate()->NowTicks();
 }
 
-void RealTimeDomain::RequestWakeup(base::TimeTicks now, base::TimeDelta delay) {
+void RealTimeDomain::RequestWakeupAt(base::TimeTicks now,
+                                     base::TimeTicks run_time) {
   // NOTE this is only called if the scheduled runtime is sooner than any
   // previously scheduled runtime, or there is no (outstanding) previously
   // scheduled runtime.
-  task_queue_manager_->MaybeScheduleDelayedWork(FROM_HERE, now, delay);
+  task_queue_manager_->MaybeScheduleDelayedWork(FROM_HERE, this, now, run_time);
+}
+
+void RealTimeDomain::CancelWakeupAt(base::TimeTicks run_time) {
+  task_queue_manager_->CancelDelayedWork(this, run_time);
 }
 
 base::Optional<base::TimeDelta> RealTimeDomain::DelayTillNextTask(
diff --git a/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.h b/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.h
index 6883599..1457204 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.h
+++ b/third_party/WebKit/Source/platform/scheduler/base/real_time_domain.h
@@ -29,7 +29,8 @@
  protected:
   void OnRegisterWithTaskQueueManager(
       TaskQueueManager* task_queue_manager) override;
-  void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) override;
+  void RequestWakeupAt(base::TimeTicks now, base::TimeTicks run_time) override;
+  void CancelWakeupAt(base::TimeTicks run_time) override;
   void AsValueIntoInternal(
       base::trace_event::TracedValue* state) const override;
 
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
index 762f079..fee7f31 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc
@@ -276,11 +276,14 @@
   main_thread_only().delayed_incoming_queue.push(std::move(pending_task));
 
   // If |pending_task| is at the head of the queue, then make sure a wakeup
-  // is requested.
-  if (main_thread_only().delayed_incoming_queue.top().delayed_run_time ==
-      delayed_run_time) {
-    main_thread_only().time_domain->ScheduleDelayedWork(
-        this, pending_task.delayed_run_time, now);
+  // is requested if the queue is enabled.  Note we still want to schedule a
+  // wakeup even if blocked by a fence, because we'd break throttling logic
+  // otherwise.
+  base::TimeTicks next_delayed_task =
+      main_thread_only().delayed_incoming_queue.top().delayed_run_time;
+  if (next_delayed_task == delayed_run_time && IsQueueEnabled()) {
+    main_thread_only().time_domain->ScheduleDelayedWork(this, delayed_run_time,
+                                                        now);
   }
 
   TraceQueueSize(false);
@@ -404,7 +407,8 @@
 }
 
 base::Optional<base::TimeTicks> TaskQueueImpl::GetNextScheduledWakeUp() {
-  if (main_thread_only().delayed_incoming_queue.empty())
+  // Note we don't scheduled a wakeup for disabled queues.
+  if (main_thread_only().delayed_incoming_queue.empty() || !IsQueueEnabled())
     return base::nullopt;
 
   return main_thread_only().delayed_incoming_queue.top().delayed_run_time;
@@ -581,7 +585,7 @@
   main_thread_only().time_domain = time_domain;
   time_domain->RegisterQueue(this);
 
-  if (!main_thread_only().delayed_incoming_queue.empty()) {
+  if (IsQueueEnabled() && !main_thread_only().delayed_incoming_queue.empty()) {
     time_domain->ScheduleDelayedWork(
         this, main_thread_only().delayed_incoming_queue.top().delayed_run_time,
         time_domain->Now());
@@ -799,10 +803,18 @@
     return;
 
   if (enable) {
+    if (!main_thread_only().delayed_incoming_queue.empty()) {
+      main_thread_only().time_domain->ScheduleDelayedWork(
+          this,
+          main_thread_only().delayed_incoming_queue.top().delayed_run_time,
+          main_thread_only().time_domain->Now());
+    }
     // Note the selector calls TaskQueueManager::OnTaskQueueEnabled which posts
     // a DoWork if needed.
     main_thread_only().task_queue_manager->selector_.EnableQueue(this);
   } else {
+    if (!main_thread_only().delayed_incoming_queue.empty())
+      main_thread_only().time_domain->CancelDelayedWork(this);
     main_thread_only().task_queue_manager->selector_.DisableQueue(this);
   }
 }
@@ -838,9 +850,12 @@
     main_thread_only().time_domain->CancelDelayedWork(this);
   } else if (first_task_runtime !=
              main_thread_only().delayed_incoming_queue.top().delayed_run_time) {
-    main_thread_only().time_domain->ScheduleDelayedWork(
-        this, main_thread_only().delayed_incoming_queue.top().delayed_run_time,
-        main_thread_only().time_domain->Now());
+    if (IsQueueEnabled()) {
+      main_thread_only().time_domain->ScheduleDelayedWork(
+          this,
+          main_thread_only().delayed_incoming_queue.top().delayed_run_time,
+          main_thread_only().time_domain->Now());
+    }
   }
 }
 
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
index e42fee1..49fd2f8 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
@@ -230,10 +230,13 @@
 
 void TaskQueueManager::MaybeScheduleDelayedWork(
     const tracked_objects::Location& from_here,
+    TimeDomain* requesting_time_domain,
     base::TimeTicks now,
-    base::TimeDelta delay) {
+    base::TimeTicks run_time) {
   DCHECK(main_thread_checker_.CalledOnValidThread());
-  DCHECK_GE(delay, base::TimeDelta());
+  // Make sure we don't cancel another TimeDomain's wakeup.
+  DCHECK(!next_delayed_do_work_ ||
+         next_delayed_do_work_.time_domain() == requesting_time_domain);
   {
     base::AutoLock lock(any_thread_lock_);
 
@@ -247,22 +250,35 @@
     }
   }
 
-  // De-duplicate DoWork posts.
-  base::TimeTicks run_time = now + delay;
-  if (next_scheduled_delayed_do_work_time_ <= run_time &&
-      !next_scheduled_delayed_do_work_time_.is_null())
+  // If there's a delayed DoWork scheduled to run sooner, we don't need to do
+  // anything because DoWork will post a delayed continuation as needed.
+  if (next_delayed_do_work_ && next_delayed_do_work_.run_time() <= run_time)
     return;
 
+  cancelable_delayed_do_work_closure_.Reset(delayed_do_work_closure_);
+
+  base::TimeDelta delay = std::max(base::TimeDelta(), run_time - now);
   TRACE_EVENT1(disabled_by_default_tracing_category_,
                "TaskQueueManager::MaybeScheduleDelayedWork::PostDelayedTask",
                "delay_ms", delay.InMillisecondsF());
 
   cancelable_delayed_do_work_closure_.Reset(delayed_do_work_closure_);
-  next_scheduled_delayed_do_work_time_ = run_time;
+  next_delayed_do_work_ = NextDelayedDoWork(run_time, requesting_time_domain);
   delegate_->PostDelayedTask(
       from_here, cancelable_delayed_do_work_closure_.callback(), delay);
 }
 
+void TaskQueueManager::CancelDelayedWork(TimeDomain* requesting_time_domain,
+                                         base::TimeTicks run_time) {
+  DCHECK(main_thread_checker_.CalledOnValidThread());
+  if (next_delayed_do_work_.run_time() != run_time)
+    return;
+
+  DCHECK_EQ(next_delayed_do_work_.time_domain(), requesting_time_domain);
+  cancelable_delayed_do_work_closure_.Cancel();
+  next_delayed_do_work_.Clear();
+}
+
 void TaskQueueManager::DoWork(bool delayed) {
   DCHECK(main_thread_checker_.CalledOnValidThread());
   TRACE_EVENT1(tracing_category_, "TaskQueueManager::DoWork", "delayed",
@@ -274,10 +290,9 @@
     queues_to_delete_.clear();
 
   // This must be done before running any tasks because they could invoke a
-  // nested message loop and we risk having a stale
-  // |next_scheduled_delayed_do_work_time_|.
+  // nested message loop and we risk having a stale |next_delayed_do_work_|.
   if (delayed)
-    next_scheduled_delayed_do_work_time_ = base::TimeTicks();
+    next_delayed_do_work_.Clear();
 
   for (int i = 0; i < work_batch_size_; i++) {
     IncomingImmediateWorkMap queues_to_reload;
@@ -339,7 +354,7 @@
 
   {
     MoveableAutoLock lock(any_thread_lock_);
-    base::Optional<base::TimeDelta> next_delay =
+    base::Optional<NextTaskDelay> next_delay =
         ComputeDelayTillNextTaskLocked(&lazy_now);
 
     any_thread().do_work_running_count--;
@@ -353,11 +368,10 @@
 }
 
 void TaskQueueManager::PostDoWorkContinuationLocked(
-    base::Optional<base::TimeDelta> next_delay,
+    base::Optional<NextTaskDelay> next_delay,
     LazyNow* lazy_now,
     MoveableAutoLock&& lock) {
   DCHECK(main_thread_checker_.CalledOnValidThread());
-  base::TimeDelta delay;
 
   {
     MoveableAutoLock auto_lock(std::move(lock));
@@ -365,8 +379,8 @@
     // If there are no tasks left then we don't need to post a continuation.
     if (!next_delay) {
       // If there's a pending delayed DoWork, cancel it because it's not needed.
-      if (!next_scheduled_delayed_do_work_time_.is_null()) {
-        next_scheduled_delayed_do_work_time_ = base::TimeTicks();
+      if (next_delayed_do_work_) {
+        next_delayed_do_work_.Clear();
         cancelable_delayed_do_work_closure_.Cancel();
       }
       return;
@@ -376,42 +390,37 @@
     if (any_thread().immediate_do_work_posted_count > 0)
       return;
 
-    delay = next_delay.value();
-
-    // This isn't supposed to happen, but in case it does convert to
-    // non-delayed.
-    if (delay < base::TimeDelta())
-      delay = base::TimeDelta();
-
-    if (delay.is_zero()) {
+    if (next_delay->delay() <= base::TimeDelta()) {
       // If a delayed DoWork is pending then we don't need to post a
       // continuation because it should run immediately.
-      if (!next_scheduled_delayed_do_work_time_.is_null() &&
-          next_scheduled_delayed_do_work_time_ <= lazy_now->Now()) {
+      if (next_delayed_do_work_ &&
+          next_delayed_do_work_.run_time() <= lazy_now->Now()) {
         return;
       }
 
       any_thread().immediate_do_work_posted_count++;
-    } else {
-      base::TimeTicks run_time = lazy_now->Now() + delay;
-      if (next_scheduled_delayed_do_work_time_ == run_time)
-        return;
-
-      next_scheduled_delayed_do_work_time_ = run_time;
     }
   }
 
   // We avoid holding |any_thread_lock_| while posting the task.
-  if (delay.is_zero()) {
+  if (next_delay->delay() <= base::TimeDelta()) {
     delegate_->PostTask(FROM_HERE, immediate_do_work_closure_);
   } else {
+    base::TimeTicks run_time = lazy_now->Now() + next_delay->delay();
+
+    if (next_delayed_do_work_.run_time() == run_time)
+      return;
+
+    next_delayed_do_work_ =
+        NextDelayedDoWork(run_time, next_delay->time_domain());
     cancelable_delayed_do_work_closure_.Reset(delayed_do_work_closure_);
-    delegate_->PostDelayedTask(
-        FROM_HERE, cancelable_delayed_do_work_closure_.callback(), delay);
+    delegate_->PostDelayedTask(FROM_HERE,
+                               cancelable_delayed_do_work_closure_.callback(),
+                               next_delay->delay());
   }
 }
 
-base::Optional<base::TimeDelta>
+base::Optional<TaskQueueManager::NextTaskDelay>
 TaskQueueManager::ComputeDelayTillNextTaskLocked(LazyNow* lazy_now) {
   DCHECK(main_thread_checker_.CalledOnValidThread());
 
@@ -420,27 +429,32 @@
   // check is equavalent to calling ReloadEmptyWorkQueues first.
   for (const auto& pair : any_thread().has_incoming_immediate_work) {
     if (pair.first->CouldTaskRun(pair.second))
-      return base::TimeDelta();
+      return NextTaskDelay();
   }
 
   // If the selector has non-empty queues we trivially know there is immediate
   // work to be done.
   if (!selector_.EnabledWorkQueuesEmpty())
-    return base::TimeDelta();
+    return NextTaskDelay();
 
   // Otherwise we need to find the shortest delay, if any.  NB we don't need to
   // call WakeupReadyDelayedQueues because it's assumed DelayTillNextTask will
   // return base::TimeDelta>() if the delayed task is due to run now.
-  base::Optional<base::TimeDelta> next_continuation;
+  base::Optional<NextTaskDelay> delay_till_next_task;
   for (TimeDomain* time_domain : time_domains_) {
-    base::Optional<base::TimeDelta> continuation =
+    base::Optional<base::TimeDelta> delay =
         time_domain->DelayTillNextTask(lazy_now);
-    if (!continuation)
+    if (!delay)
       continue;
-    if (!next_continuation || next_continuation.value() > continuation.value())
-      next_continuation = continuation;
+
+    NextTaskDelay task_delay = (delay.value() == base::TimeDelta())
+                                   ? NextTaskDelay()
+                                   : NextTaskDelay(delay.value(), time_domain);
+
+    if (!delay_till_next_task || delay_till_next_task > task_delay)
+      delay_till_next_task = task_delay;
   }
-  return next_continuation;
+  return delay_till_next_task;
 }
 
 bool TaskQueueManager::SelectWorkQueueToService(
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h
index 21c4aedc..fa568cc6 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.h
@@ -74,8 +74,14 @@
   // runner. These delayed tasks are de-duplicated. Must be called on the thread
   // this class was created on.
   void MaybeScheduleDelayedWork(const tracked_objects::Location& from_here,
+                                TimeDomain* requesting_time_domain,
                                 base::TimeTicks now,
-                                base::TimeDelta delay);
+                                base::TimeTicks run_time);
+
+  // Cancels a delayed task to process work at |run_time|, previously requested
+  // with MaybeScheduleDelayedWork.
+  void CancelDelayedWork(TimeDomain* requesting_time_domain,
+                         base::TimeTicks run_time);
 
   // Set the number of tasks executed in a single invocation of the task queue
   // manager. Increasing the batch size can reduce the overhead of yielding
@@ -149,11 +155,73 @@
   // need them, you can turn them off.
   void SetRecordTaskDelayHistograms(bool record_task_delay_histograms);
 
- private:
+ protected:
   friend class LazyNow;
   friend class internal::TaskQueueImpl;
   friend class TaskQueueManagerTest;
 
+  // Intermediate data structure, used to compute NextDelayedDoWork.
+  class NextTaskDelay {
+   public:
+    NextTaskDelay() : time_domain_(nullptr) {}
+
+    using AllowAnyDelayForTesting = int;
+
+    NextTaskDelay(base::TimeDelta delay, TimeDomain* time_domain)
+        : delay_(delay), time_domain_(time_domain) {
+      DCHECK_GT(delay, base::TimeDelta());
+      DCHECK(time_domain);
+    }
+
+    NextTaskDelay(base::TimeDelta delay,
+                  TimeDomain* time_domain,
+                  AllowAnyDelayForTesting)
+        : delay_(delay), time_domain_(time_domain) {
+      DCHECK(time_domain);
+    }
+
+    base::TimeDelta delay() const { return delay_; }
+    TimeDomain* time_domain() const { return time_domain_; }
+
+    bool operator>(const NextTaskDelay& other) const {
+      return delay_ > other.delay_;
+    }
+
+    bool operator<(const NextTaskDelay& other) const {
+      return delay_ < other.delay_;
+    }
+
+   private:
+    base::TimeDelta delay_;
+    TimeDomain* time_domain_;
+  };
+
+ private:
+  // Represents a scheduled delayed DoWork (if any). Only public for testing.
+  class NextDelayedDoWork {
+   public:
+    NextDelayedDoWork() : time_domain_(nullptr) {}
+    NextDelayedDoWork(base::TimeTicks run_time, TimeDomain* time_domain)
+        : run_time_(run_time), time_domain_(time_domain) {
+      DCHECK_NE(run_time, base::TimeTicks());
+      DCHECK(time_domain);
+    }
+
+    base::TimeTicks run_time() const { return run_time_; }
+    TimeDomain* time_domain() const { return time_domain_; }
+
+    void Clear() {
+      run_time_ = base::TimeTicks();
+      time_domain_ = nullptr;
+    }
+
+    explicit operator bool() const { return !run_time_.is_null(); }
+
+   private:
+    base::TimeTicks run_time_;
+    TimeDomain* time_domain_;
+  };
+
   class DeletionSentinel : public base::RefCounted<DeletionSentinel> {
    private:
     friend class base::RefCounted<DeletionSentinel>;
@@ -178,7 +246,7 @@
   void DoWork(bool delayed);
 
   // Post a DoWork continuation if |next_delay| is not empty.
-  void PostDoWorkContinuationLocked(base::Optional<base::TimeDelta> next_delay,
+  void PostDoWorkContinuationLocked(base::Optional<NextTaskDelay> next_delay,
                                     LazyNow* lazy_now,
                                     MoveableAutoLock&& lock);
 
@@ -216,7 +284,7 @@
 
   // Calls DelayTillNextTask on all time domains and returns the smallest delay
   // requested if any.
-  base::Optional<base::TimeDelta> ComputeDelayTillNextTaskLocked(
+  base::Optional<NextTaskDelay> ComputeDelayTillNextTaskLocked(
       LazyNow* lazy_now);
 
   void MaybeRecordTaskDelayHistograms(
@@ -293,7 +361,7 @@
     return any_thread_;
   }
 
-  base::TimeTicks next_scheduled_delayed_do_work_time_;
+  NextDelayedDoWork next_delayed_do_work_;
 
   bool record_task_delay_histograms_;
 
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_perftest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_perftest.cc
index a7f7454..a39f1b6 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_perftest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_perftest.cc
@@ -42,12 +42,17 @@
     return base::TimeDelta();  // Makes DoWork post an immediate continuation.
   }
 
-  void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) override {
+  void RequestWakeupAt(base::TimeTicks now, base::TimeTicks run_time) override {
     // De-dupe DoWorks.
     if (NumberOfScheduledWakeups() == 1u)
       RequestDoWork();
   }
 
+  void CancelWakeupAt(base::TimeTicks run_time) override {
+    // We didn't post a delayed task in RequestWakeupAt so there's no need to do
+    // anything here.
+  }
+
   const char* GetName() const override { return "PerfTestTimeDomain"; }
 
   DISALLOW_COPY_AND_ASSIGN(PerfTestTimeDomain);
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc
index fc290a3..238d8305 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc
@@ -32,9 +32,11 @@
 #include "platform/scheduler/base/work_queue_sets.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
+using testing::AnyNumber;
 using testing::Contains;
 using testing::ElementsAre;
 using testing::ElementsAreArray;
+using testing::Mock;
 using testing::Not;
 using testing::_;
 using blink::scheduler::internal::EnqueueOrder;
@@ -42,6 +44,21 @@
 namespace blink {
 namespace scheduler {
 
+class TaskQueueManagerForTest : public TaskQueueManager {
+ public:
+  TaskQueueManagerForTest(
+      scoped_refptr<TaskQueueManagerDelegate> delegate,
+      const char* tracing_category,
+      const char* disabled_by_default_tracing_category,
+      const char* disabled_by_default_verbose_tracing_category)
+      : TaskQueueManager(delegate,
+                         tracing_category,
+                         disabled_by_default_tracing_category,
+                         disabled_by_default_verbose_tracing_category) {}
+
+  using TaskQueueManager::NextTaskDelay;
+};
+
 class MessageLoopTaskRunner : public TaskQueueManagerDelegateForTest {
  public:
   static scoped_refptr<MessageLoopTaskRunner> Create(
@@ -85,7 +102,7 @@
         test_task_runner_.get(),
         base::MakeUnique<TestTimeSource>(now_src_.get()));
 
-    manager_ = base::MakeUnique<TaskQueueManager>(
+    manager_ = base::MakeUnique<TaskQueueManagerForTest>(
         main_task_runner_, "test.scheduler", "test.scheduler",
         "test.scheduler.debug");
 
@@ -106,7 +123,7 @@
     message_loop_.reset(new base::MessageLoop());
     // A null clock triggers some assertions.
     now_src_->Advance(base::TimeDelta::FromMicroseconds(1000));
-    manager_ = base::MakeUnique<TaskQueueManager>(
+    manager_ = base::MakeUnique<TaskQueueManagerForTest>(
         MessageLoopTaskRunner::Create(
             base::WrapUnique(new TestTimeSource(now_src_.get()))),
         "test.scheduler", "test.scheduler", "test.scheduler.debug");
@@ -120,12 +137,14 @@
     manager_->WakeupReadyDelayedQueues(&lazy_now);
   }
 
-  base::Optional<base::TimeDelta> ComputeDelayTillNextTask(LazyNow* lazy_now) {
+  using NextTaskDelay = TaskQueueManagerForTest::NextTaskDelay;
+
+  base::Optional<NextTaskDelay> ComputeDelayTillNextTask(LazyNow* lazy_now) {
     base::AutoLock lock(manager_->any_thread_lock_);
     return manager_->ComputeDelayTillNextTaskLocked(lazy_now);
   }
 
-  void PostDoWorkContinuation(base::Optional<base::TimeDelta> next_delay,
+  void PostDoWorkContinuation(base::Optional<NextTaskDelay> next_delay,
                               LazyNow* lazy_now) {
     MoveableAutoLock lock(manager_->any_thread_lock_);
     return manager_->PostDoWorkContinuationLocked(next_delay, lazy_now,
@@ -137,8 +156,8 @@
     return manager_->any_thread().immediate_do_work_posted_count;
   }
 
-  base::TimeTicks next_scheduled_delayed_do_work_time() const {
-    return manager_->next_scheduled_delayed_do_work_time_;
+  base::TimeTicks next_delayed_do_work_time() const {
+    return manager_->next_delayed_do_work_.run_time();
   }
 
   EnqueueOrder GetNextSequenceNumber() const {
@@ -175,7 +194,7 @@
   std::unique_ptr<base::SimpleTestTickClock> now_src_;
   scoped_refptr<TaskQueueManagerDelegateForTest> main_task_runner_;
   scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_;
-  std::unique_ptr<TaskQueueManager> manager_;
+  std::unique_ptr<TaskQueueManagerForTest> manager_;
   std::vector<scoped_refptr<internal::TaskQueueImpl>> runners_;
   TestTaskTimeObserver test_task_time_observer_;
 };
@@ -204,7 +223,7 @@
   TestCountUsesTimeSource* test_count_uses_time_source =
       new TestCountUsesTimeSource();
 
-  manager_ = base::MakeUnique<TaskQueueManager>(
+  manager_ = base::MakeUnique<TaskQueueManagerForTest>(
       MessageLoopTaskRunner::Create(
           base::WrapUnique(test_count_uses_time_source)),
       "test.scheduler", "test.scheduler", "test.scheduler.debug");
@@ -237,7 +256,7 @@
   TestCountUsesTimeSource* test_count_uses_time_source =
       new TestCountUsesTimeSource();
 
-  manager_ = base::MakeUnique<TaskQueueManager>(
+  manager_ = base::MakeUnique<TaskQueueManagerForTest>(
       MessageLoopTaskRunner::Create(
           base::WrapUnique(test_count_uses_time_source)),
       "test.scheduler", "test.scheduler", "test.scheduler.debug");
@@ -382,16 +401,11 @@
   EXPECT_TRUE(runners_[0]->HasPendingImmediateWork());
 
   // Move the task into the |delayed_work_queue|.
-  EXPECT_TRUE(runners_[0]->delayed_work_queue()->Empty());
-  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
-      runners_[0]->CreateQueueEnabledVoter();
-  voter->SetQueueEnabled(false);
-  test_task_runner_->RunUntilIdle();
+  WakeupReadyDelayedQueues(LazyNow(now_src_.get()));
   EXPECT_FALSE(runners_[0]->delayed_work_queue()->Empty());
   EXPECT_TRUE(runners_[0]->HasPendingImmediateWork());
 
   // Run the task, making the queue empty.
-  voter->SetQueueEnabled(true);
   test_task_runner_->RunUntilIdle();
   EXPECT_FALSE(runners_[0]->HasPendingImmediateWork());
 }
@@ -1676,6 +1690,137 @@
 }
 
 namespace {
+class MockTimeDomainObserver : public TimeDomain::Observer {
+ public:
+  ~MockTimeDomainObserver() override {}
+
+  MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*));
+  MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*));
+};
+}  // namespace
+
+TEST_F(TaskQueueManagerTest, TimeDomainObserver_ImmediateTask) {
+  Initialize(1u);
+
+  MockTimeDomainObserver observer;
+  std::unique_ptr<VirtualTimeDomain> domain(
+      new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks()));
+  manager_->RegisterTimeDomain(domain.get());
+  runners_[0]->SetTimeDomain(domain.get());
+
+  // We should get a notification when a task is posted on an empty queue.
+  EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(runners_[0].get()));
+  runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // But not subsequently.
+  EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(_)).Times(0);
+  runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // Unless the immediate work queue is emptied.
+  runners_[0]->ReloadImmediateWorkQueueIfEmpty();
+  EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(runners_[0].get()));
+  runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+
+  // Tidy up.
+  runners_[0]->UnregisterTaskQueue();
+  manager_->UnregisterTimeDomain(domain.get());
+}
+
+TEST_F(TaskQueueManagerTest, TimeDomainObserver_DelayedTask) {
+  Initialize(1u);
+
+  MockTimeDomainObserver observer;
+  std::unique_ptr<VirtualTimeDomain> domain(
+      new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks()));
+  manager_->RegisterTimeDomain(domain.get());
+  runners_[0]->SetTimeDomain(domain.get());
+
+  // We should get a notification when a delayed task is posted on an empty
+  // queue.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get()));
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromSeconds(10));
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // We should not get a notification for a longer delay.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0);
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromSeconds(100));
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // We should get a notification for a shorter delay.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get()));
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromSeconds(1));
+  Mock::VerifyAndClearExpectations(&observer);
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+      runners_[0]->CreateQueueEnabledVoter();
+  voter->SetQueueEnabled(false);
+
+  // When a queue has been enabled, we may get a notification if the
+  // TimeDomain's next scheduled wakeup has changed.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get()));
+  voter->SetQueueEnabled(true);
+
+  // Tidy up.
+  runners_[0]->UnregisterTaskQueue();
+  manager_->UnregisterTimeDomain(domain.get());
+}
+
+TEST_F(TaskQueueManagerTest, TimeDomainObserver_DelayedTaskMultipleQueues) {
+  Initialize(2u);
+
+  MockTimeDomainObserver observer;
+  std::unique_ptr<VirtualTimeDomain> domain(
+      new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks()));
+  manager_->RegisterTimeDomain(domain.get());
+  runners_[0]->SetTimeDomain(domain.get());
+  runners_[1]->SetTimeDomain(domain.get());
+
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())).Times(1);
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[1].get())).Times(1);
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromSeconds(1));
+  runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromSeconds(10));
+  testing::Mock::VerifyAndClearExpectations(&observer);
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter0 =
+      runners_[0]->CreateQueueEnabledVoter();
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter1 =
+      runners_[1]->CreateQueueEnabledVoter();
+
+  // Disabling a queue should not trigger a notification.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0);
+  voter0->SetQueueEnabled(false);
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // Re-enabling it should should also trigger a notification.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get()));
+  voter0->SetQueueEnabled(true);
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // Disabling a queue should not trigger a notification.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0);
+  voter1->SetQueueEnabled(false);
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // Re-enabling it should should trigger a notification.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[1].get()));
+  voter1->SetQueueEnabled(true);
+  Mock::VerifyAndClearExpectations(&observer);
+
+  // Tidy up.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(AnyNumber());
+  runners_[0]->UnregisterTaskQueue();
+  runners_[1]->UnregisterTaskQueue();
+  manager_->UnregisterTimeDomain(domain.get());
+}
+
+namespace {
 void ChromiumRunloopInspectionTask(
     scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner) {
   EXPECT_EQ(1u, test_task_runner->NumPendingTasks());
@@ -2321,10 +2466,6 @@
 TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask) {
   Initialize(2u);
 
-  std::unique_ptr<RealTimeDomain> domain2(new RealTimeDomain("test"));
-  manager_->RegisterTimeDomain(domain2.get());
-  runners_[1]->SetTimeDomain(domain2.get());
-
   LazyNow lazy_now(now_src_.get());
   EXPECT_FALSE(static_cast<bool>(ComputeDelayTillNextTask(&lazy_now)));
 
@@ -2332,27 +2473,23 @@
                                base::TimeDelta::FromSeconds(10));
 
   EXPECT_EQ(base::TimeDelta::FromSeconds(10),
-            ComputeDelayTillNextTask(&lazy_now).value());
+            ComputeDelayTillNextTask(&lazy_now)->delay());
 
   runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
                                base::TimeDelta::FromSeconds(15));
 
   EXPECT_EQ(base::TimeDelta::FromSeconds(10),
-            ComputeDelayTillNextTask(&lazy_now).value());
+            ComputeDelayTillNextTask(&lazy_now)->delay());
 
   runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
                                base::TimeDelta::FromSeconds(5));
 
   EXPECT_EQ(base::TimeDelta::FromSeconds(5),
-            ComputeDelayTillNextTask(&lazy_now).value());
+            ComputeDelayTillNextTask(&lazy_now)->delay());
 
   runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
 
-  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value());
-
-  // Tidy up.
-  runners_[1]->UnregisterTaskQueue();
-  manager_->UnregisterTimeDomain(domain2.get());
+  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay());
 }
 
 TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask_Disabled) {
@@ -2385,7 +2522,7 @@
   runners_[0]->InsertFence(TaskQueue::InsertFencePosition::NOW);
 
   LazyNow lazy_now(now_src_.get());
-  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value());
+  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay());
 }
 
 TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask_DelayedTaskReady) {
@@ -2397,44 +2534,63 @@
   now_src_->Advance(base::TimeDelta::FromSeconds(10));
 
   LazyNow lazy_now(now_src_.get());
-  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value());
+  EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay());
 }
 
 TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_NoMoreWork) {
   Initialize(1u);
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::Optional<base::TimeDelta>(), &lazy_now);
+  PostDoWorkContinuation(base::Optional<NextTaskDelay>(), &lazy_now);
 
   EXPECT_EQ(0u, test_task_runner_->NumPendingTasks());
   EXPECT_EQ(0, immediate_do_work_posted_count());
-  EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null());
+  EXPECT_TRUE(next_delayed_do_work_time().is_null());
 }
 
 TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_ImmediateWork) {
   Initialize(1u);
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta(), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(), &lazy_now);
 
   EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
   EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(1, immediate_do_work_posted_count());
-  EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null());
+  EXPECT_TRUE(next_delayed_do_work_time().is_null());
+}
+
+TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWorkInThePast) {
+  Initialize(1u);
+
+  LazyNow lazy_now(now_src_.get());
+  // Note this isn't supposed to happen in practice.
+  PostDoWorkContinuation(
+      NextTaskDelay(base::TimeDelta::FromSeconds(-1),
+                    runners_[0]->GetTimeDomain(),
+                    NextTaskDelay::AllowAnyDelayForTesting()),
+      &lazy_now);
+
+  EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
+  EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime());
+  EXPECT_EQ(1, immediate_do_work_posted_count());
+  EXPECT_TRUE(next_delayed_do_work_time().is_null());
 }
 
 TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWork) {
   Initialize(1u);
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1),
+                                       runners_[0]->GetTimeDomain()),
+                         &lazy_now);
 
   EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
   EXPECT_EQ(base::TimeDelta::FromSeconds(1),
             test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(0, immediate_do_work_posted_count());
   EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(1),
-            next_scheduled_delayed_do_work_time());
+            next_delayed_do_work_time());
 }
 
 TEST_F(TaskQueueManagerTest,
@@ -2447,29 +2603,35 @@
   EXPECT_EQ(1, immediate_do_work_posted_count());
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1),
+                                       runners_[0]->GetTimeDomain()),
+                         &lazy_now);
 
   // Test that a delayed task didn't get posted.
   EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
   EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(1, immediate_do_work_posted_count());
-  EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null());
+  EXPECT_TRUE(next_delayed_do_work_time().is_null());
 }
 
 TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWorkTimeChanges) {
   Initialize(1u);
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1),
+                                       runners_[0]->GetTimeDomain()),
+                         &lazy_now);
 
   EXPECT_TRUE(test_task_runner_->HasPendingTasks());
   EXPECT_EQ(0, immediate_do_work_posted_count());
   EXPECT_EQ(base::TimeDelta::FromSeconds(1),
             test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(1),
-            next_scheduled_delayed_do_work_time());
+            next_delayed_do_work_time());
 
-  PostDoWorkContinuation(base::TimeDelta::FromSeconds(10), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(10),
+                                       runners_[0]->GetTimeDomain()),
+                         &lazy_now);
 
   // This should have resulted in the previous task getting canceled and a new
   // one getting posted.
@@ -2480,7 +2642,7 @@
             test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(0, immediate_do_work_posted_count());
   EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(10),
-            next_scheduled_delayed_do_work_time());
+            next_delayed_do_work_time());
 }
 
 TEST_F(TaskQueueManagerTest,
@@ -2488,18 +2650,20 @@
   Initialize(1u);
 
   LazyNow lazy_now(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1),
+                                       runners_[0]->GetTimeDomain()),
+                         &lazy_now);
 
   now_src_->Advance(base::TimeDelta::FromSeconds(1));
   lazy_now = LazyNow(now_src_.get());
-  PostDoWorkContinuation(base::TimeDelta(), &lazy_now);
+  PostDoWorkContinuation(NextTaskDelay(), &lazy_now);
 
   // Because the delayed DoWork was pending we don't expect an immediate DoWork
   // to get posted.
   EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
   EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime());
   EXPECT_EQ(0, immediate_do_work_posted_count());
-  EXPECT_EQ(lazy_now.Now(), next_scheduled_delayed_do_work_time());
+  EXPECT_EQ(lazy_now.Now(), next_delayed_do_work_time());
 }
 
 namespace {
@@ -2600,5 +2764,122 @@
   EXPECT_TRUE(runners_[0]->CouldTaskRun(enqueue_order));
 }
 
+TEST_F(TaskQueueManagerTest, DelayedDoWorkNotPostedForDisabledQueue) {
+  Initialize(1u);
+
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromMilliseconds(1));
+  ASSERT_TRUE(test_task_runner_->HasPendingTasks());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(1),
+            test_task_runner_->DelayToNextTaskTime());
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+      runners_[0]->CreateQueueEnabledVoter();
+  voter->SetQueueEnabled(false);
+
+  EXPECT_TRUE(test_task_runner_->HasPendingTasks());
+  test_task_runner_->RemoveCancelledTasks();
+  EXPECT_FALSE(test_task_runner_->HasPendingTasks());
+
+  voter->SetQueueEnabled(true);
+  ASSERT_TRUE(test_task_runner_->HasPendingTasks());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(1),
+            test_task_runner_->DelayToNextTaskTime());
+}
+
+TEST_F(TaskQueueManagerTest, DisablingQueuesChangesDelayTillNextDoWork) {
+  Initialize(3u);
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromMilliseconds(1));
+  runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromMilliseconds(10));
+  runners_[2]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromMilliseconds(100));
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter0 =
+      runners_[0]->CreateQueueEnabledVoter();
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter1 =
+      runners_[1]->CreateQueueEnabledVoter();
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 =
+      runners_[2]->CreateQueueEnabledVoter();
+
+  ASSERT_TRUE(test_task_runner_->HasPendingTasks());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(1),
+            test_task_runner_->DelayToNextTaskTime());
+
+  voter0->SetQueueEnabled(false);
+  test_task_runner_->RemoveCancelledTasks();
+  ASSERT_TRUE(test_task_runner_->HasPendingTasks());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(10),
+            test_task_runner_->DelayToNextTaskTime());
+
+  voter1->SetQueueEnabled(false);
+  test_task_runner_->RemoveCancelledTasks();
+  ASSERT_TRUE(test_task_runner_->HasPendingTasks());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(100),
+            test_task_runner_->DelayToNextTaskTime());
+
+  voter2->SetQueueEnabled(false);
+  test_task_runner_->RemoveCancelledTasks();
+  EXPECT_FALSE(test_task_runner_->HasPendingTasks());
+}
+
+TEST_F(TaskQueueManagerTest, GetNextScheduledWakeUp) {
+  Initialize(1u);
+
+  EXPECT_EQ(base::nullopt, runners_[0]->GetNextScheduledWakeUp());
+
+  base::TimeTicks start_time = manager_->delegate()->NowTicks();
+  base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10);
+  base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(2);
+
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay1);
+  EXPECT_EQ(start_time + delay1, runners_[0]->GetNextScheduledWakeUp());
+
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay2);
+  EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp());
+
+  // We don't have wakeups scheduled for disabled queues.
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+      runners_[0]->CreateQueueEnabledVoter();
+  voter->SetQueueEnabled(false);
+  EXPECT_EQ(base::nullopt, runners_[0]->GetNextScheduledWakeUp());
+
+  voter->SetQueueEnabled(true);
+  EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp());
+
+  // Immediate tasks shouldn't make any difference.
+  runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask));
+  EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp());
+
+  // Neither should fences.
+  runners_[0]->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME);
+  EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp());
+}
+
+TEST_F(TaskQueueManagerTest, SetTimeDomainForDisabledQueue) {
+  Initialize(1u);
+
+  runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask),
+                               base::TimeDelta::FromMilliseconds(1));
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+      runners_[0]->CreateQueueEnabledVoter();
+  voter->SetQueueEnabled(false);
+
+  MockTimeDomainObserver observer;
+  // We should not get a notification for a disabled queue.
+  EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0);
+
+  std::unique_ptr<VirtualTimeDomain> domain(
+      new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks()));
+  manager_->RegisterTimeDomain(domain.get());
+  runners_[0]->SetTimeDomain(domain.get());
+
+  // Tidy up.
+  runners_[0]->UnregisterTaskQueue();
+  manager_->UnregisterTimeDomain(domain.get());
+}
+
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
index 2e12e70..cbc6e9d 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
@@ -408,6 +408,8 @@
   MockObserver mock_observer;
   selector.SetTaskQueueSelectorObserver(&mock_observer);
 
+  EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(1);
+
   scoped_refptr<TaskQueueImpl> task_queue(NewTaskQueueWithBlockReporting());
   selector.AddQueue(task_queue.get());
   std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
@@ -467,6 +469,8 @@
   EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue));
   testing::Mock::VerifyAndClearExpectations(&mock_observer);
 
+  EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(2);
+
   voter.reset();
   selector.EnableQueue(task_queue.get());
 
diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc b/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
index 919543e9..9f8c909 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain.cc
@@ -36,6 +36,7 @@
                                      base::TimeTicks now) {
   DCHECK(main_thread_checker_.CalledOnValidThread());
   DCHECK_EQ(queue->GetTimeDomain(), this);
+  DCHECK(queue->IsQueueEnabled());
   // We only want to store a single wakeup per queue, so we need to remove any
   // previously registered wake up for |queue|.
   if (queue->heap_handle().IsValid()) {
@@ -52,10 +53,8 @@
   queue->set_scheduled_time_domain_wakeup(delayed_run_time);
 
   // If |queue| is the first wakeup then request the wakeup.
-  if (delayed_wakeup_queue_.min().queue == queue) {
-    base::TimeDelta delay = std::max(base::TimeDelta(), delayed_run_time - now);
-    RequestWakeup(now, delay);
-  }
+  if (delayed_wakeup_queue_.min().queue == queue)
+    RequestWakeupAt(now, delayed_run_time);
 
   if (observer_)
     observer_->OnTimeDomainHasDelayedWork(queue);
@@ -75,9 +74,18 @@
     return;
 
   DCHECK_NE(queue->scheduled_time_domain_wakeup(), base::TimeTicks());
+  DCHECK(!delayed_wakeup_queue_.empty());
+  base::TimeTicks prev_first_wakeup = delayed_wakeup_queue_.min().time;
 
   // O(log n)
   delayed_wakeup_queue_.erase(queue->heap_handle());
+
+  if (delayed_wakeup_queue_.empty()) {
+    CancelWakeupAt(prev_first_wakeup);
+  } else if (prev_first_wakeup != delayed_wakeup_queue_.min().time) {
+    CancelWakeupAt(prev_first_wakeup);
+    RequestWakeupAt(Now(), delayed_wakeup_queue_.min().time);
+  }
 }
 
 void TimeDomain::WakeupReadyDelayedQueues(LazyNow* lazy_now) {
diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain.h b/third_party/WebKit/Source/platform/scheduler/base/time_domain.h
index 09e3f70a..c2b828a8b 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/time_domain.h
+++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain.h
@@ -111,12 +111,18 @@
   virtual void OnRegisterWithTaskQueueManager(
       TaskQueueManager* task_queue_manager) = 0;
 
-  // The implementaion will secedule task processing to run with |delay| with
-  // respect to the TimeDomain's time source.  Always called on the main thread.
+  // The implementation will schedule task processing to run at time |run_time|
+  // within the TimeDomain's time line. Only called from the main thread.
   // NOTE this is only called by ScheduleDelayedWork if the scheduled runtime
   // is sooner than any previously sheduled work or if there is no other
   // scheduled work.
-  virtual void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) = 0;
+  virtual void RequestWakeupAt(base::TimeTicks now,
+                               base::TimeTicks run_time) = 0;
+
+  // The implementation will cancel a wake up previously requested by
+  // RequestWakeupAt.  It's expected this will be a NOP for most virtual time
+  // domains.
+  virtual void CancelWakeupAt(base::TimeTicks run_time) = 0;
 
   // For implementation specific tracing.
   virtual void AsValueIntoInternal(
diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc
index f8eaf85..c8b6acb 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc
@@ -53,7 +53,10 @@
   void OnRegisterWithTaskQueueManager(
       TaskQueueManager* task_queue_manager) override {}
 
-  MOCK_METHOD2(RequestWakeup, void(base::TimeTicks now, base::TimeDelta delay));
+  MOCK_METHOD2(RequestWakeupAt,
+               void(base::TimeTicks now, base::TimeTicks run_time));
+
+  MOCK_METHOD1(CancelWakeupAt, void(base::TimeTicks run_time));
 
   void SetNow(base::TimeTicks now) { now_ = now; }
 
@@ -89,7 +92,7 @@
 TEST_F(TimeDomainTest, ScheduleDelayedWork) {
   base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10);
   base::TimeTicks delayed_runtime = time_domain_->Now() + delay;
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime));
   base::TimeTicks now = time_domain_->Now();
   time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay, now);
 
@@ -100,6 +103,9 @@
   TaskQueue* next_task_queue;
   EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
   EXPECT_EQ(task_queue_.get(), next_task_queue);
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber());
 }
 
 TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) {
@@ -107,7 +113,7 @@
   base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100);
   base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1;
   base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2;
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime1));
   base::TimeTicks now = time_domain_->Now();
   time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, now);
 
@@ -119,14 +125,17 @@
 
   // Now scheduler a later wakeup, which should replace the previously requested
   // one.
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay2));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime2));
   time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, now);
 
   EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
   EXPECT_EQ(delayed_runtime2, next_scheduled_runtime);
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber());
 }
 
-TEST_F(TimeDomainTest, RequestWakeup_OnlyCalledForEarlierTasks) {
+TEST_F(TimeDomainTest, RequestWakeupAt_OnlyCalledForEarlierTasks) {
   scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr(
       new internal::TaskQueueImpl(nullptr, time_domain_.get(),
                                   TaskQueue::Spec(TaskQueue::QueueType::TEST),
@@ -147,23 +156,27 @@
   base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30);
   base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1);
 
-  // RequestWakeup should always be called if there are no other wakeups.
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1));
+  // RequestWakeupAt should always be called if there are no other wakeups.
   base::TimeTicks now = time_domain_->Now();
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay1));
   time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay1, now);
 
   Mock::VerifyAndClearExpectations(time_domain_.get());
 
-  // RequestWakeup should not be called when scheduling later tasks.
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)).Times(0);
+  // RequestWakeupAt should not be called when scheduling later tasks.
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0);
   time_domain_->ScheduleDelayedWork(task_queue2.get(), now + delay2, now);
   time_domain_->ScheduleDelayedWork(task_queue3.get(), now + delay3, now);
 
-  // RequestWakeup should be called when scheduling earlier tasks.
+  // RequestWakeupAt should be called when scheduling earlier tasks.
   Mock::VerifyAndClearExpectations(time_domain_.get());
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay4));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay4));
   time_domain_->ScheduleDelayedWork(task_queue4.get(), now + delay4, now);
 
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _));
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(2);
   task_queue2->UnregisterTaskQueue();
   task_queue3->UnregisterTaskQueue();
   task_queue4->UnregisterTaskQueue();
@@ -175,31 +188,40 @@
                                   TaskQueue::Spec(TaskQueue::QueueType::TEST),
                                   "test.category", "test.category"));
 
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)).Times(1);
   base::TimeTicks now = time_domain_->Now();
-  time_domain_->ScheduleDelayedWork(
-      task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now);
-  time_domain_->ScheduleDelayedWork(
-      task_queue2_.get(), now + base::TimeDelta::FromMilliseconds(100), now);
+  base::TimeTicks wakeup1 = now + base::TimeDelta::FromMilliseconds(10);
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup1)).Times(1);
+  time_domain_->ScheduleDelayedWork(task_queue_.get(), wakeup1, now);
+  base::TimeTicks wakeup2 = now + base::TimeDelta::FromMilliseconds(100);
+  time_domain_->ScheduleDelayedWork(task_queue2_.get(), wakeup2, now);
 
   TaskQueue* next_task_queue;
   EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
   EXPECT_EQ(task_queue_.get(), next_task_queue);
 
+  testing::Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup1)).Times(1);
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup2)).Times(1);
+
   time_domain_->UnregisterQueue(task_queue_.get());
   task_queue_ = scoped_refptr<internal::TaskQueueImpl>();
   EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
   EXPECT_EQ(task_queue2_.get(), next_task_queue);
 
+  testing::Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup2)).Times(1);
+
   time_domain_->UnregisterQueue(task_queue2_.get());
   EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
 }
 
 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) {
   base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50);
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay));
   base::TimeTicks now = time_domain_->Now();
   base::TimeTicks delayed_runtime = now + delay;
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime));
   time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now);
 
   base::TimeTicks next_run_time;
@@ -219,17 +241,62 @@
 
 TEST_F(TimeDomainTest, CancelDelayedWork) {
   base::TimeTicks now = time_domain_->Now();
-  time_domain_->ScheduleDelayedWork(
-      task_queue_.get(), now + base::TimeDelta::FromMilliseconds(20), now);
+  base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20);
+
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time));
+  time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time, now);
 
   TaskQueue* next_task_queue;
   EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
   EXPECT_EQ(task_queue_.get(), next_task_queue);
 
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time));
   time_domain_->CancelDelayedWork(task_queue_.get());
   EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
 }
 
+TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) {
+  scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr(
+      new internal::TaskQueueImpl(nullptr, time_domain_.get(),
+                                  TaskQueue::Spec(TaskQueue::QueueType::TEST),
+                                  "test.category", "test.category"));
+
+  base::TimeTicks now = time_domain_->Now();
+  base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20);
+  base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40);
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1));
+  time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time1, now);
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0);
+  time_domain_->ScheduleDelayedWork(task_queue2.get(), run_time2, now);
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+
+  TaskQueue* next_task_queue;
+  EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
+  EXPECT_EQ(task_queue_.get(), next_task_queue);
+
+  base::TimeTicks next_run_time;
+  ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time));
+  EXPECT_EQ(run_time1, next_run_time);
+
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time1));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time2));
+  time_domain_->CancelDelayedWork(task_queue_.get());
+  EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue));
+  EXPECT_EQ(task_queue2.get(), next_task_queue);
+
+  ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time));
+  EXPECT_EQ(run_time2, next_run_time);
+
+  Mock::VerifyAndClearExpectations(time_domain_.get());
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(AnyNumber());
+  EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber());
+
+  // Tidy up.
+  task_queue2->UnregisterTaskQueue();
+}
+
 namespace {
 class MockObserver : public TimeDomain::Observer {
  public:
@@ -257,7 +324,7 @@
 
 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) {
   EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get()));
-  EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _));
+  EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _));
   base::TimeTicks now = time_domain_->Now();
   time_domain_->ScheduleDelayedWork(
       task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now);
diff --git a/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.cc b/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.cc
index a90b3be2..56c7d37 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.cc
@@ -34,13 +34,17 @@
   return now_;
 }
 
-void VirtualTimeDomain::RequestWakeup(base::TimeTicks now,
-                                      base::TimeDelta delay) {
+void VirtualTimeDomain::RequestWakeupAt(base::TimeTicks now,
+                                        base::TimeTicks run_time) {
   // We don't need to do anything here because the caller of AdvanceTo is
   // responsible for calling TaskQueueManager::MaybeScheduleImmediateWork if
   // needed.
 }
 
+void VirtualTimeDomain::CancelWakeupAt(base::TimeTicks run_time) {
+  // We ignore this because RequestWakeupAt is a NOP.
+}
+
 base::Optional<base::TimeDelta> VirtualTimeDomain::DelayTillNextTask(
     LazyNow* lazy_now) {
   return base::nullopt;
diff --git a/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.h b/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.h
index a841226..a1503f0 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.h
+++ b/third_party/WebKit/Source/platform/scheduler/base/virtual_time_domain.h
@@ -32,7 +32,8 @@
  protected:
   void OnRegisterWithTaskQueueManager(
       TaskQueueManager* task_queue_manager) override;
-  void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) override;
+  void RequestWakeupAt(base::TimeTicks now, base::TimeTicks run_time) override;
+  void CancelWakeupAt(base::TimeTicks run_time) override;
   void AsValueIntoInternal(
       base::trace_event::TracedValue* state) const override;
 
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.cc b/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.cc
index 04dd639..57a44ed 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.cc
@@ -24,14 +24,18 @@
   return base::TimeDelta();  // Makes DoWork post an immediate continuation.
 }
 
-void AutoAdvancingVirtualTimeDomain::RequestWakeup(base::TimeTicks now,
-                                                   base::TimeDelta delay) {
+void AutoAdvancingVirtualTimeDomain::RequestWakeupAt(base::TimeTicks now,
+                                                     base::TimeTicks run_time) {
   // Avoid posting pointless DoWorks.  I.e. if the time domain has more then one
   // scheduled wake up then we don't need to do anything.
   if (can_advance_virtual_time_ && NumberOfScheduledWakeups() == 1u)
     RequestDoWork();
 }
 
+void AutoAdvancingVirtualTimeDomain::CancelWakeupAt(base::TimeTicks run_time) {
+  // We ignore this because RequestWakeupAt doesn't post a delayed task.
+}
+
 void AutoAdvancingVirtualTimeDomain::SetCanAdvanceVirtualTime(
     bool can_advance_virtual_time) {
   can_advance_virtual_time_ = can_advance_virtual_time;
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h b/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h
index 0ca186d..9cdd5d8 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/auto_advancing_virtual_time_domain.h
@@ -28,7 +28,8 @@
 
   // TimeDomain implementation:
   base::Optional<base::TimeDelta> DelayTillNextTask(LazyNow* lazy_now) override;
-  void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) override;
+  void RequestWakeupAt(base::TimeTicks now, base::TimeTicks run_time) override;
+  void CancelWakeupAt(base::TimeTicks run_time) override;
   const char* GetName() const override;
 
   // Controls whether or not virtual time is allowed to advance, when the
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc
index d5fdb53..79cef1c 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc
@@ -979,5 +979,41 @@
                                      base::TimeDelta::FromMilliseconds(300)));
 }
 
+TEST_F(TaskQueueThrottlerTest, DisabledQueueThenEnabledQueue) {
+  std::vector<base::TimeTicks> run_times;
+
+  scoped_refptr<TaskQueue> second_queue =
+      scheduler_->NewTimerTaskRunner(TaskQueue::QueueType::TEST);
+
+  task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get());
+  task_queue_throttler_->IncreaseThrottleRefCount(second_queue.get());
+
+  timer_queue_->PostDelayedTask(FROM_HERE,
+                                base::Bind(&TestTask, &run_times, clock_.get()),
+                                base::TimeDelta::FromMilliseconds(100));
+  second_queue->PostDelayedTask(FROM_HERE,
+                                base::Bind(&TestTask, &run_times, clock_.get()),
+                                base::TimeDelta::FromMilliseconds(200));
+
+  std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+      timer_queue_->CreateQueueEnabledVoter();
+  voter->SetQueueEnabled(false);
+
+  clock_->Advance(base::TimeDelta::FromMilliseconds(250));
+
+  mock_task_runner_->RunUntilIdle();
+
+  EXPECT_THAT(run_times, ElementsAre(base::TimeTicks() +
+                                     base::TimeDelta::FromMilliseconds(1000)));
+
+  voter->SetQueueEnabled(true);
+  mock_task_runner_->RunUntilIdle();
+
+  EXPECT_THAT(
+      run_times,
+      ElementsAre(base::TimeTicks() + base::TimeDelta::FromMilliseconds(1000),
+                  base::TimeTicks() + base::TimeDelta::FromMilliseconds(2000)));
+}
+
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.cc b/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.cc
index a859d09..348d034 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.cc
@@ -17,12 +17,16 @@
   return "ThrottledTimeDomain";
 }
 
-void ThrottledTimeDomain::RequestWakeup(base::TimeTicks now,
-                                        base::TimeDelta delay) {
+void ThrottledTimeDomain::RequestWakeupAt(base::TimeTicks now,
+                                          base::TimeTicks run_time) {
   // We assume the owner (i.e. TaskQueueThrottler) will manage wakeups on our
   // behalf.
 }
 
+void ThrottledTimeDomain::CancelWakeupAt(base::TimeTicks run_time) {
+  // We ignore this because RequestWakeupAt is a NOP.
+}
+
 base::Optional<base::TimeDelta> ThrottledTimeDomain::DelayTillNextTask(
     LazyNow* lazy_now) {
   base::TimeTicks next_run_time;
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.h b/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.h
index c9d73fa..4faaf5b 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.h
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/throttled_time_domain.h
@@ -21,7 +21,8 @@
 
   // TimeDomain implementation:
   const char* GetName() const override;
-  void RequestWakeup(base::TimeTicks now, base::TimeDelta delay) override;
+  void RequestWakeupAt(base::TimeTicks now, base::TimeTicks run_time) override;
+  void CancelWakeupAt(base::TimeTicks run_time) override;
   base::Optional<base::TimeDelta> DelayTillNextTask(LazyNow* lazy_now) override;
 
   using TimeDomain::WakeupReadyDelayedQueues;
diff --git a/third_party/WebKit/public/platform/scheduler/base/task_queue.h b/third_party/WebKit/public/platform/scheduler/base/task_queue.h
index 07335fb0..c57d237 100644
--- a/third_party/WebKit/public/platform/scheduler/base/task_queue.h
+++ b/third_party/WebKit/public/platform/scheduler/base/task_queue.h
@@ -150,8 +150,9 @@
   // NOTE: this must be called on the thread this TaskQueue was created by.
   virtual bool HasPendingImmediateWork() const = 0;
 
-  // Returns requested run time of next delayed task, which is not ready
-  // to run. If there are no such tasks, returns base::nullopt.
+  // Returns requested run time of next scheduled wakeup for a delayed task
+  // which is not ready to run. If there are no such tasks or the queue is
+  // disabled (by a QueueEnabledVoter) it returns base::nullopt.
   // NOTE: this must be called on the thread this TaskQueue was created by.
   virtual base::Optional<base::TimeTicks> GetNextScheduledWakeUp() = 0;
 
diff --git a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py
index 5986c95..38cfb11 100755
--- a/tools/gn/bootstrap/bootstrap.py
+++ b/tools/gn/bootstrap/bootstrap.py
@@ -154,6 +154,13 @@
 
   os.remove(temp_path)
 
+def write_build_date_header(root_gen_dir):
+  check_call([
+       os.path.join(SRC_ROOT, 'build', 'write_build_date_header.py'),
+       os.path.join(root_gen_dir, 'base/generated_build_date.h'),
+       'default',
+  ])
+
 def build_gn_with_ninja_manually(tempdir, options):
   root_gen_dir = os.path.join(tempdir, 'gen')
   mkdir_p(root_gen_dir)
@@ -167,6 +174,8 @@
           'ENABLE_MEMORY_TASK_PROFILER': 'false'
       })
 
+  write_build_date_header(root_gen_dir)
+
   if is_mac:
     # //base/build_time.cc needs base/generated_build_date.h,
     # and this file is only included for Mac builds.
@@ -374,6 +383,7 @@
       'base/at_exit.cc',
       'base/base_paths.cc',
       'base/base_switches.cc',
+      'base/build_time.cc',
       'base/callback_internal.cc',
       'base/command_line.cc',
       'base/debug/activity_tracker.cc',
@@ -382,6 +392,7 @@
       'base/debug/stack_trace.cc',
       'base/debug/task_annotator.cc',
       'base/environment.cc',
+      'base/feature_list.cc',
       'base/files/file.cc',
       'base/files/file_descriptor_watcher_posix.cc',
       'base/files/file_enumerator.cc',
@@ -413,6 +424,8 @@
       'base/message_loop/message_pump.cc',
       'base/message_loop/message_pump_default.cc',
       'base/metrics/bucket_ranges.cc',
+      'base/metrics/field_trial.cc',
+      'base/metrics/field_trial_param_associator.cc',
       'base/metrics/histogram.cc',
       'base/metrics/histogram_base.cc',
       'base/metrics/histogram_samples.cc',
@@ -428,12 +441,14 @@
       'base/pending_task.cc',
       'base/pickle.cc',
       'base/process/kill.cc',
+      'base/process/memory.cc',
       'base/process/process_handle.cc',
       'base/process/process_iterator.cc',
       'base/process/process_metrics.cc',
       'base/profiler/scoped_profile.cc',
       'base/profiler/scoped_tracker.cc',
       'base/profiler/tracked_time.cc',
+      'base/rand_util.cc',
       'base/run_loop.cc',
       'base/sequence_token.cc',
       'base/sequence_checker_impl.cc',
@@ -534,11 +549,13 @@
         'base/files/memory_mapped_file_posix.cc',
         'base/message_loop/message_pump_libevent.cc',
         'base/posix/file_descriptor_shuffle.cc',
+        'base/posix/global_descriptors.cc',
         'base/posix/safe_strerror.cc',
         'base/process/kill_posix.cc',
         'base/process/process_handle_posix.cc',
         'base/process/process_metrics_posix.cc',
         'base/process/process_posix.cc',
+        'base/rand_util_posix.cc',
         'base/strings/string16.cc',
         'base/synchronization/condition_variable_posix.cc',
         'base/synchronization/lock_impl_posix.cc',
@@ -590,6 +607,7 @@
         'base/memory/shared_memory_posix.cc',
         'base/nix/xdg_util.cc',
         'base/process/internal_linux.cc',
+        'base/process/memory_linux.cc',
         'base/process/process_handle_linux.cc',
         'base/process/process_iterator_linux.cc',
         'base/process/process_linux.cc',
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index f7fd8937..242b9f62 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -91447,6 +91447,9 @@
   <int value="1823" label="RtcpMuxPolicyNegotiate"/>
   <int value="1824" label="DOMClobberedVariableAccessed"/>
   <int value="1825" label="HTMLDocumentCreateProcessingInstruction"/>
+  <int value="1826" label="FetchResponseConstructionWithStream"/>
+  <int value="1827" label="LocationOrigin"/>
+  <int value="1828" label="DocumentOrigin"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
diff --git a/ui/base/ime/dummy_text_input_client.cc b/ui/base/ime/dummy_text_input_client.cc
index 60ae481..91c3b3b 100644
--- a/ui/base/ime/dummy_text_input_client.cc
+++ b/ui/base/ime/dummy_text_input_client.cc
@@ -9,35 +9,28 @@
 namespace ui {
 
 DummyTextInputClient::DummyTextInputClient()
-    : text_input_type_(TEXT_INPUT_TYPE_NONE),
-      insert_char_count_(0),
-      insert_text_count_(0),
-      set_composition_count_(0) {}
+    : text_input_type_(TEXT_INPUT_TYPE_NONE), insert_char_count_(0) {}
 
 DummyTextInputClient::DummyTextInputClient(TextInputType text_input_type)
-    : text_input_type_(text_input_type),
-      insert_char_count_(0),
-      insert_text_count_(0),
-      set_composition_count_(0) {}
+    : text_input_type_(text_input_type), insert_char_count_(0) {}
 
 DummyTextInputClient::~DummyTextInputClient() {
 }
 
 void DummyTextInputClient::SetCompositionText(
     const CompositionText& composition) {
-  ++set_composition_count_;
-  last_composition_.CopyFrom(composition);
+  composition_history_.push_back(composition);
 }
 
 void DummyTextInputClient::ConfirmCompositionText() {
 }
 
 void DummyTextInputClient::ClearCompositionText() {
+  SetCompositionText(CompositionText());
 }
 
 void DummyTextInputClient::InsertText(const base::string16& text) {
-  ++insert_text_count_;
-  last_insert_text_ = text;
+  insert_text_history_.push_back(text);
 }
 
 void DummyTextInputClient::InsertChar(const KeyEvent& event) {
diff --git a/ui/base/ime/dummy_text_input_client.h b/ui/base/ime/dummy_text_input_client.h
index 41c65e4..6b78aab3 100644
--- a/ui/base/ime/dummy_text_input_client.h
+++ b/ui/base/ime/dummy_text_input_client.h
@@ -52,10 +52,12 @@
 
   int insert_char_count() const { return insert_char_count_; }
   base::char16 last_insert_char() const { return last_insert_char_; }
-  int insert_text_count() const { return insert_text_count_; }
-  base::string16 last_insert_text() const { return last_insert_text_; }
-  int set_composition_count() const { return set_composition_count_; }
-  const CompositionText& last_composition() const { return last_composition_; }
+  const std::vector<base::string16>& insert_text_history() const {
+    return insert_text_history_;
+  }
+  const std::vector<CompositionText>& composition_history() const {
+    return composition_history_;
+  }
 
   TextInputType text_input_type_;
 
@@ -63,11 +65,9 @@
 
  private:
   int insert_char_count_;
-  int insert_text_count_;
-  int set_composition_count_;
   base::char16 last_insert_char_;
-  base::string16 last_insert_text_;
-  CompositionText last_composition_;
+  std::vector<base::string16> insert_text_history_;
+  std::vector<CompositionText> composition_history_;
 };
 
 }  // namespace ui
diff --git a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
index 368e189..902d0b3 100644
--- a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
+++ b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
@@ -178,8 +178,7 @@
  * @param {ThumbnailLoader.FillMode} fillMode Fill mode.
  * @param {ThumbnailLoader.OptimizationMode=} opt_optimizationMode Optimization
  *     for downloading thumbnails. By default optimizations are disabled.
- * @param {function(Image, Object)=} opt_onSuccess Success callback,
- *     accepts the image and the transform.
+ * @param {function(Image)=} opt_onSuccess Success callback, accepts the image.
  * @param {function()=} opt_onError Error callback.
  * @param {function()=} opt_onGeneric Callback for generic image used.
  * @param {number=} opt_autoFillThreshold Auto fill threshold.
@@ -209,7 +208,7 @@
     this.attachImage(assert(box), fillMode, opt_autoFillThreshold,
                      opt_boxWidth, opt_boxHeight);
     if (opt_onSuccess)
-      opt_onSuccess(this.image_, this.transform_);
+      opt_onSuccess(this.image_);
   }.bind(this);
   this.image_.onerror = function() {
     if (opt_onError)
@@ -242,7 +241,8 @@
         maxHeight: ThumbnailLoader.THUMBNAIL_MAX_HEIGHT,
         cache: true,
         priority: this.priority_,
-        timestamp: modificationTime
+        timestamp: modificationTime,
+        orientation: this.transform_
       },
       function() {},
       function() {
@@ -264,8 +264,7 @@
  * metadata, this fetches it from it. Otherwise, this tries to load it from
  * thumbnail loader.
  * Compared with ThumbnailLoader.load, this method does not provide a
- * functionality to fit image to a box. This method is responsible for rotating
- * and flipping a thumbnail.
+ * functionality to fit image to a box.
  *
  * @param {ThumbnailLoader.FillMode} fillMode Only FIT and OVER_FILL is
  *     supported. This takes effect only when external thumbnail source is used.
@@ -290,7 +289,8 @@
       maxHeight: ThumbnailLoader.THUMBNAIL_MAX_HEIGHT,
       cache: true,
       priority: this.priority_,
-      timestamp: modificationTime
+      timestamp: modificationTime,
+      orientation: this.transform_
     };
 
     if (fillMode === ThumbnailLoader.FillMode.OVER_FILL) {
@@ -314,89 +314,10 @@
             reject(result);
         },
         options);
-  }.bind(this)).then(function(result) {
-    if (!this.transform_)
-      return result;
-    else
-      return this.applyTransformToDataUrl_(
-          this.transform_, result.data, result.width, result.height);
   }.bind(this));
 };
 
 /**
- * Renders an Image to canvas applying an image transformation.
- * @param {Image} image Original image. Can be an unattached one to an elment.
- * @param {number} width width of the original image
- * @param {number} height height of the original image
- * @param {{scaleX:number, scaleY:number, rotate90: number}} transform
- *     Transform.
- * @param {!Object} canvas
- */
-ThumbnailLoader.prototype.renderImageToCanvasWithTransform_ = function(
-    image, width, height, transform, canvas) {
-  var scaleX = transform.scaleX;
-  var scaleY = transform.scaleY;
-  var rotate90 = transform.rotate90;
-
-  assert(scaleX === 1 || scaleX === -1);
-  assert(scaleY === 1 || scaleY === -1);
-  assert(rotate90 === 0 || rotate90 === 1);
-
-  var context = canvas.getContext('2d');
-
-  canvas.width = rotate90 === 1 ? height : width;
-  canvas.height = rotate90 === 1 ? width : height;
-
-  // Scale transformation should be applied before rotate transformation.
-  // i.e. When matrices for scale and rotate are A and B, transformation matrix
-  // should be BA.
-
-  // Rotate 90 degree at center.
-  if (rotate90 === 1) {
-    context.translate(height, 0);
-    context.rotate(Math.PI / 2);
-  }
-
-  // Flip X and Y.
-  context.translate(scaleX === -1 ? width : 0, scaleY === -1 ? height : 0);
-  context.scale(scaleX, scaleY);
-  context.drawImage(image, 0, 0);
-};
-
-/**
- * Applies transform to data url.
- *
- * @param {{scaleX:number, scaleY:number, rotate90: number}} transform
- *     Transform.
- * @param {string} dataUrl Data url.
- * @param {number} width Width.
- * @param {number} height Height.
- * @return {!Promise<{data:string, width:number, height:number}>} A promise
- *     which is resolved with dataUrl and its width and height.
- * @private
- */
-ThumbnailLoader.prototype.applyTransformToDataUrl_ = function(
-    transform, dataUrl, width, height) {
-  var image = new Image();
-
-  return new Promise(function(resolve, reject) {
-    // Decode image for transformation.
-    image.onload = resolve;
-    image.onerror = reject;
-    image.src = dataUrl;
-  }).then(function() {
-    var canvas = document.createElement('canvas');
-    this.renderImageToCanvasWithTransform_(
-        image, width, height, this.transform_, canvas);
-    return {
-      data: canvas.toDataURL('image/png'),
-      width: canvas.width,
-      height: canvas.height
-    };
-  }.bind(this));
-}
-
-/**
  * Cancels loading the current image.
  */
 ThumbnailLoader.prototype.cancel = function() {
@@ -416,25 +337,17 @@
 };
 
 /**
- * @return {boolean} True if the image is rotated 90 degrees left or right.
- * @private
- */
-ThumbnailLoader.prototype.isRotated_ = function() {
-  return this.transform_ && (this.transform_.rotate90 % 2 === 1);
-};
-
-/**
- * @return {number} Image width (corrected for rotation).
+ * @return {number} Image width.
  */
 ThumbnailLoader.prototype.getWidth = function() {
-  return this.isRotated_() ? this.image_.height : this.image_.width;
+  return this.image_.width;
 };
 
 /**
- * @return {number} Image height (corrected for rotation).
+ * @return {number} Image height.
  */
 ThumbnailLoader.prototype.getHeight = function() {
-  return this.isRotated_() ? this.image_.width : this.image_.height;
+  return this.image_.height;
 };
 
 /**
@@ -460,26 +373,17 @@
                          this.metadata_.filesystem &&
                          this.metadata_.filesystem.modificationTime &&
                          this.metadata_.filesystem.modificationTime.getTime();
-  var loaderOptions = {
-      maxWidth: ThumbnailLoader.THUMBNAIL_MAX_WIDTH,
-      maxHeight: ThumbnailLoader.THUMBNAIL_MAX_HEIGHT,
-      cache: true,
-      priority: this.priority_,
-      timestamp: modificationTime
-  };
-  if (this.transform_) {
-    loaderOptions.orientation = this.transform_;
-  }
-  // Comsume the transform parameter to avoid duplicated transformation in
-  // getImage().
-  // TODO(yamaguchi): remove this line when we move the image transformation
-  // logic out of this class.
-  this.transform_ = undefined;
-
   this.taskId_ = ImageLoaderClient.loadToImage(
       this.thumbnailUrl_,
       this.image_,
-      loaderOptions,
+      {
+        maxWidth: ThumbnailLoader.THUMBNAIL_MAX_WIDTH,
+        maxHeight: ThumbnailLoader.THUMBNAIL_MAX_HEIGHT,
+        cache: true,
+        priority: this.priority_,
+        timestamp: modificationTime,
+        orientation: this.transform_
+      },
       function() {},
       function() {
         this.image_.onerror(new Event('load-error'));
@@ -528,14 +432,13 @@
   }
 
   this.renderMedia_();
-  util.applyTransform(box, this.transform_);
   var attachableMedia = this.loaderType_ === ThumbnailLoader.LoaderType.CANVAS ?
       this.canvas_ : this.image_;
 
   var autoFillThreshold = opt_autoFillThreshold ||
       ThumbnailLoader.AUTO_FILL_THRESHOLD_DEFAULT_VALUE;
   ThumbnailLoader.centerImage_(box, attachableMedia, fillMode,
-      this.isRotated_(), autoFillThreshold, opt_boxWidth, opt_boxHeight);
+      autoFillThreshold, opt_boxWidth, opt_boxHeight);
 
   if (attachableMedia.parentNode !== box) {
     box.textContent = '';
@@ -553,17 +456,8 @@
  */
 ThumbnailLoader.prototype.getImage = function() {
   this.renderMedia_();
-  if (this.loaderType_ === ThumbnailLoader.LoaderType.IMAGE)
-    // TODO(yamaguchi): Fix image orientation in case of detached image loaded
-    // in IMAGE mode. Either apply transformation here or return
-    // this.transform_ as well.
-    return this.image_;
-  if (this.transform_) {
-    this.renderImageToCanvasWithTransform_(
-        this.image_, this.image_.width, this.image_.height,
-        this.transform_, this.canvas_);
-  }
-  return this.canvas_;
+  return (this.loaderType_ === ThumbnailLoader.LoaderType.IMAGE) ?
+      this.image_ : this.canvas_;
 };
 
 /**
@@ -576,7 +470,6 @@
  * @param {Element} box Containing element.
  * @param {Image|HTMLCanvasElement} img Element containing an image.
  * @param {ThumbnailLoader.FillMode} fillMode Fill mode.
- * @param {boolean} rotate True if the image should be rotated 90 degrees.
  * @param {number} autoFillThreshold Threshold value which is used for fill mode
  *     auto.
  * @param {number=} opt_boxWidth Container box's width. If not specified, the
@@ -586,7 +479,7 @@
  * @private
  */
 ThumbnailLoader.centerImage_ = function(
-    box, img, fillMode, rotate, autoFillThreshold, opt_boxWidth,
+    box, img, fillMode, autoFillThreshold, opt_boxWidth,
     opt_boxHeight) {
   var imageWidth = img.width;
   var imageHeight = img.height;
@@ -621,8 +514,8 @@
   if (boxWidth && boxHeight) {
     // When we know the box size we can position the image correctly even
     // in a non-square box.
-    var fitScaleX = (rotate ? boxHeight : boxWidth) / imageWidth;
-    var fitScaleY = (rotate ? boxWidth : boxHeight) / imageHeight;
+    var fitScaleX = boxWidth / imageWidth;
+    var fitScaleY = boxHeight / imageHeight;
 
     var scale = fill ?
         Math.max(fitScaleX, fitScaleY) :
diff --git a/ui/file_manager/file_manager/foreground/js/thumbnail_loader_unittest.js b/ui/file_manager/file_manager/foreground/js/thumbnail_loader_unittest.js
index e0c7f88..807fc8a 100644
--- a/ui/file_manager/file_manager/foreground/js/thumbnail_loader_unittest.js
+++ b/ui/file_manager/file_manager/foreground/js/thumbnail_loader_unittest.js
@@ -101,13 +101,15 @@
       }), callback);
 }
 
-function testLoadAsDataUrlFromExifThumbnailRotate(callback) {
+function testLoadAsDataUrlFromExifThumbnailPropagatesTransform(callback) {
   ImageLoaderClient.getInstance = function() {
     return {
       load: function(url, callback, opt_option) {
-        // Assert that data url is passed.
+        // Assert that data url and transform info is passed.
         assertTrue(/^data:/i.test(url));
-        callback({status: 'success', data: url, width: 64, height: 32});
+        assertEquals(1, opt_option.orientation.rotate90);
+        callback({status: 'success', data: generateSampleImageDataUrl(32, 64),
+            width: 32, height: 64});
       }
     };
   };
@@ -131,8 +133,6 @@
       .then(function(result) {
         assertEquals(32, result.width);
         assertEquals(64, result.height);
-        // For test image, transformed image should become equal to the
-        // following generated sample image.
         assertEquals(generateSampleImageDataUrl(32, 64), result.data);
       }), callback);
 }